diff --git a/.gitignore b/.gitignore index b70f19f5..f436017f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,35 +1,51 @@ +# general files *.bak *.pas~ Thumbs.db *.orig *.exe -*.dcu +*.~* +*.log + +# lazarus project files *.o *.ppu -*.mp3 -*.avi -*.mp4 -*.db -*.7z *.a -*.~* -*.log -*fig.ini -backup/ -songs/ -build/ -screenshots/ -playlists/ -ToDo/ +*.dcu + +# intermediates +/build/ Makefile config.log config.status __history aclocal.m4 -autom4te.cache/ -*.identcache -*.bdsproj.local +/autom4te.cache/ link.res ppaslink.sh -game/ultrastardx -UltraStarDeluxe.app/* \ No newline at end of file +/UltraStarDeluxe.app/* + +# source intermediates +#/src/**/*.cfg +/src/**/*.local +/src/**/*.bdsproj +/src/**/*.identcache +/src/config-linux.inc +/src/paths.inc +/src/WorldParty-*.lps +/src/WorldParty.res + +# dev files +/backup/ +/[Tt]o[Dd]o/ + +# game folders +/game/playlists/ +/game/screenshots/ +/game/songs/ + +# game files +/game/config.ini +/game/*.db +/game/*.log +/game/WorldParty diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 5db01def..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "travis-lazarus"] - path = travis-lazarus - url = https://github.com/nielsAD/travis-lazarus.git diff --git a/.travis.install.py b/.travis.install.py deleted file mode 100644 index bdef3965..00000000 --- a/.travis.install.py +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/env python -# Part of `travis-lazarus` (https://github.com/nielsAD/travis-lazarus) -# License: MIT - -import sys -import os -import subprocess - -OS_NAME=os.environ.get('TRAVIS_OS_NAME') or 'linux' -OS_PMAN={'linux': 'sudo apt-get', 'osx': 'brew'}[OS_NAME] - -LAZ_TMP_DIR=os.environ.get('LAZ_TMP_DIR') or 'lazarus_tmp' -LAZ_REL_DEF=os.environ.get('LAZ_REL_DEF') or {'linux':'amd64', 'qemu-arm':'amd64', 'qemu-arm-static':'amd64', 'osx':'i386', 'wine':'32'} -LAZ_BIN_SRC=os.environ.get('LAZ_BIN_SRC') or 'http://mirrors.iwi.me/lazarus/releases/%(target)s/Lazarus%%20%(version)s' -LAZ_BIN_TGT=os.environ.get('LAZ_BIN_TGT') or { - 'linux': 'Lazarus%%20Linux%%20%(release)s%%20DEB', - 'qemu-arm': 'Lazarus%%20Linux%%20%(release)s%%20DEB', - 'qemu-arm-static': 'Lazarus%%20Linux%%20%(release)s%%20DEB', - 'osx': 'Lazarus%%20Mac%%20OS%%20X%%20%(release)s', - 'wine': 'Lazarus%%20Windows%%20%(release)s%%20bits' -} - -def install_osx_dmg(dmg): - try: - # Mount .dmg file and parse (automatically determined) target volumes - res = subprocess.check_output('sudo hdiutil attach %s | grep /Volumes/' % (dmg), shell=True) - vol = ('/Volumes/' + l.strip().split('/Volumes/')[-1] for l in res.splitlines() if '/Volumes/' in l) - except: - return False - - # Install .pkg files with installer - install_pkg = lambda v, f: os.system('sudo installer -pkg %s/%s -target /' % (v, f)) == 0 - - for v in vol: - try: - if not all(map(lambda f: (not f.endswith('.pkg')) or install_pkg(v, f), os.listdir(v))): - return False - finally: - # Unmount after installation - os.system('hdiutil detach %s' % (v)) - - return True - -def install_lazarus_default(): - if OS_NAME == 'linux': - # Make sure nogui is installed for headless runs - pkg = 'lazarus lcl-nogui' - elif OS_NAME == 'osx': - # Install brew cask first - pkg = 'caskroom/cask/brew-cask && %s cask install fpc fpcsrc lazarus' % OS_PMAN - else: - # Default to lazarus - pkg = 'lazarus' - return os.system('%s install %s' % (OS_PMAN, pkg)) == 0 - -def install_lazarus_version(ver,rel,env): - # Download all files in directory for specified Lazarus version - osn = env or OS_NAME - tgt = LAZ_BIN_TGT[osn] % {'release': rel or LAZ_REL_DEF[osn]} - src = LAZ_BIN_SRC % {'target': tgt, 'version': ver} - if os.system('wget -r -l1 -T 30 -np -nd -nc -A .deb,.dmg,.exe %s -P %s' % (src, LAZ_TMP_DIR)) != 0: - return False - - if osn == 'wine': - # Install wine and initialize wine directory - if os.system('%s install wine && wine wineboot' % (OS_PMAN)) != 0: - return False - - # Install all .exe files with wine - process_file = lambda f: (not f.endswith('.exe')) or os.system('wine %s /VERYSILENT /DIR="c:\\lazarus"' % (f)) == 0 - elif osn == 'qemu-arm' or osn == 'qemu-arm-static': - # Install qemu and arm cross compiling utilities - if os.system('%s install qemu-user qemu-user-static binutils-arm-linux-gnueabi gcc-arm-linux-gnueabi' % (OS_PMAN)) != 0: - return False - - # Install all .deb files (for linux) and cross compile later - process_file = lambda f: (not f.endswith('.deb')) or os.system('sudo dpkg -i %s' % (f)) == 0 - elif osn == 'linux': - # Install all .deb files - process_file = lambda f: (not f.endswith('.deb')) or os.system('sudo dpkg -i %s' % (f)) == 0 - elif osn == 'osx': - # Install all .dmg files - process_file = lambda f: (not f.endswith('.dmg')) or install_osx_dmg(f) - else: - return False - - # Process all downloaded files - if not all(map(lambda f: process_file(os.path.join(LAZ_TMP_DIR, f)), sorted(os.listdir(LAZ_TMP_DIR)))): - return False - - if osn == 'wine': - # Set wine Path (persistently) to include Lazarus binary directory - if os.system('wine cmd /C reg add HKEY_CURRENT_USER\\\\Environment /v PATH /t REG_SZ /d %%PATH%%\\;c:\\\\lazarus') != 0: - return False - - # Redirect listed executables so they execute in wine - for alias in ('fpc', 'lazbuild', 'lazarus'): - os.system('echo "#!/usr/bin/env bash \nwine %(target)s \$@" | sudo tee %(name)s > /dev/null && sudo chmod +x %(name)s' % { - 'target': alias, - 'name': '/usr/bin/%s' % (alias) - }) - elif osn == 'qemu-arm' or osn == 'qemu-arm-static': - fpcv = subprocess.check_output('fpc -iV', shell=True).strip() - gccv = subprocess.check_output('arm-linux-gnueabi-gcc -dumpversion', shell=True).strip() - opts = ' '.join([ - 'CPU_TARGET=arm', - 'OS_TARGET=linux', - 'BINUTILSPREFIX=arm-linux-gnueabi-', - # 'CROSSOPT="-CpARMV7A -CfVFPV3_D16"', - 'OPT=-dFPC_ARMEL', - 'INSTALL_PREFIX=/usr' - ]) - - # Compile ARM cross compiler - if os.system('cd /usr/share/fpcsrc/%s && sudo make clean crossall crossinstall %s' % (fpcv, opts)) != 0: - return False - - # Symbolic link to update default FPC cross compiler for ARM - if os.system('sudo ln -sf /usr/lib/fpc/%s/ppcrossarm /usr/bin/ppcarm' % (fpcv)) != 0: - return False - - # Update config file with paths to ARM libraries - config = '\n'.join([ - '#INCLUDE /etc/fpc.cfg', - '#IFDEF CPUARM', - '-Xd','-Xt', - '-XParm-linux-gnueabi-', - '-Fl/usr/arm-linux-gnueabi/lib', - '-Fl/usr/lib/gcc/arm-linux-gnueabi/%s' % (gccv), - # '-CpARMV7A', '-CfVFPV3_D16', - '#ENDIF' - ]) - with open(os.path.expanduser('~/.fpc.cfg'),'w') as f: - f.write(config) - - return True - -def install_lazarus(ver=None,rel=None,env=None): - return install_lazarus_version(ver,rel,env) if ver else install_lazarus_default() - -def main(): - os.system('%s update' % (OS_PMAN)) - return install_lazarus(os.environ.get('LAZ_VER'),os.environ.get('LAZ_REL'),os.environ.get('LAZ_ENV')) - -if __name__ == '__main__': - sys.exit(int(not main())) diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 12691291..00000000 --- a/.travis.yml +++ /dev/null @@ -1,29 +0,0 @@ -# Part of `travis-lazarus` (https://github.com/nielsAD/travis-lazarus) -# Part of `usdxworldparty` (https://github.com/ultrastares/usdxworldparty) -# License: MIT - -sudo: true - -os: - - linux - -env: - global: - - WINEPREFIX=~/.winelaz - - DISPLAY=:99.0 - matrix: - - LAZ_VER=1.6 LAZ_ENV=wine WINEARCH=win32 LAZ_OPT="--os=win32 --cpu=i386" - -before_install: - # Start virtual display server - - sh -e /etc/init.d/xvfb start || true - - chmod +x ./.travis.install.py - -install: - # Install prerequisites (fpc/lazarus/wine/qemu) - - ./.travis.install.py - -script: - #- lazbuild $LAZ_OPT ./src/ultrastardx-unix.lpi # Build my_lazarus_test project - - lazbuild $LAZ_OPT ./src/ultrastardx-travis.lpi # Build my_lazarus_test project - #- $LAZ_ENV ./bin/my_lazarus_tests --all --format=plain # Run my_lazarus_test testsuite diff --git a/.tx/config b/.tx/config deleted file mode 100644 index 3f6c9fdf..00000000 --- a/.tx/config +++ /dev/null @@ -1,34 +0,0 @@ -[main] -host = https://www.transifex.com - -[usdx.texts] -source_file = game/languages/English.ini -source_lang = en -trans.ca = game/languages/Catalan.ini -trans.zh = game/languages/Chinese.ini -trans.hr = game/languages/Croatian.ini -trans.cs = game/languages/Czech.ini -trans.da = game/languages/Danish.ini -trans.nl = game/languages/Dutch.ini -trans.eu = game/languages/Euskara.ini -trans.fi = game/languages/Finnish.ini -trans.fr = game/languages/French.ini -trans.gl = game/languages/Galician.ini -trans.de = game/languages/German.ini -trans.el = game/languages/Greek.ini -trans.hu = game/languages/Hungarian.ini -trans.is = game/languages/Icelandic.ini -trans.it = game/languages/Italian.ini -trans.ja = game/languages/Japanese.ini -trans.lb = game/languages/Luxembourgish.ini -trans.no = game/languages/Norwegian.ini -trans.pl = game/languages/Polish.ini -trans.pt = game/languages/Portuguese.ini -trans.ru = game/languages/Russian.ini -trans.sr = game/languages/Serbian.ini -trans.sk = game/languages/Slovak.ini -trans.sl = game/languages/Slovenian.ini -trans.es = game/languages/Spanish.ini -trans.sv = game/languages/Swedish.ini -type = INI - diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt index 950ec216..7e4419ae 100644 --- a/COPYRIGHT.txt +++ b/COPYRIGHT.txt @@ -1,12 +1,25 @@ -Ultrastar Deluxe WorldParty -Copyright (C) 2007-2016 by the following: +Ultrastar Deluxe WorldParty +Copyright (C) 2010-2017 by the following: -"zup3r_vock" -Stefan Ludowicy "basisbit" +If you have contributed to this project then you deserve to be on this +list. Contact us and we'll add you. + +"Zup3r_vock" "Daniel20" -Based on UltraStar Deluxe developed by: + --> Follow the project at https://github.com/ultrastares/usdxworldparty + + --> Support and contact: http://ultrastar-es.org + +--------------------------------------------------------------------------------- +*Consider that Ultrastar Deluxe Worldparty is a fork of Ultrastar Deluxe. +Some modifications could be related to their team which is impossible to merge +with our project. So, please visit their repo to follow all modifications and +the people who are involved. https://github.com/UltraStar-Deluxe/USDX/commits/master +--------------------------------------------------------------------------------- + +Based on UltraStar Deluxe written by: Jay Binks "jaybinks" Dirk Dunger "blindy" @@ -18,8 +31,8 @@ Tobias Gunkel "tobigun" Alexander S. "s_alexander" Karl-Michael Schindler "mischi" Philipp Steinhardt "whiteshark" - - +Stefan Ludowicy "basisbit" +"RattleSN4K3" Based on UltraStar written by: "Corvus5" @@ -34,17 +47,4 @@ Benedikt Krueger Holger Kuhn "hawkear" Florian Küpper "flokuep" Wesley Stessens "profoX" - - -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 3 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, see . \ No newline at end of file +various other people, see commit log from github.com/UltraStar-Deluxe/USDX and github.com/UltraStar-Deluxe/mirror diff --git a/LICENSE b/LICENSE index ff50514e..2f4b8c0b 100644 --- a/LICENSE +++ b/LICENSE @@ -2,7 +2,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 -Copyright © 2007 Free Software Foundation, Inc. +Copyright 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble @@ -29,30 +29,30 @@ The precise terms and conditions for copying, distribution and modification foll TERMS AND CONDITIONS 0. Definitions. -“This License” refers to version 3 of the GNU General Public License. +This License refers to version 3 of the GNU General Public License. -“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. +Copyright also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. -“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. +The Program refers to any copyrightable work licensed under this License. Each licensee is addressed as you. Licensees and recipients may be individuals or organizations. -To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. +To modify a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a modified version of the earlier work or a work based on the earlier work. -A “covered work” means either the unmodified Program or a work based on the Program. +A covered work means either the unmodified Program or a work based on the Program. -To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. +To propagate a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. -To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. +To convey a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. -An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. +An interactive user interface displays Appropriate Legal Notices to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. -The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. +The source code for a work means the preferred form of the work for making modifications to it. Object code means any non-source form of a work. -A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. +A Standard Interface means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. -The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. +The System Libraries of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A Major Component, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. -The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. +The Corresponding Source for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. @@ -79,11 +79,11 @@ You may charge any price or no price for each copy that you convey, and you may You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. - b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. + b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to keep intact all notices. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. -A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an aggregate if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @@ -96,9 +96,9 @@ You may convey a covered work in object code form under the terms of sections 4 A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. -A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. +A User Product is either (1) a consumer product, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, normally used refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. -“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. +Installation Information for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). @@ -107,7 +107,7 @@ The requirement to provide Installation Information does not include a requireme Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. -“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. +Additional permissions are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. @@ -120,7 +120,7 @@ Notwithstanding any other provision of this License, for material you add to a c e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. -All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. +All other non-permissive additional terms are considered further restrictions within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. @@ -141,24 +141,24 @@ You are not required to accept this License in order to receive or run a copy of Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. -An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. +An entity transaction is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. -A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. +A contributor is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's contributor version. -A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. +A contributor's essential patent claims are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, control includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. -In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. +In the following three paragraphs, a patent license is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To grant such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. -If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. Knowingly relying means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. -A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. +A patent license is discriminatory if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. @@ -171,14 +171,14 @@ Notwithstanding any other provision of this License, you have permission to link The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License or any later version applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. -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. +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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. @@ -186,4 +186,4 @@ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY C If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. -END OF TERMS AND CONDITIONS +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/Makefile.in b/Makefile.in index 0383474d..161a8efa 100644 --- a/Makefile.in +++ b/Makefile.in @@ -45,35 +45,35 @@ INSTALL_PROGRAM ?= @INSTALL_PROGRAM@ # General package configuration ################################################# -USDX_PACKAGE_NAME := @PACKAGE_NAME@ -USDX_VERSION := @PACKAGE_VERSION@ -USDX_TARNAME := @PACKAGE_TARNAME@ +USDXWP_PACKAGE_NAME := @PACKAGE_NAME@ +USDXWP_VERSION := @PACKAGE_VERSION@ +USDXWP_TARNAME := @PACKAGE_TARNAME@ ################################################# -# USDX Paths +# USDXWP Paths ################################################# -USDX_SRC_DIR := $(top_srcdir)/src -USDX_GAME_DIR := $(top_srcdir)/game -USDX_TOOLS_DIR := $(top_srcdir)/tools -USDX_BUILD_DIR := $(top_srcdir)/build -USDX_LIB_DIR := $(USDX_SRC_DIR)/lib +USDXWP_SRC_DIR := $(top_srcdir)/src +USDXWP_GAME_DIR := $(top_srcdir)/game +USDXWP_TOOLS_DIR := $(top_srcdir)/tools +USDXWP_BUILD_DIR := $(top_srcdir)/build +USDXWP_LIB_DIR := $(USDXWP_SRC_DIR)/lib -INSTALL_DATADIR := $(datadir)/$(USDX_PACKAGE_NAME) +INSTALL_DATADIR := $(datadir)/$(USDXWP_PACKAGE_NAME) ################################################# # Binary name ################################################# # name of executable -USDX_BIN_NAME ?= ultrastardx$(EXEEXT) -USDX_BIN := $(USDX_GAME_DIR)/$(USDX_BIN_NAME) +USDXWP_BIN_NAME ?= WorldParty$(EXEEXT) +USDXWP_BIN := $(USDXWP_GAME_DIR)/$(USDXWP_BIN_NAME) ################################################# # ProjectM ################################################# -PROJECTM_CWRAPPER_DIR := $(USDX_LIB_DIR)/projectM/cwrapper +PROJECTM_CWRAPPER_DIR := $(USDXWP_LIB_DIR)/projectM/cwrapper USE_PROJECTM_CWRAPPER = @USE_PROJECTM_CWRAPPER@ ################################################# @@ -93,7 +93,7 @@ endif define install_osx_libraries @echo "work on $(dylib)" $(shell $(INSTALL) -m 755 $(dylib) $(macosx_bundle_path)/MacOS) - $(shell $(INSTALL_NAME_TOOL) -change $(dylib) @executable_path/$(notdir $(dylib)) $(macosx_bundle_path)/MacOS/ultrastardx) + $(shell $(INSTALL_NAME_TOOL) -change $(dylib) @executable_path/$(notdir $(dylib)) $(macosx_bundle_path)/MacOS/WorldParty) $(shell $(INSTALL_NAME_TOOL) -id @executable_path/$(notdir $(dylib)) $(macosx_bundle_path)/MacOS/$(notdir $(dylib))) $(foreach linked_dylibs_2,$(shell $(OTOOL) -L $(dylib) | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \usr\/lib | grep -v executable_path),$(rename_secondary_osx_libraries)) endef @@ -133,7 +133,7 @@ USE_OSX_PACKAGING_LIBDIR=@USE_OSX_PACKAGING_LIBDIR@ BUILD_TARGETS = all debug release rebuild build .PHONY: $(BUILD_TARGETS) $(BUILD_TARGETS): all-deps - $(MAKE) -C $(USDX_SRC_DIR) $@ + $(MAKE) -C $(USDXWP_SRC_DIR) $@ .PHONY: all-deps all-deps: @@ -146,7 +146,7 @@ clean: clean-src clean-deps .PHONY: clean-src clean-src: - $(MAKE) -C $(USDX_SRC_DIR) clean + $(MAKE) -C $(USDXWP_SRC_DIR) clean .PHONY: clean-deps clean-deps: @@ -156,12 +156,12 @@ clean-deps: .PHONY: clean-game clean-game: - $(RM) $(USDX_GAME_DIR)/*.log - $(RM) $(USDX_GAME_DIR)/*.db - $(RM) $(USDX_GAME_DIR)/*.ini - -rmdir $(USDX_GAME_DIR)/screenshots - -rmdir $(USDX_GAME_DIR)/playlists - -rmdir $(USDX_GAME_DIR)/songs + $(RM) $(USDXWP_GAME_DIR)/*.log + $(RM) $(USDXWP_GAME_DIR)/*.db + $(RM) $(USDXWP_GAME_DIR)/*.ini + -rmdir $(USDXWP_GAME_DIR)/screenshots + -rmdir $(USDXWP_GAME_DIR)/playlists + -rmdir $(USDXWP_GAME_DIR)/songs # just clean the game build data but no dependencies (libs, tools, ...) .PHONY: mostlyclean @@ -171,8 +171,8 @@ mostlyclean: clean-src distclean: clean clean-game $(RM) config.log config.status aclocal.m4 $(RM_REC) autom4te.cache - $(RM) $(USDX_SRC_DIR)/config.inc - $(RM) $(srcdir)/Makefile $(USDX_SRC_DIR)/Makefile $(PROJECTM_CWRAPPER_DIR)/Makefile + $(RM) $(USDXWP_SRC_DIR)/config.inc + $(RM) $(srcdir)/Makefile $(USDXWP_SRC_DIR)/Makefile $(PROJECTM_CWRAPPER_DIR)/Makefile .PHONY: maintainer-clean maintainer-clean: distclean @@ -193,7 +193,7 @@ tidy: # auto-update ################################################# -Makefile: $(srcdir)/Makefile.in $(USDX_SRC_DIR)/Makefile.in $(USDX_SRC_DIR)/config.inc.in $(PROJECTM_CWRAPPER_DIR)/Makefile.in config.status +Makefile: $(srcdir)/Makefile.in $(USDXWP_SRC_DIR)/Makefile.in $(USDXWP_SRC_DIR)/config.inc.in $(PROJECTM_CWRAPPER_DIR)/Makefile.in config.status @echo "-----------------------------------" @echo "Performing reconfiguration..." ./config.status @@ -222,10 +222,15 @@ reconf: .PHONY: install install: install-all - @echo "--------------------------------" - @echo "$(USDX_PACKAGE_NAME) installed." - @echo "Start with: $(bindir)/$(USDX_BIN_NAME)" - @echo "--------------------------------" + @echo "---------------------------------------" + @echo " WW WW " + @echo " WW WW WW " + @echo " WW WW WW WW " + @echo " WW WW " + @echo " ----------" + @echo "$(USDXWP_PACKAGE_NAME) has been installed in your system." + @echo "Type: '$(USDXWP_BIN_NAME)' to start the program. *Keep in mind the CAPS" + @echo "---------------------------------------" # strip binaries during install install-strip: @@ -238,7 +243,7 @@ install-all: install-exec install-plugins install-data .PHONY: install-exec install-exec: $(MKDIR) "$(DESTDIR)$(bindir)" - $(INSTALL_PROGRAM) "$(USDX_BIN)" "$(DESTDIR)$(bindir)" + $(INSTALL_PROGRAM) "$(USDXWP_BIN)" "$(DESTDIR)$(bindir)" # FPC target platform and processor PPLATFORM := @FPC_PLATFORM@ @@ -247,26 +252,41 @@ PPROCESSOR := @FPC_PROCESSOR@ .PHONY: install-plugins install-plugins: $(MKDIR) "$(DESTDIR)$(INSTALL_DATADIR)/plugins" - $(INSTALL) "$(USDX_GAME_DIR)/plugins"/* "$(DESTDIR)$(INSTALL_DATADIR)/plugins" + $(INSTALL) "$(USDXWP_GAME_DIR)/plugins"/* "$(DESTDIR)$(INSTALL_DATADIR)/plugins" .PHONY: install-data install-data: - $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/languages" \ + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/avatars" \ + RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/avatars" \ + install-data-recursive + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/covers" \ + RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/covers" \ + install-data-recursive + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/fonts" \ + RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/fonts" \ + install-data-recursive + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/languages" \ RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/languages" \ install-data-recursive - $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/sounds" \ + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/resources" \ + RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/resources" \ + install-data-recursive + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/soundfonts" \ + RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/sounds" \ + install-data-recursive + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/sounds" \ RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/sounds" \ install-data-recursive - $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/themes" \ + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/themes" \ RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/themes" \ install-data-recursive - $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/fonts" \ - RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/fonts" \ + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/visuals" \ + RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/visuals" \ install-data-recursive - $(MAKE) RECURSIVE_SRC_DIR="$(USDX_GAME_DIR)/resources" \ - RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/resources" \ + $(MAKE) RECURSIVE_SRC_DIR="$(USDXWP_GAME_DIR)/webs" \ + RECURSIVE_DST_DIR="$(DESTDIR)$(INSTALL_DATADIR)/themes" \ install-data-recursive - $(INSTALL_DATA) "COPYING.txt" "$(DESTDIR)$(INSTALL_DATADIR)/COPYING.txt" + $(INSTALL_DATA) "LICENSE" "$(DESTDIR)$(INSTALL_DATADIR)/LICENSE" .PHONY: install-data-recursive install-data-recursive: @@ -295,17 +315,22 @@ uninstall-all: uninstall-data uninstall-exec uninstall-plugins .PHONY: uninstall-data uninstall-data: + $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/avatars" + $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/covers" + $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/fonts" $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/languages" + $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/resources" + $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/soundfonts" $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/sounds" $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/themes" - $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/fonts" - $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/resources" + $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/visuals" + $(RM_REC) "$(DESTDIR)$(INSTALL_DATADIR)/webs" $(RM) "$(DESTDIR)$(INSTALL_DATADIR)/COPYING.txt" -rmdir "$(DESTDIR)$(INSTALL_DATADIR)" .PHONY: uninstall-exec uninstall-exec: - $(RM) "$(DESTDIR)$(bindir)/$(USDX_BIN_NAME)" + $(RM) "$(DESTDIR)$(bindir)/$(USDXWP_BIN_NAME)" .PHONY: uninstall-plugins uninstall-plugins: @@ -315,8 +340,8 @@ uninstall-plugins: # Distributable source-package (TODO) ################################################# -#disttmpdir := $(USDX_PACKAGE_NAME)-$(USDX_VERSION)-src -disttmpdir := $(USDX_PACKAGE_NAME)-1.1_alpha-src +#disttmpdir := $(USDXWP_PACKAGE_NAME)-$(USDXWP_VERSION)-src +disttmpdir := $(USDXWP_PACKAGE_NAME)-1.1_alpha-src # choose all files in SVN that are not deleted svn-files := svn status -v | grep -v "^[?D]" | cut -c8- | tr -s " " | cut -f5- -d" " @@ -341,8 +366,8 @@ dist: debpkgdir ?= dists/debian debpkgtmpdir := $(debpkgdir)/deb-package -debpkgprefix := $(USDX_PACKAGE_NAME) -debpkgname := $(debpkgprefix)_$(USDX_VERSION)_$(PPROCESSOR).deb +debpkgprefix := $(USDXWP_PACKAGE_NAME) +debpkgname := $(debpkgprefix)_$(USDXWP_VERSION)_$(PPROCESSOR).deb .PHONY: deb deb: all @@ -386,7 +411,7 @@ pkgingLibDir := @USE_OSX_PACKAGING_LIBDIR@ # Mac OS X app-bundle ################################################# -macosx_bundle_path := UltraStarDeluxe.app/Contents +macosx_bundle_path := USDXWorldParty.app/Contents .PHONY: macosx-app macosx-app: all # Create double clickable Mac OS X application. @@ -400,10 +425,10 @@ macosx-app: all # Put the icon file into its particular place. # Must be done BEFORE info.plist is created. $(MKDIR) $(macosx_bundle_path)/resources - $(INSTALL_DATA) icons/ultrastardx.icns $(macosx_bundle_path)/resources/ + $(INSTALL_DATA) icons/WorldParty.icns $(macosx_bundle_path)/resources/ # the info.plist file - $(INSTALL_DATA) $(USDX_SRC_DIR)/macosx/Info.plist $(macosx_bundle_path)/ + $(INSTALL_DATA) $(USDXWP_SRC_DIR)/macosx/Info.plist $(macosx_bundle_path)/ # Copy the resources. $(MAKE) install-all INSTALL_DATADIR=$(macosx_bundle_path) bindir=$(macosx_bundle_path)/MacOS @@ -416,7 +441,7 @@ macosx-app: all # final messages @echo "" - @echo "Mac OS X application created (UltraStarDeluxe.app)." + @echo "Mac OS X application created (USDXWorldParty.app)." @echo "Using @USE_OSX_PACKAGING@ with libdir @USE_OSX_PACKAGING_LIBDIR@" @echo "Please report issues to the developer team, preferably mischi." @echo "Have fun." @@ -448,9 +473,9 @@ endif ifeq ($(USE_OSX_PACKAGING), fink) @echo "avcodec lib found: $(finkLibDir)/$(AVCODECLIB)" endif -# work on the dylibs in $(macosx_bundle_path)/MacOS/ultrastardx - @echo "[generic] copying libs of ultrastardx" - $(foreach dylib,$(shell $(OTOOL) -L $(macosx_bundle_path)/MacOS/ultrastardx | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries)) +# work on the dylibs in $(macosx_bundle_path)/MacOS/WorldParty + @echo "[generic] copying libs of WorldParty" + $(foreach dylib,$(shell $(OTOOL) -L $(macosx_bundle_path)/MacOS/WorldParty | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries)) # work on the secondary dylibs from ffmpeg # libavcodec references all tertiary libraries of the ffmpeg libs @@ -515,11 +540,11 @@ ifeq ($(USE_OSX_PACKAGING), fink) # same procedure for secondary libs in libbluray @echo "[fink] copying libs of libblueray" $(foreach dylib,$(shell $(OTOOL) -L $(brewLibDir)/libbluray.dylib | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries)) -endif -# X11 libs as well, because users may not have installed it. - @echo "[xquartz] copying libs of libX11" + # X11 libs as well, because users may not have installed it. + @echo "[fink] copying libs of libX11" $(foreach dylib,$(shell $(OTOOL) -L /opt/X11/lib/libX11.6.dylib | grep version | cut -f 1 -d ' ' | grep -v \/System\/Library | grep -v \/usr\/lib),$(install_osx_libraries)) +endif @echo "" @echo "libpcre.dylib must be work on additionally, since it is not linked to the executable but opened using dlopen" @@ -528,7 +553,7 @@ endif $(shell $(INSTALL_NAME_TOOL) -id @executable_path/libpcre.dylib $(macosx_bundle_path)/MacOS/libpcre.dylib) # do not forget to sign the code -# codesign -f -s USDX-codesign UltraStarDeluxe.app +# codesign -f -s USDXWP-codesign USDXWorldParty.app # final messages @echo "" @@ -537,24 +562,26 @@ endif .PHONY: macosx-dmg macosx-dmg: macosx-standalone-app - @if test -d "/Volumes/UltraStarDeluxe"; then\ - echo "Error: there is already a disk mounted on /Volumes/UltraStarDeluxe";\ + @if test -d "/Volumes/USDXWorldParty"; then\ + echo "Error: there is already a disk mounted on /Volumes/USDXWorldParty";\ exit 1;\ fi - $(RM) UltraStarDeluxe.dmg - $(RM) UltraStarDeluxe.sparseimage - $(HDIUTIL) create -type SPARSE -size 100m -fs HFS+ -volname UltraStarDeluxe -ov UltraStarDeluxe.sparseimage - $(HDIUTIL) attach UltraStarDeluxe.sparseimage - /bin/ln -s /Applications /Volumes/UltraStarDeluxe/Applications - /bin/cp -R UltraStarDeluxe.app /Volumes/UltraStarDeluxe -# /bin/cp ultrastardx/icons/UltraStarDeluxeVolumeIcon.icns /Volumes/UltraStarDeluxe/.VolumeIcon.icns -# /Developer/Tools/SetFile -a C /Volumes/UltraStarDeluxe/.VolumeIcon.icns /Volumes/UltraStarDeluxe - $(HDIUTIL) detach /Volumes/UltraStarDeluxe - $(HDIUTIL) convert UltraStarDeluxe.sparseimage -format UDBZ -o UltraStarDeluxe.dmg - $(RM) UltraStarDeluxe.sparseimage + $(RM) USDXWorldParty.dmg + $(RM) USDXWorldParty.sparseimage + $(HDIUTIL) create -type SPARSE -size 100m -fs HFS+ -volname USDXWorldParty -ov USDXWorldParty.sparseimage + $(HDIUTIL) attach USDXWorldParty.sparseimage + /bin/ln -s /Applications /Volumes/USDXWorldParty/Applications + /bin/cp -R USDXWorldParty.app /Volumes/USDXWorldParty + $(MKDIR) /Volumes/USDXWorldParty/Licenses + find $(USDXWP_GAME_DIR) -name 'LICENSE.*' -maxdepth 1 -exec cp {} /Volumes/USDXWorldParty/Licenses \; +# /bin/cp WorldParty/icons/USDXWorldPartyVolumeIcon.icns /Volumes/USDXWorldParty/.VolumeIcon.icns +# /Developer/Tools/SetFile -a C /Volumes/USDXWorldParty/.VolumeIcon.icns /Volumes/USDXWorldParty + $(HDIUTIL) detach /Volumes/USDXWorldParty + $(HDIUTIL) convert USDXWorldParty.sparseimage -format UDBZ -o USDXWorldParty.dmg + $(RM) USDXWorldParty.sparseimage @echo "" - @echo "DMG Disk image created (UltraStarDeluxe.dmg)." + @echo "DMG Disk image created (USDXWorldParty.dmg)." @echo "" # remove Mac OS X apllication bundle and disk image @@ -563,9 +590,9 @@ clean-macosx: clean-macosx-app clean-macosx-dmg .PHONY: clean-macosx-app clean-macosx-app: - $(RM_REC) UltraStarDeluxe.app + $(RM_REC) USDXWorldParty.app .PHONY: clean-macosx-dmg clean-macosx-dmg: - $(RM) UltraStarDeluxe.dmg - $(RM) UltraStarDeluxe.sparseimage + $(RM) USDXWorldParty.dmg + $(RM) USDXWorldParty.sparseimage diff --git a/README Mac OS X b/README Mac OS X deleted file mode 100644 index 6f5c79f9..00000000 --- a/README Mac OS X +++ /dev/null @@ -1,63 +0,0 @@ -UltraStar Deluxe Mac Specific README ------------------------------------- - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ->8 - - - _______ _________ - ___ / \/ \_______ - / \ \ _/ /\____/ \__________ - / _/ / / \______ \ \___ _____ - / |___/ \ \_/ / \ \ / \ - \ /\ / |\ \ \/ / - \ / \_ultrastardeluxe_/ |/ / / - \______www_/ |____________org_/ \ - / /\ ~=~ \ - \_____/ \ mog / - ~=~ -- - 8<- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ============================ -= 1. Installation = -= 2. Song Folders = -= 3. Building = - ============================ - -SF.Net Page: http://sourceforge.net/projects/ultrastardx/ -Wiki: http://wiki.ultrastardeluxe.org/ - - ==================== - = 1. Installation = - ==================== - -Drag the application to your hard disk. It should run from any folder. - - ==================== - = 2. Song Folders = - ==================== - -- The primary folder for songs is "$HOME/Music/UltraStar Deluxe", which is - created when UltraStar Deluxe is run for the first time. - -- Further folders can be added through the configuration file "config.ini", - which is created in "$HOME/Library/Application Support/UltraStarDeluxe" - when UltraStar Deluxe is run for the first time. - - example: - [Directories] - SongDir1=/Users/My/Music/MyUSDXSongs - SongDir2=/Volumes/MyExternalUSBDisk - SongDir...=... (some more directories) - -==================== - = 3. Building = -==================== - -- USDX Is built using Homebrew and official FreePascal build - -- You can install Homebrew from http://brew.sh -- You can get the FPC build from http://www.freepascal.org/down/i386/macosx.var -- Don't miss XQuartz from http://www.xquartz.org - -- Needed brew libraries can be installed using: - brew install sdl2 sdl2_gfx sdl2_image sdl2_mixer sdl2_net sdl2_ttf ffmpeg libav portaudio binutils sqlite freetype libpng pcre lua libtiff - -- Pass argument --enable-osx-fink or --enable-osx-brew (default) according to the packaging you are using diff --git a/README.md b/README.md index 18e1bbaa..b34c0ca2 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ -UltraStar Deluxe WorldParty ----------------------------- +#UltraStar Deluxe WorldParty -![WorldParty logo](https://github.com/Daniel20Ultrastar-es/usdxworldparty/blob/master/Worldparty%20logo.png) +![WorldParty logo](https://github.com/Daniel20Ultrastar-es/usdxworldparty/blob/master/promo/Worldparty%20logo.png) UltraStar Deluxe WorldParty is a free and open source karaoke game. It allows up to six players to sing along with music using microphones in order to score points, depending on the pitch of the voice and the rhythm of singing. -UltraStar Deluxe WorldParty is a fork of the original UltraStar deluxe +UltraStar Deluxe WorldParty is a fork of the original UltraStar deluxe 1.1 We added new features such as new selection song, avatars, themes, skins, font, improved camera and mouse support, thousands of new options come with this new version. Check it out! @@ -17,3 +16,18 @@ come with this new version. Check it out! ----------------- Official Website: http://ultrastar-es.org ----------------- + +##Documentation +Visit our [Wiki](https://github.com/ultrastares/usdxworldparty/wiki) to get help about how to compile the game, see changelog, etc.. + +##Support and contact +Visit our [official website](http://ultrastar-es.org) where you can find tutorials, songs, contests and more + +also visit our [forum](http://ultrastar-es.org/foro) where you can ask any problem or doubt you get (we speak mainly in Spanish and English) + +##Screenshots +![WorldParty logo](https://github.com/Daniel20Ultrastar-es/usdxworldparty/blob/master/promo/promocion1.gif) + +![WorldParty logo](https://github.com/Daniel20Ultrastar-es/usdxworldparty/blob/master/promo/promocion2.gif) + +![WorldParty logo](https://github.com/Daniel20Ultrastar-es/usdxworldparty/blob/master/promo/promocion3.gif) diff --git a/VERSION b/VERSION new file mode 100644 index 00000000..1084f6a8 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +17.3 diff --git a/WorldParty.desktop b/WorldParty.desktop new file mode 100644 index 00000000..01e75f2d --- /dev/null +++ b/WorldParty.desktop @@ -0,0 +1,9 @@ +#Generate a launcher in desktop +[Desktop Entry] +Name=Ultrastar Deluxe WorldParty +Comment=Karaoke game +Exec=/usr/local/bin/WorldParty +Icon=/usr/local/share/WorldParty/resources/icons/WorldParty.png +Terminal=false +Type=Application + diff --git a/Worldparty logo.png b/Worldparty logo.png deleted file mode 100644 index 6b135a55..00000000 Binary files a/Worldparty logo.png and /dev/null differ diff --git a/autogen.sh b/autogen.sh index 8f551bff..34faf3ef 100644 --- a/autogen.sh +++ b/autogen.sh @@ -1,3 +1,10 @@ #!/bin/sh -AUTOGEN_DIR=dists/autogen -aclocal -I ${AUTOGEN_DIR}/m4 && autoconf +# Run this to set up the build system: configure, makefiles, etc. +set -e + +srcdir=`dirname $0` +test -n "$srcdir" && cd "$srcdir" + +echo "Updating build configuration files for Ultrastar Deluxe WorldParty, please wait..." + +autoreconf -isf diff --git a/configure b/configure deleted file mode 100644 index 13a41a6b..00000000 --- a/configure +++ /dev/null @@ -1,9329 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for ultrastardx 1.1. -# -# Report bugs to . -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: http://sourceforge.net/tracker/?group_id=191560&atid=937872 -$0: about your system, including any error possibly output -$0: before this message. Then install a modern shell, or -$0: manually run the script under such a shell if you do -$0: have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME='ultrastardx' -PACKAGE_TARNAME='ultrastardx' -PACKAGE_VERSION='1.1' -PACKAGE_STRING='ultrastardx 1.1' -PACKAGE_BUGREPORT='http://sourceforge.net/tracker/?group_id=191560&atid=937872' -PACKAGE_URL='' - -ac_unique_file="src/ultrastardx.dpr" -ac_subst_vars='LTLIBOBJS -LIBOBJS -DEFINE_HAVE_PORTMIXER -libpcre_LIBNAME -libpcre_LIBDIR -DEFINE_HAVE_LIBPCRE -libpcre_VERSION_INT -libpcre_VERSION_RELEASE -libpcre_VERSION_MINOR -libpcre_VERSION_MAJOR -libpcre_VERSION -DEFINE_HAVE_PORTAUDIO -portaudio_VERSION_INT -portaudio_VERSION_RELEASE -portaudio_VERSION_MINOR -portaudio_VERSION_MAJOR -portaudio_VERSION -USE_PROJECTM_CWRAPPER -libprojectM_DATADIR -libprojectM_INCLUDEDIR -DEFINE_HAVE_PROJECTM -libprojectM_VERSION_INT -libprojectM_VERSION_RELEASE -libprojectM_VERSION_MINOR -libprojectM_VERSION_MAJOR -libprojectM_VERSION -DEFINE_HAVE_SWSCALE -libswscale_VERSION_INT -libswscale_VERSION_RELEASE -libswscale_VERSION_MINOR -libswscale_VERSION_MAJOR -libswscale_VERSION -DEFINE_HAVE_FFMPEG -libavutil_VERSION_INT -libavutil_VERSION_RELEASE -libavutil_VERSION_MINOR -libavutil_VERSION_MAJOR -libavutil_VERSION -libavformat_VERSION_INT -libavformat_VERSION_RELEASE -libavformat_VERSION_MINOR -libavformat_VERSION_MAJOR -libavformat_VERSION -libavcodec_VERSION_INT -libavcodec_VERSION_RELEASE -libavcodec_VERSION_MINOR -libavcodec_VERSION_MAJOR -libavcodec_VERSION -lua_LIB_NAME -lua_VERSION_INT -lua_VERSION_RELEASE -lua_VERSION_MINOR -lua_VERSION_MAJOR -lua_VERSION -FFMPEG_VERSION -FFMPEG_VERSION_INT -FFMPEG_VERSION_RELEASE -FFMPEG_VERSION_MINOR -FFMPEG_VERSION_MAJOR -libpng_VERSION_INT -libpng_VERSION_RELEASE -libpng_VERSION_MINOR -libpng_VERSION_MAJOR -libpng_VERSION -DARWIN_VERSION -MACOSX_VERSION -MACOSX_VERSION_INT -MACOSX_VERSION_RELEASE -MACOSX_VERSION_MINOR -MACOSX_VERSION_MAJOR -PKG_CONFIG_LIBDIR -PKG_CONFIG_PATH -PKG_CONFIG -RANLIB -ac_ct_CXX -CXXFLAGS -CXX -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -FPC_UNIT_PATH -FPC_BASE_PATH -FPC_PREFIX -FPC_TARGET -FPC_CPROCESSOR -FPC_CPLATFORM -FPC_PROCESSOR -FPC_PLATFORM -FPC_VERSION -FPC_VERSION_INT -FPC_VERSION_RELEASE -FPC_VERSION_MINOR -FPC_VERSION_MAJOR -FPCMAKE -PPC -PFLAGS_EXTRA -PFLAGS_RELEASE -PFLAGS_DEBUG -PFLAGS_BASE -PFLAGS -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -USE_OSX_PACKAGING_LIBDIR -USE_OSX_PACKAGING -ENABLE_DEBUG -GREP -SED -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -MKDIR_P -LN_S -SET_MAKE -PACKAGE_IRC -PACKAGE_WEBSITE -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -with_cfg_dummy1 -with_portmixer -with_libprojectM -with_cfg_dummy2 -enable_global -enable_local -enable_debug -enable_osx_fink -enable_osx_brew -enable_dummy_fpc1 -with_fpc -enable_verbose -enable_gprof -enable_valgrind -enable_heaptrace -enable_rangechecks -enable_noexecstack -' - ac_precious_vars='build_alias -host_alias -target_alias -PFLAGS -PFLAGS_BASE -PFLAGS_DEBUG -PFLAGS_RELEASE -PFLAGS_EXTRA -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CXX -CXXFLAGS -CCC -PKG_CONFIG -PKG_CONFIG_PATH -PKG_CONFIG_LIBDIR -libpng_VERSION -lua_VERSION -libavcodec_VERSION -libavformat_VERSION -libavutil_VERSION -libswscale_VERSION -libprojectM_VERSION -libprojectM_INCLUDEDIR -libprojectM_DATADIR -portaudio_VERSION -libpcre_VERSION -libpcre_LIBDIR' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures ultrastardx 1.1 to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/ultrastardx] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of ultrastardx 1.1:";; - esac - cat <<\_ACEOF - -Optional Features and Packages: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - -External Libraries: - --with-portmixer enable portmixer audio-mixer support [default=check] - --with-libprojectM enable projectM visualization support [default=no] - -Development options: - --enable-global (DEPRECATED, DO NOT USE) - --enable-local (DEPRECATED, DO NOT USE) - --enable-debug Enable debug build [default=no] - --enable-osx-fink Enable fink packaging for OSX - --enable-osx-brew Enable homebrew packaging for OSX - -Free Pascal Compiler specific options: - --with-fpc=DIR Directory of the FPC executable [PATH] - --disable-verbose Disable verbose compiler output [default=no] - --enable-gprof Enable profiling with gprof [default=no] - --enable-valgrind Enable debugging with valgrind [default=no] - --enable-heaptrace Enable heaptrace (memory corruption detection) - [default=no] - --enable-rangechecks Enables range-checks [default=no] - --disable-noexecstack Allow executable stacks [default=no] - -Some influential environment variables: - PFLAGS Free Pascal Compiler flags (replaces all other flags) - PFLAGS_BASE Free Pascal Compiler base flags, e.g. -Si - PFLAGS_DEBUG - Free Pascal Compiler debug flags, e.g. -gl - PFLAGS_RELEASE - Free Pascal Compiler release flags, e.g. -O2 - PFLAGS_EXTRA - Free Pascal Compiler additional flags - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CXX C++ compiler command - CXXFLAGS C++ compiler flags - PKG_CONFIG path to pkg-config utility - PKG_CONFIG_PATH - directories to add to pkg-config's search path - PKG_CONFIG_LIBDIR - path overriding pkg-config's built-in search path - libpng_VERSION - version of libpng, overriding pkg-config - lua_VERSION version of lua, overriding pkg-config - libavcodec_VERSION - version of libavcodec, overriding pkg-config - libavformat_VERSION - version of libavformat, overriding pkg-config - libavutil_VERSION - version of libavutil, overriding pkg-config - libswscale_VERSION - version of libswscale, overriding pkg-config - libprojectM_VERSION - version of libprojectM, overriding pkg-config - libprojectM_INCLUDEDIR - C-Header include-dir (e.g. /usr/include), overriding pkg-config - libprojectM_DATADIR - projectM data-directory for presets etc. (e.g. - /usr/share/projectM), overriding pkg-config - portaudio_VERSION - version of portaudio, overriding pkg-config - libpcre_VERSION - version of libpcre, overriding pkg-config - libpcre_LIBDIR - library dir (e.g. /usr/lib, /sw/lib, ...), overriding pkg-config - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to . -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -ultrastardx configure 1.1 -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile - -# ac_fn_cxx_try_compile LINENO -# ---------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_compile - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_cxx_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_cxx_try_link -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by ultrastardx $as_me 1.1, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# specify the website here -PACKAGE_WEBSITE="http://www.ultrastardeluxe.org/" - -# specify the IRC-channel here -PACKAGE_IRC="#ultrastardx at quakenet.org" - - - -# Specify a source-file so autoconf can check if the source-dir exists - - -# Set the path to install-sh -ac_aux_dir= -for ac_dir in dists/autogen "$srcdir"/dists/autogen; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in dists/autogen \"$srcdir\"/dists/autogen" "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -# show features and packages in one list - - - - -# ----------------------------------------- -# find tools -# ----------------------------------------- - -# options for make command -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat >conftest.make <<\_ACEOF -SHELL = /bin/sh -all: - @echo '@@@%%%=$(MAKE)=@@@%%%' -_ACEOF -# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. -case `${MAKE-make} -f conftest.make 2>/dev/null` in - *@@@%%%=?*=@@@%%%*) - eval ac_cv_prog_make_${ac_make}_set=yes;; - *) - eval ac_cv_prog_make_${ac_make}_set=no;; -esac -rm -f conftest.make -fi -if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - SET_MAKE= -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - -# find tool for ln -s (e.g. uses cp -p for FAT-filesystems) -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find a program for recursive dir creation -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 -$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } -if test -z "$MKDIR_P"; then - if ${ac_cv_path_mkdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in mkdir gmkdir; do - for ac_exec_ext in '' $ac_executable_extensions; do - as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue - case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( - 'mkdir (GNU coreutils) '* | \ - 'mkdir (coreutils) '* | \ - 'mkdir (fileutils) '4.1*) - ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext - break 3;; - esac - done - done - done -IFS=$as_save_IFS - -fi - - test -d ./--version && rmdir ./--version - if test "${ac_cv_path_mkdir+set}" = set; then - MKDIR_P="$ac_cv_path_mkdir -p" - else - # As a last resort, use the slow shell script. Don't cache a - # value for MKDIR_P within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - MKDIR_P="$ac_install_sh -d" - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 -$as_echo "$MKDIR_P" >&6; } - -# find the best install tool -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - -# some other useful tools -#AC_PROG_AWK -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -#AC_PROG_EGREP - -# ----------------------------------------- -# macro declarations -# ----------------------------------------- - -# AC_SUBST_DEFINE(DEFINE_SUFFIX, IS_DEFINED) -# used to enable/disable pascal defines - - -# ----------------------------------------- -# define switches -# ----------------------------------------- - -# print library options header - -# Check whether --with-cfg-dummy1 was given. -if test "${with_cfg_dummy1+set}" = set; then : - withval=$with_cfg_dummy1; -fi - - -# add portmixer option - -# Check whether --with-portmixer was given. -if test "${with_portmixer+set}" = set; then : - withval=$with_portmixer; with_portmixer=$withval -else - with_portmixer="check" -fi - - -# add projectM option - -# Check whether --with-libprojectM was given. -if test "${with_libprojectM+set}" = set; then : - withval=$with_libprojectM; with_libprojectM=$withval -else - with_libprojectM="no" -fi - - -# print misc options header - -# Check whether --with-cfg-dummy2 was given. -if test "${with_cfg_dummy2+set}" = set; then : - withval=$with_cfg_dummy2; -fi - - -# add DEPRECATED global and local options -# Check whether --enable-global was given. -if test "${enable_global+set}" = set; then : - enableval=$enable_global; -fi - -# Check whether --enable-local was given. -if test "${enable_local+set}" = set; then : - enableval=$enable_local; -fi - - -if [ x$enable_global != x -o x$enable_local != x ]; then - { $as_echo "$as_me:${as_lineno-$LINENO}: - -!!! NOTE: --enable-global and --enable-local are deprecated: -!!! - global build: just type \"make\" and \"make install\" -!!! - local build: just type \"make\" and start \"game/ultrastardx\" -" >&5 -$as_echo "$as_me: - -!!! NOTE: --enable-global and --enable-local are deprecated: -!!! - global build: just type \"make\" and \"make install\" -!!! - local build: just type \"make\" and start \"game/ultrastardx\" -" >&6;} - sleep 2 -fi - -# Check whether --enable-debug was given. -if test "${enable_debug+set}" = set; then : - enableval=$enable_debug; test $enableval = "yes" && ENABLE_DEBUG="yes" -fi - - - -# OSX Packaging -# Check whether --enable-osx-fink was given. -if test "${enable_osx_fink+set}" = set; then : - enableval=$enable_osx_fink; -fi - -# Check whether --enable-osx-brew was given. -if test "${enable_osx_brew+set}" = set; then : - enableval=$enable_osx_brew; -fi - - -if [ x$enable_osx_fink != x -a x$enable_osx_brew != x ]; then - as_fn_error $? " -!!! You can't use --enable-osx-fink with --enable-osx-brew at the same time -" "$LINENO" 5 -fi - -# Default (homebrew) -USE_OSX_PACKAGING="brew" -USE_OSX_PACKAGING_LIBDIR="/usr/local/lib" - -if [ x$enable_osx_fink != x ]; then - USE_OSX_PACKAGING="fink" - USE_OSX_PACKAGING_LIBDIR="/sw/lib" -fi - -USE_OSX_PACKAGING=$USE_OSX_PACKAGING - -USE_OSX_PACKAGING_LIBDIR=$USE_OSX_PACKAGING_LIBDIR - - -# ----------------------------------------- -# check for compilers -# ----------------------------------------- - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - - -# find and test the freepascal compiler -# sets PFLAGS, FPC_VERSION, FPC_DEBUG, etc. - - -## -# User PFLAGS -## - - - - - - - -## -# Compiler options -## - -# Check whether --enable-dummy_fpc1 was given. -if test "${enable_dummy_fpc1+set}" = set; then : - enableval=$enable_dummy_fpc1; -fi - - -# fpc path - -# Check whether --with-fpc was given. -if test "${with_fpc+set}" = set; then : - withval=$with_fpc; PPC_PATH=$withval -fi - - -# verbose -# Check whether --enable-verbose was given. -if test "${enable_verbose+set}" = set; then : - enableval=$enable_verbose; test x$enableval = xno && PFLAGS_EXTRA="$PFLAGS_EXTRA -v0Bew" -fi - - -# gprof -# Check whether --enable-gprof was given. -if test "${enable_gprof+set}" = set; then : - enableval=$enable_gprof; test x$enableval = xyes && PFLAGS_EXTRA="$PFLAGS_EXTRA -pg" -fi - - -# valgrind -# Check whether --enable-valgrind was given. -if test "${enable_valgrind+set}" = set; then : - enableval=$enable_valgrind; test x$enableval = xyes && PFLAGS_EXTRA="$PFLAGS_EXTRA -gv" -fi - - -# heaptrace -# Check whether --enable-heaptrace was given. -if test "${enable_heaptrace+set}" = set; then : - enableval=$enable_heaptrace; test x$enableval = xyes && PFLAGS_EXTRA="$PFLAGS_EXTRA -gh" -fi - - -# range-checks -# Check whether --enable-rangechecks was given. -if test "${enable_rangechecks+set}" = set; then : - enableval=$enable_rangechecks; test x$enableval = xyes && PFLAGS_EXTRA="$PFLAGS_EXTRA -Crtoi" -fi - - -# allow execstack (see noexecstack compiler check below) -# Check whether --enable-noexecstack was given. -if test "${enable_noexecstack+set}" = set; then : - enableval=$enable_noexecstack; -else - enable_noexecstack="yes" -fi - - -### -# Find compiler executable -### - -PPC_CHECK_PROGS="fpc FPC ppc386 ppc PPC386" - -if test -z "$PPC_PATH"; then - PPC_PATH=$PATH - for ac_prog in $PPC_CHECK_PROGS -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PPC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PPC"; then - ac_cv_prog_PPC="$PPC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PPC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PPC=$ac_cv_prog_PPC -if test -n "$PPC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PPC" >&5 -$as_echo "$PPC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PPC" && break -done - - for ac_prog in fpcmake -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_FPCMAKE+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$FPCMAKE"; then - ac_cv_prog_FPCMAKE="$FPCMAKE" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_FPCMAKE="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -FPCMAKE=$ac_cv_prog_FPCMAKE -if test -n "$FPCMAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FPCMAKE" >&5 -$as_echo "$FPCMAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$FPCMAKE" && break -done - -else - for ac_prog in $PPC_CHECK_PROGS -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PPC+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PPC in - [\\/]* | ?:[\\/]*) - ac_cv_path_PPC="$PPC" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PPC_PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PPC="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PPC=$ac_cv_path_PPC -if test -n "$PPC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PPC" >&5 -$as_echo "$PPC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PPC" && break -done - - for ac_prog in fpcmake -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_FPCMAKE+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $FPCMAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_FPCMAKE="$FPCMAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PPC_PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_FPCMAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -FPCMAKE=$ac_cv_path_FPCMAKE -if test -n "$FPCMAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FPCMAKE" >&5 -$as_echo "$FPCMAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$FPCMAKE" && break -done - -fi -if test -z "$PPC"; then - as_fn_error $? "no Free Pascal Compiler found in $PPC_PATH" "$LINENO" 5 -fi - -### -# Get the FPC compiler info -### - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking version of fpc" >&5 -$as_echo_n "checking version of fpc... " >&6; } -FPC_VERSION=`${PPC} -iV` - - version=$FPC_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FPC_VERSION]" >&6; } - -FPC_PLATFORM=`${PPC} -iTO` -FPC_PROCESSOR=`${PPC} -iTP` -FPC_CPLATFORM=`${PPC} -iSO` -FPC_CPROCESSOR=`${PPC} -iSP` - -FPC_TARGET=${FPC_PROCESSOR}-${FPC_PLATFORM} - -# Check for x86_64 on darwin -if test x$FPC_PLATFORM = xdarwin; then - if test x`uname -m` = xx86_64; then - PFLAGS+=" -Px86_64 " - fi -fi - - - - - - - -### -# Get paths -### - -if test "x$prefix" != xNONE; then - FPC_PREFIX=$prefix -else - FPC_PREFIX=$ac_default_prefix -fi - -FPC_BASE_PATH="${FPC_PREFIX}/lib/fpc/${FPC_VERSION}" -FPC_UNIT_PATH="${FPC_BASE_PATH}/units/${FPC_TARGET}" - - - - - -### -# Compiler checks -### - -SIMPLE_PROGRAM="program foo; begin writeln; end." - -# Check if FPC works and can compile a program -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Free Pascal Compiler works" >&5 -$as_echo_n "checking whether the Free Pascal Compiler works... " >&6; } -if ${ac_cv_prog_ppc_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - # create test file - rm -f conftest* - echo "$SIMPLE_PROGRAM" > conftest.pp - - # compile test file - ${PPC} conftest.pp >> config.log 2>&1 - - # check if test file was compiled - if test -f conftest || test -f conftest.exe; then - ac_cv_prog_ppc_works="yes" - else - ac_cv_prog_ppc_works="no" - fi - - # remove test file - rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_ppc_works" >&5 -$as_echo "$ac_cv_prog_ppc_works" >&6; } -if test x$ac_cv_prog_ppc_works = xno; then - as_fn_error $? "installation or configuration problem: Cannot create executables." "$LINENO" 5 -fi - -# Check if FPC can link with standard libraries -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Free Pascal Compiler can link" >&5 -$as_echo_n "checking whether the Free Pascal Compiler can link... " >&6; } -if ${ac_cv_prog_ppc_links+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - # create test file - rm -f conftest* - echo "program foo; uses crt; begin writeln; end. - " > conftest.pp - - # compile test file - ${PPC} conftest.pp >> config.log 2>&1 - - # check if test file was compiled - if test -f conftest || test -f conftest.exe; then - ac_cv_prog_ppc_links="yes" - else - ac_cv_prog_ppc_links="no" - fi - - # remove test file - rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_ppc_links" >&5 -$as_echo "$ac_cv_prog_ppc_links" >&6; } -if test x$ac_cv_prog_ppc_links = xno; then - as_fn_error $? "installation or configuration problem: Cannot link with some standard libraries." "$LINENO" 5 -fi - -# Check whether FPC's linker knows "-z noexecstack" -# FPC does not set the NX-flag on stack memory. Binaries generated with FPC -# might crash on platforms that require the stack to be non-executable. -# So we will try to find a workaround here. -# See http://bugs.freepascal.org/view.php?id=11563 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether FPC supports -k\"-z noexecstack\"" >&5 -$as_echo_n "checking whether FPC supports -k\"-z noexecstack\"... " >&6; } -if ${ac_cv_prog_ppc_noexecstack+:} false; then : - $as_echo_n "(cached) " >&6 -else - - - # create test file - rm -f conftest* - echo "$SIMPLE_PROGRAM" > conftest.pp - - # compile test file - ${PPC} -k"-z noexecstack" conftest.pp >> config.log 2>&1 - - # check if test file was compiled - if test -f conftest || test -f conftest.exe; then - ac_cv_prog_ppc_noexecstack="yes" - else - ac_cv_prog_ppc_noexecstack="no" - fi - - # remove test file - rm -f conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_ppc_noexecstack" >&5 -$as_echo "$ac_cv_prog_ppc_noexecstack" >&6; } -if test x$enable_noexecstack = xyes; then - if test x$ac_cv_prog_ppc_noexecstack = xyes; then - PFLAGS_EXTRA="$PFLAGS_EXTRA -k\"-z noexecstack\"" - fi -fi - -# Finally substitute PFLAGS - -# set unset PFLAGS_XYZ vars to $(PFLAGS_XYZ_DEFAULT) -# so the Makefile can define default values to it. -true ${PFLAGS:=\$(PFLAGS_DEFAULT)} -true ${PFLAGS_BASE:=\$(PFLAGS_BASE_DEFAULT)} -true ${PFLAGS_EXTRA:=\$(PFLAGS_EXTRA_DEFAULT)} -true ${PFLAGS_DEBUG:=\$(PFLAGS_DEBUG_DEFAULT)} -true ${PFLAGS_RELEASE:=\$(PFLAGS_RELEASE_DEFAULT)} - - - - - - - - - -# find and test the C compiler (for C-libs and wrappers) -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - -# find and test the C++ compiler (for C-libs and wrappers) -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -z "$CXX"; then - if test -n "$CCC"; then - CXX=$CCC - else - if test -n "$ac_tool_prefix"; then - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 -$as_echo "$CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 -$as_echo "$ac_ct_CXX" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CXX" && break -done - - if test "x$ac_ct_CXX" = x; then - CXX="g++" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CXX=$ac_ct_CXX - fi -fi - - fi -fi -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 -$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } -if ${ac_cv_cxx_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 -$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GXX=yes -else - GXX= -fi -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 -$as_echo_n "checking whether $CXX accepts -g... " >&6; } -if ${ac_cv_prog_cxx_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_cxx_werror_flag=$ac_cxx_werror_flag - ac_cxx_werror_flag=yes - ac_cv_prog_cxx_g=no - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -else - CXXFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - -else - ac_cxx_werror_flag=$ac_save_cxx_werror_flag - CXXFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_prog_cxx_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_cxx_werror_flag=$ac_save_cxx_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 -$as_echo "$ac_cv_prog_cxx_g" >&6; } -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -ac_ext=cpp -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - -# find pkg-config - - - - - - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi -fi -if [ x$PKG_CONFIG = x ]; then - as_fn_error $? " -!!! pkg-config was not found on your system. -!!! It is needed to determine the versions of your libraries. -!!! Install it and try again." "$LINENO" 5 -fi - - -# ----------------------------------------- -# check for OS -# ----------------------------------------- - -if test x$FPC_PLATFORM = xdarwin; then - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mac OS X version" >&5 -$as_echo_n "checking for Mac OS X version... " >&6; } - MACOSX_VERSION=`sw_vers -productVersion` - - version=$MACOSX_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$MACOSX_VERSION]" >&6; } - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Darwin version" >&5 -$as_echo_n "checking for Darwin version... " >&6; } - DARWIN_VERSION=`uname -r | cut -f1 -d.` - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$DARWIN_VERSION]" >&5 -$as_echo "[$DARWIN_VERSION]" >&6; } - - -fi - -# ----------------------------------------- -# check for libraries -# ----------------------------------------- - -# find libpng -# pkgconfig name for 1.2 is "libpng12", for 1.4 "libpng" - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libpng12" >&5 -$as_echo_n "checking for libpng12... " >&6; } - if test x"$with_libpng" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libpng" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng12\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpng12") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libpng_LIBS=`$PKG_CONFIG --libs --silence-errors "libpng12"` - libpng_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "libpng12"` - libpng_LIBDIRS=` - echo "$libpng_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libpng_LIBDIRS"; then - LIBS="$LIBS $libpng_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libpng_HAVE="yes" - if test -n "$libpng_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libpng_LIBDIRS)" >&5 -$as_echo "yes ($libpng_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libpng_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xno = xyes -o x"$with_libpng" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libpng12"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libpng=nocheck and the environment -variables libpng_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - -if [ x$libpng_HAVE = xyes ]; then - - if test x$libpng_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of libpng" >&5 -$as_echo_n "checking version of libpng... " >&6; } - - - # check if variable was defined by the user - if test -z "$libpng_VERSION"; then - # if not, get it from pkg-config - if test x$libpng_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng12\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpng12") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libpng_VERSION=`$PKG_CONFIG --modversion --silence-errors "libpng12"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libpng12"` - as_fn_error $? " - -$err_msg - -If --with-libpng=nocheck is defined the environment variable -libpng_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$libpng_VERSION]" >&5 -$as_echo "[$libpng_VERSION]" >&6; } - else - libpng_VERSION="0.0.0" - fi - - version=$libpng_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $libpng_VERSION_INT -le 60000000; then - if test $libpng_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $libpng_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $libpng_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $libpng_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $libpng_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $libpng_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $libpng_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $libpng_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $libpng_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $libpng_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $libpng_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $libpng_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $libpng_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $libpng_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $libpng_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $libpng_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - -else - # check for the generic .pc file - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libpng >= 1.2" >&5 -$as_echo_n "checking for libpng >= 1.2... " >&6; } - if test x"$with_libpng" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libpng" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libpng_LIBS=`$PKG_CONFIG --libs --silence-errors "libpng >= 1.2"` - libpng_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "libpng >= 1.2"` - libpng_LIBDIRS=` - echo "$libpng_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libpng_LIBDIRS"; then - LIBS="$LIBS $libpng_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libpng_HAVE="yes" - if test -n "$libpng_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libpng_LIBDIRS)" >&5 -$as_echo "yes ($libpng_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libpng_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_libpng" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libpng >= 1.2"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libpng=nocheck and the environment -variables libpng_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - - if test x$libpng_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of libpng" >&5 -$as_echo_n "checking version of libpng... " >&6; } - - - # check if variable was defined by the user - if test -z "$libpng_VERSION"; then - # if not, get it from pkg-config - if test x$libpng_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libpng >= 1.2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libpng >= 1.2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libpng_VERSION=`$PKG_CONFIG --modversion --silence-errors "libpng >= 1.2"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libpng >= 1.2"` - as_fn_error $? " - -$err_msg - -If --with-libpng=nocheck is defined the environment variable -libpng_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$libpng_VERSION]" >&5 -$as_echo "[$libpng_VERSION]" >&6; } - else - libpng_VERSION="0.0.0" - fi - - version=$libpng_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $libpng_VERSION_INT -le 60000000; then - if test $libpng_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $libpng_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $libpng_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $libpng_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $libpng_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $libpng_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $libpng_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $libpng_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $libpng_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $libpng_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $libpng_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $libpng_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $libpng_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $libpng_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $libpng_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $libpng_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - -fi - -# find sdl2 - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sdl2" >&5 -$as_echo_n "checking for sdl2... " >&6; } - if test x"$with_sdl2" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_sdl2" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sdl2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "sdl2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - sdl2_LIBS=`$PKG_CONFIG --libs --silence-errors "sdl2"` - sdl2_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "sdl2"` - sdl2_LIBDIRS=` - echo "$sdl2_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$sdl2_LIBDIRS"; then - LIBS="$LIBS $sdl2_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - sdl2_HAVE="yes" - if test -n "$sdl2_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($sdl2_LIBDIRS)" >&5 -$as_echo "yes ($sdl2_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - sdl2_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_sdl2" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "sdl2"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-sdl2=nocheck and the environment -variables sdl2_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - -# find SDL2_image - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL2_image" >&5 -$as_echo_n "checking for SDL2_image... " >&6; } - if test x"$with_sdl2_image" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_sdl2_image" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"SDL2_image\""; } >&5 - ($PKG_CONFIG --exists --print-errors "SDL2_image") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - sdl2_image_LIBS=`$PKG_CONFIG --libs --silence-errors "SDL2_image"` - sdl2_image_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "SDL2_image"` - sdl2_image_LIBDIRS=` - echo "$sdl2_image_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$sdl2_image_LIBDIRS"; then - LIBS="$LIBS $sdl2_image_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - sdl2_image_HAVE="yes" - if test -n "$sdl2_image_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($sdl2_image_LIBDIRS)" >&5 -$as_echo "yes ($sdl2_image_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - sdl2_image_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_sdl2_image" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "SDL2_image"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-sdl2_image=nocheck and the environment -variables sdl2_image_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - -# find freetype - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype2" >&5 -$as_echo_n "checking for freetype2... " >&6; } - if test x"$with_freetype" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_freetype" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"freetype2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "freetype2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - freetype_LIBS=`$PKG_CONFIG --libs --silence-errors "freetype2"` - freetype_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "freetype2"` - freetype_LIBDIRS=` - echo "$freetype_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$freetype_LIBDIRS"; then - LIBS="$LIBS $freetype_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - freetype_HAVE="yes" - if test -n "$freetype_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($freetype_LIBDIRS)" >&5 -$as_echo "yes ($freetype_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - freetype_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_freetype" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "freetype2"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-freetype=nocheck and the environment -variables freetype_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - -# find sqlite3 - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqlite3" >&5 -$as_echo_n "checking for sqlite3... " >&6; } - if test x"$with_sqlite3" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_sqlite3" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sqlite3\""; } >&5 - ($PKG_CONFIG --exists --print-errors "sqlite3") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - sqlite3_LIBS=`$PKG_CONFIG --libs --silence-errors "sqlite3"` - sqlite3_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "sqlite3"` - sqlite3_LIBDIRS=` - echo "$sqlite3_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$sqlite3_LIBDIRS"; then - LIBS="$LIBS $sqlite3_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - sqlite3_HAVE="yes" - if test -n "$sqlite3_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($sqlite3_LIBDIRS)" >&5 -$as_echo "yes ($sqlite3_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - sqlite3_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_sqlite3" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "sqlite3"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-sqlite3=nocheck and the environment -variables sqlite3_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - -# find lua 5.3, 5.2 or 5.11 -# (K)Ubuntu uses lua5.2.pc and lua5.1.pc, -# Mac OS X and other linux distributions use lua.pc -# Archlinux aur package for 5.3 use lua5.3.pc in order -# to make it work alongside the 5.2 version. - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua5.3" >&5 -$as_echo_n "checking for lua5.3... " >&6; } - if test x"$with_lua" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_lua" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua5.3\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lua5.3") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - lua_LIBS=`$PKG_CONFIG --libs --silence-errors "lua5.3"` - lua_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "lua5.3"` - lua_LIBDIRS=` - echo "$lua_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$lua_LIBDIRS"; then - LIBS="$LIBS $lua_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - lua_HAVE="yes" - if test -n "$lua_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($lua_LIBDIRS)" >&5 -$as_echo "yes ($lua_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - lua_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xcheck = xyes -o x"$with_lua" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "lua5.3"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-lua=nocheck and the environment -variables lua_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - -lua_lib_name="lua5.3" -if [ x$lua_HAVE = xyes ]; then - - if test x$lua_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of lua" >&5 -$as_echo_n "checking version of lua... " >&6; } - - - # check if variable was defined by the user - if test -z "$lua_VERSION"; then - # if not, get it from pkg-config - if test x$lua_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua5.3\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lua5.3") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - lua_VERSION=`$PKG_CONFIG --modversion --silence-errors "lua5.3"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "lua5.3"` - as_fn_error $? " - -$err_msg - -If --with-lua=nocheck is defined the environment variable -lua_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$lua_VERSION]" >&5 -$as_echo "[$lua_VERSION]" >&6; } - else - lua_VERSION="0.0.0" - fi - - version=$lua_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $lua_VERSION_INT -le 60000000; then - if test $lua_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $lua_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $lua_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $lua_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $lua_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $lua_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $lua_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $lua_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $lua_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $lua_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $lua_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $lua_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $lua_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $lua_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $lua_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $lua_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - -else - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua5.2" >&5 -$as_echo_n "checking for lua5.2... " >&6; } - if test x"$with_lua" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_lua" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua5.2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lua5.2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - lua_LIBS=`$PKG_CONFIG --libs --silence-errors "lua5.2"` - lua_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "lua5.2"` - lua_LIBDIRS=` - echo "$lua_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$lua_LIBDIRS"; then - LIBS="$LIBS $lua_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - lua_HAVE="yes" - if test -n "$lua_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($lua_LIBDIRS)" >&5 -$as_echo "yes ($lua_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - lua_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xcheck = xyes -o x"$with_lua" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "lua5.2"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-lua=nocheck and the environment -variables lua_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - lua_lib_name="lua5.2" - if [ x$lua_HAVE = xyes ]; then - - if test x$lua_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of lua" >&5 -$as_echo_n "checking version of lua... " >&6; } - - - # check if variable was defined by the user - if test -z "$lua_VERSION"; then - # if not, get it from pkg-config - if test x$lua_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua5.2\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lua5.2") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - lua_VERSION=`$PKG_CONFIG --modversion --silence-errors "lua5.2"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "lua5.2"` - as_fn_error $? " - -$err_msg - -If --with-lua=nocheck is defined the environment variable -lua_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$lua_VERSION]" >&5 -$as_echo "[$lua_VERSION]" >&6; } - else - lua_VERSION="0.0.0" - fi - - version=$lua_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $lua_VERSION_INT -le 60000000; then - if test $lua_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $lua_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $lua_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $lua_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $lua_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $lua_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $lua_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $lua_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $lua_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $lua_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $lua_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $lua_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $lua_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $lua_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $lua_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $lua_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - else - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua5.1" >&5 -$as_echo_n "checking for lua5.1... " >&6; } - if test x"$with_lua" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_lua" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua5.1\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lua5.1") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - lua_LIBS=`$PKG_CONFIG --libs --silence-errors "lua5.1"` - lua_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "lua5.1"` - lua_LIBDIRS=` - echo "$lua_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$lua_LIBDIRS"; then - LIBS="$LIBS $lua_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - lua_HAVE="yes" - if test -n "$lua_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($lua_LIBDIRS)" >&5 -$as_echo "yes ($lua_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - lua_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xcheck = xyes -o x"$with_lua" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "lua5.1"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-lua=nocheck and the environment -variables lua_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - lua_lib_name="lua5.1" - if [ x$lua_HAVE = xyes ]; then - - if test x$lua_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of lua" >&5 -$as_echo_n "checking version of lua... " >&6; } - - - # check if variable was defined by the user - if test -z "$lua_VERSION"; then - # if not, get it from pkg-config - if test x$lua_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua5.1\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lua5.1") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - lua_VERSION=`$PKG_CONFIG --modversion --silence-errors "lua5.1"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "lua5.1"` - as_fn_error $? " - -$err_msg - -If --with-lua=nocheck is defined the environment variable -lua_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$lua_VERSION]" >&5 -$as_echo "[$lua_VERSION]" >&6; } - else - lua_VERSION="0.0.0" - fi - - version=$lua_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $lua_VERSION_INT -le 60000000; then - if test $lua_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $lua_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $lua_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $lua_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $lua_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $lua_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $lua_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $lua_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $lua_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $lua_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $lua_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $lua_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $lua_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $lua_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $lua_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $lua_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - else - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lua >= 5.1" >&5 -$as_echo_n "checking for lua >= 5.1... " >&6; } - if test x"$with_lua" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_lua" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua >= 5.1\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lua >= 5.1") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - lua_LIBS=`$PKG_CONFIG --libs --silence-errors "lua >= 5.1"` - lua_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "lua >= 5.1"` - lua_LIBDIRS=` - echo "$lua_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$lua_LIBDIRS"; then - LIBS="$LIBS $lua_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - lua_HAVE="yes" - if test -n "$lua_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($lua_LIBDIRS)" >&5 -$as_echo "yes ($lua_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - lua_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_lua" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "lua >= 5.1"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-lua=nocheck and the environment -variables lua_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - lua_LIB_NAME="lua" - - if test x$lua_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of lua" >&5 -$as_echo_n "checking version of lua... " >&6; } - - - # check if variable was defined by the user - if test -z "$lua_VERSION"; then - # if not, get it from pkg-config - if test x$lua_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"lua\""; } >&5 - ($PKG_CONFIG --exists --print-errors "lua") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - lua_VERSION=`$PKG_CONFIG --modversion --silence-errors "lua"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "lua"` - as_fn_error $? " - -$err_msg - -If --with-lua=nocheck is defined the environment variable -lua_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$lua_VERSION]" >&5 -$as_echo "[$lua_VERSION]" >&6; } - else - lua_VERSION="0.0.0" - fi - - version=$lua_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $lua_VERSION_INT -le 60000000; then - if test $lua_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $lua_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $lua_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $lua_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $lua_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $lua_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $lua_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $lua_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $lua_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $lua_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $lua_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $lua_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $lua_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $lua_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $lua_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $lua_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - fi - fi -fi - - -# find FFMpeg -# Note: do not use the min/max version parameters with ffmpeg -# otherwise it might fail in ubuntu due to a wrong version number -# format in ffmpeg's .pc-files. -# For example: 0d.51.1.2 instead of the correct 51.1.2. -# A check for version >=52.0.0 will return version 0d.51.1.2 -# although it is lower because pkg-config is confused by the 0d. -# Use [mylib]_VERSION_INT for version-checking instead - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libavcodec" >&5 -$as_echo_n "checking for libavcodec... " >&6; } - if test x"$with_libavcodec" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libavcodec" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavcodec") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libavcodec_LIBS=`$PKG_CONFIG --libs --silence-errors "libavcodec"` - libavcodec_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "libavcodec"` - libavcodec_LIBDIRS=` - echo "$libavcodec_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libavcodec_LIBDIRS"; then - LIBS="$LIBS $libavcodec_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libavcodec_HAVE="yes" - if test -n "$libavcodec_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libavcodec_LIBDIRS)" >&5 -$as_echo "yes ($libavcodec_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libavcodec_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xcheck = xyes -o x"$with_libavcodec" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libavcodec"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libavcodec=nocheck and the environment -variables libavcodec_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - -# The following finds libavcodec.pc in its new location on Mac OS X. -# It only takes the last from the list, assuming that this is the latest -# version. -if [ x$libavcodec_HAVE = xno -a x$FPC_PLATFORM = xdarwin ]; then - PKG_CONFIG_PATH=`find $FPCDIR/lib/ffmpeg* -name libavcodec.pc | tail -n 1 | xargs dirname`:$PKG_CONFIG_PATH export PKG_CONFIG_PATH - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libavcodec" >&5 -$as_echo_n "checking for libavcodec... " >&6; } - if test x"$with_libavcodec" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libavcodec" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavcodec") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libavcodec_LIBS=`$PKG_CONFIG --libs --silence-errors "libavcodec"` - libavcodec_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "libavcodec"` - libavcodec_LIBDIRS=` - echo "$libavcodec_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libavcodec_LIBDIRS"; then - LIBS="$LIBS $libavcodec_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libavcodec_HAVE="yes" - if test -n "$libavcodec_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libavcodec_LIBDIRS)" >&5 -$as_echo "yes ($libavcodec_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libavcodec_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_libavcodec" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libavcodec"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libavcodec=nocheck and the environment -variables libavcodec_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - -fi - - if test x$libavcodec_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of libavcodec" >&5 -$as_echo_n "checking version of libavcodec... " >&6; } - - - # check if variable was defined by the user - if test -z "$libavcodec_VERSION"; then - # if not, get it from pkg-config - if test x$libavcodec_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavcodec") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libavcodec_VERSION=`$PKG_CONFIG --modversion --silence-errors "libavcodec"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libavcodec"` - as_fn_error $? " - -$err_msg - -If --with-libavcodec=nocheck is defined the environment variable -libavcodec_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$libavcodec_VERSION]" >&5 -$as_echo "[$libavcodec_VERSION]" >&6; } - else - libavcodec_VERSION="0.0.0" - fi - - version=$libavcodec_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $libavcodec_VERSION_INT -le 60000000; then - if test $libavcodec_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $libavcodec_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $libavcodec_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $libavcodec_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $libavcodec_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $libavcodec_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $libavcodec_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $libavcodec_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $libavcodec_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $libavcodec_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $libavcodec_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $libavcodec_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $libavcodec_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $libavcodec_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $libavcodec_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $libavcodec_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for avcodec_decode_audio in -lavcodec" >&5 -$as_echo_n "checking for avcodec_decode_audio in -lavcodec... " >&6; } -if ${ac_cv_lib_avcodec_avcodec_decode_audio+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lavcodec $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char avcodec_decode_audio (); -int -main () -{ -return avcodec_decode_audio (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_avcodec_avcodec_decode_audio=yes -else - ac_cv_lib_avcodec_avcodec_decode_audio=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_avcodec_avcodec_decode_audio" >&5 -$as_echo "$ac_cv_lib_avcodec_avcodec_decode_audio" >&6; } -if test "x$ac_cv_lib_avcodec_avcodec_decode_audio" = xyes; then : - HAVE_AVCODEC_DECODE_AUDIO="yes" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for avcodec_decode_audio2 in -lavcodec" >&5 -$as_echo_n "checking for avcodec_decode_audio2 in -lavcodec... " >&6; } -if ${ac_cv_lib_avcodec_avcodec_decode_audio2+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lavcodec $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char avcodec_decode_audio2 (); -int -main () -{ -return avcodec_decode_audio2 (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_avcodec_avcodec_decode_audio2=yes -else - ac_cv_lib_avcodec_avcodec_decode_audio2=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_avcodec_avcodec_decode_audio2" >&5 -$as_echo "$ac_cv_lib_avcodec_avcodec_decode_audio2" >&6; } -if test "x$ac_cv_lib_avcodec_avcodec_decode_audio2" = xyes; then : - HAVE_AVCODEC_DECODE_AUDIO2="yes" -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for img_convert in -lavcodec" >&5 -$as_echo_n "checking for img_convert in -lavcodec... " >&6; } -if ${ac_cv_lib_avcodec_img_convert+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lavcodec $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char img_convert (); -int -main () -{ -return img_convert (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_avcodec_img_convert=yes -else - ac_cv_lib_avcodec_img_convert=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_avcodec_img_convert" >&5 -$as_echo "$ac_cv_lib_avcodec_img_convert" >&6; } -if test "x$ac_cv_lib_avcodec_img_convert" = xyes; then : - HAVE_IMG_CONVERT="yes" -fi - - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libavformat" >&5 -$as_echo_n "checking for libavformat... " >&6; } - if test x"$with_libavformat" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libavformat" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavformat\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavformat") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libavformat_LIBS=`$PKG_CONFIG --libs --silence-errors "libavformat"` - libavformat_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "libavformat"` - libavformat_LIBDIRS=` - echo "$libavformat_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libavformat_LIBDIRS"; then - LIBS="$LIBS $libavformat_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libavformat_HAVE="yes" - if test -n "$libavformat_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libavformat_LIBDIRS)" >&5 -$as_echo "yes ($libavformat_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libavformat_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_libavformat" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libavformat"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libavformat=nocheck and the environment -variables libavformat_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - - if test x$libavformat_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of libavformat" >&5 -$as_echo_n "checking version of libavformat... " >&6; } - - - # check if variable was defined by the user - if test -z "$libavformat_VERSION"; then - # if not, get it from pkg-config - if test x$libavformat_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavformat\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavformat") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libavformat_VERSION=`$PKG_CONFIG --modversion --silence-errors "libavformat"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libavformat"` - as_fn_error $? " - -$err_msg - -If --with-libavformat=nocheck is defined the environment variable -libavformat_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$libavformat_VERSION]" >&5 -$as_echo "[$libavformat_VERSION]" >&6; } - else - libavformat_VERSION="0.0.0" - fi - - version=$libavformat_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $libavformat_VERSION_INT -le 60000000; then - if test $libavformat_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $libavformat_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $libavformat_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $libavformat_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $libavformat_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $libavformat_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $libavformat_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $libavformat_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $libavformat_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $libavformat_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $libavformat_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $libavformat_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $libavformat_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $libavformat_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $libavformat_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $libavformat_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libavutil" >&5 -$as_echo_n "checking for libavutil... " >&6; } - if test x"$with_libavutil" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libavutil" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavutil\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavutil") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libavutil_LIBS=`$PKG_CONFIG --libs --silence-errors "libavutil"` - libavutil_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "libavutil"` - libavutil_LIBDIRS=` - echo "$libavutil_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libavutil_LIBDIRS"; then - LIBS="$LIBS $libavutil_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libavutil_HAVE="yes" - if test -n "$libavutil_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libavutil_LIBDIRS)" >&5 -$as_echo "yes ($libavutil_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libavutil_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_libavutil" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libavutil"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libavutil=nocheck and the environment -variables libavutil_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - - if test x$libavutil_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of libavutil" >&5 -$as_echo_n "checking version of libavutil... " >&6; } - - - # check if variable was defined by the user - if test -z "$libavutil_VERSION"; then - # if not, get it from pkg-config - if test x$libavutil_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavutil\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libavutil") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libavutil_VERSION=`$PKG_CONFIG --modversion --silence-errors "libavutil"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libavutil"` - as_fn_error $? " - -$err_msg - -If --with-libavutil=nocheck is defined the environment variable -libavutil_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$libavutil_VERSION]" >&5 -$as_echo "[$libavutil_VERSION]" >&6; } - else - libavutil_VERSION="0.0.0" - fi - - version=$libavutil_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $libavutil_VERSION_INT -le 60000000; then - if test $libavutil_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $libavutil_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $libavutil_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $libavutil_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $libavutil_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $libavutil_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $libavutil_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $libavutil_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $libavutil_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $libavutil_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $libavutil_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $libavutil_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $libavutil_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $libavutil_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $libavutil_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $libavutil_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - -if [ x$libavcodec_HAVE = xyes -a x$libavformat_HAVE = xyes -a x$libavutil_HAVE = xyes ]; then - ffmpeg_HAVE=yes -else - ffmpeg_HAVE=no -fi - - if [ x$ffmpeg_HAVE = xyes ]; then - DEFINE_HAVE_FFMPEG=DEFINE - else - DEFINE_HAVE_FFMPEG=UNDEF - fi - - - -# find FFMpeg's swscale lib (just if FFMpeg is compiled in GPL mode) - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libswscale" >&5 -$as_echo_n "checking for libswscale... " >&6; } - if test x"$with_libswscale" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libswscale" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libswscale\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libswscale") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libswscale_LIBS=`$PKG_CONFIG --libs --silence-errors "libswscale"` - libswscale_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "libswscale"` - libswscale_LIBDIRS=` - echo "$libswscale_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libswscale_LIBDIRS"; then - LIBS="$LIBS $libswscale_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libswscale_HAVE="yes" - if test -n "$libswscale_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libswscale_LIBDIRS)" >&5 -$as_echo "yes ($libswscale_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libswscale_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xno = xyes -o x"$with_libswscale" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libswscale"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libswscale=nocheck and the environment -variables libswscale_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - - if test x$libswscale_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of libswscale" >&5 -$as_echo_n "checking version of libswscale... " >&6; } - - - # check if variable was defined by the user - if test -z "$libswscale_VERSION"; then - # if not, get it from pkg-config - if test x$libswscale_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libswscale\""; } >&5 - ($PKG_CONFIG --exists --print-errors "libswscale") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libswscale_VERSION=`$PKG_CONFIG --modversion --silence-errors "libswscale"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "libswscale"` - as_fn_error $? " - -$err_msg - -If --with-libswscale=nocheck is defined the environment variable -libswscale_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$libswscale_VERSION]" >&5 -$as_echo "[$libswscale_VERSION]" >&6; } - else - libswscale_VERSION="0.0.0" - fi - - version=$libswscale_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $libswscale_VERSION_INT -le 60000000; then - if test $libswscale_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $libswscale_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $libswscale_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $libswscale_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $libswscale_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $libswscale_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $libswscale_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $libswscale_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $libswscale_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $libswscale_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $libswscale_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $libswscale_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $libswscale_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $libswscale_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $libswscale_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $libswscale_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - - if [ x$libswscale_HAVE = xyes ]; then - DEFINE_HAVE_SWSCALE=DEFINE - else - DEFINE_HAVE_SWSCALE=UNDEF - fi - - - - -# find projectM version -libprojectM_PKG="libprojectM >= 0.98" - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $libprojectM_PKG" >&5 -$as_echo_n "checking for $libprojectM_PKG... " >&6; } - if test x"$with_libprojectM" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libprojectM" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libprojectM_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "$libprojectM_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libprojectM_LIBS=`$PKG_CONFIG --libs --silence-errors "$libprojectM_PKG"` - libprojectM_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "$libprojectM_PKG"` - libprojectM_LIBDIRS=` - echo "$libprojectM_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libprojectM_LIBDIRS"; then - LIBS="$LIBS $libprojectM_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libprojectM_HAVE="yes" - if test -n "$libprojectM_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libprojectM_LIBDIRS)" >&5 -$as_echo "yes ($libprojectM_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libprojectM_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xno = xyes -o x"$with_libprojectM" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "$libprojectM_PKG"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libprojectM=nocheck and the environment -variables libprojectM_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - - if test x$libprojectM_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of libprojectM" >&5 -$as_echo_n "checking version of libprojectM... " >&6; } - - - # check if variable was defined by the user - if test -z "$libprojectM_VERSION"; then - # if not, get it from pkg-config - if test x$libprojectM_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libprojectM_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "$libprojectM_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libprojectM_VERSION=`$PKG_CONFIG --modversion --silence-errors "$libprojectM_PKG"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "$libprojectM_PKG"` - as_fn_error $? " - -$err_msg - -If --with-libprojectM=nocheck is defined the environment variable -libprojectM_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$libprojectM_VERSION]" >&5 -$as_echo "[$libprojectM_VERSION]" >&6; } - else - libprojectM_VERSION="0.0.0" - fi - - version=$libprojectM_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $libprojectM_VERSION_INT -le 60000000; then - if test $libprojectM_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $libprojectM_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $libprojectM_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $libprojectM_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $libprojectM_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $libprojectM_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $libprojectM_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $libprojectM_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $libprojectM_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $libprojectM_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $libprojectM_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $libprojectM_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $libprojectM_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $libprojectM_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $libprojectM_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $libprojectM_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - - if [ x$libprojectM_HAVE = xyes ]; then - DEFINE_HAVE_PROJECTM=DEFINE - else - DEFINE_HAVE_PROJECTM=UNDEF - fi - - -# get projectM include-dir - - - # check if variable was defined by the user - if test -z "$libprojectM_INCLUDEDIR"; then - # if not, get it from pkg-config - if test x$libprojectM_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libprojectM_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "$libprojectM_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libprojectM_INCLUDEDIR=`$PKG_CONFIG --variable=includedir --silence-errors "$libprojectM_PKG"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "$libprojectM_PKG"` - as_fn_error $? " - -$err_msg - -If --with-libprojectM=nocheck is defined the environment variable -libprojectM_INCLUDEDIR -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - -# get projectM data-dir (for preset- and font-dir) - - - # check if variable was defined by the user - if test -z "$libprojectM_DATADIR"; then - # if not, get it from pkg-config - if test x$libprojectM_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libprojectM_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "$libprojectM_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libprojectM_DATADIR=`$PKG_CONFIG --variable=pkgdatadir --silence-errors "$libprojectM_PKG"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "$libprojectM_PKG"` - as_fn_error $? " - -$err_msg - -If --with-libprojectM=nocheck is defined the environment variable -libprojectM_DATADIR -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - -# check if we need the c-wrapper -if [ "$libprojectM_VERSION_MAJOR" -ge 1 ]; then - libprojectM_USE_CWRAPPER=yes -else - libprojectM_USE_CWRAPPER=no -fi -USE_PROJECTM_CWRAPPER=$libprojectM_USE_CWRAPPER - - -# find portaudio - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for portaudio-2.0" >&5 -$as_echo_n "checking for portaudio-2.0... " >&6; } - if test x"$with_portaudio" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_portaudio" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"portaudio-2.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "portaudio-2.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - portaudio_LIBS=`$PKG_CONFIG --libs --silence-errors "portaudio-2.0"` - portaudio_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "portaudio-2.0"` - portaudio_LIBDIRS=` - echo "$portaudio_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$portaudio_LIBDIRS"; then - LIBS="$LIBS $portaudio_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - portaudio_HAVE="yes" - if test -n "$portaudio_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($portaudio_LIBDIRS)" >&5 -$as_echo "yes ($portaudio_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - portaudio_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xyes = xyes -o x"$with_portaudio" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "portaudio-2.0"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-portaudio=nocheck and the environment -variables portaudio_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - - if test x$portaudio_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of portaudio" >&5 -$as_echo_n "checking version of portaudio... " >&6; } - - - # check if variable was defined by the user - if test -z "$portaudio_VERSION"; then - # if not, get it from pkg-config - if test x$portaudio_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"portaudio-2.0\""; } >&5 - ($PKG_CONFIG --exists --print-errors "portaudio-2.0") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - portaudio_VERSION=`$PKG_CONFIG --modversion --silence-errors "portaudio-2.0"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "portaudio-2.0"` - as_fn_error $? " - -$err_msg - -If --with-portaudio=nocheck is defined the environment variable -portaudio_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$portaudio_VERSION]" >&5 -$as_echo "[$portaudio_VERSION]" >&6; } - else - portaudio_VERSION="0.0.0" - fi - - version=$portaudio_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $portaudio_VERSION_INT -le 60000000; then - if test $portaudio_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $portaudio_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $portaudio_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $portaudio_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $portaudio_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $portaudio_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $portaudio_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $portaudio_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $portaudio_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $portaudio_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $portaudio_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $portaudio_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $portaudio_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $portaudio_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $portaudio_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $portaudio_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - - if [ x$portaudio_HAVE = xyes ]; then - DEFINE_HAVE_PORTAUDIO=DEFINE - else - DEFINE_HAVE_PORTAUDIO=UNDEF - fi - - - -# find pcre -libpcre_PKG="libpcre" - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $libpcre_PKG" >&5 -$as_echo_n "checking for $libpcre_PKG... " >&6; } - if test x"$with_libpcre" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_libpcre" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libpcre_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "$libpcre_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - libpcre_LIBS=`$PKG_CONFIG --libs --silence-errors "$libpcre_PKG"` - libpcre_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "$libpcre_PKG"` - libpcre_LIBDIRS=` - echo "$libpcre_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$libpcre_LIBDIRS"; then - LIBS="$LIBS $libpcre_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - libpcre_HAVE="yes" - if test -n "$libpcre_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($libpcre_LIBDIRS)" >&5 -$as_echo "yes ($libpcre_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - libpcre_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xno = xyes -o x"$with_libpcre" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "$libpcre_PKG"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-libpcre=nocheck and the environment -variables libpcre_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - - if test x$libpcre_HAVE = xyes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of libpcre" >&5 -$as_echo_n "checking version of libpcre... " >&6; } - - - # check if variable was defined by the user - if test -z "$libpcre_VERSION"; then - # if not, get it from pkg-config - if test x$libpcre_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libpcre_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "$libpcre_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libpcre_VERSION=`$PKG_CONFIG --modversion --silence-errors "$libpcre_PKG"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "$libpcre_PKG"` - as_fn_error $? " - -$err_msg - -If --with-libpcre=nocheck is defined the environment variable -libpcre_VERSION -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: [$libpcre_VERSION]" >&5 -$as_echo "[$libpcre_VERSION]" >&6; } - else - libpcre_VERSION="0.0.0" - fi - - version=$libpcre_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo_n "checking version of ffmpeg... " >&6; } - if test $libpcre_VERSION_INT -le 60000000; then - if test $libpcre_VERSION_INT -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $libpcre_VERSION_INT -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $libpcre_VERSION_INT -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $libpcre_VERSION_INT -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $libpcre_VERSION_INT -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $libpcre_VERSION_INT -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $libpcre_VERSION_INT -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $libpcre_VERSION_INT -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $libpcre_VERSION_INT -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $libpcre_VERSION_INT -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $libpcre_VERSION_INT -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $libpcre_VERSION_INT -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $libpcre_VERSION_INT -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $libpcre_VERSION_INT -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $libpcre_VERSION_INT -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $libpcre_VERSION_INT -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi - - version=$FFMPEG_VERSION - - # strip leading non-numeric tokens - # (necessary for some ffmpeg-packages in ubuntu) - # example: 0d.51.1.0 -> 51.1.0 - version=`echo $version | sed 's/^[^.]*[^0-9.][^.]*\.//'` - - # replace "." and "-" with " " and ignore trailing tokens. - # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4]. - # In addition we delete everything after the first character - # which is not 0-9. - # 1.3a4-r32 will be [maj=1, min=3, rel=0]. - read major minor release ignore <&5 -$as_echo "[$FFMPEG_VERSION]" >&6; } - fi - - - if [ x$libpcre_HAVE = xyes ]; then - DEFINE_HAVE_LIBPCRE=DEFINE - else - DEFINE_HAVE_LIBPCRE=UNDEF - fi - - -# get libpcre library dir - - - # check if variable was defined by the user - if test -z "$libpcre_LIBDIR"; then - # if not, get it from pkg-config - if test x$libpcre_HAVE = xyes; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$libpcre_PKG\""; } >&5 - ($PKG_CONFIG --exists --print-errors "$libpcre_PKG") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - libpcre_LIBDIR=`$PKG_CONFIG --variable=libdir --silence-errors "$libpcre_PKG"` -else - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "$libpcre_PKG"` - as_fn_error $? " - -$err_msg - -If --with-libpcre=nocheck is defined the environment variable -libpcre_LIBDIR -must be set to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - - -fi - fi - fi - - -# we need the soname of the pcre library -if test x"$libpcre_HAVE" = xyes; then - old_LIBS="$LIBS" - LIBS="-lpcre" - OBJDUMP="objdump" - if test x$FPC_PLATFORM = xdarwin; then - OBJDUMP="gobjdump" - fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - libpcre_LIBNAME=`$OBJDUMP -p "conftest$EXEEXT" | grep pcre | awk '{print $2}'` libpcre_LIBNAME=$libpcre_LIBNAME - -else - as_fn_error $? "failed to link" "$LINENO" 5 -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$old_LIBS" -fi - -# find portmixer - - have_lib="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for portmixer" >&5 -$as_echo_n "checking for portmixer... " >&6; } - if test x"$with_portmixer" = xnocheck; then - # do not call pkg-config, use user settings - have_lib="yes" - elif test x"$with_portmixer" != xno; then - # check if package exists - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"portmixer\""; } >&5 - ($PKG_CONFIG --exists --print-errors "portmixer") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - - have_lib="yes" - portmixer_LIBS=`$PKG_CONFIG --libs --silence-errors "portmixer"` - portmixer_LIBDIRS=`$PKG_CONFIG --libs-only-L --silence-errors "portmixer"` - portmixer_LIBDIRS=` - echo "$portmixer_LIBDIRS" | $SED 's/^[ \t]*//' | $SED 's/[ \t]*$//' -` - # add library directories to LIBS (ignore *_LIBS for now) - if test -n "$portmixer_LIBDIRS"; then - LIBS="$LIBS $portmixer_LIBDIRS" - fi - -fi - fi - if test x$have_lib = xyes; then - portmixer_HAVE="yes" - if test -n "$portmixer_LIBDIRS"; then - # show additional lib-dirs - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($portmixer_LIBDIRS)" >&5 -$as_echo "yes ($portmixer_LIBDIRS)" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - else - portmixer_HAVE="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - # check if package is required - if test xno = xyes -o x"$with_portmixer" = xyes ; then - # print error message and quit - err_msg=`$PKG_CONFIG --errors-to-stdout --print-errors "portmixer"` - as_fn_error $? " - -$err_msg - -Alternatively, you may set --with-portmixer=nocheck and the environment -variables portmixer_[...] (see configure --help) -to appropriate values to avoid the need to call pkg-config. - -See the pkg-config man page for more details. -" "$LINENO" 5 - fi - fi - - - if [ x$portmixer_HAVE = xyes ]; then - DEFINE_HAVE_PORTMIXER=DEFINE - else - DEFINE_HAVE_PORTMIXER=UNDEF - fi - - - -# determine linker-flags -if test x$FPC_PLATFORM = xdarwin; then - LDFLAGS="-macosx_version_min 10.4 -undefined dynamic_lookup -headerpad_max_install_names -L/usr/X11/lib" -fi -#LIBS= - - - -# ----------------------------------------- -# create output files -# ----------------------------------------- - -ac_config_files="$ac_config_files Makefile" - -ac_config_files="$ac_config_files src/Makefile" - -ac_config_files="$ac_config_files src/config-$FPC_PLATFORM.inc:src/config.inc.in" - -if [ x$libprojectM_USE_CWRAPPER = xyes ]; then - ac_config_files="$ac_config_files src/lib/projectM/cwrapper/Makefile" - -fi -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by ultrastardx $as_me 1.1, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Report bugs to ." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -ultrastardx config.status 1.1 -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -MKDIR_P='$MKDIR_P' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; - "src/config-$FPC_PLATFORM.inc") CONFIG_FILES="$CONFIG_FILES src/config-$FPC_PLATFORM.inc:src/config.inc.in" ;; - "src/lib/projectM/cwrapper/Makefile") CONFIG_FILES="$CONFIG_FILES src/lib/projectM/cwrapper/Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - - -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - - print line -} - -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES " -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac - ac_MKDIR_P=$MKDIR_P - case $MKDIR_P in - [\\/$]* | ?:[\\/]* ) ;; - */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -s&@MKDIR_P@&$ac_MKDIR_P&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - - - - esac - -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - -# ----------------------------------------- -# show results -# ----------------------------------------- - -{ $as_echo "$as_me:${as_lineno-$LINENO}: - -!!! -!!! Configuration of $PACKAGE_NAME $PACKAGE_VERSION done! -!!! -!!! Type \"make\" to compile and -!!! \"make install\" to install it afterwards. -!!! -!!! For further information on $PACKAGE_NAME visit: -!!! $PACKAGE_WEBSITE -!!! -!!! In case you find a bug send a bugreport to: -!!! $PACKAGE_BUGREPORT -!!! You might as well ask for help at the IRC-Channel -!!! $PACKAGE_IRC -!!! -" >&5 -$as_echo "$as_me: - -!!! -!!! Configuration of $PACKAGE_NAME $PACKAGE_VERSION done! -!!! -!!! Type \"make\" to compile and -!!! \"make install\" to install it afterwards. -!!! -!!! For further information on $PACKAGE_NAME visit: -!!! $PACKAGE_WEBSITE -!!! -!!! In case you find a bug send a bugreport to: -!!! $PACKAGE_BUGREPORT -!!! You might as well ask for help at the IRC-Channel -!!! $PACKAGE_IRC -!!! -" >&6;} - -if test x$FPC_PLATFORM = xdarwin; then - { $as_echo "$as_me:${as_lineno-$LINENO}: -!!! Special target for OSX are: -!!! \"make macosx-standalone-app\" to create a standalone .app -!!! \"make macosx-dmg\" to create a dmg archive with standalone .app -!!! Selected packaging: $USE_OSX_PACKAGING with libdir $USE_OSX_PACKAGING_LIBDIR - " >&5 -$as_echo "$as_me: -!!! Special target for OSX are: -!!! \"make macosx-standalone-app\" to create a standalone .app -!!! \"make macosx-dmg\" to create a dmg archive with standalone .app -!!! Selected packaging: $USE_OSX_PACKAGING with libdir $USE_OSX_PACKAGING_LIBDIR - " >&6;} -fi - - diff --git a/configure.ac b/configure.ac index 6c4f7181..49ebf57c 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ # -# ultrastardx configure.ac script +# worldparty configure.ac script # # by UltraStar Deluxe Team # @@ -15,19 +15,16 @@ AC_PREREQ(2.61) # Init autoconf -AC_INIT([ultrastardx], - [1.1], - [http://sourceforge.net/tracker/?group_id=191560&atid=937872]) +AC_INIT([WorldParty], + m4_esyscmd_s([cat VERSION]), + [https://github.com/ultrastares/usdxworldparty/]) # specify the website here -PACKAGE_WEBSITE="http://www.ultrastardeluxe.org/" +PACKAGE_WEBSITE="http://ultrastar-es.org/" AC_SUBST(PACKAGE_WEBSITE) -# specify the IRC-channel here -PACKAGE_IRC="#ultrastardx at quakenet.org" -AC_SUBST(PACKAGE_IRC) AC_CONFIG_MACRO_DIR([dists/autogen/m4]) # Specify a source-file so autoconf can check if the source-dir exists -AC_CONFIG_SRCDIR(src/ultrastardx.dpr) +AC_CONFIG_SRCDIR(src/WorldParty.dpr) # Set the path to install-sh AC_CONFIG_AUX_DIR(dists/autogen) @@ -102,7 +99,7 @@ if [[ x$enable_global != x -o x$enable_local != x ]]; then !!! NOTE: --enable-global and --enable-local are deprecated: !!! - global build: just type "make" and "make install" -!!! - local build: just type "make" and start "game/ultrastardx" +!!! - local build: just type "make" and start "game/WorldParty" ]) sleep 2 fi @@ -142,9 +139,18 @@ AC_SUBST(USE_OSX_PACKAGING_LIBDIR, $USE_OSX_PACKAGING_LIBDIR) AC_CANONICAL_HOST # find and test the freepascal compiler -# sets PFLAGS, FPC_VERSION, FPC_DEBUG, etc. +# sets PFLAGS, FPC_ +, FPC_DEBUG, etc. AC_PROG_FPC +if [[ "$FPC_VERSION_MAJOR" -lt 3 ]]; then + AC_MSG_ERROR([ +!!! fpc (the free Pascal compiler) is required in at least +!!! version 3.0.0, but only version $FPC_VERSION was found. +!!! Please install a newer fpc version. +]) +fi + # find and test the C compiler (for C-libs and wrappers) AC_PROG_CC AC_LANG([C]) @@ -206,17 +212,17 @@ PKG_HAVE([sqlite3], [sqlite3], yes) # Archlinux aur package for 5.3 use lua5.3.pc in order # to make it work alongside the 5.2 version. PKG_HAVE([lua], [lua5.3], check) -lua_lib_name="lua5.3" +lua_LIB_NAME="lua5.3" if [[ x$lua_HAVE = xyes ]]; then PKG_VERSION([lua], [lua5.3]) else PKG_HAVE([lua], [lua5.2], check) - lua_lib_name="lua5.2" + lua_LIB_NAME="lua5.2" if [[ x$lua_HAVE = xyes ]]; then PKG_VERSION([lua], [lua5.2]) else PKG_HAVE([lua], [lua5.1], check) - lua_lib_name="lua5.1" + lua_LIB_NAME="lua5.1" if [[ x$lua_HAVE = xyes ]]; then PKG_VERSION([lua], [lua5.1]) else @@ -264,6 +270,10 @@ PKG_HAVE([libswscale], [libswscale], no) PKG_VERSION([libswscale], [libswscale]) AC_SUBST_DEFINE(HAVE_SWSCALE, $libswscale_HAVE) +PKG_HAVE([libswresample], [libswresample], no) +PKG_VERSION([libswresample], [libswresample]) +AC_SUBST_DEFINE(HAVE_SWRESAMPLE, $libswresample_HAVE) + # find projectM version libprojectM_PKG="libprojectM >= 0.98" @@ -353,8 +363,6 @@ AC_MSG_NOTICE([ !!! !!! In case you find a bug send a bugreport to: !!! $PACKAGE_BUGREPORT -!!! You might as well ask for help at the IRC-Channel -!!! $PACKAGE_IRC !!! ]) diff --git a/dists/autogen/get-ffmpeg-versions.sh b/dists/autogen/get-ffmpeg-versions.sh new file mode 100644 index 00000000..9184b69e --- /dev/null +++ b/dists/autogen/get-ffmpeg-versions.sh @@ -0,0 +1,29 @@ +#!/bin/sh + +DIR=$(dirname $0)/../../ +cd "$DIR/src/lib/" + +FFMPEG_VERSIONS=$(ls -d1 ffmpeg* | sort -rV) + +for version in $FFMPEG_VERSIONS; do + + grep -e 'LIBAVUTIL_\(MIN\|MAX\)_VERSION_.*=' $version/avutil.pas | tr -d '\n' | \ + sed -e 's/ *LIBAVUTIL_\(MIN\|MAX\)_VERSION_MAJOR *= *\([0-9]*\);.*\1_VERSION_MINOR *= *\([0-9]*\);.*\1_VERSION_RELEASE *= *\([0-9]*\);/\1 \2 \3 \4\n/g' | \ + { + echo -n $version + while read mode major minor release ; do + printf " %s %02d%03d%03d " "$mode" "$major" "$minor" "$release" + done + echo + } +done | \ +sed \ + -e 's/MIN/$libavutil_VERSION_INT -ge/' \ + -e 's/MAX/$libavutil_VERSION_INT -le/' \ + -e 's/-le \([0-9]*\) .* -ge \1/-eq \1/' \ + -e 's/^ffmpeg-\([0-9.]*\) \(.*\) /elif test \2; then\n FFMPEG_VERSION="\1"/' \ + -e 's/^ffmpeg \(.*\) /elif test \1; then\n FFMPEG_VERSION="0"/' \ + -e 's/\([0-9]\) *$libavutil/\1 -a $libavutil/' \ + -e '1s/^elif/if /' \ + -e 's/libavutil_VERSION_INT/[$1][_VERSION_INT]/g' \ + -e 's/^/ /gm' diff --git a/dists/autogen/m4/pkg_config_utils.m4 b/dists/autogen/m4/pkg_config_utils.m4 index 8fe5cf2a..08f14a42 100644 --- a/dists/autogen/m4/pkg_config_utils.m4 +++ b/dists/autogen/m4/pkg_config_utils.m4 @@ -97,52 +97,59 @@ AC_DEFUN([PKG_VERSION], fi AX_EXTRACT_VERSION([$1], $[$1][_VERSION]) - # for avutil: map library version to ffmpeg version - if test $1 = "libavutil"; then + ifelse($1, [libavutil], [ + # map avutil library version to ffmpeg version AC_MSG_CHECKING([version of ffmpeg]) - if test $[$1][_VERSION_INT] -le 60000000; then - if test $[$1][_VERSION_INT] -ge 54031100; then - FFMPEG_VERSION="2.8" - elif test $[$1][_VERSION_INT] -ge 54027100; then - FFMPEG_VERSION="2.7" - elif test $[$1][_VERSION_INT] -ge 54020100; then - FFMPEG_VERSION="2.6" - elif test $[$1][_VERSION_INT] -ge 54015100; then - FFMPEG_VERSION="2.5" - elif test $[$1][_VERSION_INT] -ge 54007001; then - FFMPEG_VERSION="2.4" - elif test $[$1][_VERSION_INT] -ge 52066100; then - FFMPEG_VERSION="2.2" - elif test $[$1][_VERSION_INT] -ge 52048100; then - FFMPEG_VERSION="2.1" - elif test $[$1][_VERSION_INT] -ge 52038100; then - FFMPEG_VERSION="2.0" - elif test $[$1][_VERSION_INT] -ge 52018100; then - FFMPEG_VERSION="1.2" - elif test $[$1][_VERSION_INT] -ge 52013100; then - FFMPEG_VERSION="1.1" - elif test $[$1][_VERSION_INT] -ge 51073101; then - FFMPEG_VERSION="1.0" - elif test $[$1][_VERSION_INT] -ge 51054100; then - FFMPEG_VERSION="0.11" - elif test $[$1][_VERSION_INT] -ge 51034101; then - FFMPEG_VERSION="0.10" - elif test $[$1][_VERSION_INT] -ge 51032000; then - FFMPEG_VERSION="0.9" - elif test $[$1][_VERSION_INT] -ge 51009001; then - FFMPEG_VERSION="0.8" - elif test $[$1][_VERSION_INT] -ge 50043000; then - FFMPEG_VERSION="0.7" - else - FFMPEG_VERSION="0" - fi - else - FFMPEG_VERSION="0" - fi + if test $[$1][_VERSION_INT] -eq 55034100; then + FFMPEG_VERSION="3.2" + elif test $[$1][_VERSION_INT] -le 55028100 -a $[$1][_VERSION_INT] -ge 55027100; then + FFMPEG_VERSION="3.1" + elif test $[$1][_VERSION_INT] -eq 55017103; then + FFMPEG_VERSION="3.0" + elif test $[$1][_VERSION_INT] -le 54099100 -a $[$1][_VERSION_INT] -ge 54030100; then + FFMPEG_VERSION="2.8" + elif test $[$1][_VERSION_INT] -le 54030100 -a $[$1][_VERSION_INT] -ge 54027100; then + FFMPEG_VERSION="2.7" + elif test $[$1][_VERSION_INT] -eq 54020100; then + FFMPEG_VERSION="2.6" + elif test $[$1][_VERSION_INT] -eq 54015100; then + FFMPEG_VERSION="2.5" + elif test $[$1][_VERSION_INT] -eq 54007100; then + FFMPEG_VERSION="2.4" + elif test $[$1][_VERSION_INT] -eq 52066100; then + FFMPEG_VERSION="2.2" + elif test $[$1][_VERSION_INT] -le 52048101 -a $[$1][_VERSION_INT] -ge 52048100; then + FFMPEG_VERSION="2.1" + elif test $[$1][_VERSION_INT] -le 52038100 -a $[$1][_VERSION_INT] -ge 52038000; then + FFMPEG_VERSION="2.0" + elif test $[$1][_VERSION_INT] -le 52018100 -a $[$1][_VERSION_INT] -ge 52018000; then + FFMPEG_VERSION="1.2" + elif test $[$1][_VERSION_INT] -le 52013100 -a $[$1][_VERSION_INT] -ge 52013000; then + FFMPEG_VERSION="1.1" + elif test $[$1][_VERSION_INT] -le 51073101 -a $[$1][_VERSION_INT] -ge 51073000; then + FFMPEG_VERSION="1.0" + elif test $[$1][_VERSION_INT] -le 51054100 -a $[$1][_VERSION_INT] -ge 51054000; then + FFMPEG_VERSION="0.11" + elif test $[$1][_VERSION_INT] -le 51035100 -a $[$1][_VERSION_INT] -ge 51034101; then + FFMPEG_VERSION="0.10" + elif test $[$1][_VERSION_INT] -eq 51032000; then + FFMPEG_VERSION="0.9" + elif test $[$1][_VERSION_INT] -le 51022002 -a $[$1][_VERSION_INT] -ge 51009001; then + FFMPEG_VERSION="0.8" + elif test $[$1][_VERSION_INT] -eq 50043000; then + FFMPEG_VERSION="0.7" + elif test $[$1][_VERSION_INT] -le 50024000 -a $[$1][_VERSION_INT] -ge 49000001; then + FFMPEG_VERSION="0" + else + AC_MSG_ERROR([ + +Unsupported ffmpeg version, most recent version supported is 3.2. +]) + fi AX_EXTRACT_VERSION(FFMPEG, $FFMPEG_VERSION) AC_SUBST(FFMPEG_VERSION) AC_MSG_RESULT(@<:@$FFMPEG_VERSION@:>@) - fi + ]) ]) # SYNOPSIS diff --git a/dists/delphi2005/readme.txt b/dists/delphi2005/readme.txt deleted file mode 100644 index 64168d3c..00000000 --- a/dists/delphi2005/readme.txt +++ /dev/null @@ -1,5 +0,0 @@ -(Turbo-)Delphi 2005/2006 Project file --------------------------------------- -1. Copy ultrastardx.bdsproj to /src -2. Double-click /src/ultrastardx.bdsproj - diff --git a/dists/delphi2005/ultrastardx.bdsproj b/dists/delphi2005/ultrastardx.bdsproj deleted file mode 100644 index 876ac651..00000000 --- a/dists/delphi2005/ultrastardx.bdsproj +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - - - ultrastardx.dpr - - - 7.0 - - - 8 - 0 - 1 - 1 - 0 - 0 - 1 - 1 - 1 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - 0 - 0 - 0 - 0 - 0 - 1 - 0 - 1 - 1 - 1 - True - True - WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; - - False - - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - True - False - False - False - True - True - True - True - True - True - - - - 0 - 0 - False - 1 - False - False - False - 16384 - 1048576 - 4194304 - - - - ..\game - ..\build\delphi-win - - - lib\JEDI-SDL\SDL\Pas - vclx;vcl;rtl;vclactnband - - - False - - - - - - False - - - True - False - - - - $00000000 - - - - False - False - 1 - 0 - 0 - 0 - False - False - False - False - False - 1031 - 1252 - - - - - 1.0.0.0 - - - - - - 1.0.0.0 - - - - diff --git a/dists/delphi7/readme.txt b/dists/delphi7/readme.txt deleted file mode 100644 index fa77699b..00000000 --- a/dists/delphi7/readme.txt +++ /dev/null @@ -1,5 +0,0 @@ -Delphi 7 Project file --------------------------------------- -1. Copy ultrastardx.dof to /src -2. Double-click /src/ultrastardx.dpr - diff --git a/dists/delphi7/ultrastardx.dof b/dists/delphi7/ultrastardx.dof deleted file mode 100644 index d3922119..00000000 --- a/dists/delphi7/ultrastardx.dof +++ /dev/null @@ -1,144 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir=..\game -UnitOutputDir=..\build\delphi-win -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath=lib\JEDI-SDL\SDL\Pas -Packages=vclx;vcl;rtl;vcldb;dbrtl;dsnap;bdertl;dss;teeui;teedb;tee;vcldbx;vclactnband;adortl;visualclx;visualdbclx;dsnapcon;ibxpress -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1031 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=1 -Item0=lib\JEDI-SDL\SDL\Pas -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\build\delphi-win -[HistoryLists\hlOutputDirectorry] -Count=1 -Item0=..\game diff --git a/dists/linux/.gitignore b/dists/linux/.gitignore new file mode 100644 index 00000000..1e09d9a0 --- /dev/null +++ b/dists/linux/.gitignore @@ -0,0 +1,6 @@ +deps +dl +output +prefix +*.tar.xz +*.log diff --git a/dists/linux/README.md b/dists/linux/README.md new file mode 100644 index 00000000..5ca49870 --- /dev/null +++ b/dists/linux/README.md @@ -0,0 +1,21 @@ +UltraStar Deluxe WorldParty builder for Linux +============================================= + +These scripts builds USDX and its dependencies. It copies the required dynamic libraries and outputs a distro-independent package that can be extracted and launched. + +How to use +---------- + +First you need to install a few dependencies: + +`curl chrpath build-essential fpc lua opencv` + +To build the game, run `make`. + +To clean up, run `make clean`. This will only remove the built compressed file and build dir. + +To do a complete clean, run `make distclean`. This will delete downloaded dependencies, build prefix and build. Run this to free disk space. + +`launch.sh` is copied to the game dir after build and it is what you use to launch the game. + +`make compress` creates a compressed archive that can be distributed and `make upload` uploads it to transfer.sh and returns a link to it. diff --git a/dists/linux/build-deps.sh b/dists/linux/build-deps.sh new file mode 100644 index 00000000..e638208e --- /dev/null +++ b/dists/linux/build-deps.sh @@ -0,0 +1,170 @@ +#!/usr/bin/env bash + +set -e + +root=$(pwd) + +SRC="$root/deps" +export SHELL=/bin/bash +export PREFIX="$root/prefix" +export PATH="$PREFIX/bin:$PATH" +export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH" +PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" + +echo "Building dependencies" +mkdir -pv "$PREFIX" + +# multicore compilation +makearg="-j$(nproc)" + +rm -rf "$PREFIX" + +echo "Building libpng" +cd "$SRC/libpng" +./configure --prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static +make $makearg +make install +make distclean + +echo "Building FreeType" +cd "$SRC/freetype" +./configure --prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static --with-harfbuzz=no --with-png=yes --with-bzip2=no +make $makearg +make install +make distclean + +echo "Building SDL2" +cd "$SRC/SDL2" +bash ./autogen.sh +mkdir -p build +cd build +../configure --prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" \ + --enable-sdl-dlopen \ + --disable-arts --disable-esd --disable-nas \ + --enable-alsa --enable-pulseaudio-shared \ + --enable-video-wayland --enable-wayland-shared \ + --enable-x11-shared --enable-ibus --enable-fcitx --enable-ime \ + --disable-rpath --disable-input-tslib +make $makearg +make install +make distclean + +echo "Building SDL2_mixer" +cd "$SRC/SDL2_mixer" +bash ./autogen.sh +./configure --prefix="$PREFIX" --with-sdl-prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static --disable-music-mod --disable-music-midi --disable-smpegtest --disable-music-mp3 --disable-music-ogg --disable-music-flac --disable-music-midi +make $makearg +make install +make distclean + +echo "Building SDL2_image" +cd "$SRC/SDL2_image" +bash ./autogen.sh +./configure --prefix="$PREFIX" --with-sdl-prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static +make $makearg +make install +make distclean + +echo "Building SDL2_ttf" +cd "$SRC/SDL2_ttf" +bash ./autogen.sh +./configure --prefix="$PREFIX" --with-sdl-prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static +make $makearg +make install +make distclean + +echo "Building SDL2_net" +cd "$SRC/SDL2_net" +bash ./autogen.sh +./configure --prefix="$PREFIX" --with-sdl-prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static --disable-gui +make $makearg +make install +make distclean + +echo "Building SDL2_gfx" +cd "$SRC/SDL2_gfx" +bash ./autogen.sh +./configure --prefix="$PREFIX" --with-sdl-prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static +make $makearg +make install +make distclean + +echo "Building SQLite" +cd "$SRC/sqlite" +./configure --prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static +make $makearg +make install +make distclean + +echo "Building PortAudio" +cd "$SRC/portaudio" +./configure --prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static +make $makearg +make install +make distclean + +# echo "Building PCRE" +# cd "$SRC/pcre" +# ./configure --prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static --enable-utf --enable-unicode-properties +# make $makearg +# make install +# make distclean + +echo "Building Yasm" +cd "$SRC/yasm" +./configure --prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" --disable-static +make $makearg +make install +make distclean + + +echo "Building FFmpeg" +cd "$SRC/ffmpeg" +# disable vaapi until it can be tested +./configure --prefix="$PREFIX" \ + --enable-gpl \ + --disable-static \ + --enable-shared \ + --disable-programs \ + --disable-doc \ + --disable-encoders \ + --disable-xlib \ + --disable-libxcb \ + --disable-libxcb-shm \ + --disable-libx264 \ + --disable-libx265 \ + --disable-network \ + --disable-debug \ + --disable-indevs \ + --disable-outdevs \ + --disable-postproc \ + --disable-muxers \ + --disable-bsfs \ + --disable-filters \ + --disable-protocols \ + --disable-lzma \ + --disable-bzlib \ + --disable-vaapi +make $makearg +make install +make distclean + +# echo "Building projectM" +# cd "$SRC/projectm" +# mkdir -p build +# cd build +# cmake \ +# -Wno-dev \ +# -DINCLUDE-PROJECTM-QT=0 \ +# -DINCLUDE-PROJECTM-PULSEAUDIO=0 \ +# -DINCLUDE-PROJECTM-LIBVISUAL=0 \ +# -DINCLUDE-PROJECTM-JACK=0 \ +# -DINCLUDE-PROJECTM-TEST=0 \ +# -DINCLUDE-PROJECTM-XMMS=0 \ +# -DCMAKE_INSTALL_PREFIX="$PREFIX" \ +# -DCMAKE_BUILD_TYPE=Release \ +# .. +# make +# make install + +touch "$PREFIX/built_libs" diff --git a/dists/linux/build.sh b/dists/linux/build.sh new file mode 100644 index 00000000..6064489a --- /dev/null +++ b/dists/linux/build.sh @@ -0,0 +1,87 @@ +#!/usr/bin/env bash + +set -e + +root=$(pwd) + +SRC="$root/deps" +OUTPUT="$root/output" +export SHELL=/bin/bash +export PREFIX="$root/prefix" +export PATH="$PREFIX/bin:$PATH" +export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH" +PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" + +echo "Building UltraStar Deluxe WorldParty" +cd "$root/../.." +bash ./autogen.sh +./configure --prefix="$PREFIX" PKG_CONFIG_PATH="$PKG_CONFIG_PATH" # --with-libprojectM +sleep 1 +# -rpath \\\$\$ORIGIN/$1 +make LDFLAGS="-O2 --sort-common --as-needed -z relro -shared-libgcc" datadir="./data" prefix="" bindir="" INSTALL_DATADIR="./data" +rm -rf "$OUTPUT" +sleep 1 +make DESTDIR="$OUTPUT/" datadir="/data" prefix="" bindir="" INSTALL_DATADIR="./data" install +make clean + +mkdir -p "$OUTPUT/lib" + +scan_libs() { + if [ ! -f "$1" ]; then return; fi + local libs=$(objdump -x "$1" | awk '$1 == "NEEDED" { print $2 }' | grep -E -v '(libc[^_a-zA-Z0-9])|(libm[^_a-zA-Z0-9])|libpthread|(librt[^_a-zA-Z0-9])|(libdl[^_a-zA-Z0-9])|(libcrypt[^_a-zA-Z0-9])|(libutil[^_a-zA-Z0-9])|(libnsl[^_a-zA-Z0-9])|(libresolv[^_a-zA-Z0-9])|libasound|libglib|libgcc_s|libX11|ld-linux|(libstdc\+\+[^_a-zA-Z0-9])|(libz[^_a-zA-Z0-9])') + if [ -z "$libs" ]; then return; fi + local lddoutput=$(ldd "$1") + #echo $3${1##*/} + local indent=" $4" + local IFS=$'\n' + while read -r file + do + if [ -z "$file" ]; then continue; fi + local filepath=$(echo "$lddoutput" | grep -F "$file" | awk '{print $3}') + if [ -e "$filepath" ]; then + echo "$indent$file" + if [ -e "$filepath" ] && [ ! -e "$2/$file" ]; then + cp "$filepath" "$2/" + scan_libs "$filepath" "$2" "" "$indent" + fi + fi + if [ ! -e "$filepath" ]; then + echo "$filepath not found" + fi + done <<< "$libs" + + # handle extras + local IFS=' ' + while read -r file + do + if [ -z "$file" ]; then continue; fi + local filepath="$PREFIX/lib/$file" + if [ -e "$filepath" ] && [ ! -e "$2/$file" ]; then + echo "$indent$file" + cp "$filepath" "$2/" + scan_libs "$filepath" "$2" "" "$indent" + fi + if [ ! -e "$filepath" ]; then + echo "$filepath not found" + fi + done <<< "$3" +} + +echo "Scanning and copying libraries..." +scan_libs "$OUTPUT/WorldParty" "$OUTPUT/lib" | tee "$OUTPUT/lib/libs.txt" + +# strip executable +strip -s "$OUTPUT/WorldParty" +# strip libs +find "$OUTPUT/lib" -type f -name "*.so*" -exec strip -s {} \; +# remove rpath from libs +find "$OUTPUT/lib" -type f -name "*.so*" -exec chrpath --delete --keepgoing {} \; + +#IFS=$'\n' # make newlines the only separator +#for file in $(ldd output/usr/local/bin/WorldParty | awk '{print $3}' | grep -w "so") +#do +# cp -v "$file" output/usr/local/lib/ +#done + +#rm -f output/usr/local/lib/libglib* +#rm -f output/usr/local/lib/libasound* \ No newline at end of file diff --git a/dists/linux/dl.sh b/dists/linux/dl.sh new file mode 100644 index 00000000..0c756bff --- /dev/null +++ b/dists/linux/dl.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +set -e + +declare -a deps +deps+=('SDL2,https://www.libsdl.org/release/SDL2-2.0.5.tar.gz') +deps+=('SDL2_mixer,https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.1.tar.gz') +deps+=('SDL2_image,https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.1.tar.gz') +deps+=('SDL2_ttf,https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.14.tar.gz') +deps+=('SDL2_net,https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz') +deps+=('SDL2_gfx,http://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-1.0.3.tar.gz') +deps+=('sqlite,https://sqlite.org/2017/sqlite-autoconf-3170000.tar.gz') +deps+=('yasm,http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz') +deps+=('ffmpeg,https://ffmpeg.org/releases/ffmpeg-3.2.2.tar.gz') +deps+=('portaudio,http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz') +deps+=('freetype,http://download.savannah.gnu.org/releases/freetype/freetype-2.7.1.tar.gz') +deps+=('libpng,https://sourceforge.net/projects/libpng/files/libpng16/1.6.28/libpng-1.6.28.tar.gz/download') + +rm -rf deps + +echo "Downloading dependencies" +for i in "${deps[@]}"; do + IFS=',' read -a dep <<< "$i" + name="${dep[0]}" + url="${dep[1]}" + echo "Downloading $url" + mkdir -p "deps/$name" + curl --progress-bar -L "$url" | tar -xz -C "deps/$name" --strip-components=1 +done diff --git a/dists/linux/launch.sh b/dists/linux/launch.sh new file mode 100644 index 00000000..93b4ce5c --- /dev/null +++ b/dists/linux/launch.sh @@ -0,0 +1,21 @@ +#!/bin/sh +# Launch script for UltraStar Deluxe +# Set $DEBUGGER to launch the game with a debugger. + +# Change to game directory +GAMEPATH="`readlink -f "$0"`" +cd "`dirname "$GAMEPATH"`" + +# Set path to libraries and binary +BIN=./WorldParty +LIBPATH=./lib + +# Run the game, (optionally) with the debugger +LD_LIBRARY_PATH="$LIBPATH:$LD_LIBRARY_PATH" $DEBUGGER $BIN $@ + +#Generate a launcher in desktop +cat prueba > "/usr/share/applications/Ultrastar Deluxe WorldParty.Desktop" + +# Get the game's exit code, and return it. +e=$? +exit $e diff --git a/dists/ultrastardx.desktop b/dists/ultrastardx.desktop deleted file mode 100644 index ceebbfb1..00000000 --- a/dists/ultrastardx.desktop +++ /dev/null @@ -1,16 +0,0 @@ -[Desktop Entry] -Version=1.0 - -Name=UltraStar Deluxe -Comment=Karaoke program that evaluates your performance -Comment[de]=Singe Karaoke und messe dich mit anderen Spielern - -Icon=ultrastardx - -TryExec=ultrastardx -Exec=ultrastardx -StartupNotify=false -Terminal=false - -Type=Application -Categories=Game;ArcadeGame; diff --git a/game/COPYRIGHT.txt b/game/COPYRIGHT.txt deleted file mode 100644 index 950ec216..00000000 --- a/game/COPYRIGHT.txt +++ /dev/null @@ -1,50 +0,0 @@ -Ultrastar Deluxe WorldParty -Copyright (C) 2007-2016 by the following: - -"zup3r_vock" -Stefan Ludowicy "basisbit" -"Daniel20" - - -Based on UltraStar Deluxe developed by: - -Jay Binks "jaybinks" -Dirk Dunger "blindy" -Alexander Eckart "brunzel" -"eddie-0815" -Mike Gränz "mog" -Tobias Gunkel "tobigun" -"mota" -Alexander S. "s_alexander" -Karl-Michael Schindler "mischi" -Philipp Steinhardt "whiteshark" - - - -Based on UltraStar written by: -"Corvus5" - -Patches contributed by: -"d0ccrazy" -"elBandito07" -"f1fth_freed0m" -"GogolNr1" -"jekatt" -Benedikt Krueger -Holger Kuhn "hawkear" -Florian Küpper "flokuep" -Wesley Stessens "profoX" - - -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 3 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, see . \ No newline at end of file diff --git a/game/README.txt b/game/README.txt index 2f1707e4..40ec7033 100644 --- a/game/README.txt +++ b/game/README.txt @@ -1,20 +1,22 @@ -This library is distributed under the terms of the zlib license: - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - -The source is available from the SDL website: -http://www.libsdl.org/projects/SDL_mixer +Ultrastar Deluxe WorldParty comes under license GPL 3.0 + +Due to huge amount of changes, we focus all documentation at our repository. + +---------------------------------------------- +https://github.com/ultrastares/usdxworldparty +---------------------------------------------- + +You'll find there all the resources with the development. + +Feel free to send us your enhances too ;-) + +Also, you can get support about this game in our official website: + +------------------------ +http://ultrastar-es.org +------------------------ + + +Have fun, + +Ultrastar Espaa Team. \ No newline at end of file diff --git a/game/SDL2.dll b/game/SDL2.dll index 15ad52e1..2b7e3193 100644 Binary files a/game/SDL2.dll and b/game/SDL2.dll differ diff --git a/game/avatars/1.png b/game/avatars/1.png deleted file mode 100644 index afd5f426..00000000 Binary files a/game/avatars/1.png and /dev/null differ diff --git a/game/avatars/2.png b/game/avatars/2.png deleted file mode 100644 index efae813c..00000000 Binary files a/game/avatars/2.png and /dev/null differ diff --git a/game/avatars/3.png b/game/avatars/3.png deleted file mode 100644 index 250d8c96..00000000 Binary files a/game/avatars/3.png and /dev/null differ diff --git a/game/avatars/4.png b/game/avatars/4.png deleted file mode 100644 index 6ebb96d7..00000000 Binary files a/game/avatars/4.png and /dev/null differ diff --git a/game/avatars/5.png b/game/avatars/5.png deleted file mode 100644 index 2adfc71f..00000000 Binary files a/game/avatars/5.png and /dev/null differ diff --git a/game/avatars/6.png b/game/avatars/6.png deleted file mode 100644 index ebdd890f..00000000 Binary files a/game/avatars/6.png and /dev/null differ diff --git a/game/avcodec-56.dll b/game/avcodec-57.dll similarity index 75% rename from game/avcodec-56.dll rename to game/avcodec-57.dll index b298ce86..f2cb274c 100644 Binary files a/game/avcodec-56.dll and b/game/avcodec-57.dll differ diff --git a/game/avdevice-56.dll b/game/avdevice-57.dll similarity index 72% rename from game/avdevice-56.dll rename to game/avdevice-57.dll index 861c5d04..2124a53a 100644 Binary files a/game/avdevice-56.dll and b/game/avdevice-57.dll differ diff --git a/game/avfilter-5.dll b/game/avfilter-5.dll deleted file mode 100644 index 30593181..00000000 Binary files a/game/avfilter-5.dll and /dev/null differ diff --git a/game/avfilter-6.dll b/game/avfilter-6.dll new file mode 100644 index 00000000..e7646585 Binary files /dev/null and b/game/avfilter-6.dll differ diff --git a/game/avformat-56.dll b/game/avformat-56.dll deleted file mode 100644 index 4588bf63..00000000 Binary files a/game/avformat-56.dll and /dev/null differ diff --git a/game/avformat-57.dll b/game/avformat-57.dll new file mode 100644 index 00000000..39e1a567 Binary files /dev/null and b/game/avformat-57.dll differ diff --git a/game/avutil-54.dll b/game/avutil-54.dll deleted file mode 100644 index 3332ae30..00000000 Binary files a/game/avutil-54.dll and /dev/null differ diff --git a/game/avutil-55.dll b/game/avutil-55.dll new file mode 100644 index 00000000..ba98ce29 Binary files /dev/null and b/game/avutil-55.dll differ diff --git a/game/bass.dll b/game/bass.dll index a1efc04f..87cd8314 100644 Binary files a/game/bass.dll and b/game/bass.dll differ diff --git a/game/bass_fx.dll b/game/bass_fx.dll new file mode 100644 index 00000000..381fa5f8 Binary files /dev/null and b/game/bass_fx.dll differ diff --git a/game/covers/Artist/Artist#.jpg b/game/covers/Artist/Artist#.jpg deleted file mode 100644 index 53f117d1..00000000 Binary files a/game/covers/Artist/Artist#.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist0.jpg b/game/covers/Artist/Artist0.jpg deleted file mode 100644 index da8ff47d..00000000 Binary files a/game/covers/Artist/Artist0.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist1.jpg b/game/covers/Artist/Artist1.jpg deleted file mode 100644 index 386506c7..00000000 Binary files a/game/covers/Artist/Artist1.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist2.jpg b/game/covers/Artist/Artist2.jpg deleted file mode 100644 index 5de928ce..00000000 Binary files a/game/covers/Artist/Artist2.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist3.jpg b/game/covers/Artist/Artist3.jpg deleted file mode 100644 index abdbae53..00000000 Binary files a/game/covers/Artist/Artist3.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist4.jpg b/game/covers/Artist/Artist4.jpg deleted file mode 100644 index a4ac2c41..00000000 Binary files a/game/covers/Artist/Artist4.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist5.jpg b/game/covers/Artist/Artist5.jpg deleted file mode 100644 index af7de9a2..00000000 Binary files a/game/covers/Artist/Artist5.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist6.jpg b/game/covers/Artist/Artist6.jpg deleted file mode 100644 index 08fed6ca..00000000 Binary files a/game/covers/Artist/Artist6.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist7.jpg b/game/covers/Artist/Artist7.jpg deleted file mode 100644 index 2eee160f..00000000 Binary files a/game/covers/Artist/Artist7.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist8.jpg b/game/covers/Artist/Artist8.jpg deleted file mode 100644 index 86e92067..00000000 Binary files a/game/covers/Artist/Artist8.jpg and /dev/null differ diff --git a/game/covers/Artist/Artist9.jpg b/game/covers/Artist/Artist9.jpg deleted file mode 100644 index 61757ff1..00000000 Binary files a/game/covers/Artist/Artist9.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistA.jpg b/game/covers/Artist/ArtistA.jpg deleted file mode 100644 index 983a20ea..00000000 Binary files a/game/covers/Artist/ArtistA.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistB.jpg b/game/covers/Artist/ArtistB.jpg deleted file mode 100644 index ed483f97..00000000 Binary files a/game/covers/Artist/ArtistB.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistC.jpg b/game/covers/Artist/ArtistC.jpg deleted file mode 100644 index 40193397..00000000 Binary files a/game/covers/Artist/ArtistC.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistD.jpg b/game/covers/Artist/ArtistD.jpg deleted file mode 100644 index 90dae418..00000000 Binary files a/game/covers/Artist/ArtistD.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistE.jpg b/game/covers/Artist/ArtistE.jpg deleted file mode 100644 index fd36bc5b..00000000 Binary files a/game/covers/Artist/ArtistE.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistF.jpg b/game/covers/Artist/ArtistF.jpg deleted file mode 100644 index 63dfe254..00000000 Binary files a/game/covers/Artist/ArtistF.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistG.jpg b/game/covers/Artist/ArtistG.jpg deleted file mode 100644 index 1706b1c9..00000000 Binary files a/game/covers/Artist/ArtistG.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistH.jpg b/game/covers/Artist/ArtistH.jpg deleted file mode 100644 index ac808f04..00000000 Binary files a/game/covers/Artist/ArtistH.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistI.jpg b/game/covers/Artist/ArtistI.jpg deleted file mode 100644 index 67740ad5..00000000 Binary files a/game/covers/Artist/ArtistI.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistJ.jpg b/game/covers/Artist/ArtistJ.jpg deleted file mode 100644 index ef4aff91..00000000 Binary files a/game/covers/Artist/ArtistJ.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistK.jpg b/game/covers/Artist/ArtistK.jpg deleted file mode 100644 index 91ac29a9..00000000 Binary files a/game/covers/Artist/ArtistK.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistL.jpg b/game/covers/Artist/ArtistL.jpg deleted file mode 100644 index d355565f..00000000 Binary files a/game/covers/Artist/ArtistL.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistM.jpg b/game/covers/Artist/ArtistM.jpg deleted file mode 100644 index 4501c21a..00000000 Binary files a/game/covers/Artist/ArtistM.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistN.jpg b/game/covers/Artist/ArtistN.jpg deleted file mode 100644 index f0ed7adf..00000000 Binary files a/game/covers/Artist/ArtistN.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistO.jpg b/game/covers/Artist/ArtistO.jpg deleted file mode 100644 index a10c1d8b..00000000 Binary files a/game/covers/Artist/ArtistO.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistP.jpg b/game/covers/Artist/ArtistP.jpg deleted file mode 100644 index d44bc54c..00000000 Binary files a/game/covers/Artist/ArtistP.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistQ.jpg b/game/covers/Artist/ArtistQ.jpg deleted file mode 100644 index 89c4b24d..00000000 Binary files a/game/covers/Artist/ArtistQ.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistR.jpg b/game/covers/Artist/ArtistR.jpg deleted file mode 100644 index bd10622a..00000000 Binary files a/game/covers/Artist/ArtistR.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistS.jpg b/game/covers/Artist/ArtistS.jpg deleted file mode 100644 index 8a747c3a..00000000 Binary files a/game/covers/Artist/ArtistS.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistT.jpg b/game/covers/Artist/ArtistT.jpg deleted file mode 100644 index 4945e852..00000000 Binary files a/game/covers/Artist/ArtistT.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistU.jpg b/game/covers/Artist/ArtistU.jpg deleted file mode 100644 index b1ef4d8e..00000000 Binary files a/game/covers/Artist/ArtistU.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistV.jpg b/game/covers/Artist/ArtistV.jpg deleted file mode 100644 index 5941113e..00000000 Binary files a/game/covers/Artist/ArtistV.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistW.jpg b/game/covers/Artist/ArtistW.jpg deleted file mode 100644 index 40d7cd5f..00000000 Binary files a/game/covers/Artist/ArtistW.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistX.jpg b/game/covers/Artist/ArtistX.jpg deleted file mode 100644 index 5b126e5e..00000000 Binary files a/game/covers/Artist/ArtistX.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistY.jpg b/game/covers/Artist/ArtistY.jpg deleted file mode 100644 index a0d62836..00000000 Binary files a/game/covers/Artist/ArtistY.jpg and /dev/null differ diff --git a/game/covers/Artist/ArtistZ.jpg b/game/covers/Artist/ArtistZ.jpg deleted file mode 100644 index 9fc33095..00000000 Binary files a/game/covers/Artist/ArtistZ.jpg and /dev/null differ diff --git "a/game/covers/Artist/Artist\303\204.jpg" "b/game/covers/Artist/Artist\303\204.jpg" deleted file mode 100644 index 2f9ed469..00000000 Binary files "a/game/covers/Artist/Artist\303\204.jpg" and /dev/null differ diff --git "a/game/covers/Artist/Artist\303\226.jpg" "b/game/covers/Artist/Artist\303\226.jpg" deleted file mode 100644 index 056a10d2..00000000 Binary files "a/game/covers/Artist/Artist\303\226.jpg" and /dev/null differ diff --git "a/game/covers/Artist/Artist\303\234.jpg" "b/game/covers/Artist/Artist\303\234.jpg" deleted file mode 100644 index c23a902a..00000000 Binary files "a/game/covers/Artist/Artist\303\234.jpg" and /dev/null differ diff --git a/game/covers/Common copia.psd b/game/covers/Common copia.psd new file mode 100644 index 00000000..be33686d Binary files /dev/null and b/game/covers/Common copia.psd differ diff --git a/game/covers/Common/Common#.jpg b/game/covers/Common/Common#.jpg new file mode 100644 index 00000000..feb8343e Binary files /dev/null and b/game/covers/Common/Common#.jpg differ diff --git a/game/covers/Common/Common.psd b/game/covers/Common/Common.psd new file mode 100644 index 00000000..1ce61b92 Binary files /dev/null and b/game/covers/Common/Common.psd differ diff --git a/game/covers/Common/Common0.jpg b/game/covers/Common/Common0.jpg new file mode 100644 index 00000000..ee36b26d Binary files /dev/null and b/game/covers/Common/Common0.jpg differ diff --git a/game/covers/Common/Common1.jpg b/game/covers/Common/Common1.jpg new file mode 100644 index 00000000..23b977b8 Binary files /dev/null and b/game/covers/Common/Common1.jpg differ diff --git a/game/covers/Common/Common2.jpg b/game/covers/Common/Common2.jpg new file mode 100644 index 00000000..8e1401bc Binary files /dev/null and b/game/covers/Common/Common2.jpg differ diff --git a/game/covers/Common/Common3.jpg b/game/covers/Common/Common3.jpg new file mode 100644 index 00000000..49f0a8ab Binary files /dev/null and b/game/covers/Common/Common3.jpg differ diff --git a/game/covers/Common/Common4.jpg b/game/covers/Common/Common4.jpg new file mode 100644 index 00000000..2021ff7a Binary files /dev/null and b/game/covers/Common/Common4.jpg differ diff --git a/game/covers/Common/Common5.jpg b/game/covers/Common/Common5.jpg new file mode 100644 index 00000000..1097614e Binary files /dev/null and b/game/covers/Common/Common5.jpg differ diff --git a/game/covers/Common/Common6.jpg b/game/covers/Common/Common6.jpg new file mode 100644 index 00000000..3f9dcb8c Binary files /dev/null and b/game/covers/Common/Common6.jpg differ diff --git a/game/covers/Common/Common7.jpg b/game/covers/Common/Common7.jpg new file mode 100644 index 00000000..a8f6a4d5 Binary files /dev/null and b/game/covers/Common/Common7.jpg differ diff --git a/game/covers/Common/Common8.jpg b/game/covers/Common/Common8.jpg new file mode 100644 index 00000000..84fdf6c4 Binary files /dev/null and b/game/covers/Common/Common8.jpg differ diff --git a/game/covers/Common/Common9.jpg b/game/covers/Common/Common9.jpg new file mode 100644 index 00000000..7b71a58a Binary files /dev/null and b/game/covers/Common/Common9.jpg differ diff --git a/game/covers/Common/CommonA.jpg b/game/covers/Common/CommonA.jpg new file mode 100644 index 00000000..b753514f Binary files /dev/null and b/game/covers/Common/CommonA.jpg differ diff --git a/game/covers/Common/CommonB.jpg b/game/covers/Common/CommonB.jpg new file mode 100644 index 00000000..aa7348fb Binary files /dev/null and b/game/covers/Common/CommonB.jpg differ diff --git a/game/covers/Common/CommonC.jpg b/game/covers/Common/CommonC.jpg new file mode 100644 index 00000000..39751fac Binary files /dev/null and b/game/covers/Common/CommonC.jpg differ diff --git a/game/covers/Common/CommonD.jpg b/game/covers/Common/CommonD.jpg new file mode 100644 index 00000000..adfbcadc Binary files /dev/null and b/game/covers/Common/CommonD.jpg differ diff --git a/game/covers/Common/CommonE.jpg b/game/covers/Common/CommonE.jpg new file mode 100644 index 00000000..04355771 Binary files /dev/null and b/game/covers/Common/CommonE.jpg differ diff --git a/game/covers/Common/CommonF.jpg b/game/covers/Common/CommonF.jpg new file mode 100644 index 00000000..ed4f4424 Binary files /dev/null and b/game/covers/Common/CommonF.jpg differ diff --git a/game/covers/Common/CommonG.jpg b/game/covers/Common/CommonG.jpg new file mode 100644 index 00000000..d1542616 Binary files /dev/null and b/game/covers/Common/CommonG.jpg differ diff --git a/game/covers/Common/CommonH.jpg b/game/covers/Common/CommonH.jpg new file mode 100644 index 00000000..3155923f Binary files /dev/null and b/game/covers/Common/CommonH.jpg differ diff --git a/game/covers/Common/CommonI.jpg b/game/covers/Common/CommonI.jpg new file mode 100644 index 00000000..b5db3224 Binary files /dev/null and b/game/covers/Common/CommonI.jpg differ diff --git a/game/covers/Common/CommonJ.jpg b/game/covers/Common/CommonJ.jpg new file mode 100644 index 00000000..c0f2c4d7 Binary files /dev/null and b/game/covers/Common/CommonJ.jpg differ diff --git a/game/covers/Common/CommonK.jpg b/game/covers/Common/CommonK.jpg new file mode 100644 index 00000000..bd47e50b Binary files /dev/null and b/game/covers/Common/CommonK.jpg differ diff --git a/game/covers/Common/CommonL.jpg b/game/covers/Common/CommonL.jpg new file mode 100644 index 00000000..7215f360 Binary files /dev/null and b/game/covers/Common/CommonL.jpg differ diff --git a/game/covers/Common/CommonM.jpg b/game/covers/Common/CommonM.jpg new file mode 100644 index 00000000..58c92d06 Binary files /dev/null and b/game/covers/Common/CommonM.jpg differ diff --git a/game/covers/Common/CommonN.jpg b/game/covers/Common/CommonN.jpg new file mode 100644 index 00000000..09d4bd6f Binary files /dev/null and b/game/covers/Common/CommonN.jpg differ diff --git a/game/covers/Common/CommonO.jpg b/game/covers/Common/CommonO.jpg new file mode 100644 index 00000000..07e3e614 Binary files /dev/null and b/game/covers/Common/CommonO.jpg differ diff --git a/game/covers/Common/CommonP.jpg b/game/covers/Common/CommonP.jpg new file mode 100644 index 00000000..c88c7a16 Binary files /dev/null and b/game/covers/Common/CommonP.jpg differ diff --git a/game/covers/Common/CommonQ.jpg b/game/covers/Common/CommonQ.jpg new file mode 100644 index 00000000..b3a3de0f Binary files /dev/null and b/game/covers/Common/CommonQ.jpg differ diff --git a/game/covers/Common/CommonR.jpg b/game/covers/Common/CommonR.jpg new file mode 100644 index 00000000..15bc353a Binary files /dev/null and b/game/covers/Common/CommonR.jpg differ diff --git a/game/covers/Common/CommonS.jpg b/game/covers/Common/CommonS.jpg new file mode 100644 index 00000000..75e752c8 Binary files /dev/null and b/game/covers/Common/CommonS.jpg differ diff --git a/game/covers/Common/CommonT.jpg b/game/covers/Common/CommonT.jpg new file mode 100644 index 00000000..50de3505 Binary files /dev/null and b/game/covers/Common/CommonT.jpg differ diff --git a/game/covers/Common/CommonU.jpg b/game/covers/Common/CommonU.jpg new file mode 100644 index 00000000..efced566 Binary files /dev/null and b/game/covers/Common/CommonU.jpg differ diff --git a/game/covers/Common/CommonV.jpg b/game/covers/Common/CommonV.jpg new file mode 100644 index 00000000..318ca758 Binary files /dev/null and b/game/covers/Common/CommonV.jpg differ diff --git a/game/covers/Common/CommonW.jpg b/game/covers/Common/CommonW.jpg new file mode 100644 index 00000000..0add46af Binary files /dev/null and b/game/covers/Common/CommonW.jpg differ diff --git a/game/covers/Common/CommonX.jpg b/game/covers/Common/CommonX.jpg new file mode 100644 index 00000000..d31609a8 Binary files /dev/null and b/game/covers/Common/CommonX.jpg differ diff --git a/game/covers/Common/CommonY.jpg b/game/covers/Common/CommonY.jpg new file mode 100644 index 00000000..896813b1 Binary files /dev/null and b/game/covers/Common/CommonY.jpg differ diff --git a/game/covers/Common/CommonZ.jpg b/game/covers/Common/CommonZ.jpg new file mode 100644 index 00000000..cc2969f9 Binary files /dev/null and b/game/covers/Common/CommonZ.jpg differ diff --git "a/game/covers/Common/Common\303\200.jpg" "b/game/covers/Common/Common\303\200.jpg" new file mode 100644 index 00000000..cd105bea Binary files /dev/null and "b/game/covers/Common/Common\303\200.jpg" differ diff --git "a/game/covers/Common/Common\303\201.jpg" "b/game/covers/Common/Common\303\201.jpg" new file mode 100644 index 00000000..a08d2aab Binary files /dev/null and "b/game/covers/Common/Common\303\201.jpg" differ diff --git "a/game/covers/Common/Common\303\203.jpg" "b/game/covers/Common/Common\303\203.jpg" new file mode 100644 index 00000000..b625242c Binary files /dev/null and "b/game/covers/Common/Common\303\203.jpg" differ diff --git "a/game/covers/Common/Common\303\204.jpg" "b/game/covers/Common/Common\303\204.jpg" new file mode 100644 index 00000000..104a9be0 Binary files /dev/null and "b/game/covers/Common/Common\303\204.jpg" differ diff --git "a/game/covers/Common/Common\303\210.jpg" "b/game/covers/Common/Common\303\210.jpg" new file mode 100644 index 00000000..79b88426 Binary files /dev/null and "b/game/covers/Common/Common\303\210.jpg" differ diff --git "a/game/covers/Common/Common\303\211.jpg" "b/game/covers/Common/Common\303\211.jpg" new file mode 100644 index 00000000..46ca00bb Binary files /dev/null and "b/game/covers/Common/Common\303\211.jpg" differ diff --git "a/game/covers/Common/Common\303\214.jpg" "b/game/covers/Common/Common\303\214.jpg" new file mode 100644 index 00000000..82185e7a Binary files /dev/null and "b/game/covers/Common/Common\303\214.jpg" differ diff --git "a/game/covers/Common/Common\303\215.jpg" "b/game/covers/Common/Common\303\215.jpg" new file mode 100644 index 00000000..4e91b943 Binary files /dev/null and "b/game/covers/Common/Common\303\215.jpg" differ diff --git "a/game/covers/Common/Common\303\222.jpg" "b/game/covers/Common/Common\303\222.jpg" new file mode 100644 index 00000000..ac981e68 Binary files /dev/null and "b/game/covers/Common/Common\303\222.jpg" differ diff --git "a/game/covers/Common/Common\303\223.jpg" "b/game/covers/Common/Common\303\223.jpg" new file mode 100644 index 00000000..a023b9c0 Binary files /dev/null and "b/game/covers/Common/Common\303\223.jpg" differ diff --git "a/game/covers/Common/Common\303\226.jpg" "b/game/covers/Common/Common\303\226.jpg" new file mode 100644 index 00000000..18740b9a Binary files /dev/null and "b/game/covers/Common/Common\303\226.jpg" differ diff --git "a/game/covers/Common/Common\303\231.jpg" "b/game/covers/Common/Common\303\231.jpg" new file mode 100644 index 00000000..1da0ac90 Binary files /dev/null and "b/game/covers/Common/Common\303\231.jpg" differ diff --git "a/game/covers/Common/Common\303\232.jpg" "b/game/covers/Common/Common\303\232.jpg" new file mode 100644 index 00000000..0cf8617f Binary files /dev/null and "b/game/covers/Common/Common\303\232.jpg" differ diff --git "a/game/covers/Common/Common\303\234.jpg" "b/game/covers/Common/Common\303\234.jpg" new file mode 100644 index 00000000..d8f10c99 Binary files /dev/null and "b/game/covers/Common/Common\303\234.jpg" differ diff --git a/game/covers/Common/NoCover.jpg b/game/covers/Common/NoCover.jpg new file mode 100644 index 00000000..c2b4ca2b Binary files /dev/null and b/game/covers/Common/NoCover.jpg differ diff --git a/game/covers/Covers.ini b/game/covers/Covers.ini index d3647465..01df3b11 100644 --- a/game/covers/Covers.ini +++ b/game/covers/Covers.ini @@ -1,20 +1,41 @@ [Edition] + [Genre] + [Folder] + [Language] -Austrian=.\.\Language\Austrian.jpg -Bavarian=.\.\Language\Bavarian.jpg + +Thai=.\Language\Thai.jpg +Breton=.\Language\Breton.jpg +Czech=.\Language\Czech.jpg +Basque=.\Language\Basque.jpg +Galician=.\Language\Galician.jpg +Catalan=.\Language\Catalan.jpg +Kölsch=.\Language\Kölsch.jpg +Dutch=.\Language\Dutch.jpg +Croatian=.\Language\Croatian.jpg +Hindi=.\Language\Hindi.jpg +Hungarian=.\Language\Hungarian.jpg +Icelandic=.\Language\Icelandic.jpg +Persian=.\Language\Persian.jpg +Servian=.\Language\Servian.jpg +Slovak=.\Language\Eslovak.jpg +Bavarian=.\Language\Bavarian.jpg +Peruvian=.\Language\Peruvian.jpg +Portuguese=.\Language\Portuguese.jpg +Japanese=.\Language\Japanese.jpg +Austrian=.\Language\Austrian.jpg Chinese=.\Language\Chinese.jpg +Korean=.\Language\Korean.jpg Danish=.\Language\Danish.jpg -Dutch=.\Language\Dutch.jpg English=.\Language\English.jpg -Finish=.\Language\Finish.jpg +Scat=.\Language\Scat.jpg +Latin=.\Language\Latin.jpg French=.\Language\French.jpg German=.\Language\German.jpg Greek=.\Language\Greek.jpg Italian=.\Language\Italian.jpg -Japanese=.\Language\Japanese.jpg -Klsch=.\Language\Klsch.jpg Norwegian=.\Language\Norwegian.jpg Peruvian=.\Language\Peruvian.jpg Polish=.\Language\Polish.jpg @@ -22,92 +43,115 @@ Romanian=.\Language\Romanian.jpg Russian=.\Language\Russian.jpg Slovenian=.\Language\Slovenian.jpg Spanish=.\Language\Spanish.jpg +Español=.\Language\Spanish.jpg Swedish=.\Language\Swedish.jpg +Finland=.\Language\Finland.jpg Turkish=.\Language\Turkish.jpg + [Artist] -#=.\Artist\Artist#.jpg -1=.\Artist\Artist1.jpg -2=.\Artist\Artist2.jpg -3=.\Artist\Artist3.jpg -4=.\Artist\Artist4.jpg -5=.\Artist\Artist5.jpg -6=.\Artist\Artist6.jpg -7=.\Artist\Artist7.jpg -8=.\Artist\Artist8.jpg -9=.\Artist\Artist9.jpg -0=.\Artist\Artist0.jpg -A=.\Artist\ArtistA.jpg -B=.\Artist\ArtistB.jpg -C=.\Artist\ArtistC.jpg -D=.\Artist\ArtistD.jpg -E=.\Artist\ArtistE.jpg -F=.\Artist\ArtistF.jpg -G=.\Artist\ArtistG.jpg -H=.\Artist\ArtistH.jpg -I=.\Artist\ArtistI.jpg -J=.\Artist\ArtistJ.jpg -K=.\Artist\ArtistK.jpg -L=.\Artist\ArtistL.jpg -M=.\Artist\ArtistM.jpg -N=.\Artist\ArtistN.jpg -O=.\Artist\ArtistO.jpg -P=.\Artist\ArtistP.jpg -Q=.\Artist\ArtistQ.jpg -R=.\Artist\ArtistR.jpg -S=.\Artist\ArtistS.jpg -T=.\Artist\ArtistT.jpg -U=.\Artist\ArtistU.jpg -V=.\Artist\ArtistV.jpg -W=.\Artist\ArtistW.jpg -X=.\Artist\ArtistX.jpg -Y=.\Artist\ArtistY.jpg -Z=.\Artist\ArtistZ.jpg -=.\Artist\Artist.jpg -=.\Artist\Artist.jpg -=.\Artist\Artist.jpg +#=.\Common\Common#.jpg +1=.\Common\Common1.jpg +2=.\Common\Common2.jpg +3=.\Common\Common3.jpg +4=.\Common\Common4.jpg +5=.\Common\Common5.jpg +6=.\Common\Common6.jpg +7=.\Common\Common7.jpg +8=.\Common\Common8.jpg +9=.\Common\Common9.jpg +0=.\Common\Common0.jpg +A=.\Common\CommonA.jpg +B=.\Common\CommonB.jpg +C=.\Common\CommonC.jpg +D=.\Common\CommonD.jpg +E=.\Common\CommonE.jpg +F=.\Common\CommonF.jpg +G=.\Common\CommonG.jpg +H=.\Common\CommonH.jpg +I=.\Common\CommonI.jpg +J=.\Common\CommonJ.jpg +K=.\Common\CommonK.jpg +L=.\Common\CommonL.jpg +M=.\Common\CommonM.jpg +N=.\Common\CommonN.jpg +O=.\Common\CommonO.jpg +P=.\Common\CommonP.jpg +Q=.\Common\CommonQ.jpg +R=.\Common\CommonR.jpg +S=.\Common\CommonS.jpg +T=.\Common\CommonT.jpg +U=.\Common\CommonU.jpg +V=.\Common\CommonV.jpg +W=.\Common\CommonW.jpg +X=.\Common\CommonX.jpg +Y=.\Common\CommonY.jpg +Z=.\Common\CommonZ.jpg +Ä=.\Common\CommonÄ.jpg +Ö=.\Common\CommonÖ.jpg +Ü=.\Common\CommonÜ.jpg +Á=.\Common\CommonÁ.jpg +É=.\Common\CommonÉ.jpg +Í=.\Common\CommonÍ.jpg +Ó=.\Common\CommonÓ.jpg +Ú=.\Common\CommonÚ.jpg +À=.\Common\CommonÀ.jpg +È=.\Common\CommonÈ.jpg +Ì=.\Common\CommonÌ.jpg +Ò=.\Common\CommonÒ.jpg +Ù=.\Common\CommonÙ.jpg [Title] -#=.\Title\Title#.jpg -1=.\Title\Title1.jpg -2=.\Title\Title2.jpg -3=.\Title\Title3.jpg -4=.\Title\Title4.jpg -5=.\Title\Title5.jpg -6=.\Title\Title6.jpg -7=.\Title\Title7.jpg -8=.\Title\Title8.jpg -9=.\Title\Title9.jpg -0=.\Title\Title0.jpg -A=.\Title\TitleA.jpg -B=.\Title\TitleB.jpg -C=.\Title\TitleC.jpg -D=.\Title\TitleD.jpg -E=.\Title\TitleE.jpg -F=.\Title\TitleF.jpg -G=.\Title\TitleG.jpg -H=.\Title\TitleH.jpg -I=.\Title\TitleI.jpg -J=.\Title\TitleJ.jpg -K=.\Title\TitleK.jpg -L=.\Title\TitleL.jpg -M=.\Title\TitleM.jpg -N=.\Title\TitleN.jpg -O=.\Title\TitleO.jpg -P=.\Title\TitleP.jpg -Q=.\Title\TitleQ.jpg -R=.\Title\TitleR.jpg -S=.\Title\TitleS.jpg -T=.\Title\TitleT.jpg -U=.\Title\TitleU.jpg -V=.\Title\TitleV.jpg -W=.\Title\TitleW.jpg -X=.\Title\TitleX.jpg -Y=.\Title\TitleY.jpg -Z=.\Title\TitleZ.jpg -=.\Title\Title.jpg -=.\Title\Title.jpg -=.\Title\Title.jpg +#=.\Common\Common#.jpg +1=.\Common\Common1.jpg +2=.\Common\Common2.jpg +3=.\Common\Common3.jpg +4=.\Common\Common4.jpg +5=.\Common\Common5.jpg +6=.\Common\Common6.jpg +7=.\Common\Common7.jpg +8=.\Common\Common8.jpg +9=.\Common\Common9.jpg +0=.\Common\Common0.jpg +A=.\Common\CommonA.jpg +B=.\Common\CommonB.jpg +C=.\Common\CommonC.jpg +D=.\Common\CommonD.jpg +E=.\Common\CommonE.jpg +F=.\Common\CommonF.jpg +G=.\Common\CommonG.jpg +H=.\Common\CommonH.jpg +I=.\Common\CommonI.jpg +J=.\Common\CommonJ.jpg +K=.\Common\CommonK.jpg +L=.\Common\CommonL.jpg +M=.\Common\CommonM.jpg +N=.\Common\CommonN.jpg +O=.\Common\CommonO.jpg +P=.\Common\CommonP.jpg +Q=.\Common\CommonQ.jpg +R=.\Common\CommonR.jpg +S=.\Common\CommonS.jpg +T=.\Common\CommonT.jpg +U=.\Common\CommonU.jpg +V=.\Common\CommonV.jpg +W=.\Common\CommonW.jpg +X=.\Common\CommonX.jpg +Y=.\Common\CommonY.jpg +Z=.\Common\CommonZ.jpg +Ä=.\Common\CommonÄ.jpg +Ö=.\Common\CommonÖ.jpg +Ü=.\Common\CommonÜ.jpg +Á=.\Common\CommonÁ.jpg +É=.\Common\CommonÉ.jpg +Í=.\Common\CommonÍ.jpg +Ó=.\Common\CommonÓ.jpg +Ú=.\Common\CommonÚ.jpg +À=.\Common\CommonÀ.jpg +È=.\Common\CommonÈ.jpg +Ì=.\Common\CommonÌ.jpg +Ò=.\Common\CommonÒ.jpg +Ù=.\Common\CommonÙ.jpg [Year] [Decade] diff --git a/game/covers/Creative Commons.jpg b/game/covers/Creative Commons.jpg deleted file mode 100644 index 55c66584..00000000 Binary files a/game/covers/Creative Commons.jpg and /dev/null differ diff --git a/game/covers/Language/Austrian.jpg b/game/covers/Language/Austrian.jpg index 04308ef2..34cf9e14 100644 Binary files a/game/covers/Language/Austrian.jpg and b/game/covers/Language/Austrian.jpg differ diff --git a/game/covers/Language/Basque.jpg b/game/covers/Language/Basque.jpg new file mode 100644 index 00000000..c8ca5aee Binary files /dev/null and b/game/covers/Language/Basque.jpg differ diff --git a/game/covers/Language/Bavarian.jpg b/game/covers/Language/Bavarian.jpg index 1d3b82b8..a189ca80 100644 Binary files a/game/covers/Language/Bavarian.jpg and b/game/covers/Language/Bavarian.jpg differ diff --git a/game/covers/Language/Breton.jpg b/game/covers/Language/Breton.jpg new file mode 100644 index 00000000..3d516d35 Binary files /dev/null and b/game/covers/Language/Breton.jpg differ diff --git a/game/covers/Language/Catalan.jpg b/game/covers/Language/Catalan.jpg new file mode 100644 index 00000000..8c630b6c Binary files /dev/null and b/game/covers/Language/Catalan.jpg differ diff --git a/game/covers/Language/Chinese.jpg b/game/covers/Language/Chinese.jpg index c53df6cc..990bf32c 100644 Binary files a/game/covers/Language/Chinese.jpg and b/game/covers/Language/Chinese.jpg differ diff --git a/game/covers/Language/Croatian.jpg b/game/covers/Language/Croatian.jpg new file mode 100644 index 00000000..385ff9e7 Binary files /dev/null and b/game/covers/Language/Croatian.jpg differ diff --git a/game/covers/Language/Czech.jpg b/game/covers/Language/Czech.jpg new file mode 100644 index 00000000..e65b57ef Binary files /dev/null and b/game/covers/Language/Czech.jpg differ diff --git a/game/covers/Language/Danish.jpg b/game/covers/Language/Danish.jpg index c79a6083..8ec1dfcb 100644 Binary files a/game/covers/Language/Danish.jpg and b/game/covers/Language/Danish.jpg differ diff --git a/game/covers/Language/Dutch.jpg b/game/covers/Language/Dutch.jpg index b2366ea3..af3a2a72 100644 Binary files a/game/covers/Language/Dutch.jpg and b/game/covers/Language/Dutch.jpg differ diff --git a/game/covers/Language/English.jpg b/game/covers/Language/English.jpg index 97c2ccfa..bc4cf295 100644 Binary files a/game/covers/Language/English.jpg and b/game/covers/Language/English.jpg differ diff --git a/game/covers/Language/Finish.jpg b/game/covers/Language/Finish.jpg index c2cbeb22..bd01719b 100644 Binary files a/game/covers/Language/Finish.jpg and b/game/covers/Language/Finish.jpg differ diff --git a/game/covers/Language/French.jpg b/game/covers/Language/French.jpg index a891df54..11e5269d 100644 Binary files a/game/covers/Language/French.jpg and b/game/covers/Language/French.jpg differ diff --git a/game/covers/Language/Galician.jpg b/game/covers/Language/Galician.jpg new file mode 100644 index 00000000..5bffb57f Binary files /dev/null and b/game/covers/Language/Galician.jpg differ diff --git a/game/covers/Language/German.jpg b/game/covers/Language/German.jpg index c95b5641..816089fc 100644 Binary files a/game/covers/Language/German.jpg and b/game/covers/Language/German.jpg differ diff --git a/game/covers/Language/Greek.jpg b/game/covers/Language/Greek.jpg index f394df30..a38f0a4e 100644 Binary files a/game/covers/Language/Greek.jpg and b/game/covers/Language/Greek.jpg differ diff --git a/game/covers/Language/Hindi.jpg b/game/covers/Language/Hindi.jpg new file mode 100644 index 00000000..1eb8d58a Binary files /dev/null and b/game/covers/Language/Hindi.jpg differ diff --git a/game/covers/Language/Hungarian.jpg b/game/covers/Language/Hungarian.jpg new file mode 100644 index 00000000..9c92ea1e Binary files /dev/null and b/game/covers/Language/Hungarian.jpg differ diff --git a/game/covers/Language/Icelandic.jpg b/game/covers/Language/Icelandic.jpg new file mode 100644 index 00000000..c030c176 Binary files /dev/null and b/game/covers/Language/Icelandic.jpg differ diff --git a/game/covers/Language/Italian.jpg b/game/covers/Language/Italian.jpg index cb1f98aa..978973ea 100644 Binary files a/game/covers/Language/Italian.jpg and b/game/covers/Language/Italian.jpg differ diff --git a/game/covers/Language/Japanese.jpg b/game/covers/Language/Japanese.jpg index 6823f412..f6ea8a59 100644 Binary files a/game/covers/Language/Japanese.jpg and b/game/covers/Language/Japanese.jpg differ diff --git a/game/covers/Language/Korean.jpg b/game/covers/Language/Korean.jpg new file mode 100644 index 00000000..d204821f Binary files /dev/null and b/game/covers/Language/Korean.jpg differ diff --git "a/game/covers/Language/K\303\266lsch.jpg" "b/game/covers/Language/K\303\266lsch.jpg" index e0dfa98a..ec9bef05 100644 Binary files "a/game/covers/Language/K\303\266lsch.jpg" and "b/game/covers/Language/K\303\266lsch.jpg" differ diff --git a/game/covers/Language/Latin.jpg b/game/covers/Language/Latin.jpg new file mode 100644 index 00000000..070dea53 Binary files /dev/null and b/game/covers/Language/Latin.jpg differ diff --git a/game/covers/Language/Lituanian.jpg b/game/covers/Language/Lituanian.jpg new file mode 100644 index 00000000..2fdb9174 Binary files /dev/null and b/game/covers/Language/Lituanian.jpg differ diff --git a/game/covers/Language/Norwegian.jpg b/game/covers/Language/Norwegian.jpg index d0fe1838..fe141d77 100644 Binary files a/game/covers/Language/Norwegian.jpg and b/game/covers/Language/Norwegian.jpg differ diff --git a/game/covers/Language/Persian.jpg b/game/covers/Language/Persian.jpg new file mode 100644 index 00000000..a9a61576 Binary files /dev/null and b/game/covers/Language/Persian.jpg differ diff --git a/game/covers/Language/Peruvian.jpg b/game/covers/Language/Peruvian.jpg index 841fdf53..6f1d90e2 100644 Binary files a/game/covers/Language/Peruvian.jpg and b/game/covers/Language/Peruvian.jpg differ diff --git a/game/covers/Language/Philipino.jpg b/game/covers/Language/Philipino.jpg new file mode 100644 index 00000000..392c2c31 Binary files /dev/null and b/game/covers/Language/Philipino.jpg differ diff --git a/game/covers/Language/Polish.jpg b/game/covers/Language/Polish.jpg index 53f9413f..cbb4c937 100644 Binary files a/game/covers/Language/Polish.jpg and b/game/covers/Language/Polish.jpg differ diff --git a/game/covers/Language/Portuguese.jpg b/game/covers/Language/Portuguese.jpg new file mode 100644 index 00000000..5f5f68e5 Binary files /dev/null and b/game/covers/Language/Portuguese.jpg differ diff --git a/game/covers/Language/Romanian.jpg b/game/covers/Language/Romanian.jpg index 32854824..ccb55e30 100644 Binary files a/game/covers/Language/Romanian.jpg and b/game/covers/Language/Romanian.jpg differ diff --git a/game/covers/Language/Russian.jpg b/game/covers/Language/Russian.jpg index 758dcaf3..3822a2a1 100644 Binary files a/game/covers/Language/Russian.jpg and b/game/covers/Language/Russian.jpg differ diff --git a/game/covers/Language/Scat.jpg b/game/covers/Language/Scat.jpg new file mode 100644 index 00000000..365ece2f Binary files /dev/null and b/game/covers/Language/Scat.jpg differ diff --git a/game/covers/Language/Servian.jpg b/game/covers/Language/Servian.jpg new file mode 100644 index 00000000..920c7816 Binary files /dev/null and b/game/covers/Language/Servian.jpg differ diff --git a/game/covers/Language/Slovak.jpg b/game/covers/Language/Slovak.jpg new file mode 100644 index 00000000..32b3e7a0 Binary files /dev/null and b/game/covers/Language/Slovak.jpg differ diff --git a/game/covers/Language/Slovenian.jpg b/game/covers/Language/Slovenian.jpg index 758dcaf3..002d15e8 100644 Binary files a/game/covers/Language/Slovenian.jpg and b/game/covers/Language/Slovenian.jpg differ diff --git a/game/covers/Language/Spanish.jpg b/game/covers/Language/Spanish.jpg index ac366293..6ef45db6 100644 Binary files a/game/covers/Language/Spanish.jpg and b/game/covers/Language/Spanish.jpg differ diff --git a/game/covers/Language/Swedish.jpg b/game/covers/Language/Swedish.jpg index c51620ea..5bbf7819 100644 Binary files a/game/covers/Language/Swedish.jpg and b/game/covers/Language/Swedish.jpg differ diff --git a/game/covers/Language/Thai.jpg b/game/covers/Language/Thai.jpg new file mode 100644 index 00000000..989123bc Binary files /dev/null and b/game/covers/Language/Thai.jpg differ diff --git a/game/covers/Language/Turkish.jpg b/game/covers/Language/Turkish.jpg index 9ee803a0..dbd2b9b6 100644 Binary files a/game/covers/Language/Turkish.jpg and b/game/covers/Language/Turkish.jpg differ diff --git a/game/covers/Language/Unknown.jpg b/game/covers/Language/Unknown.jpg new file mode 100644 index 00000000..e6dba5d0 Binary files /dev/null and b/game/covers/Language/Unknown.jpg differ diff --git a/game/covers/NoCover.jpg b/game/covers/NoCover.jpg deleted file mode 100644 index 0a424708..00000000 Binary files a/game/covers/NoCover.jpg and /dev/null differ diff --git a/game/covers/Title/Title#.jpg b/game/covers/Title/Title#.jpg deleted file mode 100644 index af577517..00000000 Binary files a/game/covers/Title/Title#.jpg and /dev/null differ diff --git a/game/covers/Title/Title0.jpg b/game/covers/Title/Title0.jpg deleted file mode 100644 index 71370df4..00000000 Binary files a/game/covers/Title/Title0.jpg and /dev/null differ diff --git a/game/covers/Title/Title1.jpg b/game/covers/Title/Title1.jpg deleted file mode 100644 index 094e4f58..00000000 Binary files a/game/covers/Title/Title1.jpg and /dev/null differ diff --git a/game/covers/Title/Title2.jpg b/game/covers/Title/Title2.jpg deleted file mode 100644 index 26c20537..00000000 Binary files a/game/covers/Title/Title2.jpg and /dev/null differ diff --git a/game/covers/Title/Title3.jpg b/game/covers/Title/Title3.jpg deleted file mode 100644 index 5f75f29d..00000000 Binary files a/game/covers/Title/Title3.jpg and /dev/null differ diff --git a/game/covers/Title/Title4.jpg b/game/covers/Title/Title4.jpg deleted file mode 100644 index f159d05b..00000000 Binary files a/game/covers/Title/Title4.jpg and /dev/null differ diff --git a/game/covers/Title/Title5.jpg b/game/covers/Title/Title5.jpg deleted file mode 100644 index 32cc513e..00000000 Binary files a/game/covers/Title/Title5.jpg and /dev/null differ diff --git a/game/covers/Title/Title6.jpg b/game/covers/Title/Title6.jpg deleted file mode 100644 index 77275577..00000000 Binary files a/game/covers/Title/Title6.jpg and /dev/null differ diff --git a/game/covers/Title/Title7.jpg b/game/covers/Title/Title7.jpg deleted file mode 100644 index b1edbdae..00000000 Binary files a/game/covers/Title/Title7.jpg and /dev/null differ diff --git a/game/covers/Title/Title8.jpg b/game/covers/Title/Title8.jpg deleted file mode 100644 index c9bde8d6..00000000 Binary files a/game/covers/Title/Title8.jpg and /dev/null differ diff --git a/game/covers/Title/Title9.jpg b/game/covers/Title/Title9.jpg deleted file mode 100644 index cdf17287..00000000 Binary files a/game/covers/Title/Title9.jpg and /dev/null differ diff --git a/game/covers/Title/TitleD.jpg b/game/covers/Title/TitleD.jpg deleted file mode 100644 index 9b6f53bb..00000000 Binary files a/game/covers/Title/TitleD.jpg and /dev/null differ diff --git a/game/covers/Title/TitleE.jpg b/game/covers/Title/TitleE.jpg deleted file mode 100644 index c71d02ef..00000000 Binary files a/game/covers/Title/TitleE.jpg and /dev/null differ diff --git a/game/covers/Title/TitleF.jpg b/game/covers/Title/TitleF.jpg deleted file mode 100644 index 04f6179a..00000000 Binary files a/game/covers/Title/TitleF.jpg and /dev/null differ diff --git a/game/covers/Title/TitleG.jpg b/game/covers/Title/TitleG.jpg deleted file mode 100644 index 5067c462..00000000 Binary files a/game/covers/Title/TitleG.jpg and /dev/null differ diff --git a/game/covers/Title/TitleH.jpg b/game/covers/Title/TitleH.jpg deleted file mode 100644 index 4ce5e02a..00000000 Binary files a/game/covers/Title/TitleH.jpg and /dev/null differ diff --git a/game/covers/Title/TitleI.jpg b/game/covers/Title/TitleI.jpg deleted file mode 100644 index 01e80797..00000000 Binary files a/game/covers/Title/TitleI.jpg and /dev/null differ diff --git a/game/covers/Title/TitleJ.jpg b/game/covers/Title/TitleJ.jpg deleted file mode 100644 index 7b8947e0..00000000 Binary files a/game/covers/Title/TitleJ.jpg and /dev/null differ diff --git a/game/covers/Title/TitleK.jpg b/game/covers/Title/TitleK.jpg deleted file mode 100644 index da11e2de..00000000 Binary files a/game/covers/Title/TitleK.jpg and /dev/null differ diff --git a/game/covers/Title/TitleL.jpg b/game/covers/Title/TitleL.jpg deleted file mode 100644 index 371d76e2..00000000 Binary files a/game/covers/Title/TitleL.jpg and /dev/null differ diff --git a/game/covers/Title/TitleM.jpg b/game/covers/Title/TitleM.jpg deleted file mode 100644 index bc8c2ed2..00000000 Binary files a/game/covers/Title/TitleM.jpg and /dev/null differ diff --git a/game/covers/Title/TitleN.jpg b/game/covers/Title/TitleN.jpg deleted file mode 100644 index dae3a2e4..00000000 Binary files a/game/covers/Title/TitleN.jpg and /dev/null differ diff --git a/game/covers/Title/TitleO.jpg b/game/covers/Title/TitleO.jpg deleted file mode 100644 index a1fe1268..00000000 Binary files a/game/covers/Title/TitleO.jpg and /dev/null differ diff --git a/game/covers/Title/TitleP.jpg b/game/covers/Title/TitleP.jpg deleted file mode 100644 index afcf8d55..00000000 Binary files a/game/covers/Title/TitleP.jpg and /dev/null differ diff --git a/game/covers/Title/TitleQ.jpg b/game/covers/Title/TitleQ.jpg deleted file mode 100644 index 99ab7278..00000000 Binary files a/game/covers/Title/TitleQ.jpg and /dev/null differ diff --git a/game/covers/Title/TitleR.jpg b/game/covers/Title/TitleR.jpg deleted file mode 100644 index 22e9c257..00000000 Binary files a/game/covers/Title/TitleR.jpg and /dev/null differ diff --git a/game/covers/Title/TitleS.jpg b/game/covers/Title/TitleS.jpg deleted file mode 100644 index c1b81249..00000000 Binary files a/game/covers/Title/TitleS.jpg and /dev/null differ diff --git a/game/covers/Title/TitleT.jpg b/game/covers/Title/TitleT.jpg deleted file mode 100644 index f2b3ef9c..00000000 Binary files a/game/covers/Title/TitleT.jpg and /dev/null differ diff --git a/game/covers/Title/TitleU.jpg b/game/covers/Title/TitleU.jpg deleted file mode 100644 index 05c2a4ca..00000000 Binary files a/game/covers/Title/TitleU.jpg and /dev/null differ diff --git a/game/covers/Title/TitleV.jpg b/game/covers/Title/TitleV.jpg deleted file mode 100644 index 28044811..00000000 Binary files a/game/covers/Title/TitleV.jpg and /dev/null differ diff --git a/game/covers/Title/TitleW.jpg b/game/covers/Title/TitleW.jpg deleted file mode 100644 index 143e5499..00000000 Binary files a/game/covers/Title/TitleW.jpg and /dev/null differ diff --git a/game/covers/Title/TitleX.jpg b/game/covers/Title/TitleX.jpg deleted file mode 100644 index 967b7e8e..00000000 Binary files a/game/covers/Title/TitleX.jpg and /dev/null differ diff --git a/game/covers/Title/TitleY.jpg b/game/covers/Title/TitleY.jpg deleted file mode 100644 index a59ffd84..00000000 Binary files a/game/covers/Title/TitleY.jpg and /dev/null differ diff --git a/game/covers/Title/TitleZ.jpg b/game/covers/Title/TitleZ.jpg deleted file mode 100644 index 3d3734f0..00000000 Binary files a/game/covers/Title/TitleZ.jpg and /dev/null differ diff --git a/game/covers/Title/Titlea.jpg b/game/covers/Title/Titlea.jpg deleted file mode 100644 index 60538668..00000000 Binary files a/game/covers/Title/Titlea.jpg and /dev/null differ diff --git a/game/covers/Title/Titleb.jpg b/game/covers/Title/Titleb.jpg deleted file mode 100644 index 109e76e0..00000000 Binary files a/game/covers/Title/Titleb.jpg and /dev/null differ diff --git a/game/covers/Title/Titlec.jpg b/game/covers/Title/Titlec.jpg deleted file mode 100644 index 013c12df..00000000 Binary files a/game/covers/Title/Titlec.jpg and /dev/null differ diff --git "a/game/covers/Title/Title\303\204.jpg" "b/game/covers/Title/Title\303\204.jpg" deleted file mode 100644 index f5eece25..00000000 Binary files "a/game/covers/Title/Title\303\204.jpg" and /dev/null differ diff --git "a/game/covers/Title/Title\303\226.jpg" "b/game/covers/Title/Title\303\226.jpg" deleted file mode 100644 index c0b11f23..00000000 Binary files "a/game/covers/Title/Title\303\226.jpg" and /dev/null differ diff --git "a/game/covers/Title/Title\303\234.jpg" "b/game/covers/Title/Title\303\234.jpg" deleted file mode 100644 index c60913e1..00000000 Binary files "a/game/covers/Title/Title\303\234.jpg" and /dev/null differ diff --git a/game/fonts/wqy-microhei/README.txt b/game/fonts/wqy-microhei/README.txt index 16b8ac24..52a95de7 100644 --- a/game/fonts/wqy-microhei/README.txt +++ b/game/fonts/wqy-microhei/README.txt @@ -152,7 +152,7 @@ http://dejavu.sourceforge.net/wiki/index.php/Font_utilities). el Greek 100% (70/70) en English 100% (73/73) eo Esperanto 100% (64/64) - es Spanish 100% (67/67) + es Espaol 100% (67/67) et Estonian 100% (64/64) eu Basque 100% (56/56) fa Persian (0/129) diff --git a/game/languages/Catalan.ini b/game/languages/Catalan.ini index 9782746c..b72ee2e7 100644 --- a/game/languages/Catalan.ini +++ b/game/languages/Catalan.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=Fàcil +OPTION_VALUE_MEDIUM=Mitjà +OPTION_VALUE_HARD=Difícil ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=Idioma +OPTION_VALUE_FOLDER=Directori +OPTION_VALUE_TITLE=Títol +OPTION_VALUE_ARTIST=Artista ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=llista + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=cantar ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Opcions SING_OPTIONS_GAME=joc SING_OPTIONS_GRAPHICS=gràfics SING_OPTIONS_SOUND=so +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=lletres SING_OPTIONS_THEMES=aparença SING_OPTIONS_RECORD=gravar @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Assistència Click SING_OPTIONS_SOUND_BEAT_CLICK=Clic de ritme SING_OPTIONS_SOUND_THRESHOLD=Llindar SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mode dos jugadors +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Volum previsualitzar SING_OPTIONS_SOUND_PREVIEWFADING=Fos previsualitzar +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Opcions Lletra SING_OPTIONS_LYRICS_DESC=configuració de lletres SING_OPTIONS_LYRICS_FONT=Font @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Fos de pantalla SING_OPTIONS_ADVANCED_LOADANIMATION=Animació càrrega SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Prequnta abans d'esborrar SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de línia +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=després de triar cançó SING_OPTIONS_ADVANCED_PARTYPOPUP=Menú Automàtic de festa @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=llista SING_SONGS_IN_CAT=Cançons PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=TEMPS +;TODO: SING_TIME=TIME SING_TOTAL=total SING_MODE=cantar sol SING_NOTES=notes @@ -327,10 +346,10 @@ PARTY_PLAYER_WHEREAMI=Noms PARTY_PLAYER_ENTER_NAME=introduïr noms -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds PARTY_ROUNDS_LEGEND_CONTINUE=iniciar festa -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=següent jugador al micro @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=guanya! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Aguantar la línia -MODE_HOLDTHELINE_DESC=No baixis de la fletxa a la barra de qualitat +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Fins a 5000 -MODE_5000POINTS_DESC=El primer a arribar a 5000 punts guanya +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duel -MODE_DUEL_DESC=Cantar un duela fins a 10000 punts +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -;TODO: MODE_TEAMDUEL_NAME=Team Duell -;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! -;TODO: MODE_BLIND_NAME=Mode cec -;TODO: MODE_BLIND_DESC=Duel sense veure les notes +;TODO: MODE_BLIND_NAME=Blind Mode +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Estadístiques STAT_MAIN_DESC=General @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx Cantades ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -440,8 +486,8 @@ MSG_END_PARTY=Realment vols sortir del mode festa? ERROR_NO_SONGS=No hi ha cançons ERROR_NO_PLUGINS=No hi ha Plugins -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=No es poden carregar les cançons ERROR_CORRUPT_SONG_FILE_NOT_FOUND=No es pot carregar: Fitxer no trobat ERROR_CORRUPT_SONG_NO_NOTES=No es pot carregar: No s'han trobat notes @@ -450,8 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Quantes vegades cantada -;UNUSED: PARTY_ROUNDS=Rondes ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -477,15 +521,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Tot +OPTION_ALL_SCORES=Tot ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Cancel·lar ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -523,7 +567,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Cancel·lar ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -545,7 +589,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=següent jugador al micro ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! @@ -585,7 +629,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -596,17 +640,17 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Menú de cançons ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Afegir Song +SONG_MENU_DELETE_SONG=Esborrar Cançó ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Tot ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -614,11 +658,11 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Resolucị ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Efecte ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -631,7 +675,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Llindar ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -650,7 +694,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Menú de cançons ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -659,10 +703,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=cantar ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -695,7 +739,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -716,19 +760,19 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=No es pot carregar: Error llegint línia %0:d ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=llista ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Tot ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Chinese.ini b/game/languages/Chinese.ini index 498739ff..0c136ed0 100644 --- a/game/languages/Chinese.ini +++ b/game/languages/Chinese.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=English OPTION_VALUE_EUSKARA=Euskara OPTION_VALUE_FINNISH=Finnish OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=German OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luxembourgish OPTION_VALUE_NORWEGIAN=Norwegian OPTION_VALUE_POLISH=Polish OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian OPTION_VALUE_SERBIAN=Serbian OPTION_VALUE_SLOVAK=Slovak @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=标题2 OPTION_VALUE_ARTIST2=艺术家2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=播放列表 + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=无视频时 +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=小 OPTION_VALUE_BIG=大 @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=一半 OPTION_VALUE_FULL_VID=全屏 (视频) OPTION_VALUE_FULL_VID_BG=全屏 (背景加视频) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=自动 OPTION_VALUE_SEC=秒 OPTION_VALUE_SECS=秒 @@ -87,6 +96,8 @@ OPTION_VALUE_SING=K歌 OPTION_VALUE_SELECT_PLAYERS=选择玩家 OPTION_VALUE_OPEN_MENU=打开菜单 +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=系统指针 OPTION_VALUE_SOFTWARE_CURSOR=自带指针 @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=选项 SING_OPTIONS_GAME=游戏 SING_OPTIONS_GRAPHICS=画面 SING_OPTIONS_SOUND=声音 +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=歌词 SING_OPTIONS_THEMES=主题 SING_OPTIONS_RECORD=录音 @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=“卡嗒”助手 SING_OPTIONS_SOUND_BEAT_CLICK=节拍“卡嗒” SING_OPTIONS_SOUND_THRESHOLD=阈值 SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=双人模式 +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=预览音量 SING_OPTIONS_SOUND_PREVIEWFADING=预览渐变 +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=歌词选项 SING_OPTIONS_LYRICS_DESC=歌词设置 SING_OPTIONS_LYRICS_FONT=字体 @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=画面渐变 SING_OPTIONS_ADVANCED_LOADANIMATION=载入动画 SING_OPTIONS_ADVANCED_ASKBEFOREDEL=安全问题 SING_OPTIONS_ADVANCED_LINEBONUS=加分线 +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=选歌之后 SING_OPTIONS_ADVANCED_PARTYPOPUP=自动派对菜单 @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=播放列表 SING_SONGS_IN_CAT=歌曲 PLAYLIST_CATTEXT=播放列表: %s -SING_TIME=时间 +;TODO: SING_TIME=TIME SING_TOTAL=全部 SING_MODE=独唱 SING_NOTES=音符 @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=胜出! MODE_RANDOM_NAME=随机模式 -MODE_RANDOM_DESC=将随机选取一种模式 +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=保持分数线 -MODE_HOLDTHELINE_DESC=不要低于评分栏所显示的分数。 +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=5000争夺赛 -MODE_5000POINTS_DESC=首先赢得5000分的玩家胜出。 +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=挑战赛 -MODE_DUEL_DESC=挑战10000分。 +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=团队挑战 -MODE_TEAMDUEL_DESC=麦克风接力! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=盲人模式 -MODE_BLIND_DESC=不看提示挑战。 +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=统计 STAT_MAIN_DESC=常规 @@ -450,10 +496,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=无法载入歌曲:行 %0:d 解析错误 ERROR_NO_EDITOR=此特性在Linux/Mac上不可用 ERROR_PLAYER_DEVICE_ASSIGNMENT=玩家 %d 被指定给多个麦克风,请检查您的录音选项 ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您的录音选项 -;UNUSED: OPTION_VALUE_CHINESE=中文 - ;TRANSLATOR: Qiao Xiaohui - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options ;TODO: SING_OPTIONS_NETWORK_DESC=Internet General Settings @@ -462,7 +505,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=自动 ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -478,15 +521,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=所有 +OPTION_ALL_SCORES=所有 ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=取消 ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,7 +567,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=取消 ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -541,16 +584,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name ;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=回合数量 ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=下位演唱歌手 ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -569,7 +611,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=文件已保存 ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -587,7 +629,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -598,17 +640,17 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=歌曲菜单 ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=添加歌曲 +SONG_MENU_DELETE_SONG=删除歌曲 ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=所有 ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -616,11 +658,11 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=分辨率 ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=效果 ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -633,7 +675,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=阈值 ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -652,7 +694,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=歌曲菜单 ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -661,10 +703,10 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=演唱 ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -697,12 +739,12 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=颜色 ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=红 +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=绿 +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=蓝 ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -718,19 +760,19 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=玩家 %d 没有指定麦克风,请检查您 ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=播放列表 ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=所有 ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Croatian.ini b/game/languages/Croatian.ini index c252a101..3b68d568 100644 --- a/game/languages/Croatian.ini +++ b/game/languages/Croatian.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=Lako +OPTION_VALUE_MEDIUM=Srednje +OPTION_VALUE_HARD=Teško ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=Jezik +OPTION_VALUE_FOLDER=Folder +OPTION_VALUE_TITLE=Naslov +OPTION_VALUE_ARTIST=Izvođač ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Playliste + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=pjevaj ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Opcije SING_OPTIONS_GAME=igra SING_OPTIONS_GRAPHICS=video SING_OPTIONS_SOUND=audio +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=tekstovi SING_OPTIONS_THEMES=teme SING_OPTIONS_RECORD=snimanje @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Pomoć klikovima SING_OPTIONS_SOUND_BEAT_CLICK=Klik na udarce SING_OPTIONS_SOUND_THRESHOLD=Threshold SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Igra za dva igrača +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Glasnoća prikaza SING_OPTIONS_SOUND_PREVIEWFADING=Fade-in vrijeme +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Opcije Tekstova SING_OPTIONS_LYRICS_DESC=postavke tekstova SING_OPTIONS_LYRICS_FONT=Font @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Fade-out ekrana SING_OPTIONS_ADVANCED_LOADANIMATION=Anim. tijekom učit. SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Sigurn. pitanja SING_OPTIONS_ADVANCED_LINEBONUS=Bonus linije +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Nakon pjesme SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto party meni @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=playlista SING_SONGS_IN_CAT=Pjesme PLAYLIST_CATTEXT=Playlista: %s -SING_TIME=TIME +;TODO: SING_TIME=TIME SING_TOTAL=ukupno SING_MODE=pjevaj solo SING_NOTES=note @@ -258,8 +277,8 @@ POPUP_BAD=loše! POPUP_POOR=jadno! POPUP_AWFUL=grozno! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= i +IMPLODE_GLUE1=, +IMPLODE_GLUE2= i SONG_MENU_NAME_MAIN=Kolekcija pjesama SONG_MENU_PLAY=Pjevaj @@ -327,18 +346,18 @@ PARTY_PLAYER_WHEREAMI=Party Imena PARTY_PLAYER_ENTER_NAME=unesi imena -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds PARTY_ROUNDS_LEGEND_CONTINUE=započni party-igru -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=sljed. igrači za mikr. PARTY_ROUND_WHEREAMI=Party Sljed runda PARTY_ROUND_LEGEND_CONTINUE=započni rundu -PARTY_SONG_WHEREAMI=Party Odabir pjesme -PARTY_SONG_LEGEND_CONTINUE=pjevaj +PARTY_SONG_WHEREAMI=Party Odabir pjesme +PARTY_SONG_LEGEND_CONTINUE=pjevaj PARTY_SONG_MENU=party meni PARTY_SCORE_DESC=bodovi zadnje runde @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s je PARTY_SCORE_WINS2=pobijedio! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Zadrži liniju -MODE_HOLDTHELINE_DESC=Nemoj biti gori od pokazivača na 'rating' baru. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Do 5000 -MODE_5000POINTS_DESC=Pobjeđuje onaj tko prvi dođe do 5000 bodova. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Dvoboj -MODE_DUEL_DESC=Pjevaj dvoboj do 10000 bodova. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Dvoboj timova -MODE_TEAMDUEL_DESC=Dodaj mikrofon! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Slijepi način -MODE_BLIND_DESC=Dvoboj bez gledanja nota. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statistika STAT_MAIN_DESC=General @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx otpjevano ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -440,8 +486,8 @@ MSG_END_PARTY=Napustiti Party igru? ERROR_NO_SONGS=Nema učitanih pjesama ERROR_NO_PLUGINS=Nema učitanih pluginova -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Pjesma se ne može učitati. ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Pjesma se ne može učitati: Datoteka nije nađena ERROR_CORRUPT_SONG_NO_NOTES=Pjesma se ne može učitati: Nije nađena niti jedna nota @@ -450,12 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Zapamti broj pjev. -;UNUSED: SING_SCORE_HIT_ARTIST=Hit Artist -;UNUSED: PARTY_ROUNDS=Runde -;UNUSED: MODE_MORE1000_NAME=1000 Više -;UNUSED: MODE_MORE1000_DESC=Pjevajte dok jedan od igrača ne skupi 1000 bod više. - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -481,15 +521,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Sve +OPTION_ALL_SCORES=Sve ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Poništi ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -527,7 +567,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Poništi ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -549,11 +589,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=sljed. igrači za mikr. ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -590,7 +629,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -601,17 +640,17 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Playliste ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Dodaj Pjesmu +SONG_MENU_DELETE_SONG=Izbriši Pjesmu ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Sve ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -619,11 +658,11 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Rezolucija ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Efekt ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -636,7 +675,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -655,7 +694,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Playliste ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -664,10 +703,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=pjevaj ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -700,7 +739,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Boja ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -721,19 +760,19 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Pjesma se ne može učitati: Greška u obradi ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Playliste ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Sve ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Czech.ini b/game/languages/Czech.ini index 3acbe30b..bf9e2bd6 100644 --- a/game/languages/Czech.ini +++ b/game/languages/Czech.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=Anglicky OPTION_VALUE_EUSKARA=Baskicky OPTION_VALUE_FINNISH=Finsky OPTION_VALUE_FRENCH=Francouzsky +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=Německy OPTION_VALUE_GREEK=Řecky @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Lucembursky OPTION_VALUE_NORWEGIAN=Norsky OPTION_VALUE_POLISH=Polsky OPTION_VALUE_PORTUGUESE=Portugalsky +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Rusky OPTION_VALUE_SERBIAN=Srbsky OPTION_VALUE_SLOVAK=Slovensky @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=Název 2 OPTION_VALUE_ARTIST2=Interpret 2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Seznam stop + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Neobsahuje-li video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Malé OPTION_VALUE_BIG=Velké @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Poloviční OPTION_VALUE_FULL_VID=Úplné (video) OPTION_VALUE_FULL_VID_BG=Úplné (pozadí & video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=sekunda OPTION_VALUE_SECS=sekundy @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Zpívat OPTION_VALUE_SELECT_PLAYERS=Výběr hráčů OPTION_VALUE_OPEN_MENU=Otevřít menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Hardwarový kurzor OPTION_VALUE_SOFTWARE_CURSOR=Softwarový kurzor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Možnosti SING_OPTIONS_GAME=hra SING_OPTIONS_GRAPHICS=grafika SING_OPTIONS_SOUND=zvuk +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=text SING_OPTIONS_THEMES=vzhled SING_OPTIONS_RECORD=záznam @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Pomocné tikání SING_OPTIONS_SOUND_BEAT_CLICK=Další rytmika SING_OPTIONS_SOUND_THRESHOLD=Práh SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Pro dva hráče +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Hlasitost ukázky SING_OPTIONS_SOUND_PREVIEWFADING=Odeznění ukázky +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Možnosti textů SING_OPTIONS_LYRICS_DESC=nastavení textů SING_OPTIONS_LYRICS_FONT=Písmo @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Přechody obrazu SING_OPTIONS_ADVANCED_LOADANIMATION=Animace načítání SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Potvrzovací dialogy SING_OPTIONS_ADVANCED_LINEBONUS=Bonus za řádek +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Po výběru skladby SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto párty-menu @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=seznam stop SING_SONGS_IN_CAT=skladby PLAYLIST_CATTEXT=Seznam stop: %s -SING_TIME=TIME +;TODO: SING_TIME=TIME SING_TOTAL=celkem SING_MODE=zpívat sólo SING_NOTES=noty @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=vítězství! MODE_RANDOM_NAME=Náhodný režim -MODE_RANDOM_DESC=Jeden režim bude vybrán náhodně. +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Drž úroveň -MODE_HOLDTHELINE_DESC=Nesmíš klesnout pod hranici ukazatele úspešnosti. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Do 5000 -MODE_5000POINTS_DESC=Kdo získá první 5000 bodů, vyhrál. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duel -MODE_DUEL_DESC=Zpívej duel do 10 000 bodů. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Duel týmů -MODE_TEAMDUEL_DESC=Předej mikrofon dál! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Slepý režim -MODE_BLIND_DESC=Duel bez not. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statistiky STAT_MAIN_DESC=Obecné @@ -426,7 +472,7 @@ SCREENSHOT_SAVED=Snímek obrazovky uložen SCREENSHOT_FAILED=Uložení snímku obrazovky selhalo INFO_FILE_SAVED=Soubor uložen -ERROR_SAVE_FILE_FAILED=Uložení souboru selhalo +ERROR_SAVE_FILE_FAILED=Uložení souboru selhalo ERROR_FILE_NOT_FOUND=Soubor nenalezen ENCODING_ERROR_ASK_FOR_UTF8=Nelze uložit změny v tomto kódování. Změnit na UTF-8? @@ -450,8 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Skladbu se nepodařilo načíst: Chyba při z ERROR_NO_EDITOR=Tato funkce není dostupná pro Linux/Mac ERROR_PLAYER_DEVICE_ASSIGNMENT=Hráč %d je přiřazen k vícero mikrofonům. Zkontrolujte prosím nastavení záznamu ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontrolujte prosím nastavení záznamu -;TRANSLATOR: Oblack - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -461,7 +505,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Auto ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -477,15 +521,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Všude +OPTION_ALL_SCORES=Všude ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Zrušit ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -523,7 +567,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Zrušit ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -540,16 +584,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name ;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=počet kol ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=další hráč k mikrofonu ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -568,7 +611,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=Soubor uložen ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -586,7 +629,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -597,17 +640,17 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Menu skladeb ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Přidat skladbu +SONG_MENU_DELETE_SONG=Odebrat skladbu ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Všude ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -615,11 +658,11 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Rozlišení ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Efekt ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -632,7 +675,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Práh ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -651,7 +694,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Menu skladeb ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -660,10 +703,10 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=zpívat ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -696,12 +739,12 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Barva ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Červená +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Zelená +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Modrá ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -717,19 +760,19 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Hráč %d není přiřazen k mikrofonu. Zkontr ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Seznam stop ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Všude ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Danish.ini b/game/languages/Danish.ini index 398ad268..da642fed 100644 --- a/game/languages/Danish.ini +++ b/game/languages/Danish.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=Let +OPTION_VALUE_MEDIUM=Normal +OPTION_VALUE_HARD=Svær ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=Sprog +OPTION_VALUE_FOLDER=Mappe +OPTION_VALUE_TITLE=Titel +OPTION_VALUE_ARTIST=Kunstner ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Afspilningsliste + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=Syng ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Indstillinger SING_OPTIONS_GAME=Spil SING_OPTIONS_GRAPHICS=Grafik SING_OPTIONS_SOUND=Lyd +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Tekster SING_OPTIONS_THEMES=Temaer SING_OPTIONS_RECORD=Optag @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Click assist SING_OPTIONS_SOUND_BEAT_CLICK=Beat click SING_OPTIONS_SOUND_THRESHOLD=Tærskel SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=2 Spiller modus +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Frosmag Volume SING_OPTIONS_SOUND_PREVIEWFADING=Forsmag Fader +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Tekst Indstillinger SING_OPTIONS_LYRICS_DESC=Tekst Indstillinger SING_OPTIONS_LYRICS_FONT=Tekst Type @@ -183,20 +201,21 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Skærm Fading SING_OPTIONS_ADVANCED_LOADANIMATION=Load Animation SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Savety Questions SING_OPTIONS_ADVANCED_LINEBONUS=Linie Bonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Efter sang valg SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Festmodus -;TODO: SING_EDIT=Editor -;TODO: SING_EDIT_MENU_DESCRIPTION=create your own song +SING_EDIT=editor +SING_EDIT_MENU_DESCRIPTION=Lav dine egne sange ;TODO: SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Import text from midi file -;TODO: SING_EDIT_BUTTON_DESCRIPTION_EXIT=back +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Tilbage ;TODO: SING_EDIT_BUTTON_CONVERT=Import -;TODO: SING_EDIT_BUTTON_EXIT=back +SING_EDIT_BUTTON_EXIT=Tilbage -;TODO: SING_EDIT_NAVIGATE=navigate -;TODO: SING_EDIT_SELECT=select -;TODO: SING_EDIT_EXIT=back +SING_EDIT_NAVIGATE=Naviger +SING_EDIT_SELECT=Vælg +SING_EDIT_EXIT=Tilbage SING_LEGEND_SELECT=Vælg SING_LEGEND_NAVIGATE=Naviger @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Afspilningsliste SING_SONGS_IN_CAT=Songs PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=TID +;TODO: SING_TIME=TIME SING_TOTAL=Total SING_MODE=Syng Solo SING_NOTES=Noder @@ -247,7 +266,7 @@ SING_SCORE_ULTRASTAR=Ultra Stjerne SING_TOP_5_CHARTS=Top 5 Spillere SING_TOP_5_CHARTS_WHEREAMI=Top 5 SING_TOP_5_CHARTS_CONTINUE=Til Sang Valg -;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=switch difficulty +;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Switch difficulty POPUP_PERFECT=Perfekt! POPUP_AWESOME=Utroligt! @@ -258,8 +277,8 @@ POPUP_BAD=Dårligt! POPUP_POOR=Meget Dårligt! POPUP_AWFUL=Ringe! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= og +IMPLODE_GLUE1=, +IMPLODE_GLUE2= og SONG_MENU_NAME_MAIN=Sang Menu SONG_MENU_PLAY=Syng @@ -275,7 +294,7 @@ SONG_MENU_PLAYLIST_DEL=Slet Sang SONG_MENU_NAME_PLAYLIST_ADD=Tilføj Song SONG_MENU_PLAYLIST_ADD_NEW=Til Ny Afspilningsliste SONG_MENU_PLAYLIST_ADD_EXISTING=Til Eksisterende Afspilningsliste -SONG_MENU_PLAYLIST_NOEXISTING=Ingen Tilgængelige Afspilningslister +SONG_MENU_PLAYLIST_NOEXISTING=Ingen Tilgængelige Afspilningslister SONG_MENU_NAME_PLAYLIST_NEW=Ny Afspilningsliste SONG_MENU_PLAYLIST_NEW_CREATE=Skab @@ -327,18 +346,18 @@ PARTY_PLAYER_WHEREAMI=Fest navne PARTY_PLAYER_ENTER_NAME=Skriv Navne -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds -PARTY_ROUNDS_LEGEND_CONTINUE==Start Fest Spil -;TODO: PARTY_ROUNDCOUNT=number of rounds +PARTY_ROUNDS_LEGEND_CONTINUE=Start Fest Spil +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=Næste spillere til mikrofonerne PARTY_ROUND_WHEREAMI=Fest Næste runde PARTY_ROUND_LEGEND_CONTINUE=Start runde -PARTY_SONG_WHEREAMI=Fest Sang-Valg -PARTY_SONG_LEGEND_CONTINUE=Syng +PARTY_SONG_WHEREAMI=Fest Sang-Valg +PARTY_SONG_LEGEND_CONTINUE=Syng PARTY_SONG_MENU=Fest menu PARTY_SCORE_DESC=Sidste Rundes Score @@ -355,38 +374,65 @@ PARTY_NOBODY=Ingen NEXT_ROUND=Næste Runde: PARTY_DISMISSED=Afsluttet! -PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=Vinder! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Hold Linien -MODE_HOLDTHELINE_DESC=Få ikke værrer end pilen på skalaen peger på +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Until 5000 -MODE_5000POINTS_DESC=Hvem får 5000 point først vinder the kampen. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duell -MODE_DUEL_DESC=Syng en duel intil 10000 point. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -;TODO: MODE_TEAMDUEL_NAME=Team Duell -;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Blind Modus -MODE_BLIND_DESC=Duel med usynlige noder. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statestikker STAT_MAIN_DESC=Generelle @@ -426,13 +472,13 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx Sung ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? ;TODO: EDITOR_ERROR_NO_TRACK_SELECTED=No track selected -MSG_ERROR_TITLE=Fejl +MSG_ERROR_TITLE=Fejl ;TODO: MSG_INFO_TITLE=Information MSG_QUESTION_TITLE=Spørgsmål MSG_QUIT_USDX=Vil du virkelig forlade UltraStar? @@ -440,8 +486,8 @@ MSG_END_PARTY=Vil du virkelig forlade fest Modus? ERROR_NO_SONGS=Ingen Sange hentet ERROR_NO_PLUGINS=Igen Plugins hentet -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Song could not be loaded: File not found ;TODO: ERROR_CORRUPT_SONG_NO_NOTES=Song could not be loaded: Can''t find any notes @@ -450,9 +496,6 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: SING_SCORE_HIT_ARTIST=Etableret Stjerne -;UNUSED: PARTY_ROUNDS=Runder - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -478,15 +521,15 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Alle +OPTION_ALL_SCORES=Alle ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Annuller ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,7 +567,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Annuller ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -546,11 +589,10 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Næste spillere til mikrofonerne ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -587,7 +629,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -598,17 +640,17 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Sang Menu ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Tilføj Song +SONG_MENU_DELETE_SONG=Slet Sang ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Alle ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -616,11 +658,11 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Opløsning ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Effekt ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -633,7 +675,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Tærskel ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -652,7 +694,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Sang Menu ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -661,10 +703,10 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Syng ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -697,7 +739,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Farve ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -718,19 +760,19 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke hentes. ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Afspilningsliste ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Alle ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Dutch.ini b/game/languages/Dutch.ini index a6152240..c30ffb59 100644 --- a/game/languages/Dutch.ini +++ b/game/languages/Dutch.ini @@ -1,69 +1,78 @@ [Text] -;TODO: OPTION_VALUE_CATALAN=Catalan -;TODO: OPTION_VALUE_CHINESE=Chinese -;TODO: OPTION_VALUE_CROATIAN=Croatian -;TODO: OPTION_VALUE_CZECH=Czech -;TODO: OPTION_VALUE_DANISH=Danish -;TODO: OPTION_VALUE_DUTCH=Dutch -;TODO: OPTION_VALUE_ENGLISH=English -;TODO: OPTION_VALUE_EUSKARA=Euskara -;TODO: OPTION_VALUE_FINNISH=Finnish -;TODO: OPTION_VALUE_FRENCH=French -;TODO: OPTION_VALUE_GALICIAN=Galician -;TODO: OPTION_VALUE_GERMAN=German -;TODO: OPTION_VALUE_GREEK=Greek -;TODO: OPTION_VALUE_HUNGARIAN=Hungarian -;TODO: OPTION_VALUE_ICELANDIC=Icelandic -;TODO: OPTION_VALUE_ITALIAN=Italian -;TODO: OPTION_VALUE_JAPANESE=Japanese -;TODO: OPTION_VALUE_LUXEMBOURGISH=Luxembourgish -;TODO: OPTION_VALUE_NORWEGIAN=Norwegian -;TODO: OPTION_VALUE_POLISH=Polish -;TODO: OPTION_VALUE_PORTUGUESE=Portuguese -;TODO: OPTION_VALUE_RUSSIAN=Russian -;TODO: OPTION_VALUE_SERBIAN=Serbian -;TODO: OPTION_VALUE_SLOVAK=Slovak -;TODO: OPTION_VALUE_SLOVENIAN=Slovenian -;TODO: OPTION_VALUE_SPANISH=Spanish -;TODO: OPTION_VALUE_SWEDISH=Swedish - -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard - -;TODO: OPTION_VALUE_ON=On -;TODO: OPTION_VALUE_OFF=Off - -;TODO: OPTION_VALUE_EDITION=Edition -;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist -;TODO: OPTION_VALUE_TITLE2=Title2 -;TODO: OPTION_VALUE_ARTIST2=Artist2 -;TODO: OPTION_VALUE_YEAR=Year -;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist - -;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video - -;TODO: OPTION_VALUE_SMALL=Small -;TODO: OPTION_VALUE_BIG=Big - -;TODO: OPTION_VALUE_HALF=Half -;TODO: OPTION_VALUE_FULL_VID=Full (Video) -;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) - -;TODO: OPTION_VALUE_AUTO=Auto -;TODO: OPTION_VALUE_SEC=Second -;TODO: OPTION_VALUE_SECS=Seconds - -;TODO: OPTION_VALUE_PLAIN=Plain +OPTION_VALUE_CATALAN=Catalaans +OPTION_VALUE_CHINESE=Chinees +OPTION_VALUE_CROATIAN=Kroatisch +OPTION_VALUE_CZECH=Tsjechisch +OPTION_VALUE_DANISH=Deens +OPTION_VALUE_DUTCH=Nederlands +OPTION_VALUE_ENGLISH=Engels +OPTION_VALUE_EUSKARA=Bask +OPTION_VALUE_FINNISH=Fins +OPTION_VALUE_FRENCH=Frans +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic +OPTION_VALUE_GALICIAN=Galicisch +OPTION_VALUE_GERMAN=Duits +OPTION_VALUE_GREEK=Grieks +OPTION_VALUE_HUNGARIAN=Hongaars +OPTION_VALUE_ICELANDIC=IJslands +OPTION_VALUE_ITALIAN=Italiaans +OPTION_VALUE_JAPANESE=Japans +OPTION_VALUE_LUXEMBOURGISH=Luxemburgs +OPTION_VALUE_NORWEGIAN=Noors +OPTION_VALUE_POLISH=Pools +OPTION_VALUE_PORTUGUESE=Portugees +;TODO: OPTION_VALUE_ROMANIAN=Romanian +OPTION_VALUE_RUSSIAN=Russisch +OPTION_VALUE_SERBIAN=Servisch +OPTION_VALUE_SLOVAK=Slowaaks +OPTION_VALUE_SLOVENIAN=Sloveens +OPTION_VALUE_SPANISH=Spaans +OPTION_VALUE_SWEDISH=Zweeds + +OPTION_VALUE_EASY=Gemakkelijk +OPTION_VALUE_MEDIUM=Gemiddeld +OPTION_VALUE_HARD=Moeilijk + +OPTION_VALUE_ON=Aan +OPTION_VALUE_OFF=Uit + +OPTION_VALUE_EDITION=Editie +OPTION_VALUE_GENRE=Genre +OPTION_VALUE_LANGUAGE=Taal +OPTION_VALUE_FOLDER=Map +OPTION_VALUE_TITLE=Titel +OPTION_VALUE_ARTIST=Artiest +OPTION_VALUE_TITLE2=Titel2 +OPTION_VALUE_ARTIST2=Artiest2 +OPTION_VALUE_YEAR=Jaar +OPTION_VALUE_DECADE=Decennium +OPTION_VALUE_PLAYLIST=Afspeellijst + +OPTION_VALUE_BORDERLESS=Randloos + +OPTION_VALUE_WHENNOVIDEO=Wanneer Geen Video +OPTION_VALUE_WHENNOVIDEOANDIMAGE=Wanneer Geen Video en Afbeelding + +OPTION_VALUE_SMALL=Klein +OPTION_VALUE_BIG=Groot + +OPTION_VALUE_HALF=Half +OPTION_VALUE_FULL_VID=Volledig (Video) +OPTION_VALUE_FULL_VID_BG=Volledig (BG & Video) + +OPTION_VALUE_GAIN_SOFT=Zacht +OPTION_VALUE_GAIN_MEDIUM=Medium +OPTION_VALUE_GAIN_HARD=Hard + +OPTION_VALUE_AUTO=Auto +OPTION_VALUE_SEC=Seconde +OPTION_VALUE_SECS=Seconden + +OPTION_VALUE_PLAIN=Gewoon ;TODO: OPTION_VALUE_OLINE1=OLine1 ;TODO: OPTION_VALUE_OLINE2=OLine2 -;TODO: OPTION_VALUE_SIMPLE=Simple +OPTION_VALUE_SIMPLE=Simpel ;TODO: OPTION_VALUE_ZOOM=Zoom ;TODO: OPTION_VALUE_SLIDE=Slide ;TODO: OPTION_VALUE_BALL=Ball @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=Zing ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Opties SING_OPTIONS_GAME=Spel SING_OPTIONS_GRAPHICS=graphics SING_OPTIONS_SOUND=Geluid +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Tekst SING_OPTIONS_THEMES=Thema SING_OPTIONS_RECORD=Opname @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Klik assistent SING_OPTIONS_SOUND_BEAT_CLICK=Beat klik SING_OPTIONS_SOUND_THRESHOLD=Drempelwaarde SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Twee spelers mode +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Voorbeeld volume SING_OPTIONS_SOUND_PREVIEWFADING=Voorbeeld Faden +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Tekst Opties SING_OPTIONS_LYRICS_DESC=Tekst instellingen SING_OPTIONS_LYRICS_FONT=Lettertype @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Faden SING_OPTIONS_ADVANCED_LOADANIMATION=Laad animaties SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Veiligheidsvragen SING_OPTIONS_ADVANCED_LINEBONUS=Lijnbonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Selecties na het Liedje SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto PartyMenu @@ -211,7 +230,7 @@ SING_DIFFICULTY_DESC=selecteer moeilijkheidsgraad SING_DIFFICULTY_WHEREAMI=Moeilijkheidsgraad SING_DIFFICULTY_CONTINUE=Ga verder SING_EASY=Gemakkelijk -SING_MEDIUM=Gemiddeled +SING_MEDIUM=Gemiddeld SING_HARD=Moeilijk SING_SONG_SELECTION_DESC=Kies je liedje @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=playlist SING_SONGS_IN_CAT=Liedjes PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=TIJD +;TODO: SING_TIME=TIME SING_TOTAL=totaal SING_MODE=zing solo SING_NOTES=noten @@ -327,10 +346,10 @@ PARTY_PLAYER_WHEREAMI=Party Namen PARTY_PLAYER_ENTER_NAME=Kies de namen -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds -PARTY_ROUNDS_LEGEND_CONTINUE==start partyspelletje -;TODO: PARTY_ROUNDCOUNT=number of rounds +PARTY_ROUNDS_LEGEND_CONTINUE=start partyspelletje +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=Volgende spelers aan de Microfoon @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=overwinningen! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Hold the Line -MODE_HOLDTHELINE_DESC=Zing niet slechter dan het pijltje aangeeft! +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Tot 5000 -MODE_5000POINTS_DESC=De eerste aan 5000 wint. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duel -MODE_DUEL_DESC=Zing een duel to 10000 punten. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Team Duel -MODE_TEAMDUEL_DESC=Geef de microfoon door! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Blinde Mode -MODE_BLIND_DESC=Duel zonder de noten te zien. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statistieken STAT_MAIN_DESC=Algemeen @@ -412,7 +458,7 @@ STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] %5:s \n (%3:s - %4:s) STAT_DESC_SINGERS=Beste Spelers STAT_DESC_SINGERS_REVERSED=Slechtste Spelers -STAT_FORMAT_SINGERS=%0:s \n Gemiddlede score: %1:d +STAT_FORMAT_SINGERS=%0:s \n Gemiddelde score: %1:d STAT_DESC_SONGS=Populairste liedje STAT_DESC_SONGS_REVERSED=Minst populaire liedjes @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx gezongen ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -440,8 +486,8 @@ MSG_END_PARTY=Stoppen met de Party? ERROR_NO_SONGS=Geen liedjes geladen ERROR_NO_PLUGINS=Geen plugins geladen -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Liedje kon niet geladen worden ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Liedje kon niet geladen worden: File niet gevonden ERROR_CORRUPT_SONG_NO_NOTES=Liedje kon niet geladen worden: Geen noten gevonden @@ -450,9 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Telling -;UNUSED: PARTY_ROUNDS=Rondes - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -478,15 +521,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Alles +OPTION_ALL_SCORES=Alles ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Cancel ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,7 +567,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Cancel ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -546,11 +589,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Volgende spelers aan de Microfoon ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -587,7 +629,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -598,17 +640,17 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Liedjes Menu ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Voeg een liedje toe +SONG_MENU_DELETE_SONG=Verwijder Liedje ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Alles ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -616,11 +658,11 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Resolutie ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Effecten ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -633,7 +675,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Drempelwaarde ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -652,7 +694,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Liedjes Menu ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -661,10 +703,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Zing ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -697,7 +739,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Kleur ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -718,19 +760,19 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Liedje kon niet geladen worden: Probleem met ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Playlist ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Alles ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/English.ini b/game/languages/English.ini index 61690da6..ec14450d 100644 --- a/game/languages/English.ini +++ b/game/languages/English.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=English OPTION_VALUE_EUSKARA=Euskara OPTION_VALUE_FINNISH=Finnish OPTION_VALUE_FRENCH=French +OPTION_VALUE_GAELIC=Scottish Gaelic OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=German OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luxembourgish OPTION_VALUE_NORWEGIAN=Norwegian OPTION_VALUE_POLISH=Polish OPTION_VALUE_PORTUGUESE=Portuguese +OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Russian OPTION_VALUE_SERBIAN=Serbian OPTION_VALUE_SLOVAK=Slovak @@ -46,7 +48,10 @@ OPTION_VALUE_YEAR=Year OPTION_VALUE_DECADE=Decade OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_BORDERLESS=Borderless + OPTION_VALUE_WHENNOVIDEO=When No Video +OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Small OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Half OPTION_VALUE_FULL_VID=Full (Video) OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +OPTION_VALUE_GAIN_SOFT=Soft +OPTION_VALUE_GAIN_MEDIUM=Medium +OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=Second OPTION_VALUE_SECS=Seconds @@ -87,14 +96,12 @@ OPTION_VALUE_SING=Sing OPTION_VALUE_SELECT_PLAYERS=Select Players OPTION_VALUE_OPEN_MENU=Open Menu -OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor -OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor SING_LOADING=Loading... SING_CHOOSE_MODE=Choose Mode SING_SING=Sing -SING_SING_DESC=Quick game: sing solo or duet +SING_SING_DESC=sing solo or duet SING_MULTI=Party SING_MULTI_DESC=Sing in party-mode @@ -104,9 +111,6 @@ SING_TOOLS=Tools SING_STATS=Stats SING_STATS_DESC=View the statistics -SING_EDITOR=Editor -SING_EDITOR_DESC=Create your own song - SING_GAME_OPTIONS=Game options SING_GAME_OPTIONS_DESC=Change game settings @@ -154,6 +158,7 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Click assist SING_OPTIONS_SOUND_BEAT_CLICK=Beat click SING_OPTIONS_SOUND_THRESHOLD=Threshold SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Two players mode +SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Preview Volume SING_OPTIONS_SOUND_PREVIEWFADING=Preview Fading @@ -183,30 +188,25 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Screen Fading SING_OPTIONS_ADVANCED_LOADANIMATION=Load Animation SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Safety Questions SING_OPTIONS_ADVANCED_LINEBONUS=Line Bonus +SING_OPTIONS_ADVANCED_JOYPAD_SUPPORT=Controller support ;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=After Song Select SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto PartyMenu -SING_EDIT=Editor -SING_EDIT_MENU_DESCRIPTION=Create your own song - -SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Import text from midi file -SING_EDIT_BUTTON_DESCRIPTION_EXIT=Back -SING_EDIT_BUTTON_CONVERT=Import -SING_EDIT_BUTTON_EXIT=Back - -SING_EDIT_NAVIGATE=Navigate -SING_EDIT_SELECT=Select -SING_EDIT_EXIT=Back SING_LEGEND_SELECT=Select SING_LEGEND_NAVIGATE=Navigate SING_LEGEND_CONTINUE=Continue SING_LEGEND_ESC=Back -SING_PLAYER_DESC=Enter player name/s -SING_PLAYER_WHEREAMI=Playernames -SING_PLAYER_ENTER_NAME=Enter name +SING_PLAYER_TITLE=Profiles +SING_PLAYER_READY=Players ready to sing +SING_PLAYER_COUNT=Number of players +SING_PLAYER_EDIT=Customize a player +SING_PLAYER_NAME=Write your name +SING_PLAYER_COLOR=Pick a color +SING_PLAYER_LEVEL=Choose a level +SING_PLAYER_AVATAR=Select your avatar SING_DIFFICULTY_DESC=Select difficulty SING_DIFFICULTY_WHEREAMI=Difficulty @@ -223,8 +223,12 @@ SING_SONG_SELECTION_MENU=Menu SING_SONG_SELECTION_PLAYLIST=Playlist SING_SONGS_IN_CAT=Songs PLAYLIST_CATTEXT=Playlist: %s +SING_SONG_SELECTION_LEGEND_TITLE=Legend +SING_SONG_SELECTION_LEGEND_VIDEO=Video +SING_SONG_SELECTION_LEGEND_MEDLEY=Short version +SING_SONG_SELECTION_LEGEND_MEDLEYC=Short version calculated +SING_SONG_SELECTION_LEGEND_DUET=Duet -SING_TIME=PONY SING_TOTAL=Total SING_MODE=Sing solo SING_NOTES=Notes @@ -648,6 +652,7 @@ SING_OPTIONS_WEBCAM_EFFECT=Effect SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness SING_OPTIONS_WEBCAM_SATURATION=Saturation SING_OPTIONS_WEBCAM_HUE=Hue +SING_OPTIONS_WEBCAM_PREVIEW=Activate preview SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Enable Preview SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Disable Preview @@ -720,7 +725,7 @@ JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Height JUKEBOX_SONGOPTIONS_LYRIC=Lyric Options JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position -JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha +JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Transparency JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property @@ -752,9 +757,15 @@ OPTION_VALUE_ALL=All OPTION_VALUE_PLAYER=Player SING_ABOUT=About -SING_ABOUT_DESC=About Ultrastar Deluxe +SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty ABOUT_MAIN=About... -ABOUT_MAIN_DESC=Ultrastar Deluxe +ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty ABOUT_MAIN_WHEREAMI=About... ABOUT_USDX_CREDITS=Credits -ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. +ABOUT_USDX_DEVELOPEDBY=Developed by +ABOUT_OVERVIEW=Discover a new way of singing, alone, in couple, or with friends. \n Fun is guaranteed.\n\nWorldParty is a fork of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team, it counts with the biggest karaoke community.\n\n\nThis program is free and libre under the GPL license. \n\n Visit us for more information.\n\nhttp://ultrastar-es.org + + +DEVELOPERS_TITLE=Developed by +DEVELOPERS_OVERVIEW=People who has contribuited to this project:\n\n\nZup3r_vock\n\nDaniel20\n\n\n\n Visit us for more information.\n\nhttp://ultrastar-es.org + diff --git a/game/languages/Euskara.ini b/game/languages/Euskara.ini index 717751fe..eabc9b6c 100644 --- a/game/languages/Euskara.ini +++ b/game/languages/Euskara.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=Ingelesa OPTION_VALUE_EUSKARA=Euskara OPTION_VALUE_FINNISH=Finlandiera OPTION_VALUE_FRENCH=Frantseza +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=Alemaniera OPTION_VALUE_GREEK=Greziera @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luxenburgera OPTION_VALUE_NORWEGIAN=Norvegiera OPTION_VALUE_POLISH=Poloniera OPTION_VALUE_PORTUGUESE=Portuguesa +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Errusiera OPTION_VALUE_SERBIAN=Serbiera OPTION_VALUE_SLOVAK=Eslovakiera @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=2.titulua OPTION_VALUE_ARTIST2=2.artista ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Zerrenda + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Bideorik ez badago +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Txikia OPTION_VALUE_BIG=Handia @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Erdia OPTION_VALUE_FULL_VID=Osoa (Bideoa) OPTION_VALUE_FULL_VID_BG=Osoa (BG eta bideoa) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Automatikoa OPTION_VALUE_SEC=Segundu OPTION_VALUE_SECS=Segundu @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Abestu OPTION_VALUE_SELECT_PLAYERS=Aukeratu jokalariak OPTION_VALUE_OPEN_MENU=Menua zabaldu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Hardware kurtsorea OPTION_VALUE_SOFTWARE_CURSOR=Software kurtsorea @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Hobespenak SING_OPTIONS_GAME=Jokoa SING_OPTIONS_GRAPHICS=Grafikoak SING_OPTIONS_SOUND=Soinua +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Letrak SING_OPTIONS_THEMES=Gaiak SING_OPTIONS_RECORD=Grabazioa @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Noten laguntza SING_OPTIONS_SOUND_BEAT_CLICK=Kolpeen laguntza SING_OPTIONS_SOUND_THRESHOLD=Arintzea SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Bi jokalari modua +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Bolumena aurreikusi SING_OPTIONS_SOUND_PREVIEWFADING=Desagerpena aurreikusi +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Letren hobespenak SING_OPTIONS_LYRICS_DESC=Letren hobespenak SING_OPTIONS_LYRICS_FONT=Letra-mota @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Pantaila desagertu SING_OPTIONS_ADVANCED_LOADANIMATION=Animazioa kargatzerakoan SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Ziurtasun galderak SING_OPTIONS_ADVANCED_LINEBONUS=Lerro bonusa +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Aukeratu ondoren SING_OPTIONS_ADVANCED_PARTYPOPUP=Talde menu auto @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Zerrenda SING_SONGS_IN_CAT=Abestiak PLAYLIST_CATTEXT=Zerrenda: %s -SING_TIME=Denbora +;TODO: SING_TIME=TIME SING_TOTAL=Guztira SING_MODE=Bakarka abestu SING_NOTES=Notak @@ -329,7 +348,7 @@ PARTY_PLAYER_ENTER_NAME=Izenak idatzi PARTY_ROUNDS_DESC=Aukeratu zein modurekin jokatu nahi duzun PARTY_ROUNDS_WHEREAMI=Errondak -PARTY_ROUNDS_LEGEND_CONTINUE==Jokoa hasi +PARTY_ROUNDS_LEGEND_CONTINUE=Jokoa hasi PARTY_ROUNDCOUNT=Erronda kopurua PARTY_SELECTMODE=%d. errondaren @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=irabazi du! MODE_RANDOM_NAME=Ausazko modua -MODE_RANDOM_DESC=Modu bat ausaz auketarua izango da +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Eutsi goiari -MODE_HOLDTHELINE_DESC=Ez jaitsi markatutako puntuazio mailatik. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=5000 arte -MODE_5000POINTS_DESC=Azkarrena 5000 puntu lortzen irabazten du. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duelua -MODE_DUEL_DESC=Duelua 10.000 punturarte. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Talde duelua -MODE_TEAMDUEL_DESC=Mikrofonoa pasa! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Itsuan -MODE_BLIND_DESC=Duelua notak ikusi gabe. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Estatistikak STAT_MAIN_DESC=Orokorrak @@ -451,7 +497,6 @@ ERROR_NO_EDITOR=Ezaugarri hau ez dago Linux/Mac-en ERROR_PLAYER_DEVICE_ASSIGNMENT= %d.jokalariak mikrofono bat baino gehiago aukeratuta ditu . Mesedez grabazioaren aukerak begiratu ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Mesedez grabazioaren aukerak begiratu - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options ;TODO: SING_OPTIONS_NETWORK_DESC=Internet General Settings @@ -460,7 +505,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Automatikoa ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -476,15 +521,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Guztia +OPTION_ALL_SCORES=Guztia ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Itzuli ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -522,7 +567,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Itzuli ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -539,16 +584,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name ;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Erronda kopurua ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Hurrengoa mikrofonora ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -567,7 +611,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=Fitxategia gordeta ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -585,7 +629,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -596,17 +640,17 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Menua ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Abestia gehitu +SONG_MENU_DELETE_SONG=Zerrendatik ezabatu ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Guztia ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -614,11 +658,11 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Erresoluzioa ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Efektua ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -631,7 +675,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Arintzea ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -650,7 +694,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Menua ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -659,10 +703,10 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Abestu ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -695,12 +739,12 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Kolorea ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Gorria +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Berdea +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Urdina ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -716,19 +760,19 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Me ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Zerrenda ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Guztia ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Finnish.ini b/game/languages/Finnish.ini index edb7c8fa..2fb36d76 100644 --- a/game/languages/Finnish.ini +++ b/game/languages/Finnish.ini @@ -1,5 +1,6 @@ [Text] OPTION_VALUE_CATALAN=Katalaani +;TODO: OPTION_VALUE_CHINESE=Chinese OPTION_VALUE_CROATIAN=Kroatia OPTION_VALUE_CZECH=Tsekki OPTION_VALUE_DANISH=Tanska @@ -8,6 +9,7 @@ OPTION_VALUE_ENGLISH=Englanti OPTION_VALUE_EUSKARA=Euskara OPTION_VALUE_FINNISH=Suomi OPTION_VALUE_FRENCH=Ranska +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=Saksa OPTION_VALUE_GREEK=Kreikka @@ -19,6 +21,8 @@ OPTION_VALUE_LUXEMBOURGISH=Luxemburg OPTION_VALUE_NORWEGIAN=Norja OPTION_VALUE_POLISH=Puola OPTION_VALUE_PORTUGUESE=Portugal +;TODO: OPTION_VALUE_ROMANIAN=Romanian +;TODO: OPTION_VALUE_RUSSIAN=Russian OPTION_VALUE_SERBIAN=Serbia OPTION_VALUE_SLOVAK=Slovakia OPTION_VALUE_SLOVENIAN=Slovenia @@ -42,9 +46,12 @@ OPTION_VALUE_TITLE2=Nimi2 OPTION_VALUE_ARTIST2=Artisti2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Kappalelista + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Kun ei videota +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Pieni OPTION_VALUE_BIG=Iso @@ -53,6 +60,10 @@ OPTION_VALUE_HALF=Puolikas OPTION_VALUE_FULL_VID=Täysi (Video) OPTION_VALUE_FULL_VID_BG=Täysi (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=Sekunti OPTION_VALUE_SECS=Sekuntia @@ -85,6 +96,8 @@ OPTION_VALUE_SING=Laula OPTION_VALUE_SELECT_PLAYERS=Valitse pelaajat OPTION_VALUE_OPEN_MENU=Avaa valikko +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -118,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Asetukset SING_OPTIONS_GAME=Peli SING_OPTIONS_GRAPHICS=Kuva SING_OPTIONS_SOUND=Äänet +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Lyriikat SING_OPTIONS_THEMES=Teemat SING_OPTIONS_RECORD=Mikrofonit @@ -152,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Klikkausapuri SING_OPTIONS_SOUND_BEAT_CLICK=Biitti klikkaaja SING_OPTIONS_SOUND_THRESHOLD=Aloituspiste SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Kaksinpelimoodi +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Esikatselutaso SING_OPTIONS_SOUND_PREVIEWFADING=Esikatselufeidaus +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Sanoitusasetukset SING_OPTIONS_LYRICS_DESC=Sanoitusasetukset SING_OPTIONS_LYRICS_FONT=Fontti @@ -181,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Kuvan feidaus SING_OPTIONS_ADVANCED_LOADANIMATION=Animaatiot SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Turvakyselyt SING_OPTIONS_ADVANCED_LINEBONUS=Rivibonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Kappaleen valinnan jälkeen SING_OPTIONS_ADVANCED_PARTYPOPUP=Automaattinen tiimipeli @@ -221,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Kappalelista SING_SONGS_IN_CAT=Kappaletta PLAYLIST_CATTEXT=Kappalelista: %s -SING_TIME=Pituus +;TODO: SING_TIME=TIME SING_TOTAL=Pisteesi SING_MODE=Soololaulu SING_NOTES=Nuotilleen @@ -256,8 +277,8 @@ POPUP_BAD=Kamalaa! POPUP_POOR=Surkeaa! POPUP_AWFUL=Kauheaa! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= ja +IMPLODE_GLUE1=, +IMPLODE_GLUE2= ja SONG_MENU_NAME_MAIN=Kappalevalikko SONG_MENU_PLAY=Laula @@ -335,7 +356,7 @@ PARTY_ROUND_DESC=Seuraavat laulajat mikrofoneille PARTY_ROUND_WHEREAMI=Tiimilaulun seuraava kierros PARTY_ROUND_LEGEND_CONTINUE=Aloita kierros -PARTY_SONG_WHEREAMI=Tiimilaulun kappaleen valinta +PARTY_SONG_WHEREAMI=Tiimilaulun kappaleen valinta PARTY_SONG_LEGEND_CONTINUE=Laula PARTY_SONG_MENU=Tiimilauluvalikko @@ -353,38 +374,65 @@ PARTY_NOBODY=Nimetön NEXT_ROUND=Seuraava kierros: PARTY_DISMISSED=hylättyä! -PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=voittoa! MODE_RANDOM_NAME=Satunnaismoodi -MODE_RANDOM_DESC=Moodi valitaan satunnaisesti +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! + +;TODO: MODE_HOLDTHELINE_NAME=Hold the Line +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! -MODE_HDL_NAME=Pysy linjoissa -MODE_HDL_DESC=Älä laula surkeammin kuin viivat ruudulla antaa sinulle mahdollisuuden. +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=♥5000♥ -MODE_5000POINTS_DESC=Kuka saa 5000 pistettä ensin voittaa laulun. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Yhteislaulu -MODE_DUEL_DESC=Laulakaa yhteislaulua kunnes 1000 pistettä kasassa. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Tiimi yhteislaulu -MODE_TEAMDUEL_DESC=Liikuta mikkiä! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Sokeusmoodi -MODE_BLIND_DESC=Yhteislaulu ilman nuottitasojen näkymistä. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Tilastot STAT_MAIN_DESC=Yleiset @@ -400,7 +448,7 @@ STAT_DETAIL=Tilastot STAT_DETAIL_WHEREAMI=Tarkat tilastot STAT_NEXT=Seuraava sivu -STAT_PREV=Edellinen sivu +STAT_PREV=Edellinen sivu STAT_REVERSE=Käänteinen järjestys STAT_PAGE=Seite %0:d of %1:d Pages\n (%2:d of %3:d Entrys) @@ -424,7 +472,7 @@ SCREENSHOT_SAVED=Screenshot saved SCREENSHOT_FAILED=Couldn''t save screenshot INFO_FILE_SAVED=File saved -ERROR_SAVE_FILE_FAILED=Couldn''t save file +ERROR_SAVE_FILE_FAILED=Couldn''t save file ERROR_FILE_NOT_FOUND=File not found ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -448,11 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Kappaletta ei voitu avata: Virhe jäsentäess ERROR_NO_EDITOR=This feature is not available on this version. ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Please check your record options -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Kuinka usein laulettu -;UNUSED: SING_SCORE_HIT_ARTIST=Hitti artisti -;UNUSED: PARTY_ROUNDS=Kierroksia -;TRANSLATOR: Paavo Hietala - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -462,7 +505,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Auto ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -478,15 +521,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Kaikki +OPTION_ALL_SCORES=Kaikki ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Peruuta ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,7 +567,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Peruuta ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -541,16 +584,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name ;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Kierroksien määrä ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Seuraavat laulajat mikrofoneille ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -569,7 +611,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=File saved ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -587,7 +629,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -598,17 +640,17 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Kappalelistavalikko ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Lisää kappale +SONG_MENU_DELETE_SONG=Poista kappale ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Kaikki ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -616,11 +658,11 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Resoluutio ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Tehoste ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -633,7 +675,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Aloituspiste ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -652,7 +694,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Kappalelistavalikko ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -661,10 +703,10 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Laula ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -697,12 +739,12 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Väri ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Punainen +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Vihreä +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Sininen ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -718,19 +760,19 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphones. Pl ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Kappalelista ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Kaikki ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/French.ini b/game/languages/French.ini index e4521c82..b99d8f29 100644 --- a/game/languages/French.ini +++ b/game/languages/French.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=Anglais OPTION_VALUE_EUSKARA=Basque OPTION_VALUE_FINNISH=Finnois OPTION_VALUE_FRENCH=Français +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=Allemand OPTION_VALUE_GREEK=Grec @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luxembourgeois OPTION_VALUE_NORWEGIAN=Norvégien OPTION_VALUE_POLISH=Polonais OPTION_VALUE_PORTUGUESE=Portugais +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Russe OPTION_VALUE_SERBIAN=Serbe OPTION_VALUE_SLOVAK=Slovaque @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=Titre2 OPTION_VALUE_ARTIST2=Artiste2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Playlist + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Si pas de vidéo +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Petit OPTION_VALUE_BIG=Grand @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Moitiée OPTION_VALUE_FULL_VID=Complète OPTION_VALUE_FULL_VID_BG=Complète (Fond + Vidéo) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Automatique OPTION_VALUE_SEC=Seconde OPTION_VALUE_SECS=Secondes @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Chanter OPTION_VALUE_SELECT_PLAYERS=Choix des joueurs OPTION_VALUE_OPEN_MENU=Ouvrir le menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Pointeur matériel OPTION_VALUE_SOFTWARE_CURSOR=Pointeur logiciel @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Options SING_OPTIONS_GAME=Jeu SING_OPTIONS_GRAPHICS=Graphismes SING_OPTIONS_SOUND=Audio +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Paroles SING_OPTIONS_THEMES=Thèmes SING_OPTIONS_RECORD=Micros @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Clics d'aide SING_OPTIONS_SOUND_BEAT_CLICK=Métronome SING_OPTIONS_SOUND_THRESHOLD=Suppression du bruit SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mode 2 joueurs +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Prévisualiser volume SING_OPTIONS_SOUND_PREVIEWFADING=Prévisualiser fondu +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Options des paroles SING_OPTIONS_LYRICS_DESC=Paramètres des paroles SING_OPTIONS_LYRICS_FONT=Caractères @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Fondu écran SING_OPTIONS_ADVANCED_LOADANIMATION=Charge animation SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Confirm. suppression SING_OPTIONS_ADVANCED_LINEBONUS=Bonus des phrases +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Choix ap. chanson SING_OPTIONS_ADVANCED_PARTYPOPUP=Menu fête auto @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Playlist SING_SONGS_IN_CAT=Chansons PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=TEMPS +;TODO: SING_TIME=TIME SING_TOTAL=Total SING_MODE=Mode chanter SING_NOTES=Notes @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=l'emporte ! MODE_RANDOM_NAME=Mode hasard -MODE_RANDOM_DESC=Un mode sera choisi au hasard. +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Tenez la barre -MODE_HOLDTHELINE_DESC=Maintenez la jauge dans le secteur indiqué. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Jusqu'à 5000 -MODE_5000POINTS_DESC=Remportez la manche en étant le 1er à atteindre 5000 points. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duel -MODE_DUEL_DESC=L'équipe victorieuse sera celle qui a le meilleur score. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Duel par équipe -MODE_TEAMDUEL_DESC=Passez le micro ! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=À l'aveugle -MODE_BLIND_DESC=Obtenez le meilleur score sans l'aide des notes. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statistiques STAT_MAIN_DESC=Général @@ -418,7 +464,7 @@ STAT_DESC_SONGS=Chansons favorites STAT_DESC_SONGS_REVERSED=Chansons impopulaires STAT_FORMAT_SONGS=%0:s - %1:s \n Chanté %2:dx -STAT_DESC_BANDS=Artistes favoris +STAT_DESC_BANDS=Artistes favoris STAT_DESC_BANDS_REVERSED=Artistes impopulaires STAT_FORMAT_BANDS=%0:s \n Chansons chantées: %1:d @@ -451,7 +497,6 @@ ERROR_NO_EDITOR=Éditeur introuvable ERROR_PLAYER_DEVICE_ASSIGNMENT=Plusieurs micros sont attribués au joueur %d. Merci de vérifier vos options d'enregistrement ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merci de vérifier vos options d'enregistrement - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options ;TODO: SING_OPTIONS_NETWORK_DESC=Internet General Settings @@ -460,7 +505,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Automatique ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -476,15 +521,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Tout +OPTION_ALL_SCORES=Tout ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Annuler ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -522,7 +567,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Annuler ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -539,16 +584,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name ;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Nbre des manches ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Joueurs suivants, à vos micros ! ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -567,7 +611,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=Fichier sauvegardé ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -585,7 +629,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -596,17 +640,17 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Menu ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Ajouter la chanson +SONG_MENU_DELETE_SONG=Supprimer la chanson ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Tout ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -614,11 +658,11 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Résolution ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Effet ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -631,7 +675,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Suppression du bruit ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -650,7 +694,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Menu ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -659,10 +703,10 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Chanter ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -695,12 +739,12 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Couleur ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Rouge +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Vert +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Bleu ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -716,19 +760,19 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Aucun micro n'est attribué au joueur %d. Merc ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Playlist ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Tout ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Gaelic.ini b/game/languages/Gaelic.ini new file mode 100644 index 00000000..d7b7f608 --- /dev/null +++ b/game/languages/Gaelic.ini @@ -0,0 +1,778 @@ +[Text] +OPTION_VALUE_CATALAN=Catalanais +OPTION_VALUE_CHINESE=Sìnis +OPTION_VALUE_CROATIAN=Cròthaisis +OPTION_VALUE_CZECH=Seicis +OPTION_VALUE_DANISH=Danmhairgis +OPTION_VALUE_DUTCH=Duitsis +OPTION_VALUE_ENGLISH=Beurla +OPTION_VALUE_EUSKARA=Basgais +OPTION_VALUE_FINNISH=Fionnlannais +OPTION_VALUE_FRENCH=Fraingis +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic +OPTION_VALUE_GALICIAN=Gailìsis +OPTION_VALUE_GERMAN=Gearmailtis +OPTION_VALUE_GREEK=Greugais +OPTION_VALUE_HUNGARIAN=Ungairis +OPTION_VALUE_ICELANDIC=Innis Tìlis +OPTION_VALUE_ITALIAN=Eadailtis +OPTION_VALUE_JAPANESE=Seapanais +OPTION_VALUE_LUXEMBOURGISH=Lugsamburgais +OPTION_VALUE_NORWEGIAN=Nirribhis +OPTION_VALUE_POLISH=Pòlainnis +OPTION_VALUE_PORTUGUESE=Portagailis +;TODO: OPTION_VALUE_ROMANIAN=Romanian +OPTION_VALUE_RUSSIAN=Ruisis +OPTION_VALUE_SERBIAN=Sèirbis +OPTION_VALUE_SLOVAK=Slòbhacais +OPTION_VALUE_SLOVENIAN=Slòbhainis +OPTION_VALUE_SPANISH=Spàinntis +OPTION_VALUE_SWEDISH=Suainis + +OPTION_VALUE_EASY=Furasta +OPTION_VALUE_MEDIUM=Meadhanach +OPTION_VALUE_HARD=Doirbh + +OPTION_VALUE_ON=Air +OPTION_VALUE_OFF=Dheth + +OPTION_VALUE_EDITION=Deasachadh +OPTION_VALUE_GENRE=Gnè +OPTION_VALUE_LANGUAGE=Cànan +OPTION_VALUE_FOLDER=Pasgan +OPTION_VALUE_TITLE=Tiotal +OPTION_VALUE_ARTIST=Neach-ciùil +OPTION_VALUE_TITLE2=Tiotal 2 +OPTION_VALUE_ARTIST2=Neach-ciùil 2 +OPTION_VALUE_YEAR=Bliadhna +OPTION_VALUE_DECADE=Deichead +OPTION_VALUE_PLAYLIST=Liosta-chluich + +OPTION_VALUE_BORDERLESS=Gun iomall + +OPTION_VALUE_WHENNOVIDEO=Mur eil video ann +OPTION_VALUE_WHENNOVIDEOANDIMAGE=Mur eil video no dealbh ann + +OPTION_VALUE_SMALL=Beag +OPTION_VALUE_BIG=Mòr + +OPTION_VALUE_HALF=Leth-mheud +OPTION_VALUE_FULL_VID=Làn-sgrìn (video) +OPTION_VALUE_FULL_VID_BG=Làn-sgrìn (cùlaibh ⁊ video) + +OPTION_VALUE_GAIN_SOFT=Bog +OPTION_VALUE_GAIN_MEDIUM=Meadhanach +OPTION_VALUE_GAIN_HARD=Cruaidh + +OPTION_VALUE_AUTO=Fèin-obrachail +OPTION_VALUE_SEC=Diog +OPTION_VALUE_SECS=diog(an) + +OPTION_VALUE_PLAIN=Lom +OPTION_VALUE_OLINE1=Oir-loidhne 1 +OPTION_VALUE_OLINE2=Oir-loidhne 2 + +OPTION_VALUE_SIMPLE=Simplidh +OPTION_VALUE_ZOOM=Sùm +OPTION_VALUE_SLIDE=Lìonadh +OPTION_VALUE_BALL=Bàla +OPTION_VALUE_SHIFT=Leum + +OPTION_VALUE_EURO=Eòrpach +OPTION_VALUE_JAPAN=Seapanach +OPTION_VALUE_AMERICAN=Aimeireaganach + +OPTION_VALUE_BLUE=Gorm +OPTION_VALUE_GREEN=Uaine +OPTION_VALUE_PINK=Pinc +OPTION_VALUE_RED=Dearg +OPTION_VALUE_VIOLET=Purpaidh +OPTION_VALUE_ORANGE=Orainds +OPTION_VALUE_YELLOW=Buidhe +OPTION_VALUE_BROWN=Donn +OPTION_VALUE_BLACK=Dubh + +OPTION_VALUE_SING=Seinn +OPTION_VALUE_SELECT_PLAYERS=Tagh cluicheadairean +OPTION_VALUE_OPEN_MENU=Fosgail an clàr-taice + +OPTION_VALUE_SYSTEM_CURSOR=Air [cùrsair an t-siostaim] +OPTION_VALUE_GAME_CURSOR=Air [cùrsair a’ gheama] +OPTION_VALUE_HARDWARE_CURSOR=Cùrsair bathair-chruaidh +OPTION_VALUE_SOFTWARE_CURSOR=Cùrsair bathair-bhog + +SING_LOADING=’Ga luchdadh… + +SING_CHOOSE_MODE=Tagh am modh +SING_SING=Seinn +SING_SING_DESC=Geama luath: seinn ’nad aonar no òran-càraid + +SING_MULTI=Cèilidh +SING_MULTI_DESC=Seinn sa mhodh-chèilidh + +SING_TOOLS=Innealan + +SING_STATS=Stadastaireachd +SING_STATS_DESC=Seall an stadastaireachd + +SING_EDITOR=Deasaiche +SING_EDITOR_DESC=Cruthaich òran agad fhèin + +SING_GAME_OPTIONS=Roghainnean a’ gheama +SING_GAME_OPTIONS_DESC=Atharraich roghainnean a’ gheama + +SING_EXIT=Fàg an-seo +SING_EXIT_DESC=Fàg an geama + +SING_OPTIONS=Roghainnean +SING_OPTIONS_DESC=Atharraich na roghainnean +SING_OPTIONS_WHEREAMI=Roghainnean + +SING_OPTIONS_GAME=Geama +SING_OPTIONS_GRAPHICS=Grafaigeachd +SING_OPTIONS_SOUND=Fuaim +SING_OPTIONS_INPUT=Ion-chur +SING_OPTIONS_LYRICS=Faclan +SING_OPTIONS_THEMES=Ùrlaran +SING_OPTIONS_RECORD=Clàradh +SING_OPTIONS_ADVANCED=Adhartach +SING_OPTIONS_EXIT=Air ais + +SING_OPTIONS_GAME_WHEREAMI=Roghainnean a’ gheama +SING_OPTIONS_GAME_DESC=Roghainnean coitcheann a’ gheama +SING_OPTIONS_GAME_PLAYERS=Cluicheadairean +SING_OPTIONS_GAME_DIFFICULTY=Duilgheadas +SING_OPTIONS_GAME_LANGUAGE=Cànan +SING_OPTIONS_GAME_TABS=Tabaichean +SING_OPTIONS_GAME_SORTING=Seòrsachadh +SING_OPTIONS_GAME_DEBUG=Dì-bhugachadh + +SING_OPTIONS_GRAPHICS_WHEREAMI=Roghainnean na grafaigeachd +SING_OPTIONS_GRAPHICS_DESC=Roghainnean na grafaigeachd +SING_OPTIONS_GRAPHICS_RESOLUTION=Dùmhlachd-bhreacaidh +SING_OPTIONS_GRAPHICS_FULLSCREEN=Làn-sgrìn +SING_OPTIONS_GRAPHICS_DEPTH=Doimhne +SING_OPTIONS_GRAPHICS_VISUALIZER=Fir chlis +;TODO: SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloscope +SING_OPTIONS_GRAPHICS_LINEBONUS=Duais loidhne +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Meud an fhilm + +SING_OPTIONS_SOUND_WHEREAMI=Roghainnean fuaime +SING_OPTIONS_SOUND_DESC=Roghainnean fuaime +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Cluich a’ mhicreofon +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Ceòl a’ chùlaibh +SING_OPTIONS_SOUND_MIC_BOOST=Meudachadh a’ mhic +SING_OPTIONS_SOUND_CLICK_ASSIST=Cuidiche cliog +SING_OPTIONS_SOUND_BEAT_CLICK=Cliog nam buillean +SING_OPTIONS_SOUND_THRESHOLD=Stairsneach +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modh dà-chluicheadair +SING_OPTIONS_SOUND_MUSICAUTOGAIN=Meudachadh a’ chiùil +SING_OPTIONS_SOUND_PREVIEWVOLUME=Ro-sheall an àirde +SING_OPTIONS_SOUND_PREVIEWFADING=Ro-sheall an crìonadh + +SING_OPTIONS_INPUT_WHEREAMI=Roghainnean an ion-chuir +SING_OPTIONS_INPUT_DESC=Roghainnean an ion-chuir +SING_OPTIONS_INPUT_MOUSE=Luchag +SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Uidheaman-smachd + +SING_OPTIONS_LYRICS_WHEREAMI=Roghainnean nam faclan +SING_OPTIONS_LYRICS_DESC=Roghainnean nam faclan +SING_OPTIONS_LYRICS_FONT=Cruth-clò +SING_OPTIONS_LYRICS_EFFECT=Èifeachd +SING_OPTIONS_LYRICS_SOLMIZATION=Canntaireachd +SING_OPTIONS_LYRICS_NOTELINES=Clàran + +SING_OPTIONS_THEMES_WHEREAMI=Roghainnean nan ùrlaran +SING_OPTIONS_THEMES_DESC=Roghainnean nan ùrlaran ’s nan craicnean +SING_OPTIONS_THEMES_THEME=Ùrlar +SING_OPTIONS_THEMES_SKIN=Craiceann +SING_OPTIONS_THEMES_COLOR=Dath + +SING_OPTIONS_RECORD_WHEREAMI=Roghainnean a’ chlàraidh +SING_OPTIONS_RECORD_DESC=Roghainnean a’ mhicreofon +SING_OPTIONS_RECORD_CARD=Cairt fuaime +SING_OPTIONS_RECORD_INPUT=Ion-chur +SING_OPTIONS_RECORD_CHANNEL=Seanail + +SING_OPTIONS_ADVANCED_WHEREAMI=Roghainnean adhartach +SING_OPTIONS_ADVANCED_DESC=Roghainnean adhartach +SING_OPTIONS_ADVANCED_EFFECTSING=Èifeachdan seinne +SING_OPTIONS_ADVANCED_SCREENFADE=Crìonadh na sgrìn +SING_OPTIONS_ADVANCED_LOADANIMATION=Luchdaich beòthachadh +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Ceistean dìonaidh +SING_OPTIONS_ADVANCED_LINEBONUS=Duais loidhne +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=Às dèidh òrain tagh +SING_OPTIONS_ADVANCED_PARTYPOPUP=Fèin-chlàr-cèilidh + +SING_EDIT=Deasaiche +SING_EDIT_MENU_DESCRIPTION=Cruthaich òran agad fhèin + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Ion-phortaich teacsa o fhaidhle MIDI +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Air ais +SING_EDIT_BUTTON_CONVERT=Ion-phortaich +SING_EDIT_BUTTON_EXIT=Air ais + +SING_EDIT_NAVIGATE=Seòl +SING_EDIT_SELECT=Tagh +SING_EDIT_EXIT=Air ais + +SING_LEGEND_SELECT=Tagh +SING_LEGEND_NAVIGATE=Seòl +SING_LEGEND_CONTINUE=Air adhart +SING_LEGEND_ESC=Air ais + +SING_PLAYER_DESC=Cuir a-steach ainmean nan cluicheadairean +SING_PLAYER_WHEREAMI=Ainmean nan cluicheadairean +SING_PLAYER_ENTER_NAME=Cuir a-steach ainm + +SING_DIFFICULTY_DESC=Tagh an duilgheadas +SING_DIFFICULTY_WHEREAMI=Duilgheadas +SING_DIFFICULTY_CONTINUE=Gu taghadh an òrain +SING_EASY=Furasta +SING_MEDIUM=Meadhanach +SING_HARD=Doirbh + +SING_SONG_SELECTION_DESC=Tagh an t-òran agad +SING_SONG_SELECTION_WHEREAMI=Taghadh an òrain +SING_SONG_SELECTION_GOTO=Rach gu … +SING_SONG_SELECTION=Taghadh an òrain +SING_SONG_SELECTION_MENU=Clàr-taice +SING_SONG_SELECTION_PLAYLIST=Liosta-chluich +SING_SONGS_IN_CAT=Òrain +PLAYLIST_CATTEXT=Liosta-chluich: %s + +SING_TIME=ÙINE +SING_TOTAL=Iomlan +SING_MODE=Seinn ’nad aonar +SING_NOTES=Pongan +SING_GOLDEN_NOTES=Pongan òir +SING_PHRASE_BONUS=Duais loidhne + +SING_MENU=Am prìomh chlàr-taice + +SONG_SCORE=Sgòr an òrain +SONG_SCORE_WHEREAMI=Sgòr + +SING_SCORE_TONE_DEAF=Bodhar +SING_SCORE_AMATEUR=Neach tòiseachaidh +SING_SCORE_WANNABE=Suarach +SING_SCORE_HOPEFUL=Dòchasach +SING_SCORE_RISING_STAR=Reultag +SING_SCORE_LEAD_SINGER=Prìomh sheinneadair +SING_SCORE_SUPERSTAR=Rionnag mhòr +SING_SCORE_ULTRASTAR=Bonn òir + +SING_TOP_5_CHARTS=Na 5 cluicheadairean as fhearr +SING_TOP_5_CHARTS_WHEREAMI=Na 5 as fhearr +SING_TOP_5_CHARTS_CONTINUE=Gu taghadh an òrain +SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Atharraich an duilgheadas + +POPUP_PERFECT=foirfe! +POPUP_AWESOME=sgoinneil! +POPUP_GREAT=sin thu! +POPUP_GOOD=math! +POPUP_NOTBAD=ceart gu leòr! +POPUP_BAD=dona! +POPUP_POOR=sgriosail! +POPUP_AWFUL=uabhasach! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2=’s + +SONG_MENU_NAME_MAIN=Clàr-taice an òrain +SONG_MENU_PLAY=Seinn +SONG_MENU_CHANGEPLAYERS=Cluicheadairean eile +SONG_MENU_EDIT=Deasaich +SONG_MENU_MODI=Seinn modh +SONG_MENU_CANCEL=Sguir dheth + +SONG_MENU_NAME_PLAYLIST=Clàr-taice +SONG_MENU_PLAYLIST_ADD=Cuir òran ris +SONG_MENU_PLAYLIST_DEL=Sguab às òran + +SONG_MENU_NAME_PLAYLIST_ADD=Cuir òran ris +SONG_MENU_PLAYLIST_ADD_NEW=Gu liosta-chluich ùr +SONG_MENU_PLAYLIST_ADD_EXISTING=Gu liosta-chluich a tha ann +SONG_MENU_PLAYLIST_NOEXISTING=Chan eil liosta-chluich ann + +SONG_MENU_NAME_PLAYLIST_NEW=Liosta-chluich ùr +SONG_MENU_PLAYLIST_NEW_CREATE=Cruthaich +SONG_MENU_PLAYLIST_NEW_UNNAMED=Gun ainm + +SONG_MENU_NAME_PLAYLIST_DELITEM=A bheil thu airson a sguabadh às? +SONG_MENU_YES=Tha +SONG_MENU_NO=Chan eil + +SONG_MENU_NAME_PLAYLIST_LOAD=Fosgail liosta-chluich +SONG_MENU_PLAYLIST_LOAD=Fosgail +SONG_MENU_PLAYLIST_DELCURRENT=Sguab às an liosta-chluich seo + +SONG_MENU_NAME_PLAYLIST_DEL=A bheil thu airson an liosta-chluich a sguabadh às? + +SONG_MENU_NAME_PARTY_MAIN=Clàr-taice +SONG_MENU_JOKER=Amadan + +SONG_MENU_NAME_PARTY_JOKER=Cleachd amadan + +SONG_JUMPTO_DESC=Lorg òran +SONG_JUMPTO_TYPE_DESC=Lorg: +SONG_JUMPTO_TYPE1=Na h-uile +SONG_JUMPTO_TYPE2=Tiotal +SONG_JUMPTO_TYPE3=Neach-ciùil +SONG_JUMPTO_SONGSFOUND=Chaidh %d òra(i)n a lorg +SONG_JUMPTO_NOSONGSFOUND=Cha deach òran a lorg +SONG_JUMPTO_HELP=Sgrìobh an teacsa ri lorg +SONG_JUMPTO_CATTEXT=Lorg: %s + +PARTY_MODE=Modh cèilidh +PARTY_DIFFICULTY=Duilgheadas +PARTY_PLAYLIST=Modh liosta-cluich +PARTY_PLAYLIST_ALL=Na h-uile òran +PARTY_PLAYLIST_CATEGORY=Pasgan +PARTY_PLAYLIST_PLAYLIST=Liosta-chluich +PARTY_TEAMS=Sgiobaidhean +PARTY_TEAMS_PLAYER1=Seinneadairean +PARTY_TEAMS_PLAYER2=Seinneadairean +PARTY_TEAMS_PLAYER3=Seinneadairean + +PARTY_LEGEND_CONTINUE=Air adhart + +PARTY_OPTIONS_DESC=Roghainnean aig a’ gheama chèilidh +PARTY_OPTIONS_WHEREAMI=Roghainnean cèilidh + +PARTY_PLAYER_DESC=Cuir a-steach ainmean nan cluicheadairean ’s nan sgiobaidhean! +PARTY_PLAYER_WHEREAMI=Ainmean na cèilidh +PARTY_PLAYER_ENTER_NAME=Sgrìobh ainmean + + +PARTY_ROUNDS_DESC=Tagh na modhan a tha thu airson cluich +PARTY_ROUNDS_WHEREAMI=Cuairtean na cèilidh +PARTY_ROUNDS_LEGEND_CONTINUE=Tòisich air geama cèilidh +PARTY_ROUNDCOUNT=Cuairtean +PARTY_SELECTMODE=Cuairt %d + +PARTY_ROUND_DESC=Na h-ath-chluicheadairean dhan mhicreofon +PARTY_ROUND_WHEREAMI=Ath-chuairt na cèilidh +PARTY_ROUND_LEGEND_CONTINUE=Tòisich a’ chuairt + +PARTY_SONG_WHEREAMI=Tagh òrain na cèilidh +PARTY_SONG_LEGEND_CONTINUE=Seinn +PARTY_SONG_MENU=Clàr-taice + +PARTY_SCORE_DESC=Sgòr na cuairte mu dheireadh +PARTY_SCORE_WHEREAMI=Puingean na cèilidh + +PARTY_WIN_DESC=Buannaiche a’ gheama chèilidh +PARTY_WIN_WHEREAMI=Buannaiche na cèilidh +PARTY_WIN_LEGEND_CONTINUE=Till dhan phrìomh chlàr-taice + +PARTY_ROUND=Cuairt +PARTY_ROUND_WINNER=Buannaiche +PARTY_NOTPLAYEDYET=Ri teachd +PARTY_NOBODY=Gun neach sam bith +NEXT_ROUND=An ath-chuairt: + +PARTY_DISMISSED=Faodaidh sibh falbh! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=Air buannachd! + +MODE_RANDOM_NAME=Modh air thuaiream +MODE_RANDOM_DESC=Thoir an aire! Taghaidh an geama modh air thuaiream dhut! + +MODE_HOLDTHELINE_NAME=Cùm air an loidhne +MODE_HOLDTHELINE_DESC=Cum an rangachadh agad os cionn na loidhne nas fhaide na càch! + +MODE_HOLDTHELINEBLIND_NAME=Treòir nan dall +MODE_HOLDTHELINEBLIND_DESC=Cum an rangachadh agad os cionn na loidhne nas fhaide na càch ach leis na pongan falaichte! + +MODE_7000POINTS_NAME=Gu ruige 7,000 +MODE_7000POINTS_DESC=Rèis an toir air 7,000 puing! + +MODE_7000POINTSBLIND_NAME=7,000 gu dall +MODE_7000POINTSBLIND_DESC=Rèis an toir air 7,000 puing ach gun a bhith a’ faicinn nam pong! + +MODE_5000POINTS_NAME=Gu ruige 5,000 +MODE_5000POINTS_DESC=Rèis an toir air 5,000 puing! + +MODE_5000POINTSBLIND_NAME=5,000 gu dall +MODE_5000POINTSBLIND_DESC=Rèis an toir air 5,000 puing ach gun a bhith a’ faicinn nam pong! + +MODE_2000POINTS_NAME=Gu ruige 2,000 +MODE_2000POINTS_DESC=Rèis an toir air 2,000 puing! + +MODE_2000POINTSBLIND_NAME=2,000 gu dall +MODE_2000POINTSBLIND_DESC=Rèis an toir air 2,000 puing ach gun a bhith a’ faicinn nam pong! + +MODE_DUEL_NAME=Còmhrag-dhithis +MODE_DUEL_DESC=Seinn còmhrag-dhithis gus an sgòr as àirde fhaighinn! + +MODE_TEAMDUEL_NAME=Còmhrag eadar dà sgioba +MODE_TEAMDUEL_DESC=Cuir am micreofon a-null ’s a-nall! Obraichibh còmhla ach am faigh sibh sgòr nas àirde na an sgioba eile! + +MODE_BLIND_NAME=Modh dall +MODE_BLIND_DESC=Còmhrag-dhithis leis na pongan ’gam falach! + +MODE_BLINDTOTAL_NAME=Dubh-dorchadas! +MODE_BLINDTOTAL_DESC=Còmhrag-dhithis le pongan is faclan falaichte. Dha ghaisgich a-mhàin! + +MODE_1000BLIND_NAME = +1,000 gu dall +MODE_1000BLIND_DESC =Bidh air thoiseach air càch le corr is 1,000 puing ach gun a bhith a’ faicinn nam pong! + +MODE_DEAF_NAME =Bodhar +MODE_DEAF_DESC =Saoil a bheil thu eòlach air na pongan? An seinn thu às aonais taic-ciùil? + +MODE_BLINDLYRICS_NAME =Gun fhaclan +MODE_BLINDLYRICS_DESC =Saoil a bheil thu eòlach air na faclan? Seinn às aonais nam faclan sgrìobhte! + +MODE_500BLIND_NAME = +500 gu dall +MODE_500BLIND_DESC =Bidh air thoiseach air càch le corr is 500 puing ach gun a bhith a’ faicinn nam pong! + +MODE_SHORTSONG_NAME =Òran goirid +MODE_SHORTSONG_DESC =Còmhrag-dhithis luath thar leth-òran! + +MODE_HARDCORE_NAME=Gaisgich +MODE_HARDCORE_DESC=Strì airsona bhith trì loidhnichean air thoiseach a’ cho-fharpaisich! + +STAT_MAIN=Stadastaireachd +STAT_MAIN_DESC=Coitcheann +STAT_MAIN_WHEREAMI=Stadastaireachd + +STAT_OVERVIEW_INTRO=Stadastaireachd %0:s. \nAn t-ath-shuidheachadh mu dheireadh aig %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d òrain (%3:d le video), %1:d dhiubh air an cluich roimhe is %2:d gun chluich fhathast.\n Is %5:s le %4:s an t-òran as fhèillmhoire. +STAT_OVERVIEW_PLAYER=Bha %0:d c(h)luicheadair(ean) ann on ath-shuidheachadh mu dheireadh.\nIs %1:s an cluicheadair as fhearr le sgòr cuibheasach dhe %2:d p(h)uing(ean).\nRàinig %3:s an sgòr as àirde le %4:d p(h)uing(ean). + +STAT_FORMAT_DATE=%1:.2d.%0:.2d.%2:d + +STAT_DETAIL=Stadastaireachd +STAT_DETAIL_WHEREAMI=Stadastaireachd + +STAT_NEXT=An ath-dhuilleag +STAT_PREV=An duilleag roimhpe +STAT_REVERSE=Òrdugh contrarra +STAT_PAGE=Duilleag %0:d à %1:d\n(innteart %2:d à %3:d) + +STAT_DESC_SCORES=Sgòran àrda +STAT_DESC_SCORES_REVERSED=Sgòran ìosal +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] %5:s \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Air seinn as fhearr +STAT_DESC_SINGERS_REVERSED=Air seinn as miosa +STAT_FORMAT_SINGERS=%0:s \nSgòr cuibheasach: %1:d + +STAT_DESC_SONGS=Òrain fhèillmhor +STAT_DESC_SONGS_REVERSED=Òrain nach do chòrd +STAT_FORMAT_SONGS=%0:s - %1:s \nChaidh a sheinn %2:d turas/tursan + +STAT_DESC_BANDS=Còmhlanan fèillmhor +STAT_DESC_BANDS_REVERSED=Còmhlanan nach do chòrd +STAT_FORMAT_BANDS=%0:s \nChaidh a sheinn %1:d turas/tursan + +SCREENSHOT_SAVED=Chaidh an glacadh-sgrìn a shàbhaladh +SCREENSHOT_FAILED=Cha b’ urrainn dhuinn an glacadh-sgrìn a shàbhaladh + +INFO_FILE_SAVED=Chaidh am faidhle a shàbhaladh +ERROR_SAVE_FILE_FAILED=Cha b’ urrainn dhuinn am faidhle a shàbhaladh +ERROR_FILE_NOT_FOUND=Cha deach am faidhle a lorg + +ENCODING_ERROR_ASK_FOR_UTF8=Cha ghabh na h-atharraichean a shàbhaladh leis a’ chòdachadh seo. A bheil thu airson iompachadh gu UTF-8? +EDITOR_ERROR_NO_TRACK_SELECTED=Cha deach traca a thaghadh + +MSG_ERROR_TITLE=Mearachd +MSG_INFO_TITLE=Fiosrachadh +MSG_QUESTION_TITLE=Ceist +MSG_QUIT_USDX=A bheil thu airson UltraStar fhàgail? +MSG_END_PARTY=A bheil thu airson am modh cèilidh fhàgail? + +ERROR_NO_SONGS=Cha deach òran a luchdadh +ERROR_NO_PLUGINS=Cha deach plugan a luchdadh +ERROR_NO_MODES_FOR_CURRENT_SETUP=Chan eil modh ri làimh airson an roghainn de chluicheadair/sgioba seo +ERROR_CAN_NOT_START_PARTY=Thachair mearachd le tòiseachadh a’ gheama chèilidh +ERROR_CORRUPT_SONG=Cha b’ urrainn dhuinn an t-òran a luchdadh. +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Cha b’ urrainn dhuinn an t-òran a luchdadh: Cha deach am faidhle a lorg +ERROR_CORRUPT_SONG_NO_NOTES=Cha b’ urrainn dhuinn an t-òran a luchdadh: Cha deach pong a lorg +ERROR_CORRUPT_SONG_NO_BREAKS=Cha b’ urrainn dhuinn an t-òran a luchdadh: Cha deach brisidhean loidhne a lorg +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Cha b’ urrainn dhuinn an t-òran a luchdadh: Mearachd e parsadh na loidhne %0:d +ERROR_NO_EDITOR=Chan eil an gleus seo ri làimh san tionndadh seo. +ERROR_PLAYER_DEVICE_ASSIGNMENT=Chaidh iomadh micreofon a shònrachadh dha chluicheadair %d. Feuch an toir thu sùil air na roghainnean clàraidh agad +ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Cha deach micreofon a shònrachadh dha chluicheadair %d. Feuch an toir thu sùil air na roghainnean clàraidh agad + +SING_OPTIONS_NETWORK=Eadar-lìon +SING_OPTIONS_NETWORK_WHEREAMI=Roghainnean an eadar-lìn +SING_OPTIONS_NETWORK_DESC=Roghainnean coitcheann an eadar-lìn +SING_OPTIONS_NETWORK_INSERT_USER_INFO=Brùth air an iuchair “Insert” gus an cleachdaiche a chur ris an lìon seo… +SING_OPTIONS_NETWORK_WEBSITE=Làrach-lìn +SING_OPTIONS_NETWORK_USERNAME=Ainm-cleachdaiche +SING_OPTIONS_NETWORK_PASSWORD=Facal-faire +SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Cuir a-null an t-ainm +SING_OPTIONS_NETWORK_AUTO_MODE=Fèin-obrachail +SING_OPTIONS_NETWORK_AUTO_PLAYER=Cluicheadair +SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Cuir gu fèin-obrachail (furasta) +SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Cuir gu fèin-obrachail (meadhanach) +SING_OPTIONS_NETWORK_AUTO_SCORE_HARD=Cuir gu fèin-obrachail (doirbh) +SING_OPTIONS_NETWORK_NO_DLL=Cha deach clàr curaidh co-chòrdail a lorg! +SING_OPTIONS_NETWORK_DELETE_PLAYER=A bheil thu airson an cleachdaiche %0:s air an làrach-lìn %1:s a sguabadh ás? +SING_OPTIONS_NETWORK_LEGEND_INSERT=Cuir a-steach +SING_OPTIONS_NETWORK_LEGEND_DELETE=Sguab às + +OPTION_PLAYER_1=Cluicheadair 1 +OPTION_PLAYER_2=Cluicheadair 2 +OPTION_PLAYER_3=Cluicheadair 3 +OPTION_PLAYER_4=Cluicheadair 4 +OPTION_PLAYER_5=Cluicheadair 5 +OPTION_PLAYER_6=Cluicheadair 6 +OPTION_ALL_PLAYERS=Na h-uile +OPTION_ALL_SCORES=Na h-uile +OPTION_VALUE_SAVE=Sàbhail +OPTION_VALUE_SEND=Cuir a-null + +MSG_INSERT_USER_TITLE=%0:s +MSG_INSERT_USER_DESC=Lìon na raointean: +MSG_INSERT_USER_ADD=Cuir ris +MSG_INSERT_USER_CANCEL=Sguir dheth + +WEBSITE_NO_CONNECTION=Chan eil ceangal dhan làrach-lìn ann! +WEBSITE_LOGIN_ERROR=Chan eil an clàradh a-steach mar bu chòir! +WEBSITE_BLANK_LOGIN=Cha raon falamh ann! +WEBSITE_EXIST_USER=Tha an cleachdaiche seo ann mar-thà! +WEBSITE_ERROR_SCORE=Mearachd an sgòir! +WEBSITE_OK_SEND=Chaidh an sgòr a chur a-null! +WEBSITE_ERROR_SCORE_DUPLICATED=Tha an sgòr seo ann mar-thà! +WEBSITE_ERROR_SONG=Cha deach a t-òran a lorg! +WEBSITE_SAVE_SCORE=Chaidh an sgòr a shàbhaladh! +WEBSITE_NO_CONNECTION_SAVE=Chan eil ceangal dhan làrach-lìn ann! A bheil thu airson an chleachdaiche a shàbhaladh co-dhiù? + +SONG_MENU_REFRESH_SCORES=Ùraich na sgòran +SONG_MENU_REFRESH_SCORES_TITLE=Ùraich +SONG_MENU_REFRESH_SCORES_NO_WEB=Chan eil làrach-lìn ann! +SONG_MENU_REFRESH_SCORES_ONLINE=Air loidhne +SONG_MENU_REFRESH_SCORES_FILE=Faidhle +SONG_MENU_REFRESH_SCORES_ALL_WEB=A h-uile làrach-lìn +SONG_MENU_REFRESH_SCORES_ALL_SONGS=A h-uile òran +SONG_MENU_REFRESH_SCORES_ONLY_SONG=An t-òran seo +SONG_MENU_REFRESH_SCORES_REFRESH=Ùraich +SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION=Mearachd leis a’ cheangal dhan làrach-lìn: %0:s! +SONG_MENU_REFRESH_SCORES_ERROR_FILE=Cha deach am faidhle a lorg: “%0:s [Download Scores]”! + +SONG_SCORE_MAX=As fearr: +SONG_SCORE_MEDIA=Cuibheasach: + +SCORE_SEND_DESC=Cuir a-null an sgòr +SCORE_SEND=Cuir a-null +SCORE_SEND_PLAYER=Cluicheadair +SCORE_SEND_OTHER_USER=Ainm-cleachdaiche eile +SCORE_SAVE=Sàbhail + +SCORE_DOWNLOAD_TITLE=Luchdadh a-nuas +SCORE_DOWNLOAD_SONG=Òran: +SCORE_DOWNLOAD_CREATE_LIST=Ag ullachadh na liosta… +SCORE_DOWNLOAD_RECEIVE_LIST=’Ga luchdadh a-nuas… +SCORE_DOWNLOAD_CANCEL=Sguir dheth +SCORE_DOWNLOAD_OK=Ceart ma-thà +SCORE_DOWNLOAD_SONG_UPDATE=Chaidh %0:d òra(i)n atharrachadh leis an lìon! + +SING_OPTIONS_GAME_SHOWSCORES=Seall na sgòran +OPTION_VALUE_WHENEXIST=Nuair a bhios gin ann + +PARTY_SELECT_MODE=Modh +PARTY_MODE_CLASSIC=Clasaigeach +PARTY_MODE_CLASSIC_FREE=Saor ’s clasaigeach +PARTY_MODE_CHALLENGE=Dùbhlan +PARTY_MODE_TOURNAMENT=Co-fharpais +PARTY_MODE_JUKEBOX=Inneal-chlàr +PARTY_MODE_NOT_AVAILABLE=Chan eil seo ri fhaighinn! + +PARTY_MODE_TOURNAMENT_PLAYER_DESC=Cuir a-steach àireamh is ainm a’ chluicheadair +PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Co mheud cluicheadair +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Co mheud cuairt +PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Cuairt dheireannach +PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Iar-chuairt dheireannach +PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Ceithir-chuairt dheireannach +PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Cuairt dhe 16 +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Na h-ath-chluicheadairean dhan mhicreofon +PARTY_MODE_TOURNAMENT_WIN_DESC=Toradh na cuairte +PARTY_MODE_TOURNAMENT_CHAMPION=Bhuannaich %0:s! + +EDIT_TITLE=Tiotal: +EDIT_ARTIST=Neach-ciùil: +EDIT_MP3=MP3: +EDIT_BPM=BPM: +EDIT_GAP=Beàrn: +EDIT_COVER=Còmhdachadh: +EDIT_BACKGROUND=Cùlaibh: + +EDIT_START=Toiseach: +EDIT_DURATION=Faide: +EDIT_TONE=Pong: +EDIT_LYRIC=Faclan: +EDIT_VIDEOGAP=Beàrn a' video: +EDIT_VOLUME_AUDIO=Àirde na fuaime: +EDIT_VOLUME_MIDI=Àirde MIDI: +EDIT_VOLUME_CLICK=Àirde a’ chliog: +INFO_UNDO=Neo-dhèan an gnìomh mu dheireadh + +INFO_FILE_SAVED=Chaidh am faidhle a shàbhaladh +INFO_TIME_FIXED=Chaidh na tìmeachaidhean a cheartachadh +INFO_CAPITALIZE=Chaidh na faclan mòra is beaga a cheartachadh +INFO_EXIT=A bheil thu airson an deasaiche fhàgail gun a bhith ’ga shàbhaladh? +INFO_SONG_RELOADED=Chaidh an t-òran ath-luchdadh +INFO_DIVIDED_BPM=BPM roinnte +INFO_MULTIPLIED_BPM=BPM iomadaichte +INFO_PLAY_SONG=Cluich an t-òran +INFO_PLAY_SENTENCE=Cluich an seantans +INFO_CURRENT_LINE=Loidhne: +INFO_CURRENT_NOTE=An aire: + +INFO_MIDI_CHANNEL_OFF= Seanail %0:s dheth! +INFO_MIDI_CHANNEL_RESET=Tha gach seanail air! + +MSG_END_JUKEBOX=A bheil thu airson modh an inneil-chlàr fhàgail? +JUKEBOX_RANDOM=Air thuaiream +JUKEBOX_REPEAT=Ath-chluich +JUKEBOX_FIND=Lorg: +JUKEBOX_SORT=Seòrsaich: +JUKEBOX_SONGLIST=Liosta nan òran + +SING_ERROR_DUET_MODE_PARTY =Seo òran-càraid! Cha ghabh a chluich sa mhodh chèilidh! + +SONG_MENU_SONG=Òran +SONG_MENU_MEDLEY=Measgachadh +SONG_MENU_SORTING=Seòrsaich +SONG_MENU_EXTRA=Roghainnean eile + +SONG_MENU_NAME_SONG=Clàr-taice nan òran +SONG_MENU_NAME_MEDLEY=Clàr-taice a' mheasgachaidh +SONG_MENU_ADD_SONG=Cuir òran ris +SONG_MENU_DELETE_SONG=Sguab às an òran +SONG_MENU_START_MEDLEY=Seinn! +SONG_MENU_START_5_MEDLEY=Seinn %0:d òra(i)n! + +SONG_MENU_NAME_SORTING=Clàr-taice seòrsachaidh +SONG_MENU_SORTING_TABS_ON=Tabaichean air +SONG_MENU_SORTING_TABS_OFF=Tabaichean dheth +SONG_MENU_SORTING_ALL=Na h-uile +SONG_MENU_SORTING_DUET=Òrain-chàraid +SONG_MENU_SORTING_APPLY=Cuir an sàs + +SING_OPTIONS_WEBCAM=Camara-lìn +SING_OPTIONS_WEBCAM_DESC=Roghainnean a’ chamara-lìn +SING_OPTIONS_WEBCAM_WHEREAMI=Roghainnean a’ chamara-lìn +SING_OPTIONS_WEBCAM_ID=Camara-lìn +SING_OPTIONS_WEBCAM_RESOLUTION=Dùmhlachd-bhreacaidh +SING_OPTIONS_WEBCAM_FPS=FPS +SING_OPTIONS_WEBCAM_NO_WEBCAM=cha deach camara-lìn a lorg! +SING_OPTIONS_WEBCAM_FLIP=Thoir flip +SING_OPTIONS_WEBCAM_EFFECT=Èifeachd +SING_OPTIONS_WEBCAM_BRIGHTNESS=Soilleireachd +SING_OPTIONS_WEBCAM_SATURATION=Sàthachd +SING_OPTIONS_WEBCAM_HUE=Tuar +SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Cuir an ro-shealladh an comas +SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Cuir an ro-shealladh à comas + +SING_OPTIONS_WEBCAM_EFFECT_NORMAL=Àbhaisteach +SING_OPTIONS_WEBCAM_EFFECT_GRAYSCALE=Liath-sgèile +SING_OPTIONS_WEBCAM_EFFECT_BLACK_WHITE=Dubh ⁊ geal +SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Neagataibh +SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Dealbh bìnearaidh +SING_OPTIONS_WEBCAM_EFFECT_DILATE=Sgaoil +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Stairsneach +SING_OPTIONS_WEBCAM_EFFECT_EDGES=Oirean +SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Sgleò Gaussach +SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Co-chothromaichte +SING_OPTIONS_WEBCAM_EFFECT_ERODE=Bleith + +PARTY_PLAYLIST_MANUAL=Taghadh a làimh +PARTY_MODE_JUKEBOX_NO_SONGS=Tha an liosta-chluich falamh! +SONG_MENU_OPEN_CATEGORY=Fosgail roinn-seòrsa +SONG_MENU_CLOSE_CATEGORY=Dùin an roinn-seòrsa +SONG_MENU_START_JUKEBOX=Tòisich an t-inneal-chlàr! +SONG_MENU_NAME_JUKEBOX=Clàr-taice inneil-chlàr + +WEBSITE_EXIST_SONG=Tha an t-òran a’ buntainn ris an làrach-lìn: %0:s +WEBSITE_NOT_EXIST_SONG=Chan eil an t-òran a’ buntainn ri làrach-lìn sam bith! + +NAME_PLAYERS_COUNT=Co mheud cluicheadair +NAME_CURRENT_PLAYER=Cluicheadair + +SING_OPTIONS_GAME_SONGMENU=Clàr-taice nan òran +OPTION_VALUE_ROULETTE=Roulette +OPTION_VALUE_CHESSBOARD=Clàr-taileisg +OPTION_VALUE_CAROUSEL=Timcheallan +OPTION_VALUE_SLOTMACHINE=Inneal-cluiche +OPTION_VALUE_LIST=Liosta +OPTION_VALUE_MOSAIC=Tiotal + +SING_OPTIONS_JUKEBOX=Inneal-chlàr +SING_OPTIONS_JUKEBOX_DESC=Bun-roghainnean an inneil-chlàr +SING_OPTIONS_JUKEBOX_WHEREAMI=Roghainnean an inneil-chlàr + +OPTION_VALUE_TO_SING=Seinn +OPTION_VALUE_ACTUAL=Ann an da-rìribh +OPTION_VALUE_NEXT=Air adhart +OPTION_VALUE_OTHER=Eile +OPTION_VALUE_FILL=Lìon +OPTION_VALUE_OUTLINE=Oir-loidhne +OPTION_VALUE_GRAY=Liath +OPTION_VALUE_WHITE=Geal +OPTION_VALUE_TURQUOISE=Tuirc-ghorm +OPTION_VALUE_SALMON=Dath a’ bhradain +OPTION_VALUE_GREENYELLOW=Uaine-buidhe +OPTION_VALUE_LAVENDER=Dath an lus-liath +OPTION_VALUE_BEIGE=Bèis +OPTION_VALUE_TEAL=Dath a’ chrann-lacha +OPTION_VALUE_ORCHID=Dath na mogairle +OPTION_VALUE_STEELBLUE=Gorm na stàilinne +OPTION_VALUE_PLUM=Dath a’ phlumais +OPTION_VALUE_CHOCOLATE=Donn an teòclaid +OPTION_VALUE_GOLD=Dath an òir +OPTION_VALUE_DARKBLUE=Dorch-ghorm +OPTION_VALUE_SKY=Gorm an speura +OPTION_VALUE_HARLEQUIN=Cleasaiche-fanaid +OPTION_VALUE_CYAN=Saidhean +OPTION_VALUE_FLAME=Lasair + +JUKEBOX_SONGOPTIONS_VIDEO=Roghainnean video +JUKEBOX_SONGOPTIONS_VIDEO_ASPECT=Co-mheas deilbh +JUKEBOX_SONGOPTIONS_VIDEO_WIDTH=Leud +JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Àirde +JUKEBOX_SONGOPTIONS_LYRIC=Roghainnean nam faclan +JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Meud +JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Suidheachadh +JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Dath +JUKEBOX_SONGOPTIONS_LYRIC_LINE=Loidhne +JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Cruth +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Dearg +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Uaine +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Gorm + +JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Sìn +JUKEBOX_SONGOPTIONS_VIDEO_CROP=Bearr +JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=Bogsa-litrichean + +JUKEBOX_SONGOPTIONS_SAVE=Sàbhail +JUKEBOX_SONGOPTIONS_CLOSE=Dùin +JUKEBOX_SONGOPTIONS_DEFAULT=Bun-roghainn +JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Chaidh a shàbhaladh! + +SING_SONG_CREDITS=Urram +SING_JUKEBOX=Inneal-chlàr +SING_JUKEBOX_DESC=Èist ris a’ chruinneachadh agam +JUKEBOX_MODE=Modh an inneil-chlàr +JUKEBOX_OPTIONS_DESC=Roghainnean na liosta-cluich +JUKEBOX_OPTIONS_WHEREAMI=Roghainnean an inneil-chlàr +JUKEBOX_OPTIONS_PLAYLIST=Liosta-chluich +JUKEBOX_OPTIONS_PLAYLIST_MODE=Modh + +SING_OPTIONS_ADVANCED_SINGSCORES=Sgòran seinn +SING_OPTIONS_ADVANCED_TOPSCORES=Na sgòran as àirde +OPTION_VALUE_ALL=Na h-uile +OPTION_VALUE_PLAYER=Cluicheadair + +SING_ABOUT=Mu dhèidhinn +SING_ABOUT_DESC=Mu Ultrastar Deluxe +ABOUT_MAIN=Mu dhèidhinn… +ABOUT_MAIN_DESC=Ultrastar Deluxe +ABOUT_MAIN_WHEREAMI=Mu dhèidhinn… +ABOUT_USDX_CREDITS=Urram +ABOUT_OVERVIEW=’S e geama karaoke saor is OpenSource airson PC a th’ ann an UltraStar Deluxe. Tha cluiche a’ gheama coltach ris a’ bhathar choimeirsealta SingStar™ le Sony Computer Entertainment nach fhaighear ach air Playstation®. Co-dhiù, leigidh UltraStar Deluxe leis an luchd-cleachdaidh na h-òrain aca fhèin a chruthachadh agus a’ seinn air a’ PC aca, rud nach gabh dèanamh le SingStar™.\nOn a dh’fhoillsich sinn am bun-tùs, ’s urrainn dhut an geama a ghnàthachadh gu tur a-rèir do mhiann, d’ ùidhean is nam feumalachdan agad.\nGu sònraichte, faodaidh tu am bathar atharrachadh mar a thogras tu.\n\nCruthaich na h-ùrlaran agad fhèin no luchdaich a-nuas susbaint on choimhearsnachd, can plugain, òrain shaora no bloighean còd airson gleusan leudaichte.\nSa mhodh chèilidh, ’s urrainn do suas ri dusan cluicheadair na h-òrain as fhearr leibh a sheinn còmhla feuch cò gheibh barrachd puingean na càch, a-rèir gleus a’ ghutha agus ruitheam na seinne. diff --git a/game/languages/Galician.ini b/game/languages/Galician.ini index 4363f7c6..bb03d31f 100644 --- a/game/languages/Galician.ini +++ b/game/languages/Galician.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=Inglés OPTION_VALUE_EUSKARA=Euskera OPTION_VALUE_FINNISH=Finlandés OPTION_VALUE_FRENCH=Francés +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic OPTION_VALUE_GALICIAN=Galego OPTION_VALUE_GERMAN=Alemán OPTION_VALUE_GREEK=Griego @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luxemburgués OPTION_VALUE_NORWEGIAN=Noruego OPTION_VALUE_POLISH=Polaco OPTION_VALUE_PORTUGUESE=Portugués +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian OPTION_VALUE_SERBIAN=Serbio OPTION_VALUE_SLOVAK=Eslovaco @@ -27,7 +29,6 @@ OPTION_VALUE_SLOVENIAN=Esloveno OPTION_VALUE_SPANISH=Español OPTION_VALUE_SWEDISH=Sueco - OPTION_VALUE_EASY=Fácil OPTION_VALUE_MEDIUM=Medio OPTION_VALUE_HARD=Difícil @@ -45,9 +46,12 @@ OPTION_VALUE_TITLE2=Título2 OPTION_VALUE_ARTIST2=Artista2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Listaxe + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Se non hai video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Pequeno OPTION_VALUE_BIG=Grande @@ -56,6 +60,10 @@ OPTION_VALUE_HALF=Metade OPTION_VALUE_FULL_VID=Completo (video) OPTION_VALUE_FULL_VID_BG=Completo (fondo e video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=Segundo OPTION_VALUE_SECS=Segundos @@ -88,6 +96,8 @@ OPTION_VALUE_SING=Cantar OPTION_VALUE_SELECT_PLAYERS=Elixir Xogadores OPTION_VALUE_OPEN_MENU=Abrir menú +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Cursor por hardware OPTION_VALUE_SOFTWARE_CURSOR=Cursor por software @@ -121,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Opcións SING_OPTIONS_GAME=Xogo SING_OPTIONS_GRAPHICS=Gráficos SING_OPTIONS_SOUND=Son +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Letras SING_OPTIONS_THEMES=Aparencia SING_OPTIONS_RECORD=Micrófonos @@ -129,7 +140,7 @@ SING_OPTIONS_EXIT=Volta SING_OPTIONS_GAME_WHEREAMI=Opcións do xogo SING_OPTIONS_GAME_DESC=Cambiar as preferencias xerais do xogo -_OPTIONS_GAME_PLAYERS=Xogadores +;TODO: SING_OPTIONS_GAME_PLAYERS=Players SING_OPTIONS_GAME_DIFFICULTY=Dificultade SING_OPTIONS_GAME_LANGUAGE=Idioma SING_OPTIONS_GAME_TABS=Etiquetas @@ -155,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Axuda de notas SING_OPTIONS_SOUND_BEAT_CLICK=Clic en compases SING_OPTIONS_SOUND_THRESHOLD=Umbral do micro. SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modo 2 xogadores +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Volume do adianto SING_OPTIONS_SOUND_PREVIEWFADING=Desvanecemento +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Opcións de letras SING_OPTIONS_LYRICS_DESC=Cambiar a forma na que se ven as cancións SING_OPTIONS_LYRICS_FONT=Tipografía @@ -184,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Desvanecemento SING_OPTIONS_ADVANCED_LOADANIMATION=Animación de carga SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Preguntar ó borrar SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de liña +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Ó seleccionar canción SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto menú de festa @@ -224,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Listaxe SING_SONGS_IN_CAT=Cancións PLAYLIST_CATTEXT=Listaxe: %s -SING_TIME=TEMPO +;TODO: SING_TIME=TIME SING_TOTAL=Total SING_MODE=Só SING_NOTES=Notas @@ -360,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=Gañou! MODE_RANDOM_NAME=Aleatorio -MODE_RANDOM_DESC=Elixirase o modo ó azar +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Mantén a liña -MODE_HOLDTHELINE_DESC=Canta ben durante toda a canción! +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Ata 5000 -MODE_5000POINTS_DESC=Gaña quen acade 5000 puntos +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duelo -MODE_DUEL_DESC=Canta un duelo ata 10000 puntos +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Duelo de equipos -MODE_TEAMDUEL_DESC=Pásalle o micro a outro xogador do teu equipo! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Modo a cegas -MODE_BLIND_DESC=Duelo sin velas notas. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! MODE_1000BLIND_NAME = +1000 Cego -MODE_1000BLIND_DESC = Se vas gañando por máis de 1000 puntos quedaste a cegas +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! MODE_500BLIND_NAME = +500 Cego -MODE_500BLIND_DESC = Se vas gañando por máis de 500 puntos quedaste a cegas +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! MODE_SHORTSONG_NAME = Canción curta -MODE_SHORTSONG_DESC = Duelo ata a metade da canción +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! MODE_HARDCORE_NAME=Hardcore -MODE_HARDCORE_DESC=Gaña quen obteña 3 liñas de vantaxe +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Estatísticas STAT_MAIN_DESC=Xeral @@ -451,9 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Imposible cargar a canción: Erro durante o p ERROR_NO_EDITOR=Esta función non está dispoñible en Linux/Mac ERROR_PLAYER_DEVICE_ASSIGNMENT=Asignaronse máis dun micrófono ó xogador %d. Comproba as opcións de micrófonos. ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Ó xogador %d non se lle asignou ningún micrófono. Comproba as opcións de micrófonos. -;UNUSED: PARTY_ROUNDS=Roldas -;TRANSLATOR: Vimianzo09 - SING_OPTIONS_NETWORK=Internet SING_OPTIONS_NETWORK_WHEREAMI=Opcións de internet @@ -569,7 +611,7 @@ EDIT_VOLUME_MIDI=Volume do midi: EDIT_VOLUME_CLICK=Volume do click: INFO_UNDO=Desfacer a operación -INFO_FILE_SAVED=Ficheiro Gardado +INFO_FILE_SAVED=Arquivo gardado INFO_TIME_FIXED=Tempos correxidos INFO_CAPITALIZE=Capitalización correxida INFO_EXIT=Desea saír do editor sen gardar? @@ -616,17 +658,29 @@ SONG_MENU_SORTING_APPLY=Aplicar ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Resolución ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Efecto ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue ;TODO: SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Enable Preview ;TODO: SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Disable Preview +;TODO: SING_OPTIONS_WEBCAM_EFFECT_NORMAL=Normal +;TODO: SING_OPTIONS_WEBCAM_EFFECT_GRAYSCALE=Grayscale +;TODO: SING_OPTIONS_WEBCAM_EFFECT_BLACK_WHITE=Black & White +;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative +;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image +;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Umbral do micro. +;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges +;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur +;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized +;TODO: SING_OPTIONS_WEBCAM_EFFECT_ERODE=Erode + ;TODO: PARTY_PLAYLIST_MANUAL=Manual Selection ;TODO: PARTY_MODE_JUKEBOX_NO_SONGS=Playlist is empty! ;TODO: SONG_MENU_OPEN_CATEGORY=Open category @@ -637,10 +691,10 @@ SONG_MENU_SORTING_APPLY=Aplicar ;TODO: WEBSITE_EXIST_SONG=The song belongs to the website: %0:s ;TODO: WEBSITE_NOT_EXIST_SONG=The song does not belong to any website! -;TODO: NAME_PLAYERS_COUNT=Number of Players -;TODO: NAME_CURRENT_PLAYER=Player +NAME_PLAYERS_COUNT=Nº de xogadores +NAME_CURRENT_PLAYER=Xogador -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Menú cancións ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -648,11 +702,11 @@ SONG_MENU_SORTING_APPLY=Aplicar ;TODO: OPTION_VALUE_LIST=List ;TODO: OPTION_VALUE_MOSAIC=Tile -;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +SING_OPTIONS_JUKEBOX=Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Cantar ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -685,40 +739,40 @@ SONG_MENU_SORTING_APPLY=Aplicar ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Cor ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Vermello +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Verde +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Azul ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=LetterBox -;TODO: JUKEBOX_SONGOPTIONS_SAVE=Save +JUKEBOX_SONGOPTIONS_SAVE=Gardar ;TODO: JUKEBOX_SONGOPTIONS_CLOSE=Close ;TODO: JUKEBOX_SONGOPTIONS_DEFAULT=Default ;TODO: JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Saved! ;TODO: SING_SONG_CREDITS=Credits -;TODO: SING_JUKEBOX=Jukebox +SING_JUKEBOX=Jukebox ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist -;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Listaxe +JUKEBOX_OPTIONS_PLAYLIST_MODE=Modo -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All -;TODO: OPTION_VALUE_PLAYER=Player +OPTION_VALUE_ALL=Todo +OPTION_VALUE_PLAYER=Xogador ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/German.ini b/game/languages/German.ini index c77936a0..c4826694 100644 --- a/game/languages/German.ini +++ b/game/languages/German.ini @@ -9,7 +9,8 @@ OPTION_VALUE_ENGLISH=Englisch OPTION_VALUE_EUSKARA=Baskisch OPTION_VALUE_FINNISH=Finnisch OPTION_VALUE_FRENCH=Französisch -;TODO: OPTION_VALUE_GALICIAN=Galician +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic +OPTION_VALUE_GALICIAN=Galicisch OPTION_VALUE_GERMAN=Deutsch OPTION_VALUE_GREEK=Griechisch OPTION_VALUE_HUNGARIAN=Ungarisch @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luxemburgisch OPTION_VALUE_NORWEGIAN=Norwegisch OPTION_VALUE_POLISH=Polnisch OPTION_VALUE_PORTUGUESE=Portugiesisch +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Russisch OPTION_VALUE_SERBIAN=Serbisch OPTION_VALUE_SLOVAK=Slowakisch @@ -42,19 +44,26 @@ OPTION_VALUE_TITLE=Titel OPTION_VALUE_ARTIST=Künstler OPTION_VALUE_TITLE2=Titel2 OPTION_VALUE_ARTIST2=Künstler2 -;TODO: OPTION_VALUE_YEAR=Year -;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_YEAR=Jahr +OPTION_VALUE_DECADE=Dekade +OPTION_VALUE_PLAYLIST=Playlist + +OPTION_VALUE_BORDERLESS=Fenster-Vollbild OPTION_VALUE_WHENNOVIDEO=Wenn kein Video +OPTION_VALUE_WHENNOVIDEOANDIMAGE=Wenn kein Video und kein Bild OPTION_VALUE_SMALL=Klein -OPTION_VALUE_BIG=Gross +OPTION_VALUE_BIG=Groß OPTION_VALUE_HALF=Halb OPTION_VALUE_FULL_VID=Voll (Video) OPTION_VALUE_FULL_VID_BG=Voll (HG & Video) +OPTION_VALUE_GAIN_SOFT=Sanft +OPTION_VALUE_GAIN_MEDIUM=Medium +OPTION_VALUE_GAIN_HARD=Hart + OPTION_VALUE_AUTO=Automatisch OPTION_VALUE_SEC=Sekunde OPTION_VALUE_SECS=Sekunden @@ -64,7 +73,7 @@ OPTION_VALUE_OLINE1=OLine1 OPTION_VALUE_OLINE2=OLine2 OPTION_VALUE_SIMPLE=Einfach -OPTION_VALUE_ZOOM=Vergrössern +OPTION_VALUE_ZOOM=Vergrößern OPTION_VALUE_SLIDE=Rutschen OPTION_VALUE_BALL=Ball OPTION_VALUE_SHIFT=Schieben @@ -75,7 +84,7 @@ OPTION_VALUE_AMERICAN=Amerikanisch OPTION_VALUE_BLUE=Blau OPTION_VALUE_GREEN=Grün -OPTION_VALUE_PINK=Lila +OPTION_VALUE_PINK=Rosa OPTION_VALUE_RED=Rot OPTION_VALUE_VIOLET=Violett OPTION_VALUE_ORANGE=Orange @@ -85,8 +94,10 @@ OPTION_VALUE_BLACK=Schwarz OPTION_VALUE_SING=Singen OPTION_VALUE_SELECT_PLAYERS=Spieler auswählen -OPTION_VALUE_OPEN_MENU=Menu öffnen +OPTION_VALUE_OPEN_MENU=Menü öffnen +OPTION_VALUE_SYSTEM_CURSOR=An [Systemzeiger] +OPTION_VALUE_GAME_CURSOR=An [Spielzeiger] OPTION_VALUE_HARDWARE_CURSOR=Hardware Zeiger OPTION_VALUE_SOFTWARE_CURSOR=Software Zeiger @@ -97,7 +108,7 @@ SING_SING=Singen SING_SING_DESC=Singen SING_MULTI=Party -SING_MULTI_DESC=Ein rundenbasiertes Teamspiel spielen +SING_MULTI_DESC=Rundenbasiertes Teamspiel SING_TOOLS=Werkzeuge @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Optionen SING_OPTIONS_GAME=Spiel SING_OPTIONS_GRAPHICS=Grafik SING_OPTIONS_SOUND=Sound +SING_OPTIONS_INPUT=Eingabe SING_OPTIONS_LYRICS=Lyrics SING_OPTIONS_THEMES=Design SING_OPTIONS_RECORD=Aufnahme @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Click-Assistent SING_OPTIONS_SOUND_BEAT_CLICK=Beat-Click SING_OPTIONS_SOUND_THRESHOLD=Rauschunterdr. SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=2-Spieler-Modus +SING_OPTIONS_SOUND_MUSICAUTOGAIN=Normalisierung SING_OPTIONS_SOUND_PREVIEWVOLUME=Vorschau Lautst. SING_OPTIONS_SOUND_PREVIEWFADING=Vorschau Fading +SING_OPTIONS_INPUT_WHEREAMI=Eingabeeinstellungen +SING_OPTIONS_INPUT_DESC=Eingabeeinstellungen +SING_OPTIONS_INPUT_MOUSE=Maus +SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller Support + SING_OPTIONS_LYRICS_WHEREAMI=Lyricsoptionen SING_OPTIONS_LYRICS_DESC=Einstellungen für die Lyrics SING_OPTIONS_LYRICS_FONT=Schriftart @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Bildschirm-Fade SING_OPTIONS_ADVANCED_LOADANIMATION=Lade-Animation SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Sicherheitsabfr. SING_OPTIONS_ADVANCED_LINEBONUS=Phrasenbonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Nach Songauswahl SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Party-Menü @@ -359,41 +378,68 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=hat gewonnen! MODE_RANDOM_NAME= zufälliger Modus -MODE_RANDOM_DESC= Wählt einen zufälligen Modus aus +MODE_RANDOM_DESC=Sei gespannt! Das Spiel entscheidet zufällige Spiel-Modi für euch. MODE_HOLDTHELINE_NAME=Balken halten -MODE_HOLDTHELINE_DESC=Halte die Bewertungsanzeige im angezeigten Bereich. +MODE_HOLDTHELINE_DESC=Halte deine Leistung kontinuierlich am längsten oben + +MODE_HOLDTHELINEBLIND_NAME=Blind Balken halten +MODE_HOLDTHELINEBLIND_DESC=Halte deine Leistung kontinuierlich am längsten oben, aber ohne Noten zu sehen + +MODE_7000POINTS_NAME=Bis 7000 +MODE_7000POINTS_DESC=Erreiche 7000 Punkte! + +MODE_7000POINTSBLIND_NAME=Blind 7000 +MODE_7000POINTSBLIND_DESC=Erreiche 7000 Punkte ohne Noten zu sehen! MODE_5000POINTS_NAME=Bis 5000 -MODE_5000POINTS_DESC=Wer zuerst 5000 Punkte hat, gewinnt. +MODE_5000POINTS_DESC=Erreiche 5000 Punkte! + +MODE_5000POINTSBLIND_NAME=Blind 5000 +MODE_5000POINTSBLIND_DESC=Erreiche 5000 Punkte ohne Noten zu sehen! + +MODE_2000POINTS_NAME=Bis 2000 +MODE_2000POINTS_DESC=Erreiche 2000 Punkte! + +MODE_2000POINTSBLIND_NAME=Blind 2000 +MODE_2000POINTSBLIND_DESC=Erreiche 2000 Punkte ohne Noten zu sehen! MODE_DUEL_NAME=Duell -MODE_DUEL_DESC=Normales Spiel. Höchste Punktzahl gewinnt. +MODE_DUEL_DESC=Eins-gegen-Eins um die Höchstpunkzahl -MODE_TEAMDUEL_NAME=Teamsingen -MODE_TEAMDUEL_DESC=Gib das Mikro weiter! +MODE_TEAMDUEL_NAME=Team-Duell +MODE_TEAMDUEL_DESC=Reiche das Mikrofon weiter und erreiche im Team die höchste Punktzahl! MODE_BLIND_NAME=Blind Modus -MODE_BLIND_DESC=Erreiche blind die höchste Punktzahl. +MODE_BLIND_DESC=Eins-gegen-Eins mit versteckten Noten + +MODE_BLINDTOTAL_NAME=Totale Blindheit +MODE_BLINDTOTAL_DESC=Kannst du's schaffen? Ohne Noten, ohne Text? Los geht's! + +MODE_1000BLIND_NAME =+1000 blind +MODE_1000BLIND_DESC =Erreiche einen Vorsprung von über 1000 Punkten, ohne dabei die Noten zu sehen! + +MODE_DEAF_NAME =Taub +MODE_DEAF_DESC =Denkst, du kannst singen? Versuch's ohne Begleitung der Noten! -;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +MODE_BLINDLYRICS_NAME =Ohne Text +MODE_BLINDLYRICS_DESC =Denkst, kennst jeden Song? Versuch's mal ohne Text! -;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +MODE_500BLIND_NAME =+500 Blind +MODE_500BLIND_DESC =Erreiche einen Vorsprung von über 500 Punkten, ohne dabei die Noten zu sehen! -;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +MODE_SHORTSONG_NAME =Kurzes Lied +MODE_SHORTSONG_DESC =Schnelles kurzes Duell 1-gegen-1! -;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +MODE_HARDCORE_NAME=Hardcore +MODE_HARDCORE_DESC=Umkämpfe eine Führung über 3 Phrasen hinweg und siege! STAT_MAIN=Statistiken STAT_MAIN_DESC=Allgemein STAT_MAIN_WHEREAMI=Statistiken STAT_OVERVIEW_INTRO=%0:s Statistiken. \n Letzter Reset am %1:.2d.%2:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d Songs(%3:d mit Video), davon wurden %1:d schon einmal gesungen und %2:d noch nicht. \n Der am häufigsten gesungene Song ist %5:s von %4:s. +STAT_OVERVIEW_SONG=%0:d Songs (%3:d mit Video), davon wurden bereits %1:d gesungen, andere %2:d noch nicht.\nDer am häufigsten gesungene Song ist:\n"%5:s" von %4:s. STAT_OVERVIEW_PLAYER=Seit dem letzten Reset haben %0:d verschiedene Spieler gesungen. \n Der beste Spieler ist %1:s mit %2:d Punkten. \n Die höchste Punktzahl, %4:d, wurde von %3:s erreicht. STAT_FORMAT_DATE=%0:.2d.%1:.2d.%2:d @@ -404,23 +450,23 @@ STAT_DETAIL_WHEREAMI=Detaillierte Statistiken STAT_NEXT=Nächste Seite STAT_PREV=Vorherige Seite STAT_REVERSE=Umkehren -STAT_PAGE=Seite %0:d von %1:d \n (%2:d von %3:d Einträgen) +STAT_PAGE=Seite %0:d von %1:d\n(%2:d von %3:d Einträgen) -STAT_DESC_SCORES=Highscores -STAT_DESC_SCORES_REVERSED=Lowscores -STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] %5:s \n (%3:s - %4:s) +STAT_DESC_SCORES=Höchstpunktzahl +STAT_DESC_SCORES_REVERSED=Niedrigste Punktzahl +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] %5:s\n(%3:s - %4:s) STAT_DESC_SINGERS=Beste Sänger STAT_DESC_SINGERS_REVERSED=Schlechteste Sänger -STAT_FORMAT_SINGERS=%0:s \n Durchschnittliche Punktzahl: %1:d +STAT_FORMAT_SINGERS=%0:s\nDurchschnittliche Punktzahl: %1:d STAT_DESC_SONGS=Beliebteste Songs STAT_DESC_SONGS_REVERSED=Unbeliebteste Songs -STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx gesungen +STAT_FORMAT_SONGS=%0:s - %1:s\n%2:dx gesungen STAT_DESC_BANDS=Beliebteste Bands STAT_DESC_BANDS_REVERSED=Unbeliebteste Bands -STAT_FORMAT_BANDS=%0:s \n Gesungene Songs: %1:d +STAT_FORMAT_BANDS=%0:s\nGesungene Songs: %1:d SCREENSHOT_SAVED=Bildschirmfoto gesichert SCREENSHOT_FAILED=Konnte Bildschirmfoto nicht sichern @@ -440,296 +486,293 @@ MSG_END_PARTY=Party-Modus wirklich beenden? ERROR_NO_SONGS=Keine Songs vorhanden. ERROR_NO_PLUGINS=Keine Plugins vorhanden. -ERROR_NO_MODES_FOR_CURRENT_SETUP=Es sind keine Modi für die akutellen Spieler und/oder Teameinstellungen vorhanden +ERROR_NO_MODES_FOR_CURRENT_SETUP=Es sind keine Modi für die aktuellen Spieler und/oder Teameinstellungen vorhanden ERROR_CAN_NOT_START_PARTY= Ein Fehler ist beim Starten des Partyspiels aufgetreten ERROR_CORRUPT_SONG=Song konnte nicht geladen werden. ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Song konnte nicht geladen werden: Datei wurde nicht gefunden. ERROR_CORRUPT_SONG_NO_NOTES=Song konnte nicht geladen werden: Es wurden keine Noten gefunden. ERROR_CORRUPT_SONG_NO_BREAKS=Song konnte nicht geladen werden: Es wurden keine Satzwechsel gefunden. -ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Song konnte nicht geladen werden: Fehler beim parsen der Zeile %0:d +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Song konnte nicht geladen werden: Fehler beim Einlesen der Zeile %0:d ERROR_NO_EDITOR=Diese Funktion ist unter Linux/Mac noch nicht verfügbar ERROR_PLAYER_DEVICE_ASSIGNMENT=Mehrere Mikrofone für Spieler %d gewählt.\nAufnahmeoptionen überprüfen. ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Kein Mikrofon für Spieler %d gewählt.\nAufnahmeoptionen überprüfen. -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Wie oft gesungen mitzählen - - -;TODO: SING_OPTIONS_NETWORK=Internet -;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options -;TODO: SING_OPTIONS_NETWORK_DESC=Internet General Settings -;TODO: SING_OPTIONS_NETWORK_INSERT_USER_INFO=Press key "Insert" to add user to this web... -;TODO: SING_OPTIONS_NETWORK_WEBSITE=Website -;TODO: SING_OPTIONS_NETWORK_USERNAME=Username -;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password -;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto -;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player -;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) -;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) -;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_HARD=Auto-Send (Hard) -;TODO: SING_OPTIONS_NETWORK_NO_DLL=No compatible leaderboard-plugin found! -;TODO: SING_OPTIONS_NETWORK_DELETE_PLAYER=Really delete the user %0:s of the website %1:s? -;TODO: SING_OPTIONS_NETWORK_LEGEND_INSERT=Insert -;TODO: SING_OPTIONS_NETWORK_LEGEND_DELETE=Delete - -;TODO: OPTION_PLAYER_1=Player 1 -;TODO: OPTION_PLAYER_2=Player 2 -;TODO: OPTION_PLAYER_3=Player 3 -;TODO: OPTION_PLAYER_4=Player 4 -;TODO: OPTION_PLAYER_5=Player 5 -;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All -;TODO: OPTION_VALUE_SAVE=Save -;TODO: OPTION_VALUE_SEND=Send - -;TODO: MSG_INSERT_USER_TITLE=%0:s -;TODO: MSG_INSERT_USER_DESC=Fill the fields: -;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel - -;TODO: WEBSITE_NO_CONNECTION=No website connection! -;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! -;TODO: WEBSITE_BLANK_LOGIN=There are blank fields! -;TODO: WEBSITE_EXIST_USER=Existing user! -;TODO: WEBSITE_ERROR_SCORE=Scoring Error! -;TODO: WEBSITE_OK_SEND=Score sent successfully! -;TODO: WEBSITE_ERROR_SCORE_DUPLICATED=Existing Score! -;TODO: WEBSITE_ERROR_SONG=Song Not Found! -;TODO: WEBSITE_SAVE_SCORE=Score save successfully! -;TODO: WEBSITE_NO_CONNECTION_SAVE=No website connection! Save user anyway? - -;TODO: SONG_MENU_REFRESH_SCORES=Update Scores -;TODO: SONG_MENU_REFRESH_SCORES_TITLE=Update -;TODO: SONG_MENU_REFRESH_SCORES_NO_WEB=There aren't websites! -;TODO: SONG_MENU_REFRESH_SCORES_ONLINE=Online -;TODO: SONG_MENU_REFRESH_SCORES_FILE=File -;TODO: SONG_MENU_REFRESH_SCORES_ALL_WEB=All Websites -;TODO: SONG_MENU_REFRESH_SCORES_ALL_SONGS=All Songs -;TODO: SONG_MENU_REFRESH_SCORES_ONLY_SONG=This Song -;TODO: SONG_MENU_REFRESH_SCORES_REFRESH=Update -;TODO: SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION=Error connect to the website: %0:s! + +SING_OPTIONS_NETWORK=Internet +SING_OPTIONS_NETWORK_WHEREAMI=Interneteinstellungen +SING_OPTIONS_NETWORK_DESC=Allgemeine Netzwerk- und Interneteinstellungen +SING_OPTIONS_NETWORK_INSERT_USER_INFO=Drücke 'Einfügen' um Spieler dem Internet hinzuzufügen. +SING_OPTIONS_NETWORK_WEBSITE=Webseite +SING_OPTIONS_NETWORK_USERNAME=Benutzername +SING_OPTIONS_NETWORK_PASSWORD=Passwort +SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Spielername +SING_OPTIONS_NETWORK_AUTO_MODE=Automatisch +SING_OPTIONS_NETWORK_AUTO_PLAYER=Spieler +SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto Senden (Einfach) +SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto Senden (Mittel) +SING_OPTIONS_NETWORK_AUTO_SCORE_HARD=Auto Senden (Schwierig) +SING_OPTIONS_NETWORK_NO_DLL=Kein kompatibles Ranglisten-Plugin gefunden! +SING_OPTIONS_NETWORK_DELETE_PLAYER=Spieler %0:s wirklich von der Webseite %1:s löschen? +SING_OPTIONS_NETWORK_LEGEND_INSERT=Einfg +SING_OPTIONS_NETWORK_LEGEND_DELETE=Entf + +OPTION_PLAYER_1=Spieler 1 +OPTION_PLAYER_2=Spieler 2 +OPTION_PLAYER_3=Spieler 3 +OPTION_PLAYER_4=Spieler 4 +OPTION_PLAYER_5=Spieler 5 +OPTION_PLAYER_6=Spieler 6 +OPTION_ALL_PLAYERS=Allem +OPTION_ALL_SCORES=Allem +OPTION_VALUE_SAVE=Speichern +OPTION_VALUE_SEND=Senden + +MSG_INSERT_USER_TITLE=%0:s +MSG_INSERT_USER_DESC=Felder eintragen: +MSG_INSERT_USER_ADD=Hinzufügen +MSG_INSERT_USER_CANCEL=Abbrechen + +WEBSITE_NO_CONNECTION=Keine Verbindung zu Webseite! +WEBSITE_LOGIN_ERROR=Login nicht richtig! +WEBSITE_BLANK_LOGIN=Es sind leere Felder vorhanden! +WEBSITE_EXIST_USER=Benutzer existiert bereits! +WEBSITE_ERROR_SCORE=Fehler bei Punktzahlübertragung! +WEBSITE_OK_SEND=Punktzahl erfolgreich übermittelt! +WEBSITE_ERROR_SCORE_DUPLICATED=Punktzahl bereits vorhanden! +WEBSITE_ERROR_SONG=Song nicht gefunden! +WEBSITE_SAVE_SCORE=Punktzahl erfolgreich gesichert! +WEBSITE_NO_CONNECTION_SAVE=Keine Verbindung zur Webseite! Benutzer trotzdem sichern? + +SONG_MENU_REFRESH_SCORES=Punktzahl aktualisieren +SONG_MENU_REFRESH_SCORES_TITLE=Aktualisieren +SONG_MENU_REFRESH_SCORES_NO_WEB=Es sind keine Webseiten eingetragen! +SONG_MENU_REFRESH_SCORES_ONLINE=Online +SONG_MENU_REFRESH_SCORES_FILE=Datei +SONG_MENU_REFRESH_SCORES_ALL_WEB=Alle Webseiten +SONG_MENU_REFRESH_SCORES_ALL_SONGS=Alle Songs +SONG_MENU_REFRESH_SCORES_ONLY_SONG=Diesen Song +SONG_MENU_REFRESH_SCORES_REFRESH=Update +SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION=Fehler beim Verbindungsaufbau zur Webseite: %0:s! ;TODO: SONG_MENU_REFRESH_SCORES_ERROR_FILE=File not found: '%0:s [Download Scores]'! -;TODO: SONG_SCORE_MAX=Best: -;TODO: SONG_SCORE_MEDIA=Average: - -;TODO: SCORE_SEND_DESC=Send Score -;TODO: SCORE_SEND=Send -;TODO: SCORE_SEND_PLAYER=Player -;TODO: SCORE_SEND_OTHER_USER= Other Username -;TODO: SCORE_SAVE=Save - -;TODO: SCORE_DOWNLOAD_TITLE=Download -;TODO: SCORE_DOWNLOAD_SONG=Song: -;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... -;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel -;TODO: SCORE_DOWNLOAD_OK=OK -;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! - -;TODO: SING_OPTIONS_GAME_SHOWSCORES=Show Scores -;TODO: OPTION_VALUE_WHENEXIST=When Exists - -;TODO: PARTY_SELECT_MODE=Mode -;TODO: PARTY_MODE_CLASSIC=Classic -;TODO: PARTY_MODE_CLASSIC_FREE=Classic Free -;TODO: PARTY_MODE_CHALLENGE=Challenge -;TODO: PARTY_MODE_TOURNAMENT=Tournament -;TODO: PARTY_MODE_JUKEBOX=Jukebox -;TODO: PARTY_MODE_NOT_AVAILABLE=Not Available! - -;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name -;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics -;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result -;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - - -;TODO: EDIT_TITLE=Title: -;TODO: EDIT_ARTIST=Artist: -;TODO: EDIT_MP3=MP3: -;TODO: EDIT_BPM=BPM: -;TODO: EDIT_GAP=GAP: -;TODO: EDIT_COVER=Cover: -;TODO: EDIT_BACKGROUND=Background: - -;TODO: EDIT_START=Start: -;TODO: EDIT_DURATION=Duration: -;TODO: EDIT_TONE=Tone: -;TODO: EDIT_LYRIC=Lyric: -;TODO: EDIT_VIDEOGAP=Video Gap: -;TODO: EDIT_VOLUME_AUDIO=Audio Volume: -;TODO: EDIT_VOLUME_MIDI=Midi Volume: -;TODO: EDIT_VOLUME_CLICK=Click Volume: -;TODO: INFO_UNDO=Undo last operation - -;TODO: INFO_FILE_SAVED=File saved -;TODO: INFO_TIME_FIXED=Timings corrected -;TODO: INFO_CAPITALIZE=Capitalization corrected -;TODO: INFO_EXIT=Do you want leave editor without save ? -;TODO: INFO_SONG_RELOADED=Song reloaded -;TODO: INFO_DIVIDED_BPM=BPM Divided -;TODO: INFO_MULTIPLIED_BPM=BPM Multiplied -;TODO: INFO_PLAY_SONG=Play song -;TODO: INFO_PLAY_SENTENCE=Play sentence -;TODO: INFO_CURRENT_LINE=Line: -;TODO: INFO_CURRENT_NOTE=Note: - -;TODO: INFO_MIDI_CHANNEL_OFF= Channel %0:s off! -;TODO: INFO_MIDI_CHANNEL_RESET= All channel's on! - -;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? -;TODO: JUKEBOX_RANDOM=Random -;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find -;TODO: JUKEBOX_SORT=Sort: -;TODO: JUKEBOX_SONGLIST=List of Songs - -;TODO: SING_ERROR_DUET_MODE_PARTY = Duet! Not playable in Party Mode! - -;TODO: SONG_MENU_SONG=Song -;TODO: SONG_MENU_MEDLEY=Medley -;TODO: SONG_MENU_SORTING=Sort -;TODO: SONG_MENU_EXTRA=Extra - -;TODO: SONG_MENU_NAME_SONG=Song Menu -;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song -;TODO: SONG_MENU_START_MEDLEY=Sing! -;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! - -;TODO: SONG_MENU_NAME_SORTING=Sort Menu -;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On -;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All -;TODO: SONG_MENU_SORTING_DUET=Duets -;TODO: SONG_MENU_SORTING_APPLY=Apply - -;TODO: SING_OPTIONS_WEBCAM=Webcam -;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings -;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options -;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution -;TODO: SING_OPTIONS_WEBCAM_FPS=FPS -;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! -;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect -;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness -;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation -;TODO: SING_OPTIONS_WEBCAM_HUE=Hue -;TODO: SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Enable Preview -;TODO: SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Disable Preview - -;TODO: SING_OPTIONS_WEBCAM_EFFECT_NORMAL=Normal -;TODO: SING_OPTIONS_WEBCAM_EFFECT_GRAYSCALE=Grayscale -;TODO: SING_OPTIONS_WEBCAM_EFFECT_BLACK_WHITE=Black & White -;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative +SONG_SCORE_MAX=Beste: +SONG_SCORE_MEDIA=Durchschnitt: + +SCORE_SEND_DESC=Punktzahl hochladen +SCORE_SEND=Senden +SCORE_SEND_PLAYER=Spieler +SCORE_SEND_OTHER_USER=Anderer Spielername +SCORE_SAVE=Speichern + +SCORE_DOWNLOAD_TITLE=Download +SCORE_DOWNLOAD_SONG=Song: +SCORE_DOWNLOAD_CREATE_LIST=Liste aufbauen... +SCORE_DOWNLOAD_RECEIVE_LIST=Herunterladend... +SCORE_DOWNLOAD_CANCEL=Abbrechen +SCORE_DOWNLOAD_OK=OK +SCORE_DOWNLOAD_SONG_UPDATE=%0:d Song(s) sind von der Webseite verschieden! + +SING_OPTIONS_GAME_SHOWSCORES=Punktzahl anzeigen +OPTION_VALUE_WHENEXIST=Wenn vorhanden + +PARTY_SELECT_MODE=Modus +PARTY_MODE_CLASSIC=Standard +PARTY_MODE_CLASSIC_FREE=Standard (freie Auswahl) +PARTY_MODE_CHALLENGE=Wettkampf +PARTY_MODE_TOURNAMENT=Turnier +PARTY_MODE_JUKEBOX=Jukebox +PARTY_MODE_NOT_AVAILABLE=Nicht verfügbar! + +PARTY_MODE_TOURNAMENT_PLAYER_DESC=Spieleranzahl und Spieler angeben +PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Anzahl der Spieler +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Anzahl der Runden +PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Finale +PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Halbfinale +PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Viertelfinale +PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Achtelfinale +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Die nächsten Spieler an die Mikros! +PARTY_MODE_TOURNAMENT_WIN_DESC=Rundenergebnis +PARTY_MODE_TOURNAMENT_CHAMPION=Der Champion ist: %0:s! + +EDIT_TITLE=Titel: +EDIT_ARTIST=Interpret: +EDIT_MP3=MP3: +EDIT_BPM=BPM: +EDIT_GAP=GAP: +EDIT_COVER=Cover: +EDIT_BACKGROUND=Hintergrund: + +EDIT_START=Start: +EDIT_DURATION=Laufzeit: +EDIT_TONE=Note: +EDIT_LYRIC=Lyric: +EDIT_VIDEOGAP=Video-Versatz: +EDIT_VOLUME_AUDIO=Musik Lautstärke +EDIT_VOLUME_MIDI=Midi Lautstärke +EDIT_VOLUME_CLICK=Takt Lautstärke +INFO_UNDO=Letzte Änderung rückgängig + +INFO_FILE_SAVED=Datei gesichert +INFO_TIME_FIXED=Zeiteinteilung korrigiert +INFO_CAPITALIZE=Großschreibung korrigiert +INFO_EXIT=Möchtest du den Editor ohne zu Speichern wirklich verlassen? +INFO_SONG_RELOADED=Song erneut geladen +INFO_DIVIDED_BPM=BPM halbiert +INFO_MULTIPLIED_BPM=BPM verdoppelt +INFO_PLAY_SONG=Spiele Song... +INFO_PLAY_SENTENCE=Spiele Phrase... +INFO_CURRENT_LINE=Phrase +INFO_CURRENT_NOTE=Note: + +INFO_MIDI_CHANNEL_OFF=Kanal %0:s aus! +INFO_MIDI_CHANNEL_RESET=Alle Kanäle an! + +MSG_END_JUKEBOX=Möchtest du den Jukebox Modus verlassen? +JUKEBOX_RANDOM=Zufallsmodus +JUKEBOX_REPEAT=Wiederholen +JUKEBOX_FIND=Finde: +JUKEBOX_SORT=Sortieren: +JUKEBOX_SONGLIST=Songliste: + +SING_ERROR_DUET_MODE_PARTY =Duett! Ist im Party Modus nicht spielbar! + +SONG_MENU_SONG=Song +SONG_MENU_MEDLEY=Medley +SONG_MENU_SORTING=Sortieren +SONG_MENU_EXTRA=Extras + +SONG_MENU_NAME_SONG=Song Menü +SONG_MENU_NAME_MEDLEY=Medley Menü +SONG_MENU_ADD_SONG=Song hinzufügen +SONG_MENU_DELETE_SONG=Song löschen +SONG_MENU_START_MEDLEY=Singen! +SONG_MENU_START_5_MEDLEY=%0:d Songs singen! + +SONG_MENU_NAME_SORTING=Sortierungsmenü +SONG_MENU_SORTING_TABS_ON=Ordner an +SONG_MENU_SORTING_TABS_OFF=Ordner aus +SONG_MENU_SORTING_ALL=Alles +SONG_MENU_SORTING_DUET=Duett +SONG_MENU_SORTING_APPLY=Anwenden + +SING_OPTIONS_WEBCAM=Webcam +SING_OPTIONS_WEBCAM_DESC=Verändere Webcam Einstellungen +SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Einstellungen +SING_OPTIONS_WEBCAM_ID=Webcam +SING_OPTIONS_WEBCAM_RESOLUTION=Auflösung +SING_OPTIONS_WEBCAM_FPS=Bildfrequenz +SING_OPTIONS_WEBCAM_NO_WEBCAM=Keine Webcam gefunden! +SING_OPTIONS_WEBCAM_FLIP=Drehen +SING_OPTIONS_WEBCAM_EFFECT=Effekt +SING_OPTIONS_WEBCAM_BRIGHTNESS=Helligkeit +SING_OPTIONS_WEBCAM_SATURATION=Sättigung +SING_OPTIONS_WEBCAM_HUE=Farbton +SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Vorschau aktivieren +SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Vorschau deaktivieren + +SING_OPTIONS_WEBCAM_EFFECT_NORMAL=Normal +SING_OPTIONS_WEBCAM_EFFECT_GRAYSCALE=Graustufen +SING_OPTIONS_WEBCAM_EFFECT_BLACK_WHITE=Schwarz & Weiß +SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negativ ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image -;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold -;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges -;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur +SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dehnung +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Schwellwert +SING_OPTIONS_WEBCAM_EFFECT_EDGES=Kanten +SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Weichzeichnen ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized ;TODO: SING_OPTIONS_WEBCAM_EFFECT_ERODE=Erode -;TODO: PARTY_PLAYLIST_MANUAL=Manual Selection -;TODO: PARTY_MODE_JUKEBOX_NO_SONGS=Playlist is empty! +PARTY_PLAYLIST_MANUAL=Manuelle Auswahl +PARTY_MODE_JUKEBOX_NO_SONGS=Playlist ist leer! ;TODO: SONG_MENU_OPEN_CATEGORY=Open category -;TODO: SONG_MENU_CLOSE_CATEGORY=Close category -;TODO: SONG_MENU_START_JUKEBOX=Start Jukebox! -;TODO: SONG_MENU_NAME_JUKEBOX=Menu Jukebox +SONG_MENU_CLOSE_CATEGORY=Kategorie schließen +SONG_MENU_START_JUKEBOX=Jukebox starten! +SONG_MENU_NAME_JUKEBOX=Jukebox Menü -;TODO: WEBSITE_EXIST_SONG=The song belongs to the website: %0:s -;TODO: WEBSITE_NOT_EXIST_SONG=The song does not belong to any website! +WEBSITE_EXIST_SONG=Dieser Song ist der folgenden Webseite zugeordnet: %0:s +WEBSITE_NOT_EXIST_SONG=Dieser Song ist keiner Webseite zugeordnet! -;TODO: NAME_PLAYERS_COUNT=Number of Players -;TODO: NAME_CURRENT_PLAYER=Player +NAME_PLAYERS_COUNT=Anzahl der Spieler +NAME_CURRENT_PLAYER=Spieler -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu -;TODO: OPTION_VALUE_ROULETTE=Roulette -;TODO: OPTION_VALUE_CHESSBOARD=Chessboard -;TODO: OPTION_VALUE_CAROUSEL=Carousel -;TODO: OPTION_VALUE_SLOTMACHINE=Slot Machine -;TODO: OPTION_VALUE_LIST=List -;TODO: OPTION_VALUE_MOSAIC=Tile +SING_OPTIONS_GAME_SONGMENU=Menü +OPTION_VALUE_ROULETTE=Roulette +OPTION_VALUE_CHESSBOARD=Raster +OPTION_VALUE_CAROUSEL=Karussell +OPTION_VALUE_SLOTMACHINE=Walze +OPTION_VALUE_LIST=Liste +OPTION_VALUE_MOSAIC=Kacheln -;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox -;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options +SING_OPTIONS_JUKEBOX=Jukebox +SING_OPTIONS_JUKEBOX_DESC=Verändere Jukebox Einstellungen +SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Einstellungen -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Singen ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other ;TODO: OPTION_VALUE_FILL=Fill -;TODO: OPTION_VALUE_OUTLINE=Outline -;TODO: OPTION_VALUE_GRAY=Gray -;TODO: OPTION_VALUE_WHITE=White -;TODO: OPTION_VALUE_TURQUOISE=Turquoise -;TODO: OPTION_VALUE_SALMON=Salmon -;TODO: OPTION_VALUE_GREENYELLOW=GreenYellow -;TODO: OPTION_VALUE_LAVENDER=Lavender -;TODO: OPTION_VALUE_BEIGE=Beige -;TODO: OPTION_VALUE_TEAL=Teal -;TODO: OPTION_VALUE_ORCHID=Orchid -;TODO: OPTION_VALUE_STEELBLUE=Steel Blue -;TODO: OPTION_VALUE_PLUM=Plum -;TODO: OPTION_VALUE_CHOCOLATE=Chocolate -;TODO: OPTION_VALUE_GOLD=Gold -;TODO: OPTION_VALUE_DARKBLUE=Dark Blue -;TODO: OPTION_VALUE_SKY=Sky -;TODO: OPTION_VALUE_HARLEQUIN=Harlequin -;TODO: OPTION_VALUE_CYAN=Cyan -;TODO: OPTION_VALUE_FLAME=Flame - -;TODO: JUKEBOX_SONGOPTIONS_VIDEO=Video Options -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_ASPECT=Aspect -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_WIDTH=Width -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Height -;TODO: JUKEBOX_SONGOPTIONS_LYRIC=Lyric Options -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue - -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=LetterBox - -;TODO: JUKEBOX_SONGOPTIONS_SAVE=Save -;TODO: JUKEBOX_SONGOPTIONS_CLOSE=Close -;TODO: JUKEBOX_SONGOPTIONS_DEFAULT=Default -;TODO: JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Saved! - -;TODO: SING_SONG_CREDITS=Credits -;TODO: SING_JUKEBOX=Jukebox -;TODO: SING_JUKEBOX_DESC=Listen to my collection -;TODO: JUKEBOX_MODE=Jukebox Mode -;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist -;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode - -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing -;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All -;TODO: OPTION_VALUE_PLAYER=Player - -;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty -;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty -;TODO: ABOUT_MAIN_WHEREAMI=About... -;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +OPTION_VALUE_OUTLINE=Umriss +OPTION_VALUE_GRAY=Grau +OPTION_VALUE_WHITE=Weiß +OPTION_VALUE_TURQUOISE=Türkis +OPTION_VALUE_SALMON=Lachsfarben +OPTION_VALUE_GREENYELLOW=Grüngelb +OPTION_VALUE_LAVENDER=Lavendel +OPTION_VALUE_BEIGE=Beige +OPTION_VALUE_TEAL=Blaugrün +OPTION_VALUE_ORCHID=Orchidee +OPTION_VALUE_STEELBLUE=Stahlblau +OPTION_VALUE_PLUM=Pflaume +OPTION_VALUE_CHOCOLATE=Schokolade +OPTION_VALUE_GOLD=Gold +OPTION_VALUE_DARKBLUE=Dunkelblau +OPTION_VALUE_SKY=Himmelblau +OPTION_VALUE_HARLEQUIN=Harlekin +OPTION_VALUE_CYAN=Cyan +OPTION_VALUE_FLAME=Flamme + +JUKEBOX_SONGOPTIONS_VIDEO=Video Optionen +JUKEBOX_SONGOPTIONS_VIDEO_ASPECT=Bildformat +JUKEBOX_SONGOPTIONS_VIDEO_WIDTH=Breite +JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Höhe +JUKEBOX_SONGOPTIONS_LYRIC=Lyricsoptionen +JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Größe +JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position +JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Transparenz +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Farbe +JUKEBOX_SONGOPTIONS_LYRIC_LINE=Phrase +JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Art +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Rot +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Grün +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blau + +JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Füllen +JUKEBOX_SONGOPTIONS_VIDEO_CROP=Zuschneiden +JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=Balken + +JUKEBOX_SONGOPTIONS_SAVE=Speichern +JUKEBOX_SONGOPTIONS_CLOSE=Schließen +JUKEBOX_SONGOPTIONS_DEFAULT=Werkseinstellung +JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Gesichert! + +SING_SONG_CREDITS=Credits +SING_JUKEBOX=Jukebox +SING_JUKEBOX_DESC=Spiele meine Sammlung ab +JUKEBOX_MODE=Jukebox Modus +JUKEBOX_OPTIONS_DESC=Playlist Optionen +JUKEBOX_OPTIONS_WHEREAMI=Jukebox Optionen +JUKEBOX_OPTIONS_PLAYLIST=Playlist +JUKEBOX_OPTIONS_PLAYLIST_MODE=Playlist Modus + +SING_OPTIONS_ADVANCED_SINGSCORES=Punkte vergeben +SING_OPTIONS_ADVANCED_TOPSCORES=Höchstpunktzahlen +OPTION_VALUE_ALL=Alle +OPTION_VALUE_PLAYER=Spieler + +SING_ABOUT=Über +SING_ABOUT_DESC=Über Utrastar Deluxe +ABOUT_MAIN=Über... +ABOUT_MAIN_DESC=Ultrastar Deluxe +ABOUT_MAIN_WHEREAMI=Erfahre etwas über... +ABOUT_USDX_CREDITS=Credits +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Greek.ini b/game/languages/Greek.ini index 10e3e31c..c4fb4cbd 100644 --- a/game/languages/Greek.ini +++ b/game/languages/Greek.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=Εύκολο +OPTION_VALUE_MEDIUM=Μέτριο +OPTION_VALUE_HARD=Δύσκολο ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=Γλώσσα +OPTION_VALUE_FOLDER=Φάκελος +OPTION_VALUE_TITLE=Τίτλος +OPTION_VALUE_ARTIST=Καλλιτέχνης ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Λίστα + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=Τραγουδήστε ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Επιλογές SING_OPTIONS_GAME=Παιχνίδι SING_OPTIONS_GRAPHICS=Γραφικά SING_OPTIONS_SOUND=Ήχος +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Στίχοι SING_OPTIONS_THEMES=Θέματα SING_OPTIONS_RECORD=Ηχογράφηση @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Βοήθεια με κλίκ SING_OPTIONS_SOUND_BEAT_CLICK=Βοήθεια ρυθμού SING_OPTIONS_SOUND_THRESHOLD=Ευαισθησία μικροφώνου SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Με δύο παίχτες +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Ένταση προεπισκόπισης SING_OPTIONS_SOUND_PREVIEWFADING=Σβήσιμο προεπισκόπισης +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Επιλογές στίχων SING_OPTIONS_LYRICS_DESC=Ρυθμίσιες στίχων SING_OPTIONS_LYRICS_FONT=Γραμματοσειρά @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Σβήσιμο εικόνας SING_OPTIONS_ADVANCED_LOADANIMATION=Φόρτωση κινούμενων εικόνων SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Ερωτήσεις ασφαλείας SING_OPTIONS_ADVANCED_LINEBONUS=Μπόνους γραμμής +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Μετά απο την επιλογή τραγουδιού SING_OPTIONS_ADVANCED_PARTYPOPUP=Αυτόματο μενού "Πάρτυ" @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Λίστα SING_SONGS_IN_CAT=Τραγούδια PLAYLIST_CATTEXT=Λίστα: %s -SING_TIME=Χρόνος +;TODO: SING_TIME=TIME SING_TOTAL=Σύνολο SING_MODE=Τραγούδα σόλο SING_NOTES=Νότες @@ -259,7 +278,7 @@ POPUP_POOR=πολύ άσχημα! POPUP_AWFUL=Απαίσια! IMPLODE_GLUE1=, -IMPLODE_GLUE2= και +IMPLODE_GLUE2= και SONG_MENU_NAME_MAIN=Μενού τραγουδιών SONG_MENU_PLAY=Τραγουδήστε @@ -327,18 +346,18 @@ PARTY_PLAYER_WHEREAMI=Ονόματα "Πάρτυ" PARTY_PLAYER_ENTER_NAME=Γράψε ονόματα -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds PARTY_ROUNDS_LEGEND_CONTINUE=Ξεκίνα το παιχνίδι "Πάρτυ" -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=Επόμενοι παίχτες PARTY_ROUND_WHEREAMI=Επόμενος γύρος "Πάρτυ" PARTY_ROUND_LEGEND_CONTINUE=Ξεκίνα το γύρο -PARTY_SONG_WHEREAMI=Επιλογή τραγουδιού "Πάρτυ" -PARTY_SONG_LEGEND_CONTINUE=Τραγουδήστε +PARTY_SONG_WHEREAMI=Επιλογή τραγουδιού "Πάρτυ" +PARTY_SONG_LEGEND_CONTINUE=Τραγουδήστε PARTY_SONG_MENU=Μενού "Πάρτυ" PARTY_SCORE_DESC=Βαθμολογία τελευταίου γύρου @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=Νίκησε! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Μείνε πάνω από τη μπάρα! -MODE_HOLDTHELINE_DESC=Μείνε πάνω από τη μπάρα που εμφανίζεται +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Μέχρι 5000 πόντους -MODE_5000POINTS_DESC=Όποιος φτάσει τους 5000 πόντους κερδίζει +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Μονομαχία -MODE_DUEL_DESC=Τραγουδήστε σε μονομαχία μέχρι τους 10000 πόντους +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Μονομαχία ομάδων -MODE_TEAMDUEL_DESC=Δώσε το μικρόφωνο! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Στα τυφλά -MODE_BLIND_DESC=Μονομαχία χωρίς να βλέπετε τις νότες +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Στατιστικά STAT_MAIN_DESC=Κύρια @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx τραγουδήθηκαν ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -438,10 +484,10 @@ MSG_QUESTION_TITLE=Ερώτηση MSG_QUIT_USDX=Έξοδος από το παιχνίδι? MSG_END_PARTY=Έξοδος απο το παιχνίδι "Πάρτυ"? -ERROR_NO_SONGS=Δεν φορτώθηκαν τραγούδια +ERROR_NO_SONGS=Δεν φορτώθηκαν τραγούδια ERROR_NO_PLUGINS=Δεν φορτώθηκαν βοηθητικές εφαρμογές -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Τα τραγούδια δεν ήταν δυνατό να φορτώσουν ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Το τραγούδι δεν ήταν δυνατό να φορτώσει: Το αρχείο δεν βρέθηκε ERROR_CORRUPT_SONG_NO_NOTES=Το τραγούδι δεν ήταν δυνατό να φορτώσει: Δεν βρέθηκαν νότες @@ -450,9 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: PARTY_ROUNDS=Γύροι -;TRANSLATOR: Leo 21 - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -478,15 +521,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Όλα +OPTION_ALL_SCORES=Όλα ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Ακύρωση ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,14 +567,13 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Ακύρωση ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! ;TODO: SING_OPTIONS_GAME_SHOWSCORES=Show Scores ;TODO: OPTION_VALUE_WHENEXIST=When Exists - ;TODO: PARTY_SELECT_MODE=Mode ;TODO: PARTY_MODE_CLASSIC=Classic ;TODO: PARTY_MODE_CLASSIC_FREE=Classic Free @@ -547,11 +589,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Επόμενοι παίχτες ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -588,7 +629,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -599,17 +640,17 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Μενού τραγουδιού ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Πρόσθεσε τραγούδι +SONG_MENU_DELETE_SONG=Διέγραψε τραγούδι ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Όλα ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -617,11 +658,11 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Ανάλυση ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Εφέ ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -634,7 +675,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Ευαισθησία μικροφώνου ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -653,7 +694,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Μενού τραγουδιού ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -662,10 +703,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Τραγουδήστε ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -698,7 +739,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Χρώμα ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -719,19 +760,19 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Το τραγούδι δεν ήταν δυν ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Λίστα ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Όλα ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Hungarian.ini b/game/languages/Hungarian.ini index d8a1be3c..a11ec0ac 100644 --- a/game/languages/Hungarian.ini +++ b/game/languages/Hungarian.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ OPTION_VALUE_HUNGARIAN=Magyar ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=Cím2 OPTION_VALUE_ARTIST2=Előadó2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Számlista + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Ha nincs videó +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Kicsi OPTION_VALUE_BIG=Nagy @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Fél OPTION_VALUE_FULL_VID=Egész (Video) OPTION_VALUE_FULL_VID_BG=Egész (háttér & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Automatikus OPTION_VALUE_SEC=Másodperc OPTION_VALUE_SECS=Másodperc @@ -87,6 +96,8 @@ OPTION_VALUE_SING=dalválasztás OPTION_VALUE_SELECT_PLAYERS=játékos választás OPTION_VALUE_OPEN_MENU=Menü megnyitása +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Hardver Kurzor OPTION_VALUE_SOFTWARE_CURSOR=Softver Kurzor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=beállítások SING_OPTIONS_GAME=játék SING_OPTIONS_GRAPHICS=grafika SING_OPTIONS_SOUND=hang +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=szöveg SING_OPTIONS_THEMES=téma SING_OPTIONS_RECORD=felvétel @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=ütem segítség SING_OPTIONS_SOUND_BEAT_CLICK=Ütem SING_OPTIONS_SOUND_THRESHOLD=tűréshatár SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=két játékos mód +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=előzetes hang SING_OPTIONS_SOUND_PREVIEWFADING=előz. hang késése +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=szöveg beállítások SING_OPTIONS_LYRICS_DESC=szöveg beállítása SING_OPTIONS_LYRICS_FONT=betűtípus @@ -173,7 +191,7 @@ SING_OPTIONS_THEMES_COLOR=szín SING_OPTIONS_RECORD_WHEREAMI=felvétel beállítása SING_OPTIONS_RECORD_DESC=mikrofon beállítás SING_OPTIONS_RECORD_CARD=hangkártya -SING_OPTIONS_RECORD_INPUT==bement +SING_OPTIONS_RECORD_INPUT=bement SING_OPTIONS_RECORD_CHANNEL=csatorna: SING_OPTIONS_ADVANCED_WHEREAMI=haladó beállítások @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=háttér áttűnése SING_OPTIONS_ADVANCED_LOADANIMATION=betöltési animáció SING_OPTIONS_ADVANCED_ASKBEFOREDEL=megerősítést kér SING_OPTIONS_ADVANCED_LINEBONUS=sáv bónusz +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=éneklés után SING_OPTIONS_ADVANCED_PARTYPOPUP=partymenü megj. @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=számlista SING_SONGS_IN_CAT=Számok PLAYLIST_CATTEXT=Számlista: %s -SING_TIME=Idő +;TODO: SING_TIME=TIME SING_TOTAL=Összesen SING_MODE=Egyszeri játékos SING_NOTES=Hang @@ -258,14 +277,14 @@ POPUP_BAD=Rossz! POPUP_POOR=Gyenge! POPUP_AWFUL=Borzalmas! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= és +IMPLODE_GLUE1=, +IMPLODE_GLUE2= és SONG_MENU_NAME_MAIN=Szám menü SONG_MENU_PLAY=Szám SONG_MENU_CHANGEPLAYERS=Váltó játékosok SONG_MENU_EDIT=Edit -SONG_MENU_MODI=Énekeljegy modi-t +SONG_MENU_MODI=Énekeljegy modi-t SONG_MENU_CANCEL=Mégsem SONG_MENU_NAME_PLAYLIST=Song Menu @@ -327,18 +346,18 @@ PARTY_PLAYER_WHEREAMI=Buli nevek PARTY_PLAYER_ENTER_NAME=Nevek -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds -;TODO: PARTY_ROUNDS_LEGEND_CONTINUE=start party-game -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDS_LEGEND_CONTINUE=Start party-game +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=következő játékosok a mikrofonhoz PARTY_ROUND_WHEREAMI=Következő forduló PARTY_ROUND_LEGEND_CONTINUE=Indul a menet -PARTY_SONG_WHEREAMI=Buli szám választása -PARTY_SONG_LEGEND_CONTINUE=Szám +PARTY_SONG_WHEREAMI=Buli szám választása +PARTY_SONG_LEGEND_CONTINUE=Szám PARTY_SONG_MENU=Buli menü PARTY_SCORE_DESC=Pontok az elöző fordulóból @@ -355,38 +374,65 @@ PARTY_NOBODY=Senki NEXT_ROUND=Következő menet: PARTY_DISMISSED=Hibátlan! -PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=Nem nyert! MODE_RANDOM_NAME=Random Mode -MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Tartsd a sávot! -MODE_HOLDTHELINE_DESC=Ne csinálj rosszabb pontszámot mint az elözőek, mert nem jelensz majd meg a Toplistán. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=5000-ig -MODE_5000POINTS_DESC=Ki éri el az 5000 pontot az első meccsen? +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Ketten -MODE_DUEL_DESC=Ketten énekeljetek 10000 pontig. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Team Duell -MODE_TEAMDUEL_DESC=Pass The Mic! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME="Vak Mód" -MODE_BLIND_DESC=Énekeljetek ketten kotta nélkül. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statisztikák STAT_MAIN_DESC=Általános @@ -426,7 +472,7 @@ SCREENSHOT_SAVED=Képeryő mentve SCREENSHOT_FAILED=Képernyő mentése sikertelen INFO_FILE_SAVED=Fájl mentve -ERROR_SAVE_FILE_FAILED=Fájl mentése sikertelen +ERROR_SAVE_FILE_FAILED=Fájl mentése sikertelen ERROR_FILE_NOT_FOUND=Fájl nem található ENCODING_ERROR_ASK_FOR_UTF8=A változtatások nem menthetők ebben a kódolásban. Konvertáljuk UTF-8-á? @@ -451,7 +497,6 @@ ERROR_NO_EDITOR=This feature is not available on this version. ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options ;TODO: SING_OPTIONS_NETWORK_DESC=Internet General Settings @@ -460,7 +505,7 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Automatikus ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -476,15 +521,15 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Összes +OPTION_ALL_SCORES=Összes ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Mégsem ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -522,7 +567,7 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Mégsem ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -544,11 +589,10 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=következő játékosok a mikrofonhoz ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -567,7 +611,7 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=Fájl mentve ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -585,7 +629,7 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -596,17 +640,17 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Song Menu ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Hozzáad +SONG_MENU_DELETE_SONG=Töröl ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Összes ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -614,11 +658,11 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=felbontás ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=effektek ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -631,7 +675,7 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=tűréshatár ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -650,7 +694,7 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Song Menu ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -659,10 +703,10 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Szám ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -695,12 +739,12 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=szín ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Piros +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Zöld +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Kék ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -716,19 +760,19 @@ ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d was assigned to multiple microphones. P ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Számlista ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Összes ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Icelandic.ini b/game/languages/Icelandic.ini index fde9df2a..ed808db8 100644 --- a/game/languages/Icelandic.ini +++ b/game/languages/Icelandic.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=enska OPTION_VALUE_EUSKARA=baskneska OPTION_VALUE_FINNISH=finnska OPTION_VALUE_FRENCH=franska +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=Þýska OPTION_VALUE_GREEK=gríska @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=lúxemborgíska ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish OPTION_VALUE_PORTUGUESE=portúgalska +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -34,19 +36,22 @@ OPTION_VALUE_HARD=Erfitt OPTION_VALUE_ON=Kveikt OPTION_VALUE_OFF=Slökkt -OPTION_VALUE_EDITION=Útgáfa +OPTION_VALUE_EDITION=Útgáfa OPTION_VALUE_GENRE=Stíll OPTION_VALUE_LANGUAGE=Tungumál OPTION_VALUE_FOLDER=Mappa OPTION_VALUE_TITLE=Titill -OPTION_VALUE_ARTIST=Flytjandi +OPTION_VALUE_ARTIST=Flytjandi OPTION_VALUE_TITLE2=Titill2 OPTION_VALUE_ARTIST2=Flytjandi2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Lagalisti + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Þegar ekkert myndband +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Lítill OPTION_VALUE_BIG=Stór @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Hálf OPTION_VALUE_FULL_VID=Full (Video) OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Sjálfvirkt OPTION_VALUE_SEC=Sekúnda OPTION_VALUE_SECS=Sekúndur @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Syngja OPTION_VALUE_SELECT_PLAYERS=Velja Leikmenn OPTION_VALUE_OPEN_MENU=Opna Valmynd +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Vélbúnaðarbendill OPTION_VALUE_SOFTWARE_CURSOR=Hugbúnaðarbendill @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Stillingar SING_OPTIONS_GAME=leikur SING_OPTIONS_GRAPHICS=mynd SING_OPTIONS_SOUND=hljóð +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=lagatextar SING_OPTIONS_THEMES=snið SING_OPTIONS_RECORD=upptaka @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Taktstuðningur SING_OPTIONS_SOUND_BEAT_CLICK=Slá takt SING_OPTIONS_SOUND_THRESHOLD=Þröskuldur SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Tveir leikmenn +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Forsýn hljóðstyrkur SING_OPTIONS_SOUND_PREVIEWFADING=Forsýn útþynning +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Stillingar Textar SING_OPTIONS_LYRICS_DESC=textastillingar SING_OPTIONS_LYRICS_FONT=Leturgerð @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Skjá útþynning SING_OPTIONS_ADVANCED_LOADANIMATION=Hlaða hreyfimynd SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Öryggisspurningar SING_OPTIONS_ADVANCED_LINEBONUS=Línubónus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Eftir Lagaval SING_OPTIONS_ADVANCED_PARTYPOPUP=Sjálfvirk Partívalmynd @@ -203,7 +222,7 @@ SING_LEGEND_NAVIGATE=stýra SING_LEGEND_CONTINUE=áfram SING_LEGEND_ESC=til baka -SING_PLAYER_DESC=sláið inn nöfn leikmanna +SING_PLAYER_DESC=sláið inn nöfn leikmanna SING_PLAYER_WHEREAMI=Nöfn leikmanna SING_PLAYER_ENTER_NAME=sláðu inn nafn @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=lagalisti SING_SONGS_IN_CAT=Lög PLAYLIST_CATTEXT=Lagalisti: %s -SING_TIME=TÍMI +;TODO: SING_TIME=TIME SING_TOTAL=samtals SING_MODE=syngja sóló SING_NOTES=nótur @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=sigrar! MODE_RANDOM_NAME=Tilviljanakennt snið -MODE_RANDOM_DESC=Eitt snið valið af handahófi +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Haltu þig á strikinu -MODE_HOLDTHELINE_DESC=Ekki standa þig verr en stigalínan sýnir. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Að 5000 -MODE_5000POINTS_DESC=Leikmaður sem fyrstur nær 5000 stigum vinnur. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Einvígi -MODE_DUEL_DESC=Söngeinvígi að 10000 stigum. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Liðaeinvígi -MODE_TEAMDUEL_DESC=Láttu hljóðnemann ganga! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Blindandi -MODE_BLIND_DESC=Einvígi án þess að sjá nóturnar. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Tölfræði STAT_MAIN_DESC=Almennt @@ -426,7 +472,7 @@ SCREENSHOT_SAVED=Skjámynd vistuð SCREENSHOT_FAILED=Gat ekki vistað skjámynd INFO_FILE_SAVED=Skrá vistuð -ERROR_SAVE_FILE_FAILED=Gat ekki vistað skrá +ERROR_SAVE_FILE_FAILED=Gat ekki vistað skrá ERROR_FILE_NOT_FOUND=Skrá finnst ekki ENCODING_ERROR_ASK_FOR_UTF8=Get ekki vistað breytingar með núverandi stafasetti. Breyta í UTF-8? @@ -450,9 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;TRANSLATOR: Hlynur Sigurgíslason -;TRANSLATOR: Sigrún Huld Skúladóttir - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -462,7 +505,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Sjálfvirkt ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -478,15 +521,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Öllu +OPTION_ALL_SCORES=Öllu ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Hætta við ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,7 +567,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Hætta við ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -541,16 +584,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name ;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=fjöldi umferða ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=næstu leikmenn að hljóðnemunum ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -569,7 +611,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=Skrá vistuð ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -587,7 +629,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -598,17 +640,17 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Lagavalmynd ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Bæta við +SONG_MENU_DELETE_SONG=Eyða lagi ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Öllu ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -616,11 +658,11 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Skjáupplausn ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Brellur ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -633,7 +675,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Þröskuldur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -652,7 +694,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Lagavalmynd ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -661,10 +703,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Syngja ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -697,12 +739,12 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Litur ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Rauður +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Grænn +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blár ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -718,19 +760,19 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ekki var hægt að hlaða inn lagi: Villa vi ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Lagalisti ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Öllu ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Italian.ini b/game/languages/Italian.ini index b29f5fb0..af167b6b 100644 --- a/game/languages/Italian.ini +++ b/game/languages/Italian.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=Titolo2 OPTION_VALUE_ARTIST2=Artista2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Playlist + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Quando non c'è videl +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Piccolo OPTION_VALUE_BIG=Grande @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Metà OPTION_VALUE_FULL_VID=Pieno (Solo video) OPTION_VALUE_FULL_VID_BG=Full (sia BG che Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=Secondo OPTION_VALUE_SECS=Secondi @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Canta OPTION_VALUE_SELECT_PLAYERS=Seleziona giocatore OPTION_VALUE_OPEN_MENU=Apri il Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Cursore Hardware OPTION_VALUE_SOFTWARE_CURSOR= Cursore Software @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Impostazioni SING_OPTIONS_GAME=Generali SING_OPTIONS_GRAPHICS=Grafica SING_OPTIONS_SOUND=Audio +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Testi SING_OPTIONS_THEMES=Temi SING_OPTIONS_RECORD=Microfono @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Finestre di assistenza SING_OPTIONS_SOUND_BEAT_CLICK=Click di Beat SING_OPTIONS_SOUND_THRESHOLD=Soglia SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modalità due giocatori +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Volume Anteprima SING_OPTIONS_SOUND_PREVIEWFADING=Dissolvenza ant. +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Impostazioni Testi SING_OPTIONS_LYRICS_DESC=Modifica le impostazioni dei testi in gioco SING_OPTIONS_LYRICS_FONT=Carattere @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Dissolvenza dello schermo SING_OPTIONS_ADVANCED_LOADANIMATION=Animazione caricamento SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Domande di sicurezza SING_OPTIONS_ADVANCED_LINEBONUS=Linee Bonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Finita vai a SING_OPTIONS_ADVANCED_PARTYPOPUP=Menu Party automatico @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Playlist SING_SONGS_IN_CAT=Canzoni PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=TEMPO +;TODO: SING_TIME=TIME SING_TOTAL=Punteggio SING_MODE=Canta SING_NOTES=Note giuste @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=vince! MODE_RANDOM_NAME=Casuale -MODE_RANDOM_DESC=Modalità decisa casualmente +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Attenzione alla linea! -MODE_HOLDTHELINE_DESC=Cerca di non fare mai peggio dell'indicatore +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Fino a 5000! -MODE_5000POINTS_DESC=Chi arriva prima a 5000 punti vince. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duello -MODE_DUEL_DESC=Canta in duello fino a 10000 punti. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Duello a squadre -MODE_TEAMDUEL_DESC=Sfida tra tutti i componenti delle squadre! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Modalità ceca -MODE_BLIND_DESC=Duella senza vedere le note nello schermo. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! MODE_1000BLIND_NAME =+1000 cieco -MODE_1000BLIND_DESC = Fai più di 1000 punti rispetto al giocatore a cui sono nascoste le note. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! MODE_500BLIND_NAME =+500 cieco -MODE_500BLIND_DESC = Fai più di 500 punti rispetto al giocatore a cui sono nascoste le note. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! MODE_SHORTSONG_NAME =Gara breve -;TODO: MODE_SHORTSONG_DESC =Duella solo in metà canzone... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! MODE_HARDCORE_NAME=Hardcore -MODE_HARDCORE_DESC=Vince chi prende tre linee di vantaggio +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statistiche STAT_MAIN_DESC=Generale @@ -450,15 +496,14 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Impossibile aprire la canzone: errore durante ERROR_NO_EDITOR=Questa funzione non è disponibile su Linux o Mac! ERROR_PLAYER_DEVICE_ASSIGNMENT=Il giocatore %d è assegnato a più microfoni. Selezionare un canale libero! ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Il giocatore %d non è assegnato ad un microfono. Selezionare un canale nelle opzioni del microfono. -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Contatore -;UNUSED: PARTY_ROUNDS=Sfide - SING_OPTIONS_NETWORK=Internet SING_OPTIONS_NETWORK_WHEREAMI=Impostazioni Internet SING_OPTIONS_NETWORK_DESC=Impostazioni generali SING_OPTIONS_NETWORK_INSERT_USER_INFO=Premi il tasto "Ins" per aggiungere un giocatore a questa rete... SING_OPTIONS_NETWORK_WEBSITE=Website SING_OPTIONS_NETWORK_USERNAME=Username SING_OPTIONS_NETWORK_PASSWORD=Password +;TODO: SING_OPTIONS_NETWORK_USERNAME=Username +;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Invia Nome SING_OPTIONS_NETWORK_AUTO_MODE=Auto SING_OPTIONS_NETWORK_AUTO_PLAYER=Riproduci @@ -548,7 +593,6 @@ PARTY_MODE_TOURNAMENT_ROUNDS_DESC=I prossimi che si sfideranno sono PARTY_MODE_TOURNAMENT_WIN_DESC=CLASSIFICA FINALE PARTY_MODE_TOURNAMENT_CHAMPION=Il campione è: %0:s! - EDIT_TITLE=Titolo: EDIT_ARTIST=Artista: EDIT_MP3=MP3: @@ -567,7 +611,7 @@ EDIT_VOLUME_MIDI=Volume midi: EDIT_VOLUME_CLICK=Volume Click: INFO_UNDO=Annulla ultima operazione -INFO_FILE_SAVED=File salvato +INFO_FILE_SAVED=Salvataggio eseguito! INFO_TIME_FIXED=Timing corretto INFO_CAPITALIZE=Maiuscole corrette INFO_EXIT=Vuoi uscire dall'editor senza salvare? @@ -614,11 +658,11 @@ SONG_MENU_SORTING_APPLY=Applica ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Risoluzione ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Effetti ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -631,7 +675,7 @@ SONG_MENU_SORTING_APPLY=Applica ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Soglia ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -647,10 +691,10 @@ SONG_MENU_SORTING_APPLY=Applica ;TODO: WEBSITE_EXIST_SONG=The song belongs to the website: %0:s ;TODO: WEBSITE_NOT_EXIST_SONG=The song does not belong to any website! -;TODO: NAME_PLAYERS_COUNT=Number of Players -;TODO: NAME_CURRENT_PLAYER=Player +NAME_PLAYERS_COUNT=Numero di giocatori +NAME_CURRENT_PLAYER=Giocatore -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Menu Canzone ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -658,11 +702,11 @@ SONG_MENU_SORTING_APPLY=Applica ;TODO: OPTION_VALUE_LIST=List ;TODO: OPTION_VALUE_MOSAIC=Tile -;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +SING_OPTIONS_JUKEBOX=Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Inizia la sfida! ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -695,40 +739,40 @@ SONG_MENU_SORTING_APPLY=Applica ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Colore ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Rosso +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Verde +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blu ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=LetterBox -;TODO: JUKEBOX_SONGOPTIONS_SAVE=Save +JUKEBOX_SONGOPTIONS_SAVE=Salva ;TODO: JUKEBOX_SONGOPTIONS_CLOSE=Close ;TODO: JUKEBOX_SONGOPTIONS_DEFAULT=Default ;TODO: JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Saved! ;TODO: SING_SONG_CREDITS=Credits -;TODO: SING_JUKEBOX=Jukebox +SING_JUKEBOX=Jukebox ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist -;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Playlist +JUKEBOX_OPTIONS_PLAYLIST_MODE=Modalità -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All -;TODO: OPTION_VALUE_PLAYER=Player +OPTION_VALUE_ALL=Tutti i giocatori +OPTION_VALUE_PLAYER=Giocatore ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Japanese.ini b/game/languages/Japanese.ini index fe68a54d..5cb2e79e 100644 --- a/game/languages/Japanese.ini +++ b/game/languages/Japanese.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=簡単 +OPTION_VALUE_MEDIUM=普通 +OPTION_VALUE_HARD=難しい ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=言語 +OPTION_VALUE_FOLDER=フォルダー +OPTION_VALUE_TITLE=曲名 +OPTION_VALUE_ARTIST=歌手 ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=曲順 + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=歌う ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=設定 SING_OPTIONS_GAME=ゲーム SING_OPTIONS_GRAPHICS=グラフィックス SING_OPTIONS_SOUND=音 +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=歌詞 SING_OPTIONS_THEMES=テーマ SING_OPTIONS_RECORD=録音 @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=クリック・アシスト SING_OPTIONS_SOUND_BEAT_CLICK=ビート・クリック SING_OPTIONS_SOUND_THRESHOLD=極限 SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=二人で遊ぶ +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=音量・プリビュー SING_OPTIONS_SOUND_PREVIEWFADING=フェーディング・プリビュー +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=歌詞設定 SING_OPTIONS_LYRICS_DESC=歌詞の設定 SING_OPTIONS_LYRICS_FONT=字形 @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=画面・フェーディング SING_OPTIONS_ADVANCED_LOADANIMATION=ロード・アニメーション SING_OPTIONS_ADVANCED_ASKBEFOREDEL=消す場合は確認 SING_OPTIONS_ADVANCED_LINEBONUS=ライン・ボーナス +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=歌った後は SING_OPTIONS_ADVANCED_PARTYPOPUP=自動的にパーティー・メニューへ @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=曲順 SING_SONGS_IN_CAT=曲 PLAYLIST_CATTEXT=曲順: %s -SING_TIME=TIME +;TODO: SING_TIME=TIME SING_TOTAL=全部 SING_MODE=一人で歌う SING_NOTES=音符 @@ -258,8 +277,8 @@ POPUP_BAD=良くない! POPUP_POOR=下手! POPUP_AWFUL=下手くそ! -IMPLODE_GLUE1=、  -IMPLODE_GLUE2= と  +IMPLODE_GLUE1=、 +IMPLODE_GLUE2= と SONG_MENU_NAME_MAIN=曲メイン・メニュー SONG_MENU_PLAY=歌う @@ -327,10 +346,10 @@ PARTY_PLAYER_WHEREAMI=パーティーの名前記入 PARTY_PLAYER_ENTER_NAME=名前記入 -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds PARTY_ROUNDS_LEGEND_CONTINUE=パーティー・ゲームをスタート! -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=次のプレイヤーがマイクを @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=が勝った! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=ラインをキープ -MODE_HOLDTHELINE_DESC=レーティング・バーに表示された点数以上で歌う! +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=5000まで -MODE_5000POINTS_DESC=より早く5000点までいける人は勝つ! +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=果たし合い -MODE_DUEL_DESC=10000点まで果たし合い! +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=チーム果たし合い -MODE_TEAMDUEL_DESC=マイクを次に回す! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=盲目・モード -MODE_BLIND_DESC=音符を見えず果たし合い! +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=統計 STAT_MAIN_DESC=ジェネラル @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx 回歌った ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -440,19 +486,16 @@ MSG_END_PARTY=本当にパーティーモードをやめる? ERROR_NO_SONGS=曲はロードしてない ERROR_NO_PLUGINS=プラグインはロードしてない -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=曲をロードできない ERROR_CORRUPT_SONG_FILE_NOT_FOUND=曲をロードできない: ファイルが見つからない ERROR_CORRUPT_SONG_NO_NOTES=曲をロードできない: 音符が見つからない ERROR_CORRUPT_SONG_NO_BREAKS=曲をロードできない: ライン・ブレークが見つからない -ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d の解析エラー +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d の解析エラー ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=何回曲を歌った数える -;UNUSED: PARTY_ROUNDS=ラウンド - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -478,15 +521,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=全部 +OPTION_ALL_SCORES=全部 ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=キャンセル ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,7 +567,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=キャンセル ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -546,11 +589,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=次のプレイヤーがマイクを ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -587,7 +629,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -598,17 +640,17 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=曲メニュー ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=曲を加える +SONG_MENU_DELETE_SONG=曲を消す ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=全部 ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -616,11 +658,11 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=解像 ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=エフェクト ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -633,7 +675,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=極限 ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -652,7 +694,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=曲メニュー ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -661,10 +703,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=歌う ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -697,7 +739,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=色 ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -718,19 +760,19 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=曲をロードできない: ライン %0:d ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=曲順 ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=全部 ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Luxembourgish.ini b/game/languages/Luxembourgish.ini index 4bfb777f..7247ac70 100644 --- a/game/languages/Luxembourgish.ini +++ b/game/languages/Luxembourgish.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=Englesch OPTION_VALUE_EUSKARA=Baskesch OPTION_VALUE_FINNISH=Finnesch OPTION_VALUE_FRENCH=Franséisch +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=Däitsch OPTION_VALUE_GREEK=Griichesch @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Lëtzebuergesch OPTION_VALUE_NORWEGIAN=Norwegesch OPTION_VALUE_POLISH=Polnesch OPTION_VALUE_PORTUGUESE=Portugisesch +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Russesch OPTION_VALUE_SERBIAN=Serbesch OPTION_VALUE_SLOVAK=Slowakesch @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=Titel2 OPTION_VALUE_ARTIST2=Kënschtler2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Playlist + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Wa kee Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Kleng OPTION_VALUE_BIG=Grouss @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Hallef OPTION_VALUE_FULL_VID=Voll (Video) OPTION_VALUE_FULL_VID_BG=Voll (HG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Automatesch OPTION_VALUE_SEC=Sekonn OPTION_VALUE_SECS=Sekonnen @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Sangen OPTION_VALUE_SELECT_PLAYERS=Spiller auswielen OPTION_VALUE_OPEN_MENU=Menü opmaachen +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Hardware Zeiger OPTION_VALUE_SOFTWARE_CURSOR=Software Zeiger @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Optiounen SING_OPTIONS_GAME=Spill SING_OPTIONS_GRAPHICS=Graphik SING_OPTIONS_SOUND=Toun +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Lyric SING_OPTIONS_THEMES=Design SING_OPTIONS_RECORD=Mikro @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Click-Assistent SING_OPTIONS_SOUND_BEAT_CLICK=Metronom SING_OPTIONS_SOUND_THRESHOLD=Rauschënnerdrëck. SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=2-Spiller-Modus +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Iwwerbléck Lautst. SING_OPTIONS_SOUND_PREVIEWFADING=Iwwerbléck Fading +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Lyricsoptiounen SING_OPTIONS_LYRICS_DESC=Lyricsastellungen SING_OPTIONS_LYRICS_FONT=Schrëftart @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Bildschierm-Faden SING_OPTIONS_ADVANCED_LOADANIMATION=Lued-Animatioun SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Sécherheetsfro SING_OPTIONS_ADVANCED_LINEBONUS=Sazbonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=No Liddauswiel SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto Partymenü @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Playlist SING_SONGS_IN_CAT=Lidder PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=ZÄIT +;TODO: SING_TIME=TIME SING_TOTAL=Am Ganzen SING_MODE=Sangmodus SING_NOTES=Nouten @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=huet gewonn! MODE_RANDOM_NAME=Zoufällege Modus -MODE_RANDOM_DESC=E Modus gëtt zoufälleg gewielt. +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Balken halen -MODE_HOLDTHELINE_DESC=Halt d'Bewäertung bis beim ugewisene Beräich. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Bis 5000 -MODE_5000POINTS_DESC=Wien als éischt 5000 Punkten huet, gewënnt. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duell -MODE_DUEL_DESC=Wien déi meeschte Punkten huet gewënnt. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Teamsangen -MODE_TEAMDUEL_DESC=Gëft de Mikro weider! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Blann Modus -MODE_BLIND_DESC=Erreecht blann déi héchst Punktezuel. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statistiken STAT_MAIN_DESC=Allgemeng @@ -450,8 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Lidd gëtt net gelueden: Feeler beim Parze vu ERROR_NO_EDITOR=Den Editor geet net op Linux/Mac ERROR_PLAYER_DEVICE_ASSIGNMENT=De Spiller %d huet ze vill Mikroe gewielt. Iwwerpréift d'Opzeechnungsoptiounen. ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpréift d'Opzeechnungsoptiounen. -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG=Wéi oft gesonge matzielen - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -461,7 +505,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Automatesch ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -477,15 +521,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Alles +OPTION_ALL_SCORES=Alles ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Offbriechen ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -523,7 +567,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Offbriechen ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -540,16 +584,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name ;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Unzuel vu Ronnen ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Déi nächst Spiller un är Mikroen! ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -568,7 +611,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=Datei ass gespäichert. ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -586,7 +629,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -597,17 +640,17 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Menü ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Lidd bäifügen +SONG_MENU_DELETE_SONG=Lidd läschen ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Alles ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -615,11 +658,11 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Ofléisung ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Effekt ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -632,7 +675,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Rauschënnerdrëck. ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -651,7 +694,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Menü ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -660,10 +703,10 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Sangen ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -696,12 +739,12 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Faarf ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Rout +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Gréng +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blo ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -717,19 +760,19 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=De Spiller %d huet kee Mikro gewielt. Iwwerpr ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Playlist ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Alles ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Norwegian.ini b/game/languages/Norwegian.ini index 7cd96513..9e589987 100644 --- a/game/languages/Norwegian.ini +++ b/game/languages/Norwegian.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=Lett +OPTION_VALUE_MEDIUM=Moderat +OPTION_VALUE_HARD=Vanskelig ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=Språk +OPTION_VALUE_FOLDER=Mappe +OPTION_VALUE_TITLE=Tittel +OPTION_VALUE_ARTIST=Artist ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Spillelist + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,365 +92,402 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=syng ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor -SING_LOADING=Laster... +SING_LOADING=Laster... -SING_CHOOSE_MODE=velg modus -SING_SING=syng -SING_SING_DESC=hurtigspill: syng solo eller duett +SING_CHOOSE_MODE=velg modus +SING_SING=syng +SING_SING_DESC=hurtigspill: syng solo eller duett -SING_MULTI=party -SING_MULTI_DESC=syng i party-modus +SING_MULTI=party +SING_MULTI_DESC=syng i party-modus -SING_TOOLS=verktøy +SING_TOOLS=verktøy -SING_STATS=statistikk -SING_STATS_DESC=vis statistikk +SING_STATS=statistikk +SING_STATS_DESC=vis statistikk -SING_EDITOR=editor -SING_EDITOR_DESC=lag dine egne sanger +SING_EDITOR=editor +SING_EDITOR_DESC=lag dine egne sanger -SING_GAME_OPTIONS=spillinnstillinger -SING_GAME_OPTIONS_DESC=endre spillinstillinger +SING_GAME_OPTIONS=spillinnstillinger +SING_GAME_OPTIONS_DESC=endre spillinstillinger -SING_EXIT=avslutt -SING_EXIT_DESC=avslutt spillet +SING_EXIT=avslutt +SING_EXIT_DESC=avslutt spillet -SING_OPTIONS=innstillinger -SING_OPTIONS_DESC=endre innstillinger -SING_OPTIONS_WHEREAMI=Innstillinger +SING_OPTIONS=innstillinger +SING_OPTIONS_DESC=endre innstillinger +SING_OPTIONS_WHEREAMI=Innstillinger -SING_OPTIONS_GAME=spill -SING_OPTIONS_GRAPHICS=grafikk -SING_OPTIONS_SOUND=lyd -SING_OPTIONS_LYRICS=tekst -SING_OPTIONS_THEMES=utseende -SING_OPTIONS_RECORD=opptak -SING_OPTIONS_ADVANCED=avansert -SING_OPTIONS_EXIT=tilbake +SING_OPTIONS_GAME=spill +SING_OPTIONS_GRAPHICS=grafikk +SING_OPTIONS_SOUND=lyd +;TODO: SING_OPTIONS_INPUT=Input +SING_OPTIONS_LYRICS=tekst +SING_OPTIONS_THEMES=utseende +SING_OPTIONS_RECORD=opptak +SING_OPTIONS_ADVANCED=avansert +SING_OPTIONS_EXIT=tilbake -SING_OPTIONS_GAME_WHEREAMI=Innstillinger Spill -SING_OPTIONS_GAME_DESC=hovedspillinnstillinger -SING_OPTIONS_GAME_PLAYERS=Spillere -SING_OPTIONS_GAME_DIFFICULTY=Vanskelighet -SING_OPTIONS_GAME_LANGUAGE=Språk +SING_OPTIONS_GAME_WHEREAMI=Innstillinger Spill +SING_OPTIONS_GAME_DESC=hovedspillinnstillinger +SING_OPTIONS_GAME_PLAYERS=Spillere +SING_OPTIONS_GAME_DIFFICULTY=Vanskelighet +SING_OPTIONS_GAME_LANGUAGE=Språk SING_OPTIONS_GAME_TABS=Mappeinndeling -SING_OPTIONS_GAME_SORTING=Sortering -SING_OPTIONS_GAME_DEBUG=Feilsøking - -SING_OPTIONS_GRAPHICS_WHEREAMI=Innstillinger Grafikk -SING_OPTIONS_GRAPHICS_DESC=Grafiske innstillinger -SING_OPTIONS_GRAPHICS_RESOLUTION=Oppløsning -SING_OPTIONS_GRAPHICS_FULLSCREEN=Fullskjerm -SING_OPTIONS_GRAPHICS_DEPTH=Fargedybde +SING_OPTIONS_GAME_SORTING=Sortering +SING_OPTIONS_GAME_DEBUG=Feilsøking + +SING_OPTIONS_GRAPHICS_WHEREAMI=Innstillinger Grafikk +SING_OPTIONS_GRAPHICS_DESC=Grafiske innstillinger +SING_OPTIONS_GRAPHICS_RESOLUTION=Oppløsning +SING_OPTIONS_GRAPHICS_FULLSCREEN=Fullskjerm +SING_OPTIONS_GRAPHICS_DEPTH=Fargedybde ;TODO: SING_OPTIONS_GRAPHICS_VISUALIZER=Visualization -SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloskop -SING_OPTIONS_GRAPHICS_LINEBONUS=Linjebonus -SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Filmstørrelse +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscilloskop +SING_OPTIONS_GRAPHICS_LINEBONUS=Linjebonus +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Filmstørrelse -SING_OPTIONS_SOUND_WHEREAMI=Innstillinger Lyd -SING_OPTIONS_SOUND_DESC=lydinnstillinger +SING_OPTIONS_SOUND_WHEREAMI=Innstillinger Lyd +SING_OPTIONS_SOUND_DESC=lydinnstillinger ;TODO: SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Microphone Playback ;TODO: SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Background music -SING_OPTIONS_SOUND_MIC_BOOST=Mikrofon-gain -SING_OPTIONS_SOUND_CLICK_ASSIST=Klikke-assistanse -SING_OPTIONS_SOUND_BEAT_CLICK=Beat-klikk -SING_OPTIONS_SOUND_THRESHOLD=Toleransegrense -SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Tospiller-modus -SING_OPTIONS_SOUND_PREVIEWVOLUME=Preview-volum -SING_OPTIONS_SOUND_PREVIEWFADING=Preview-fading - -SING_OPTIONS_LYRICS_WHEREAMI=Innstillinger Tekst -SING_OPTIONS_LYRICS_DESC=tekstinnstillinger -SING_OPTIONS_LYRICS_FONT=Fonter -SING_OPTIONS_LYRICS_EFFECT=Effekter -SING_OPTIONS_LYRICS_SOLMIZATION=Solmisasjon +SING_OPTIONS_SOUND_MIC_BOOST=Mikrofon-gain +SING_OPTIONS_SOUND_CLICK_ASSIST=Klikke-assistanse +SING_OPTIONS_SOUND_BEAT_CLICK=Beat-klikk +SING_OPTIONS_SOUND_THRESHOLD=Toleransegrense +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Tospiller-modus +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain +SING_OPTIONS_SOUND_PREVIEWVOLUME=Preview-volum +SING_OPTIONS_SOUND_PREVIEWFADING=Preview-fading + +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + +SING_OPTIONS_LYRICS_WHEREAMI=Innstillinger Tekst +SING_OPTIONS_LYRICS_DESC=tekstinnstillinger +SING_OPTIONS_LYRICS_FONT=Fonter +SING_OPTIONS_LYRICS_EFFECT=Effekter +SING_OPTIONS_LYRICS_SOLMIZATION=Solmisasjon ;TODO: SING_OPTIONS_LYRICS_NOTELINES=Staves -SING_OPTIONS_THEMES_WHEREAMI=Innstillinger Utseende -SING_OPTIONS_THEMES_DESC=tema og skin-innstillinger -SING_OPTIONS_THEMES_THEME=Tema -SING_OPTIONS_THEMES_SKIN=Skin -SING_OPTIONS_THEMES_COLOR=Farge - -SING_OPTIONS_RECORD_WHEREAMI=Innstillinger Opptak -SING_OPTIONS_RECORD_DESC=mikrofoninnstillinger -SING_OPTIONS_RECORD_CARD=Lydkort -SING_OPTIONS_RECORD_INPUT=Input -SING_OPTIONS_RECORD_CHANNEL=Kanal - -SING_OPTIONS_ADVANCED_WHEREAMI=Innstillinger Avansert -SING_OPTIONS_ADVANCED_DESC=avanserte innstillinger -SING_OPTIONS_ADVANCED_EFFECTSING=Sangeffekter -SING_OPTIONS_ADVANCED_SCREENFADE=Skjermfading -SING_OPTIONS_ADVANCED_LOADANIMATION=Animasjonslasting -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Sikkerhetsspørsmål -SING_OPTIONS_ADVANCED_LINEBONUS=Linjebonus -SING_OPTIONS_ADVANCED_ONSONGCLICK=Etter sang: -SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto partymeny - -;TODO: SING_EDIT=Editor -;TODO: SING_EDIT_MENU_DESCRIPTION=create your own song +SING_OPTIONS_THEMES_WHEREAMI=Innstillinger Utseende +SING_OPTIONS_THEMES_DESC=tema og skin-innstillinger +SING_OPTIONS_THEMES_THEME=Tema +SING_OPTIONS_THEMES_SKIN=Skin +SING_OPTIONS_THEMES_COLOR=Farge + +SING_OPTIONS_RECORD_WHEREAMI=Innstillinger Opptak +SING_OPTIONS_RECORD_DESC=mikrofoninnstillinger +SING_OPTIONS_RECORD_CARD=Lydkort +SING_OPTIONS_RECORD_INPUT=Input +SING_OPTIONS_RECORD_CHANNEL=Kanal + +SING_OPTIONS_ADVANCED_WHEREAMI=Innstillinger Avansert +SING_OPTIONS_ADVANCED_DESC=avanserte innstillinger +SING_OPTIONS_ADVANCED_EFFECTSING=Sangeffekter +SING_OPTIONS_ADVANCED_SCREENFADE=Skjermfading +SING_OPTIONS_ADVANCED_LOADANIMATION=Animasjonslasting +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Sikkerhetsspørsmål +SING_OPTIONS_ADVANCED_LINEBONUS=Linjebonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=Etter sang: +SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto partymeny + +SING_EDIT=editor +SING_EDIT_MENU_DESCRIPTION=lag dine egne sanger ;TODO: SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Import text from midi file -;TODO: SING_EDIT_BUTTON_DESCRIPTION_EXIT=back +SING_EDIT_BUTTON_DESCRIPTION_EXIT=tilbake ;TODO: SING_EDIT_BUTTON_CONVERT=Import -;TODO: SING_EDIT_BUTTON_EXIT=back - -;TODO: SING_EDIT_NAVIGATE=navigate -;TODO: SING_EDIT_SELECT=select -;TODO: SING_EDIT_EXIT=back - -SING_LEGEND_SELECT=velg -SING_LEGEND_NAVIGATE=naviger -SING_LEGEND_CONTINUE=fortsett -SING_LEGEND_ESC=tilbake - -SING_PLAYER_DESC=velg spillernavn -SING_PLAYER_WHEREAMI=Spillernavn -SING_PLAYER_ENTER_NAME=velg navn - -SING_DIFFICULTY_DESC=velg vanskelighetsgrad -SING_DIFFICULTY_WHEREAMI=Vanskelighet -SING_DIFFICULTY_CONTINUE=til sangvalg -SING_EASY=Lett -SING_MEDIUM=Moderat -SING_HARD=Vanskelig - -SING_SONG_SELECTION_DESC=velg sang -SING_SONG_SELECTION_WHEREAMI=Sangvalg -SING_SONG_SELECTION_GOTO=gå til .. -SING_SONG_SELECTION=Sangvalg -SING_SONG_SELECTION_MENU=meny -SING_SONG_SELECTION_PLAYLIST=spilleliste -SING_SONGS_IN_CAT=Sanger -PLAYLIST_CATTEXT=Spilleliste: %s - -SING_TIME=TID -SING_TOTAL=total -SING_MODE=syng solo -SING_NOTES=toner -SING_GOLDEN_NOTES=gyldne noter -SING_PHRASE_BONUS=linjebonus - -SING_MENU=Hovedmeny - -SONG_SCORE=sangscore -SONG_SCORE_WHEREAMI=Score - -SING_SCORE_TONE_DEAF=Tonedøv -SING_SCORE_AMATEUR=Amatør +SING_EDIT_BUTTON_EXIT=tilbake + +SING_EDIT_NAVIGATE=naviger +SING_EDIT_SELECT=velg +SING_EDIT_EXIT=tilbake + +SING_LEGEND_SELECT=velg +SING_LEGEND_NAVIGATE=naviger +SING_LEGEND_CONTINUE=fortsett +SING_LEGEND_ESC=tilbake + +SING_PLAYER_DESC=velg spillernavn +SING_PLAYER_WHEREAMI=Spillernavn +SING_PLAYER_ENTER_NAME=velg navn + +SING_DIFFICULTY_DESC=velg vanskelighetsgrad +SING_DIFFICULTY_WHEREAMI=Vanskelighet +SING_DIFFICULTY_CONTINUE=til sangvalg +SING_EASY=Lett +SING_MEDIUM=Moderat +SING_HARD=Vanskelig + +SING_SONG_SELECTION_DESC=velg sang +SING_SONG_SELECTION_WHEREAMI=Sangvalg +SING_SONG_SELECTION_GOTO=gå til .. +SING_SONG_SELECTION=Sangvalg +SING_SONG_SELECTION_MENU=meny +SING_SONG_SELECTION_PLAYLIST=spilleliste +SING_SONGS_IN_CAT=Sanger +PLAYLIST_CATTEXT=Spilleliste: %s + +;TODO: SING_TIME=TIME +SING_TOTAL=total +SING_MODE=syng solo +SING_NOTES=toner +SING_GOLDEN_NOTES=gyldne noter +SING_PHRASE_BONUS=linjebonus + +SING_MENU=Hovedmeny + +SONG_SCORE=sangscore +SONG_SCORE_WHEREAMI=Score + +SING_SCORE_TONE_DEAF=Tonedøv +SING_SCORE_AMATEUR=Amatør ;TODO: SING_SCORE_WANNABE=Wannabe ;TODO: SING_SCORE_HOPEFUL=Hopeful -SING_SCORE_RISING_STAR=Stigende stjerne -SING_SCORE_LEAD_SINGER=Toppvokalist -SING_SCORE_SUPERSTAR=Superstjerne -SING_SCORE_ULTRASTAR=Ultrastjerne - -SING_TOP_5_CHARTS=topp 5 spillere -SING_TOP_5_CHARTS_WHEREAMI=topp 5 -SING_TOP_5_CHARTS_CONTINUE=til sangvalg -;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=switch difficulty - -POPUP_PERFECT=perfekt! -POPUP_AWESOME=fantastisk! -POPUP_GREAT=kjempebra! -POPUP_GOOD=bra! -POPUP_NOTBAD=brukbart! -POPUP_BAD=dårlig! -POPUP_POOR=elendig! -POPUP_AWFUL=grusomt! - -IMPLODE_GLUE1=, -IMPLODE_GLUE2= og - -SONG_MENU_NAME_MAIN=sangmeny -SONG_MENU_PLAY=Syng -SONG_MENU_CHANGEPLAYERS=Endre spillere -SONG_MENU_EDIT=Endre -SONG_MENU_MODI=Syng en modus -SONG_MENU_CANCEL=AVbryt - -SONG_MENU_NAME_PLAYLIST=Sangmeny -SONG_MENU_PLAYLIST_ADD=Legg til sang -SONG_MENU_PLAYLIST_DEL=Ta bort sang - -SONG_MENU_NAME_PLAYLIST_ADD=Legg til sang -SONG_MENU_PLAYLIST_ADD_NEW=til ny spilleliste -SONG_MENU_PLAYLIST_ADD_EXISTING=til eksisterende spilleliste -SONG_MENU_PLAYLIST_NOEXISTING=ingen spilleliste eksisterer - -SONG_MENU_NAME_PLAYLIST_NEW=Ny spilleliste -SONG_MENU_PLAYLIST_NEW_CREATE=Opprett -SONG_MENU_PLAYLIST_NEW_UNNAMED=Uten navn - -SONG_MENU_NAME_PLAYLIST_DELITEM=Virkelig slette? -SONG_MENU_YES=Ja -SONG_MENU_NO=Nei - -SONG_MENU_NAME_PLAYLIST_LOAD=Åpne spilleliste -SONG_MENU_PLAYLIST_LOAD=åpne -SONG_MENU_PLAYLIST_DELCURRENT=slett nåværende spilleliste - -SONG_MENU_NAME_PLAYLIST_DEL=Slett spilleliste? - -SONG_MENU_NAME_PARTY_MAIN=Partymeny -SONG_MENU_JOKER=Joker - -SONG_MENU_NAME_PARTY_JOKER=bruk joker - -SONG_JUMPTO_DESC=søk etter sang -SONG_JUMPTO_TYPE_DESC=Søk etter: -SONG_JUMPTO_TYPE1=Alt -SONG_JUMPTO_TYPE2=Tittel -SONG_JUMPTO_TYPE3=Artist -SONG_JUMPTO_SONGSFOUND=%d Sang(er) funnet -SONG_JUMPTO_NOSONGSFOUND=Ingen funnet -SONG_JUMPTO_HELP=Skriv inn tekst å lete etter -SONG_JUMPTO_CATTEXT=Søk etter: %s - -PARTY_MODE=Partymodus -PARTY_DIFFICULTY=Vanskelighetsgrad -PARTY_PLAYLIST=Spilleliste-modus -PARTY_PLAYLIST_ALL=Alle sanger -PARTY_PLAYLIST_CATEGORY=Mappe -PARTY_PLAYLIST_PLAYLIST=Spillelist -PARTY_TEAMS=Lag -PARTY_TEAMS_PLAYER1=Spiller Lag1 -PARTY_TEAMS_PLAYER2=Spiller Lag2 -PARTY_TEAMS_PLAYER3=Spiller Lag3 - -PARTY_LEGEND_CONTINUE=Fortsett - -PARTY_OPTIONS_DESC=Innstillinger for party-spillet -PARTY_OPTIONS_WHEREAMI=Party-innstillinger - -PARTY_PLAYER_DESC=skriv spiller- og lagnavn! -PARTY_PLAYER_WHEREAMI=Party-navn -PARTY_PLAYER_ENTER_NAME=skriv navn - - -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +SING_SCORE_RISING_STAR=Stigende stjerne +SING_SCORE_LEAD_SINGER=Toppvokalist +SING_SCORE_SUPERSTAR=Superstjerne +SING_SCORE_ULTRASTAR=Ultrastjerne + +SING_TOP_5_CHARTS=topp 5 spillere +SING_TOP_5_CHARTS_WHEREAMI=topp 5 +SING_TOP_5_CHARTS_CONTINUE=til sangvalg +;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Switch difficulty + +POPUP_PERFECT=perfekt! +POPUP_AWESOME=fantastisk! +POPUP_GREAT=kjempebra! +POPUP_GOOD=bra! +POPUP_NOTBAD=brukbart! +POPUP_BAD=dårlig! +POPUP_POOR=elendig! +POPUP_AWFUL=grusomt! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2= og + +SONG_MENU_NAME_MAIN=sangmeny +SONG_MENU_PLAY=Syng +SONG_MENU_CHANGEPLAYERS=Endre spillere +SONG_MENU_EDIT=Endre +SONG_MENU_MODI=Syng en modus +SONG_MENU_CANCEL=AVbryt + +SONG_MENU_NAME_PLAYLIST=Sangmeny +SONG_MENU_PLAYLIST_ADD=Legg til sang +SONG_MENU_PLAYLIST_DEL=Ta bort sang + +SONG_MENU_NAME_PLAYLIST_ADD=Legg til sang +SONG_MENU_PLAYLIST_ADD_NEW=til ny spilleliste +SONG_MENU_PLAYLIST_ADD_EXISTING=til eksisterende spilleliste +SONG_MENU_PLAYLIST_NOEXISTING=ingen spilleliste eksisterer + +SONG_MENU_NAME_PLAYLIST_NEW=Ny spilleliste +SONG_MENU_PLAYLIST_NEW_CREATE=Opprett +SONG_MENU_PLAYLIST_NEW_UNNAMED=Uten navn + +SONG_MENU_NAME_PLAYLIST_DELITEM=Virkelig slette? +SONG_MENU_YES=Ja +SONG_MENU_NO=Nei + +SONG_MENU_NAME_PLAYLIST_LOAD=Åpne spilleliste +SONG_MENU_PLAYLIST_LOAD=åpne +SONG_MENU_PLAYLIST_DELCURRENT=slett nåværende spilleliste + +SONG_MENU_NAME_PLAYLIST_DEL=Slett spilleliste? + +SONG_MENU_NAME_PARTY_MAIN=Partymeny +SONG_MENU_JOKER=Joker + +SONG_MENU_NAME_PARTY_JOKER=bruk joker + +SONG_JUMPTO_DESC=søk etter sang +SONG_JUMPTO_TYPE_DESC=Søk etter: +SONG_JUMPTO_TYPE1=Alt +SONG_JUMPTO_TYPE2=Tittel +SONG_JUMPTO_TYPE3=Artist +SONG_JUMPTO_SONGSFOUND=%d Sang(er) funnet +SONG_JUMPTO_NOSONGSFOUND=Ingen funnet +SONG_JUMPTO_HELP=Skriv inn tekst å lete etter +SONG_JUMPTO_CATTEXT=Søk etter: %s + +PARTY_MODE=Partymodus +PARTY_DIFFICULTY=Vanskelighetsgrad +PARTY_PLAYLIST=Spilleliste-modus +PARTY_PLAYLIST_ALL=Alle sanger +PARTY_PLAYLIST_CATEGORY=Mappe +PARTY_PLAYLIST_PLAYLIST=Spillelist +PARTY_TEAMS=Lag +PARTY_TEAMS_PLAYER1=Spiller Lag1 +PARTY_TEAMS_PLAYER2=Spiller Lag2 +PARTY_TEAMS_PLAYER3=Spiller Lag3 + +PARTY_LEGEND_CONTINUE=Fortsett + +PARTY_OPTIONS_DESC=Innstillinger for party-spillet +PARTY_OPTIONS_WHEREAMI=Party-innstillinger + +PARTY_PLAYER_DESC=skriv spiller- og lagnavn! +PARTY_PLAYER_WHEREAMI=Party-navn +PARTY_PLAYER_ENTER_NAME=skriv navn + + +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds -;TODO: PARTY_ROUNDS_LEGEND_CONTINUE=start party-game -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDS_LEGEND_CONTINUE=Start party-game +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d -PARTY_ROUND_DESC=neste spillere til mikrofonene -PARTY_ROUND_WHEREAMI=Party neste runde -PARTY_ROUND_LEGEND_CONTINUE=start runden +PARTY_ROUND_DESC=neste spillere til mikrofonene +PARTY_ROUND_WHEREAMI=Party neste runde +PARTY_ROUND_LEGEND_CONTINUE=start runden -PARTY_SONG_WHEREAMI=Party sangvalg -PARTY_SONG_LEGEND_CONTINUE=syng -PARTY_SONG_MENU=partymeny +PARTY_SONG_WHEREAMI=Party sangvalg +PARTY_SONG_LEGEND_CONTINUE=syng +PARTY_SONG_MENU=partymeny -PARTY_SCORE_DESC=Siste rundes poengsum -PARTY_SCORE_WHEREAMI=Partypoeng +PARTY_SCORE_DESC=Siste rundes poengsum +PARTY_SCORE_WHEREAMI=Partypoeng -PARTY_WIN_DESC=vinner av partyspillet -PARTY_WIN_WHEREAMI=Party-vinner -PARTY_WIN_LEGEND_CONTINUE=tilbake til hovedmenyen +PARTY_WIN_DESC=vinner av partyspillet +PARTY_WIN_WHEREAMI=Party-vinner +PARTY_WIN_LEGEND_CONTINUE=tilbake til hovedmenyen -PARTY_ROUND=Runde -PARTY_ROUND_WINNER=Vinner -PARTY_NOTPLAYEDYET=Ikke spilt ennå -PARTY_NOBODY=ingen -NEXT_ROUND=Neste runde: +PARTY_ROUND=Runde +PARTY_ROUND_WINNER=Vinner +PARTY_NOTPLAYEDYET=Ikke spilt ennå +PARTY_NOBODY=ingen +NEXT_ROUND=Neste runde: -PARTY_DISMISSED=Avbrutt! -PARTY_SCORE_WINS=%s -PARTY_SCORE_WINS2=Vinner! +PARTY_DISMISSED=Avbrutt! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=Vinner! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! + +MODE_HOLDTHELINE_NAME=Hold linja +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! + +MODE_5000POINTS_NAME=Først til 5000 +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! -MODE_HOLDTHELINE_NAME=Hold linja -MODE_HOLDTHELINE_DESC=Ikke syng dårligere enn hva markøren på statuslinja viser. +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! -MODE_5000POINTS_NAME=Først til 5000 -MODE_5000POINTS_DESC=Førstemann til 5000 poeng vinner. +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! -MODE_DUEL_NAME=Duell -MODE_DUEL_DESC=Syng en duell - først til 10000. +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! -;TODO: MODE_TEAMDUEL_NAME=Team Duell -;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! +MODE_DUEL_NAME=Duell +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_BLIND_NAME=Blindemodus -MODE_BLIND_DESC=Duell der notene ikke vises +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! + +MODE_BLIND_NAME=Blindemodus +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! -STAT_MAIN=Statistikk -STAT_MAIN_DESC=Hoved -STAT_MAIN_WHEREAMI=Statistikk +STAT_MAIN=Statistikk +STAT_MAIN_DESC=Hoved +STAT_MAIN_WHEREAMI=Statistikk -STAT_OVERVIEW_INTRO=%0:s Statistikk. \n Siste avslutning ved %2:.2d.%1:.2d.%3:d -STAT_OVERVIEW_SONG=%0:d Sanger(%3:d med video), hvorav %1:d allerede har vært sunget og %2:d ennå ikke har vært sunget.\n Den mest populære sangen er %5:s av %4:s. -STAT_OVERVIEW_PLAYER=Siden den siste avlutningen var det %0:d ulike spillere.\n Den beste spilleren er %1:s med en gjennomsnitts-score på %2:d poeng.\n %3:s fikk høyeste score med %4:d poeng. +STAT_OVERVIEW_INTRO=%0:s Statistikk. \n Siste avslutning ved %2:.2d.%1:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Sanger(%3:d med video), hvorav %1:d allerede har vært sunget og %2:d ennå ikke har vært sunget.\n Den mest populære sangen er %5:s av %4:s. +STAT_OVERVIEW_PLAYER=Siden den siste avlutningen var det %0:d ulike spillere.\n Den beste spilleren er %1:s med en gjennomsnitts-score på %2:d poeng.\n %3:s fikk høyeste score med %4:d poeng. ;TODO: STAT_FORMAT_DATE=%1:.2d.%0:.2d.%2:d -STAT_DETAIL=Statistikk -STAT_DETAIL_WHEREAMI=Detaljert statistikk +STAT_DETAIL=Statistikk +STAT_DETAIL_WHEREAMI=Detaljert statistikk -STAT_NEXT=Neste side -STAT_PREV=Forrige side -STAT_REVERSE=Bytt rekkefølge -STAT_PAGE=Side %0:d av %1:d Sider\n (%2:d av %3:d ) +STAT_NEXT=Neste side +STAT_PREV=Forrige side +STAT_REVERSE=Bytt rekkefølge +STAT_PAGE=Side %0:d av %1:d Sider\n (%2:d av %3:d ) -STAT_DESC_SCORES=Toppscore -STAT_DESC_SCORES_REVERSED=Bunnscore -STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) +STAT_DESC_SCORES=Toppscore +STAT_DESC_SCORES_REVERSED=Bunnscore +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] \n (%3:s - %4:s) -STAT_DESC_SINGERS=Beste sangere -STAT_DESC_SINGERS_REVERSED=Dårligste sangere -STAT_FORMAT_SINGERS=%0:s \n Gjennomsnitts-score: %1:d +STAT_DESC_SINGERS=Beste sangere +STAT_DESC_SINGERS_REVERSED=Dårligste sangere +STAT_FORMAT_SINGERS=%0:s \n Gjennomsnitts-score: %1:d -STAT_DESC_SONGS=Mest populære sang -STAT_DESC_SONGS_REVERSED=Minst populære sang -STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx sunget +STAT_DESC_SONGS=Mest populære sang +STAT_DESC_SONGS_REVERSED=Minst populære sang +STAT_FORMAT_SONGS=%0:s - %1:s \n %2:dx sunget -STAT_DESC_BANDS=Mest populære artist -STAT_DESC_BANDS_REVERSED=Minst populære artist -STAT_FORMAT_BANDS=%0:s \n %1:dx Sunget +STAT_DESC_BANDS=Mest populære artist +STAT_DESC_BANDS_REVERSED=Minst populære artist +STAT_FORMAT_BANDS=%0:s \n %1:dx Sunget ;TODO: SCREENSHOT_SAVED=Screenshot saved ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? ;TODO: EDITOR_ERROR_NO_TRACK_SELECTED=No track selected -MSG_ERROR_TITLE=Feil +MSG_ERROR_TITLE=Feil ;TODO: MSG_INFO_TITLE=Information -MSG_QUESTION_TITLE=Spørsmål -MSG_QUIT_USDX=Vil du virkelig avslutte UltraStar? -MSG_END_PARTY=Vil du virkelig forlate party-modusen? - -ERROR_NO_SONGS=Ingen sanger lastet -ERROR_NO_PLUGINS=Ingen plug-ins lastet -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +MSG_QUESTION_TITLE=Spørsmål +MSG_QUIT_USDX=Vil du virkelig avslutte UltraStar? +MSG_END_PARTY=Vil du virkelig forlate party-modusen? + +ERROR_NO_SONGS=Ingen sanger lastet +ERROR_NO_PLUGINS=Ingen plug-ins lastet +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Song could not be loaded: File not found ;TODO: ERROR_CORRUPT_SONG_NO_NOTES=Song could not be loaded: Can''t find any notes @@ -450,10 +496,6 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= -;UNUSED: SING_SCORE_HIT_ARTIST=Hitartist -;UNUSED: PARTY_ROUNDS=Runder - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -479,15 +521,15 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Alt +OPTION_ALL_SCORES=Alt ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=AVbryt ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -525,7 +567,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=AVbryt ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -547,11 +589,10 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=neste spillere til mikrofonene ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -588,7 +629,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -599,17 +640,17 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Sangmeny ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Legg til sang +SONG_MENU_DELETE_SONG=Ta bort sang ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Alt ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -617,11 +658,11 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Oppløsning ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Effekter ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -634,7 +675,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Toleransegrense ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -653,7 +694,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Sangmeny ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -662,10 +703,10 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=syng ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -698,7 +739,7 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Farge ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -719,19 +760,19 @@ ERROR_CORRUPT_SONG=Sangen kunne ikke lastes ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Spillelist ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Alt ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Polish.ini b/game/languages/Polish.ini index d1e2f168..669b527b 100644 --- a/game/languages/Polish.ini +++ b/game/languages/Polish.ini @@ -1,6 +1,6 @@ [Text] OPTION_VALUE_CATALAN=Kataloński -;TODO: OPTION_VALUE_CHINESE=Chinese +OPTION_VALUE_CHINESE=Chiński OPTION_VALUE_CROATIAN=Chorwacki OPTION_VALUE_CZECH=Czeski OPTION_VALUE_DANISH=Duński @@ -9,7 +9,8 @@ OPTION_VALUE_ENGLISH=Angielski OPTION_VALUE_EUSKARA=Baskijski OPTION_VALUE_FINNISH=Fiński OPTION_VALUE_FRENCH=Francuski -;TODO: OPTION_VALUE_GALICIAN=Galician +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic +OPTION_VALUE_GALICIAN=Galicyjski OPTION_VALUE_GERMAN=Niemiecki OPTION_VALUE_GREEK=Grecki OPTION_VALUE_HUNGARIAN=Węgierski @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luksemburski OPTION_VALUE_NORWEGIAN=Norweski OPTION_VALUE_POLISH=Polski OPTION_VALUE_PORTUGUESE=Portugalski +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Rosyjski OPTION_VALUE_SERBIAN=Serbski OPTION_VALUE_SLOVAK=Słowacki @@ -42,11 +44,14 @@ OPTION_VALUE_TITLE=Tytuł OPTION_VALUE_ARTIST=Artysta OPTION_VALUE_TITLE2=Tytuł2 OPTION_VALUE_ARTIST2=Artysta2 -;TODO: OPTION_VALUE_YEAR=Year -;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_YEAR=Rok +OPTION_VALUE_DECADE=Dekada +OPTION_VALUE_PLAYLIST=Playlista + +OPTION_VALUE_BORDERLESS=Bez krawędzi OPTION_VALUE_WHENNOVIDEO=Kiedy bez Video +OPTION_VALUE_WHENNOVIDEOANDIMAGE=Kiedy bez Video i bez obrazu OPTION_VALUE_SMALL=Mały OPTION_VALUE_BIG=Duży @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Połowa OPTION_VALUE_FULL_VID=Pełny (Video) OPTION_VALUE_FULL_VID_BG=Pełny (Tło & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=Sekunda OPTION_VALUE_SECS=Sekundy @@ -70,8 +79,8 @@ OPTION_VALUE_BALL=Kula OPTION_VALUE_SHIFT=Shift OPTION_VALUE_EURO=Euro -OPTION_VALUE_JAPAN=Japan -OPTION_VALUE_AMERICAN=American +OPTION_VALUE_JAPAN=Japoński +OPTION_VALUE_AMERICAN=Amerykański OPTION_VALUE_BLUE=Niebieski OPTION_VALUE_GREEN=Zielony @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Śpiew OPTION_VALUE_SELECT_PLAYERS=Wybierz graczy OPTION_VALUE_OPEN_MENU=Otwórz Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Sprzętowy Kursor OPTION_VALUE_SOFTWARE_CURSOR=Programowy Kursor @@ -99,35 +110,36 @@ SING_SING_DESC=Szybka gra: solo lub duet SING_MULTI=Impreza SING_MULTI_DESC=Śpiewaj w trybie imprezy -SING_TOOLS=narzędzia +SING_TOOLS=Narzędzia -SING_STATS=statystyki -SING_STATS_DESC=zobacz statystyki +SING_STATS=Statystyki +SING_STATS_DESC=Zobacz statystyki -SING_EDITOR=edytor -SING_EDITOR_DESC=stwórz własną piosenkę +SING_EDITOR=Edytor +SING_EDITOR_DESC=Stwórz własną piosenkę -SING_GAME_OPTIONS=opcje gry -SING_GAME_OPTIONS_DESC=zmiana ustawień gry +SING_GAME_OPTIONS=Opcje gry +SING_GAME_OPTIONS_DESC=Zmiana ustawień gry -SING_EXIT=wyjście -SING_EXIT_DESC=wyjście z gry +SING_EXIT=Wyjście +SING_EXIT_DESC=Wyjście z gry -SING_OPTIONS=opcje -SING_OPTIONS_DESC=zmień ustawienia +SING_OPTIONS=Opcje +SING_OPTIONS_DESC=Zmień ustawienia SING_OPTIONS_WHEREAMI=Opcje -SING_OPTIONS_GAME=gra -SING_OPTIONS_GRAPHICS=grafika -SING_OPTIONS_SOUND=dźwięk -SING_OPTIONS_LYRICS=tekst -SING_OPTIONS_THEMES=tematy -SING_OPTIONS_RECORD=nagrywanie -SING_OPTIONS_ADVANCED=zaawansow. -SING_OPTIONS_EXIT=wstecz +SING_OPTIONS_GAME=Gra +SING_OPTIONS_GRAPHICS=Grafika +SING_OPTIONS_SOUND=Dźwięk +SING_OPTIONS_INPUT=Wejścia +SING_OPTIONS_LYRICS=Tekst +SING_OPTIONS_THEMES=Style +SING_OPTIONS_RECORD=Nagrywanie +SING_OPTIONS_ADVANCED=Zaawansow. +SING_OPTIONS_EXIT=Wstecz SING_OPTIONS_GAME_WHEREAMI=Opcje gry -SING_OPTIONS_GAME_DESC=ogólne ustawienia gry +SING_OPTIONS_GAME_DESC=Ogólne ustawienia gry SING_OPTIONS_GAME_PLAYERS=Gracze SING_OPTIONS_GAME_DIFFICULTY=Trudność SING_OPTIONS_GAME_LANGUAGE=Język @@ -136,17 +148,17 @@ SING_OPTIONS_GAME_SORTING=Sortowanie SING_OPTIONS_GAME_DEBUG=Debug SING_OPTIONS_GRAPHICS_WHEREAMI=Opcje Grafiki -SING_OPTIONS_GRAPHICS_DESC=ustawienia grafiki +SING_OPTIONS_GRAPHICS_DESC=Ustawienia grafiki SING_OPTIONS_GRAPHICS_RESOLUTION=Rozdzielczość SING_OPTIONS_GRAPHICS_FULLSCREEN=Pełny ekran SING_OPTIONS_GRAPHICS_DEPTH=Głębia SING_OPTIONS_GRAPHICS_VISUALIZER=Wizualizacja SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Oscyloskop -SING_OPTIONS_GRAPHICS_LINEBONUS=Linia Bonusa +SING_OPTIONS_GRAPHICS_LINEBONUS=Linia bonusu SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Rozmiar filmu -SING_OPTIONS_SOUND_WHEREAMI=Opcje Dźwięku -SING_OPTIONS_SOUND_DESC=ustawienia dźwięku +SING_OPTIONS_SOUND_WHEREAMI=Opcje dźwięku +SING_OPTIONS_SOUND_DESC=Ustawienia dźwięku SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Podkład mikrofonu SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Podkład muzyczny SING_OPTIONS_SOUND_MIC_BOOST=Podbicie mikrofonu @@ -154,81 +166,88 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Pomoc kliknięciami SING_OPTIONS_SOUND_BEAT_CLICK=Kliknięcia w rytm SING_OPTIONS_SOUND_THRESHOLD=Próg SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Tryb dwóch graczy +SING_OPTIONS_SOUND_MUSICAUTOGAIN=Przyrost muzyki SING_OPTIONS_SOUND_PREVIEWVOLUME=Głośność w podglądzie SING_OPTIONS_SOUND_PREVIEWFADING=Zanikanie w podglądzie +SING_OPTIONS_INPUT_WHEREAMI=Opcje wejść +SING_OPTIONS_INPUT_DESC=Ustawienia wejść +SING_OPTIONS_INPUT_MOUSE=Mysz +SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Wsparcie kontrolera + SING_OPTIONS_LYRICS_WHEREAMI=Opcje tekstu -SING_OPTIONS_LYRICS_DESC=ustawienie tekstu +SING_OPTIONS_LYRICS_DESC=Ustawienie tekstu SING_OPTIONS_LYRICS_FONT=Czcionka SING_OPTIONS_LYRICS_EFFECT=Efekt SING_OPTIONS_LYRICS_SOLMIZATION=Solmizacja -SING_OPTIONS_LYRICS_NOTELINES=Drązki +SING_OPTIONS_LYRICS_NOTELINES=Drążki -SING_OPTIONS_THEMES_WHEREAMI=Opcje Tematów -SING_OPTIONS_THEMES_DESC=ustawienia tematów i skórek -SING_OPTIONS_THEMES_THEME=Temat +SING_OPTIONS_THEMES_WHEREAMI=Opcje stylów +SING_OPTIONS_THEMES_DESC=Ustawienia stylów i skórek +SING_OPTIONS_THEMES_THEME=Styl SING_OPTIONS_THEMES_SKIN=Skórka SING_OPTIONS_THEMES_COLOR=Kolor SING_OPTIONS_RECORD_WHEREAMI=Opcje nagrywania -SING_OPTIONS_RECORD_DESC=ustawienia mikrofonu -SING_OPTIONS_RECORD_CARD=karta muzyczna -SING_OPTIONS_RECORD_INPUT=wejście -SING_OPTIONS_RECORD_CHANNEL=kanał +SING_OPTIONS_RECORD_DESC=Ustawienia mikrofonu +SING_OPTIONS_RECORD_CARD=Karta muzyczna +SING_OPTIONS_RECORD_INPUT=Wejście +SING_OPTIONS_RECORD_CHANNEL=Kanał SING_OPTIONS_ADVANCED_WHEREAMI=Opcje zaawansowane -SING_OPTIONS_ADVANCED_DESC=zaawansowane ustawienia +SING_OPTIONS_ADVANCED_DESC=Zaawansowane ustawienia SING_OPTIONS_ADVANCED_EFFECTSING=Efekty śpiewania SING_OPTIONS_ADVANCED_SCREENFADE=Przenikanie ekranów SING_OPTIONS_ADVANCED_LOADANIMATION=Animacja wczytywania SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Pytania pomocnicze -SING_OPTIONS_ADVANCED_LINEBONUS=Linia bonusa -SING_OPTIONS_ADVANCED_ONSONGCLICK=after Song Select +SING_OPTIONS_ADVANCED_LINEBONUS=Linia bonusu +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=Po wybraniu piosenki SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto PartyMenu SING_EDIT=Edytor -SING_EDIT_MENU_DESCRIPTION=stwórz własną piosenkę +SING_EDIT_MENU_DESCRIPTION=Stwórz własną piosenkę SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Zaimportuj tekst z pliku midi -SING_EDIT_BUTTON_DESCRIPTION_EXIT=wstecz +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Wstecz SING_EDIT_BUTTON_CONVERT=Import -SING_EDIT_BUTTON_EXIT=wstecz +SING_EDIT_BUTTON_EXIT=Wstecz -SING_EDIT_NAVIGATE=nawiguj -SING_EDIT_SELECT=wybierz -SING_EDIT_EXIT=wstecz +SING_EDIT_NAVIGATE=Nawiguj +SING_EDIT_SELECT=Wybierz +SING_EDIT_EXIT=Wstecz -SING_LEGEND_SELECT=wybierz -SING_LEGEND_NAVIGATE=nawiguj -SING_LEGEND_CONTINUE=kontynuacja -SING_LEGEND_ESC=wstecz +SING_LEGEND_SELECT=Wybierz +SING_LEGEND_NAVIGATE=Nawiguj +SING_LEGEND_CONTINUE=Kontynuacja +SING_LEGEND_ESC=Wstecz SING_PLAYER_DESC=Wpisz nazwę gracza/y SING_PLAYER_WHEREAMI=Nazwa graczy SING_PLAYER_ENTER_NAME=Wpisz nazwę -SING_DIFFICULTY_DESC=wybierz trudność +SING_DIFFICULTY_DESC=Wybierz trudność SING_DIFFICULTY_WHEREAMI=Trudność -SING_DIFFICULTY_CONTINUE=do wybory piosenki +SING_DIFFICULTY_CONTINUE=Do wyboru piosenki SING_EASY=Łatwo SING_MEDIUM=Średnio SING_HARD=Trudno -SING_SONG_SELECTION_DESC=Wybierz Piosenkę +SING_SONG_SELECTION_DESC=Wybierz piosenkę SING_SONG_SELECTION_WHEREAMI=Wybór piosenki -SING_SONG_SELECTION_GOTO=idź do .. -SING_SONG_SELECTION=wybór piosenki -SING_SONG_SELECTION_MENU=menu -SING_SONG_SELECTION_PLAYLIST=playlista +SING_SONG_SELECTION_GOTO=Idź do .. +SING_SONG_SELECTION=Wybór piosenki +SING_SONG_SELECTION_MENU=Menu +SING_SONG_SELECTION_PLAYLIST=Playlista SING_SONGS_IN_CAT=Piosenki -PLAYLIST_CATTEXT=Playlist: %s +PLAYLIST_CATTEXT=Playlista: %s -SING_TIME=Czas -SING_TOTAL=cały -SING_MODE=śpiewaj solo -SING_NOTES=nuty -SING_GOLDEN_NOTES=złote nuty -SING_PHRASE_BONUS=linia bonus +;TODO: SING_TIME=TIME +SING_TOTAL=Cały +SING_MODE=Śpiewaj solo +SING_NOTES=Nuty +SING_GOLDEN_NOTES=Złote nuty +SING_PHRASE_BONUS=Linia bonusu SING_MENU=Główne Menu @@ -245,36 +264,36 @@ SING_SCORE_SUPERSTAR=Super gwiazda SING_SCORE_ULTRASTAR=Ultrastar SING_TOP_5_CHARTS=Najlepszych 5 graczy -SING_TOP_5_CHARTS_WHEREAMI=najlepszych 5 +SING_TOP_5_CHARTS_WHEREAMI=Najlepszych 5 SING_TOP_5_CHARTS_CONTINUE=Do wyboru piosenek -SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=zmień trudność +SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Zmień trudność -POPUP_PERFECT=idealnie! -POPUP_AWESOME=wspaniale! -POPUP_GREAT=świetnie! -POPUP_GOOD=dobrze! -POPUP_NOTBAD=nieźle! -POPUP_BAD=źle! -POPUP_POOR=słabo! -POPUP_AWFUL=okropnie! +POPUP_PERFECT=Idealnie! +POPUP_AWESOME=Wspaniale! +POPUP_GREAT=Świetnie! +POPUP_GOOD=Dobrze! +POPUP_NOTBAD=Nieźle! +POPUP_BAD=Źle! +POPUP_POOR=Słabo! +POPUP_AWFUL=Okropnie! IMPLODE_GLUE1=, IMPLODE_GLUE2= oraz -SONG_MENU_NAME_MAIN=menu piosenki +SONG_MENU_NAME_MAIN=Menu piosenki SONG_MENU_PLAY=Śpiewaj SONG_MENU_CHANGEPLAYERS=Zmień graczy SONG_MENU_EDIT=Edytuj SONG_MENU_MODI=Śpiewaj Modi SONG_MENU_CANCEL=Anuluj -SONG_MENU_NAME_PLAYLIST=Menu Piosenki +SONG_MENU_NAME_PLAYLIST=Menu piosenki SONG_MENU_PLAYLIST_ADD=Dodaj piosenkę SONG_MENU_PLAYLIST_DEL=Usuń piosenkę SONG_MENU_NAME_PLAYLIST_ADD=Dodaj piosenkę -SONG_MENU_PLAYLIST_ADD_NEW=do nowej playlisty -SONG_MENU_PLAYLIST_ADD_EXISTING=do istniejącej playlisty +SONG_MENU_PLAYLIST_ADD_NEW=Do nowej playlisty +SONG_MENU_PLAYLIST_ADD_EXISTING=Do istniejącej playlisty SONG_MENU_PLAYLIST_NOEXISTING=Brak playlist SONG_MENU_NAME_PLAYLIST_NEW=Nowa Playlista @@ -286,17 +305,17 @@ SONG_MENU_YES=Tak SONG_MENU_NO=Nie SONG_MENU_NAME_PLAYLIST_LOAD=Otwórz Playlistę -SONG_MENU_PLAYLIST_LOAD=otwórz -SONG_MENU_PLAYLIST_DELCURRENT=usuń tę playlistę +SONG_MENU_PLAYLIST_LOAD=Otwórz +SONG_MENU_PLAYLIST_DELCURRENT=Usuń tę playlistę SONG_MENU_NAME_PLAYLIST_DEL=Usunąć playlistę? SONG_MENU_NAME_PARTY_MAIN=Menu Imprezy SONG_MENU_JOKER=Joker -SONG_MENU_NAME_PARTY_JOKER=weź jokera +SONG_MENU_NAME_PARTY_JOKER=Weź jokera -SONG_JUMPTO_DESC=szukaj +SONG_JUMPTO_DESC=Szukaj SONG_JUMPTO_TYPE_DESC=Szukaj: SONG_JUMPTO_TYPE1=Wszędzie SONG_JUMPTO_TYPE2=Tytuł @@ -306,7 +325,7 @@ SONG_JUMPTO_NOSONGSFOUND=Nic nie znaleziono SONG_JUMPTO_HELP=Wpisz tekst do wyszukania SONG_JUMPTO_CATTEXT=Szukaj: %s -PARTY_MODE=tryb imprezy +PARTY_MODE=Tryb imprezy PARTY_DIFFICULTY=Poziom PARTY_PLAYLIST=Tryb playlisty PARTY_PLAYLIST_ALL=Wszystkie piosenki @@ -317,76 +336,103 @@ PARTY_TEAMS_PLAYER1=Drużyna 1 PARTY_TEAMS_PLAYER2=Drużyna 2 PARTY_TEAMS_PLAYER3=Drużyna 3 -PARTY_LEGEND_CONTINUE=dalej +PARTY_LEGEND_CONTINUE=Dalej -PARTY_OPTIONS_DESC=ustawienia trybu imprezy +PARTY_OPTIONS_DESC=Ustawienia trybu imprezy PARTY_OPTIONS_WHEREAMI=Impreza - Ustawienia -PARTY_PLAYER_DESC=wpisz nazwy graczy i drużyn +PARTY_PLAYER_DESC=Wpisz nazwy graczy i drużyn PARTY_PLAYER_WHEREAMI=Nazwy drużyn -PARTY_PLAYER_ENTER_NAME=wpisz nazwy +PARTY_PLAYER_ENTER_NAME=Wpisz nazwy -PARTY_ROUNDS_DESC= wybierz tryb w którym chcesz grać +PARTY_ROUNDS_DESC=Wybierz tryb w którym chcesz grać PARTY_ROUNDS_WHEREAMI=Rundy imprezy -PARTY_ROUNDS_LEGEND_CONTINUE=start imprezy -PARTY_ROUNDCOUNT=liczba rund -PARTY_SELECTMODE=tryb rundy %d +PARTY_ROUNDS_LEGEND_CONTINUE=Start imprezy +PARTY_ROUNDCOUNT=Liczba rund +PARTY_SELECTMODE=Tryb rundy %d -PARTY_ROUND_DESC=następni gracze do mikrofonów +PARTY_ROUND_DESC=Następni gracze do mikrofonów PARTY_ROUND_WHEREAMI=Następna Runda -PARTY_ROUND_LEGEND_CONTINUE=rozpocznij rundę +PARTY_ROUND_LEGEND_CONTINUE=Rozpocznij rundę -PARTY_SONG_WHEREAMI=Wybór piosenki -PARTY_SONG_LEGEND_CONTINUE=śpiewaj -PARTY_SONG_MENU=menu +PARTY_SONG_WHEREAMI=Wybór piosenki +PARTY_SONG_LEGEND_CONTINUE=Śpiewaj +PARTY_SONG_MENU=Menu -PARTY_SCORE_DESC=wynik ostatniej rundy +PARTY_SCORE_DESC=Wynik ostatniej rundy PARTY_SCORE_WHEREAMI=Punkty -PARTY_WIN_DESC=zwycięzca gry +PARTY_WIN_DESC=Zwycięzca gry PARTY_WIN_WHEREAMI=Zwycięzca imprezy -PARTY_WIN_LEGEND_CONTINUE=do menu głównego +PARTY_WIN_LEGEND_CONTINUE=Do menu głównego PARTY_ROUND=Runda PARTY_ROUND_WINNER=Zwycięzca -PARTY_NOTPLAYEDYET=jeszcze nie grał -PARTY_NOBODY=nikt +PARTY_NOTPLAYEDYET=Jeszcze nie grał +PARTY_NOBODY=Nikt NEXT_ROUND=Następna runda: PARTY_DISMISSED=Odpada! -PARTY_SCORE_WINS=%s -PARTY_SCORE_WINS2=wygrywa! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=Wygrywa! MODE_RANDOM_NAME=Tryb losowania -MODE_RANDOM_DESC=Jeden tryb będzie wybrany losowo +MODE_RANDOM_DESC=Utrzymaj się w rozgrywce! Gra wybierze dla Ciebie losowy tryb! MODE_HOLDTHELINE_NAME=Trzymaj Linię -MODE_HOLDTHELINE_DESC=Śpiewaj lepiej jak linia na pasku. +MODE_HOLDTHELINE_DESC=Utrzymaj swój wynik powyżej linii jak najdłużej! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +MODE_HOLDTHELINEBLIND_DESC=Utrzymaj swój wynik powyżej linii jak najdłużej, ale z ukrytymi nutami! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +MODE_7000POINTS_DESC=Wyścig do 7000 punktów! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +MODE_7000POINTSBLIND_DESC=Wyścig do 7000 punktów, ale bez patrzenia na nuty! MODE_5000POINTS_NAME=Do 5000 -MODE_5000POINTS_DESC=Wygrywa ten, kto pierwszy uzyska 5000 punktów. +MODE_5000POINTS_DESC=Wyścig do 5000 punktów! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +MODE_5000POINTSBLIND_DESC=Wyścig do 5000 punktów, ale bez patrzenia na nuty! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +MODE_2000POINTS_DESC=Wyścig do 2000 punktów! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Pojedynek -MODE_DUEL_DESC=Śpiewacie w pojedynku do 10000 punktów. +MODE_DUEL_DESC=Pojedynek 1v1 o zdobycie wyższego wyniku! MODE_TEAMDUEL_NAME=Pojedynek drużyn -MODE_TEAMDUEL_DESC=Przekaż mikrofon! +MODE_TEAMDUEL_DESC=Podaj mikrofon! Współpracujcie aby zdobyć lepszy wynik niż przeciwna drużyna! MODE_BLIND_NAME=Tryb ślepca -MODE_BLIND_DESC=Pojedynek bez pokazywania nut. +MODE_BLIND_DESC=Pojedynek 1v1, ale z ukrytymi nutami! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +MODE_BLINDTOTAL_DESC=Pojedynek, ale z ukrytymi nutami i napisami. Tylko dla odważnych! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +MODE_1000BLIND_DESC = Uzbieraj ponad 1000 punktów, ale z ukrytymi nutami! + +;TODO: MODE_DEAF_NAME = Deaf +MODE_DEAF_DESC = Myślisz że znasz nuty? Czy zaśpiewasz bez akompaniamentu? + +MODE_BLINDLYRICS_NAME = Bez Napisów +MODE_BLINDLYRICS_DESC = Myślisz że znasz tekst? Zaśpiewaj bez patrzenia na napisy! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +MODE_500BLIND_DESC = Uzbieraj ponad 500 punktów, ale z ukrytymi nutami! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +MODE_SHORTSONG_DESC = Szybki pojedynek 1v1 do połowy piosenki! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +MODE_HARDCORE_DESC=Bitwa o zdobycie trzy-liniowej przewagi nad przeciwnikiem! STAT_MAIN=Statystyki STAT_MAIN_DESC=Ogólne @@ -441,294 +487,292 @@ MSG_END_PARTY=Na pewno chcesz zakończyć tryb imprezy? ERROR_NO_SONGS=Brak piosenek ERROR_NO_PLUGINS=Brak wtyczek ERROR_NO_MODES_FOR_CURRENT_SETUP=Brak dostępnych trybów dla obecnie ustawionych graczy/zespołów -ERROR_CAN_NOT_START_PARTY= wystąpił błąd podczas startu trybu impreza +ERROR_CAN_NOT_START_PARTY=Wystąpił błąd podczas startu trybu impreza ERROR_CORRUPT_SONG=Piosenka nie może być załadowana. ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Piosenka nie może być załadowana: Brak pliku ERROR_CORRUPT_SONG_NO_NOTES=Piosenka nie może być załadowana: nie mogę znaleść nut. ERROR_CORRUPT_SONG_NO_BREAKS=Piosenka nie może być załadowana: nie mogę znaleść linii dzielących ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Piosenka nie może być załadowana: Błąd rozpoznawania linii %0:d ERROR_NO_EDITOR=Dodatek nie jest dostępny dla Linux/Mac -ERROR_PLAYER_DEVICE_ASSIGNMENT=Gracz %d został przypisany do wielu mikrofonów. Sprawdź ustawienia w obcjach gry. +ERROR_PLAYER_DEVICE_ASSIGNMENT=Gracz %d został przypisany do wielu mikrofonów. Sprawdź ustawienia w opcjach gry. ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Gracz %d nie ma przypisanego mikrofonu. Sprawdź ustawienia nagrywania. - ;TODO: SING_OPTIONS_NETWORK=Internet -;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options -;TODO: SING_OPTIONS_NETWORK_DESC=Internet General Settings -;TODO: SING_OPTIONS_NETWORK_INSERT_USER_INFO=Press key "Insert" to add user to this web... -;TODO: SING_OPTIONS_NETWORK_WEBSITE=Website -;TODO: SING_OPTIONS_NETWORK_USERNAME=Username -;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password -;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto -;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player -;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) -;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) -;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_HARD=Auto-Send (Hard) -;TODO: SING_OPTIONS_NETWORK_NO_DLL=No compatible leaderboard-plugin found! -;TODO: SING_OPTIONS_NETWORK_DELETE_PLAYER=Really delete the user %0:s of the website %1:s? -;TODO: SING_OPTIONS_NETWORK_LEGEND_INSERT=Insert -;TODO: SING_OPTIONS_NETWORK_LEGEND_DELETE=Delete - -;TODO: OPTION_PLAYER_1=Player 1 -;TODO: OPTION_PLAYER_2=Player 2 -;TODO: OPTION_PLAYER_3=Player 3 -;TODO: OPTION_PLAYER_4=Player 4 -;TODO: OPTION_PLAYER_5=Player 5 -;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All -;TODO: OPTION_VALUE_SAVE=Save -;TODO: OPTION_VALUE_SEND=Send +SING_OPTIONS_NETWORK_WHEREAMI=Opcje internetowe +SING_OPTIONS_NETWORK_DESC=Główne ustawienia internetowe +SING_OPTIONS_NETWORK_INSERT_USER_INFO=Wciśnij "Insert" aby dodać użytkownika do tej strony... +SING_OPTIONS_NETWORK_WEBSITE=Strona internetowa +SING_OPTIONS_NETWORK_USERNAME=Nazwa użytkownika +SING_OPTIONS_NETWORK_PASSWORD=Hasło +SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Wyślij nazwę +SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_PLAYER=Gracz +SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Wysyłanie (Łatwo) +SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Wysyłanie (Średnio) +SING_OPTIONS_NETWORK_AUTO_SCORE_HARD=Auto-Wysyłanie (Trudno) +SING_OPTIONS_NETWORK_NO_DLL=Brak kompatybilnego pluginu wyników! +SING_OPTIONS_NETWORK_DELETE_PLAYER=Naprawdę usunąć użytkownika %0:s ze strony %1:s? +SING_OPTIONS_NETWORK_LEGEND_INSERT=Wstaw +SING_OPTIONS_NETWORK_LEGEND_DELETE=Usuń + +OPTION_PLAYER_1=Gracz 1 +OPTION_PLAYER_2=Gracz 2 +OPTION_PLAYER_3=Gracz 3 +OPTION_PLAYER_4=Gracz 4 +OPTION_PLAYER_5=Gracz 5 +OPTION_PLAYER_6=Gracz 6 +OPTION_ALL_PLAYERS=Wszystko +OPTION_ALL_SCORES=Wszystko +OPTION_VALUE_SAVE=Zapisz +OPTION_VALUE_SEND=Wyślij ;TODO: MSG_INSERT_USER_TITLE=%0:s -;TODO: MSG_INSERT_USER_DESC=Fill the fields: -;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel - -;TODO: WEBSITE_NO_CONNECTION=No website connection! -;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! -;TODO: WEBSITE_BLANK_LOGIN=There are blank fields! -;TODO: WEBSITE_EXIST_USER=Existing user! -;TODO: WEBSITE_ERROR_SCORE=Scoring Error! -;TODO: WEBSITE_OK_SEND=Score sent successfully! -;TODO: WEBSITE_ERROR_SCORE_DUPLICATED=Existing Score! -;TODO: WEBSITE_ERROR_SONG=Song Not Found! -;TODO: WEBSITE_SAVE_SCORE=Score save successfully! -;TODO: WEBSITE_NO_CONNECTION_SAVE=No website connection! Save user anyway? - -;TODO: SONG_MENU_REFRESH_SCORES=Update Scores -;TODO: SONG_MENU_REFRESH_SCORES_TITLE=Update -;TODO: SONG_MENU_REFRESH_SCORES_NO_WEB=There aren't websites! -;TODO: SONG_MENU_REFRESH_SCORES_ONLINE=Online -;TODO: SONG_MENU_REFRESH_SCORES_FILE=File -;TODO: SONG_MENU_REFRESH_SCORES_ALL_WEB=All Websites -;TODO: SONG_MENU_REFRESH_SCORES_ALL_SONGS=All Songs -;TODO: SONG_MENU_REFRESH_SCORES_ONLY_SONG=This Song -;TODO: SONG_MENU_REFRESH_SCORES_REFRESH=Update -;TODO: SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION=Error connect to the website: %0:s! -;TODO: SONG_MENU_REFRESH_SCORES_ERROR_FILE=File not found: '%0:s [Download Scores]'! - -;TODO: SONG_SCORE_MAX=Best: -;TODO: SONG_SCORE_MEDIA=Average: - -;TODO: SCORE_SEND_DESC=Send Score -;TODO: SCORE_SEND=Send -;TODO: SCORE_SEND_PLAYER=Player -;TODO: SCORE_SEND_OTHER_USER= Other Username -;TODO: SCORE_SAVE=Save - -;TODO: SCORE_DOWNLOAD_TITLE=Download -;TODO: SCORE_DOWNLOAD_SONG=Song: -;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... -;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel -;TODO: SCORE_DOWNLOAD_OK=OK -;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! - -;TODO: SING_OPTIONS_GAME_SHOWSCORES=Show Scores -;TODO: OPTION_VALUE_WHENEXIST=When Exists - -;TODO: PARTY_SELECT_MODE=Mode -;TODO: PARTY_MODE_CLASSIC=Classic -;TODO: PARTY_MODE_CLASSIC_FREE=Classic Free -;TODO: PARTY_MODE_CHALLENGE=Challenge -;TODO: PARTY_MODE_TOURNAMENT=Tournament -;TODO: PARTY_MODE_JUKEBOX=Jukebox -;TODO: PARTY_MODE_NOT_AVAILABLE=Not Available! - -;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name -;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics -;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result -;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - - -;TODO: EDIT_TITLE=Title: -;TODO: EDIT_ARTIST=Artist: +MSG_INSERT_USER_DESC=Wypełnij pola: +MSG_INSERT_USER_ADD=Dodaj +MSG_INSERT_USER_CANCEL=Anuluj + +WEBSITE_NO_CONNECTION=Brak połączenia ze stroną! +WEBSITE_LOGIN_ERROR=Niepoprawny login! +WEBSITE_BLANK_LOGIN=Pozostały puste pola! +WEBSITE_EXIST_USER=Użytkownik już istnieje! +WEBSITE_ERROR_SCORE=Błąd punktacji! +WEBSITE_OK_SEND=Wysyłanie wyniku zakończone sukcesem! +WEBSITE_ERROR_SCORE_DUPLICATED=Wynik już istnieje! +WEBSITE_ERROR_SONG=Nie znaleziono piosenki! +WEBSITE_SAVE_SCORE=Zapisywanie wyniku zakończone sukcesem! +WEBSITE_NO_CONNECTION_SAVE=Brak połączenia z Internetem! Zapisać użytkownika pomimo tego? + +SONG_MENU_REFRESH_SCORES=Zaktualizuj wyniki +SONG_MENU_REFRESH_SCORES_TITLE=Aktualizuj +SONG_MENU_REFRESH_SCORES_NO_WEB=To nie są strony internetowe! +SONG_MENU_REFRESH_SCORES_ONLINE=Online +SONG_MENU_REFRESH_SCORES_FILE=Plik +SONG_MENU_REFRESH_SCORES_ALL_WEB=Wszystkie strony +SONG_MENU_REFRESH_SCORES_ALL_SONGS=Wszystkie piosenki +SONG_MENU_REFRESH_SCORES_ONLY_SONG=Ta piosenka +SONG_MENU_REFRESH_SCORES_REFRESH=Aktualizuj +SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION=Błąd łączenia ze stroną: %0:s! +SONG_MENU_REFRESH_SCORES_ERROR_FILE=Nie znaleziono pliku: '%0:s [Pobierz wyniki]'! + +SONG_SCORE_MAX=Najlpeszy: +SONG_SCORE_MEDIA=Średni: + +SCORE_SEND_DESC=Wyślij wynik +SCORE_SEND=Wyślij +SCORE_SEND_PLAYER=Gracz +SCORE_SEND_OTHER_USER= Inna nazwa użytkownika +SCORE_SAVE=Zapisz + +SCORE_DOWNLOAD_TITLE=Pobierz +SCORE_DOWNLOAD_SONG=Piosenka: +SCORE_DOWNLOAD_CREATE_LIST=Przygotowywanie listy... +SCORE_DOWNLOAD_RECEIVE_LIST=Pobieranie... +SCORE_DOWNLOAD_CANCEL=Anuluj +SCORE_DOWNLOAD_OK=OK +SCORE_DOWNLOAD_SONG_UPDATE=%0:d piosenka(i) zmieniona(e) przez stronę internetową! + +SING_OPTIONS_GAME_SHOWSCORES=Pokaż wyniki +OPTION_VALUE_WHENEXIST=Jeśli istnieje + +PARTY_SELECT_MODE=Tryb +PARTY_MODE_CLASSIC=Klasyczny +PARTY_MODE_CLASSIC_FREE=Klasyczny dowolny +PARTY_MODE_CHALLENGE=Wyzwanie +PARTY_MODE_TOURNAMENT=Turniej +PARTY_MODE_JUKEBOX=Szafa grająca +PARTY_MODE_NOT_AVAILABLE=Nie dostępne! + +PARTY_MODE_TOURNAMENT_PLAYER_DESC=Wprowadź liczbę graczy i nazwy +PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Liczba graczy +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Liczba rund +PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Finał +PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Półfinały +PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Ćwierćfinały +PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=1/16 finałów +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Następni gracze do mikrofonów +PARTY_MODE_TOURNAMENT_WIN_DESC=Wynik rundy +PARTY_MODE_TOURNAMENT_CHAMPION=Mistrzem zostaje: %0:s! + +EDIT_TITLE=Tytuł: +EDIT_ARTIST=Artysta: ;TODO: EDIT_MP3=MP3: ;TODO: EDIT_BPM=BPM: ;TODO: EDIT_GAP=GAP: -;TODO: EDIT_COVER=Cover: -;TODO: EDIT_BACKGROUND=Background: +EDIT_COVER=Okładka: +EDIT_BACKGROUND=Tło: ;TODO: EDIT_START=Start: -;TODO: EDIT_DURATION=Duration: -;TODO: EDIT_TONE=Tone: -;TODO: EDIT_LYRIC=Lyric: +EDIT_DURATION=Czas trwania: +EDIT_TONE=Ton: +EDIT_LYRIC=Text: ;TODO: EDIT_VIDEOGAP=Video Gap: -;TODO: EDIT_VOLUME_AUDIO=Audio Volume: -;TODO: EDIT_VOLUME_MIDI=Midi Volume: -;TODO: EDIT_VOLUME_CLICK=Click Volume: -;TODO: INFO_UNDO=Undo last operation - -;TODO: INFO_FILE_SAVED=File saved -;TODO: INFO_TIME_FIXED=Timings corrected -;TODO: INFO_CAPITALIZE=Capitalization corrected -;TODO: INFO_EXIT=Do you want leave editor without save ? -;TODO: INFO_SONG_RELOADED=Song reloaded -;TODO: INFO_DIVIDED_BPM=BPM Divided -;TODO: INFO_MULTIPLIED_BPM=BPM Multiplied -;TODO: INFO_PLAY_SONG=Play song -;TODO: INFO_PLAY_SENTENCE=Play sentence -;TODO: INFO_CURRENT_LINE=Line: -;TODO: INFO_CURRENT_NOTE=Note: - -;TODO: INFO_MIDI_CHANNEL_OFF= Channel %0:s off! -;TODO: INFO_MIDI_CHANNEL_RESET= All channel's on! - -;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? -;TODO: JUKEBOX_RANDOM=Random -;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find -;TODO: JUKEBOX_SORT=Sort: -;TODO: JUKEBOX_SONGLIST=List of Songs - -;TODO: SING_ERROR_DUET_MODE_PARTY = Duet! Not playable in Party Mode! - -;TODO: SONG_MENU_SONG=Song -;TODO: SONG_MENU_MEDLEY=Medley -;TODO: SONG_MENU_SORTING=Sort -;TODO: SONG_MENU_EXTRA=Extra - -;TODO: SONG_MENU_NAME_SONG=Song Menu -;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song -;TODO: SONG_MENU_START_MEDLEY=Sing! -;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! - -;TODO: SONG_MENU_NAME_SORTING=Sort Menu -;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On -;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All -;TODO: SONG_MENU_SORTING_DUET=Duets -;TODO: SONG_MENU_SORTING_APPLY=Apply - -;TODO: SING_OPTIONS_WEBCAM=Webcam -;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings -;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options -;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +EDIT_VOLUME_AUDIO=Głośność audio: +EDIT_VOLUME_MIDI=Głośność midi: +EDIT_VOLUME_CLICK=Kliknij głośność: +INFO_UNDO=Cofnij ostatnią operację + +INFO_FILE_SAVED=Plik zapisany +INFO_TIME_FIXED=Czasy poprawione +INFO_CAPITALIZE=Wielkość liter poprawiona +INFO_EXIT=Czy chcesz opuścić edytor bez zapisu? +INFO_SONG_RELOADED=Piosenka przeładowana +INFO_DIVIDED_BPM=BPM podzielone +INFO_MULTIPLIED_BPM=BPM pomnożone +INFO_PLAY_SONG=Graj piosenkę +INFO_PLAY_SENTENCE=Graj zdanie +INFO_CURRENT_LINE=Linia: +INFO_CURRENT_NOTE=Nuta: + +INFO_MIDI_CHANNEL_OFF= Kanał %0:s wyłączony! +INFO_MIDI_CHANNEL_RESET= Wszystkie kanały włączone! + +MSG_END_JUKEBOX=Czy chcesz opuścić tryb szafy grającej? +JUKEBOX_RANDOM=Losowo +JUKEBOX_REPEAT=Powtórz +JUKEBOX_FIND=Znajdź: +JUKEBOX_SORT=Sortuj: +JUKEBOX_SONGLIST=Lista piosenek + +SING_ERROR_DUET_MODE_PARTY = Duet! Nie można uruchomić w Party Mode! + +SONG_MENU_SONG=Piosenka +SONG_MENU_MEDLEY=Składanka +SONG_MENU_SORTING=Sortuj +SONG_MENU_EXTRA=Extra + +SONG_MENU_NAME_SONG=Menu piosenki +SONG_MENU_NAME_MEDLEY=Menu składanki +SONG_MENU_ADD_SONG=Dodaj piosenkę +SONG_MENU_DELETE_SONG=Usuń piosenkę +SONG_MENU_START_MEDLEY=Śpiewaj! +SONG_MENU_START_5_MEDLEY=Śpiewaj %0:d piosenek! + +SONG_MENU_NAME_SORTING=Menu sortowania +SONG_MENU_SORTING_TABS_ON=Zakładki włączone +SONG_MENU_SORTING_TABS_OFF=Zakładki wyłączone +SONG_MENU_SORTING_ALL=Wszystko +SONG_MENU_SORTING_DUET=Duety +SONG_MENU_SORTING_APPLY=Zastosuj + +SING_OPTIONS_WEBCAM=Kamerka +SING_OPTIONS_WEBCAM_DESC=Ustawienia kamerki +SING_OPTIONS_WEBCAM_WHEREAMI=Opcje kamerki +SING_OPTIONS_WEBCAM_ID=Kamerka +SING_OPTIONS_WEBCAM_RESOLUTION=Rozdzielczość ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS -;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! -;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect -;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness -;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation -;TODO: SING_OPTIONS_WEBCAM_HUE=Hue -;TODO: SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Enable Preview -;TODO: SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Disable Preview - -;TODO: SING_OPTIONS_WEBCAM_EFFECT_NORMAL=Normal -;TODO: SING_OPTIONS_WEBCAM_EFFECT_GRAYSCALE=Grayscale -;TODO: SING_OPTIONS_WEBCAM_EFFECT_BLACK_WHITE=Black & White -;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative -;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image -;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold -;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges -;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur -;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized -;TODO: SING_OPTIONS_WEBCAM_EFFECT_ERODE=Erode - -;TODO: PARTY_PLAYLIST_MANUAL=Manual Selection -;TODO: PARTY_MODE_JUKEBOX_NO_SONGS=Playlist is empty! -;TODO: SONG_MENU_OPEN_CATEGORY=Open category -;TODO: SONG_MENU_CLOSE_CATEGORY=Close category -;TODO: SONG_MENU_START_JUKEBOX=Start Jukebox! -;TODO: SONG_MENU_NAME_JUKEBOX=Menu Jukebox - -;TODO: WEBSITE_EXIST_SONG=The song belongs to the website: %0:s -;TODO: WEBSITE_NOT_EXIST_SONG=The song does not belong to any website! - -;TODO: NAME_PLAYERS_COUNT=Number of Players -;TODO: NAME_CURRENT_PLAYER=Player - -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu -;TODO: OPTION_VALUE_ROULETTE=Roulette -;TODO: OPTION_VALUE_CHESSBOARD=Chessboard -;TODO: OPTION_VALUE_CAROUSEL=Carousel -;TODO: OPTION_VALUE_SLOTMACHINE=Slot Machine -;TODO: OPTION_VALUE_LIST=List -;TODO: OPTION_VALUE_MOSAIC=Tile - -;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox -;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options - -;TODO: OPTION_VALUE_TO_SING=Sing -;TODO: OPTION_VALUE_ACTUAL=Actual -;TODO: OPTION_VALUE_NEXT=Next -;TODO: OPTION_VALUE_OTHER=Other -;TODO: OPTION_VALUE_FILL=Fill -;TODO: OPTION_VALUE_OUTLINE=Outline -;TODO: OPTION_VALUE_GRAY=Gray -;TODO: OPTION_VALUE_WHITE=White -;TODO: OPTION_VALUE_TURQUOISE=Turquoise -;TODO: OPTION_VALUE_SALMON=Salmon -;TODO: OPTION_VALUE_GREENYELLOW=GreenYellow -;TODO: OPTION_VALUE_LAVENDER=Lavender -;TODO: OPTION_VALUE_BEIGE=Beige -;TODO: OPTION_VALUE_TEAL=Teal -;TODO: OPTION_VALUE_ORCHID=Orchid -;TODO: OPTION_VALUE_STEELBLUE=Steel Blue -;TODO: OPTION_VALUE_PLUM=Plum -;TODO: OPTION_VALUE_CHOCOLATE=Chocolate -;TODO: OPTION_VALUE_GOLD=Gold -;TODO: OPTION_VALUE_DARKBLUE=Dark Blue -;TODO: OPTION_VALUE_SKY=Sky -;TODO: OPTION_VALUE_HARLEQUIN=Harlequin -;TODO: OPTION_VALUE_CYAN=Cyan -;TODO: OPTION_VALUE_FLAME=Flame - -;TODO: JUKEBOX_SONGOPTIONS_VIDEO=Video Options -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_ASPECT=Aspect -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_WIDTH=Width -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Height -;TODO: JUKEBOX_SONGOPTIONS_LYRIC=Lyric Options -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position +SING_OPTIONS_WEBCAM_NO_WEBCAM=Nie znaleziono kamerki! +SING_OPTIONS_WEBCAM_FLIP=Odwróć +SING_OPTIONS_WEBCAM_EFFECT=Efekt +SING_OPTIONS_WEBCAM_BRIGHTNESS=Jasność +SING_OPTIONS_WEBCAM_SATURATION=Nasycenie +SING_OPTIONS_WEBCAM_HUE=Odcień +SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Włącz podgląd +SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Wyłącz podgląd + +SING_OPTIONS_WEBCAM_EFFECT_NORMAL=Normalny +SING_OPTIONS_WEBCAM_EFFECT_GRAYSCALE=Odcienie szarości +SING_OPTIONS_WEBCAM_EFFECT_BLACK_WHITE=Czarno-biały +SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negatyw +SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Obraz binarny +SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dylatacja +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Próg +SING_OPTIONS_WEBCAM_EFFECT_EDGES=Krawędzie +SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Rozmycie Gaussa +SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Wyrównany +SING_OPTIONS_WEBCAM_EFFECT_ERODE=Erozja + +PARTY_PLAYLIST_MANUAL=Wybór ręczny +PARTY_MODE_JUKEBOX_NO_SONGS=Playlista jest pusta! +SONG_MENU_OPEN_CATEGORY=Otwórz kategorię +SONG_MENU_CLOSE_CATEGORY=Zamknij kategorię +SONG_MENU_START_JUKEBOX=Włącz szafę grającą! +SONG_MENU_NAME_JUKEBOX=Menu szafy grającej + +WEBSITE_EXIST_SONG=Piosenka należy do strony internetowej: %0:s +WEBSITE_NOT_EXIST_SONG=Ta piosenka nie należy do żadnej strony internetowej! + +NAME_PLAYERS_COUNT=Liczba graczy +NAME_CURRENT_PLAYER=Gracz + +SING_OPTIONS_GAME_SONGMENU=Menu piosenki +OPTION_VALUE_ROULETTE=Ruletka +OPTION_VALUE_CHESSBOARD=Szachownica +OPTION_VALUE_CAROUSEL=Karuzela +OPTION_VALUE_SLOTMACHINE=Automat +OPTION_VALUE_LIST=Lista +OPTION_VALUE_MOSAIC=Kafelek + +SING_OPTIONS_JUKEBOX=Szafa grająca +SING_OPTIONS_JUKEBOX_DESC=Domyślne ustawienia szafy grającej +SING_OPTIONS_JUKEBOX_WHEREAMI=Opcje szafy grającej + +OPTION_VALUE_TO_SING=Śpiewaj +OPTION_VALUE_ACTUAL=Aktualne +OPTION_VALUE_NEXT=Następne +OPTION_VALUE_OTHER=Inne +OPTION_VALUE_FILL=Wypełnij +OPTION_VALUE_OUTLINE=Zarys +OPTION_VALUE_GRAY=Szary +OPTION_VALUE_WHITE=Biały +OPTION_VALUE_TURQUOISE=Turkusowy +OPTION_VALUE_SALMON=Łososiowy +OPTION_VALUE_GREENYELLOW=Zielono-żółty +OPTION_VALUE_LAVENDER=Lawendowy +OPTION_VALUE_BEIGE=Beżowy +OPTION_VALUE_TEAL=Cyraneczkowy +OPTION_VALUE_ORCHID=Storczykowy +OPTION_VALUE_STEELBLUE=Stalowo-niebieski +OPTION_VALUE_PLUM=Śliwkowy +OPTION_VALUE_CHOCOLATE=Czekoladowy +OPTION_VALUE_GOLD=Złoty +OPTION_VALUE_DARKBLUE=Ciemno-niebieski +OPTION_VALUE_SKY=Niebieski +OPTION_VALUE_HARLEQUIN=Arlekin +OPTION_VALUE_CYAN=Cyjan +OPTION_VALUE_FLAME=Płomień + +JUKEBOX_SONGOPTIONS_VIDEO=Opcje Wideo +JUKEBOX_SONGOPTIONS_VIDEO_ASPECT=Proporcje obrazu +JUKEBOX_SONGOPTIONS_VIDEO_WIDTH=Szerokość +JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Długość +JUKEBOX_SONGOPTIONS_LYRIC=Opcje tekstu +JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Rozmiar +JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Pozycja ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue - -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Kolor +JUKEBOX_SONGOPTIONS_LYRIC_LINE=Linia +JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Właściwość +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Czerwony +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Zielony +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Niebieski + +JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Rozciągnięcie +JUKEBOX_SONGOPTIONS_VIDEO_CROP=Przycięcie ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=LetterBox -;TODO: JUKEBOX_SONGOPTIONS_SAVE=Save -;TODO: JUKEBOX_SONGOPTIONS_CLOSE=Close -;TODO: JUKEBOX_SONGOPTIONS_DEFAULT=Default -;TODO: JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Saved! +JUKEBOX_SONGOPTIONS_SAVE=Zapisz +JUKEBOX_SONGOPTIONS_CLOSE=Zamknij +JUKEBOX_SONGOPTIONS_DEFAULT=Domyślne +JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Zapisano! ;TODO: SING_SONG_CREDITS=Credits -;TODO: SING_JUKEBOX=Jukebox -;TODO: SING_JUKEBOX_DESC=Listen to my collection -;TODO: JUKEBOX_MODE=Jukebox Mode -;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist -;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode - -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing -;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All -;TODO: OPTION_VALUE_PLAYER=Player - -;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty -;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty -;TODO: ABOUT_MAIN_WHEREAMI=About... +SING_JUKEBOX=Szafa grająca +SING_JUKEBOX_DESC=Posłuchaj mojej kolekcji +JUKEBOX_MODE=Tryb szafy grającej +JUKEBOX_OPTIONS_DESC=Opcje playlisty +JUKEBOX_OPTIONS_WHEREAMI=Opcje szafy grającej +JUKEBOX_OPTIONS_PLAYLIST=Playlista +JUKEBOX_OPTIONS_PLAYLIST_MODE=Tryb + +SING_OPTIONS_ADVANCED_SINGSCORES=Wyniki śpiewania +SING_OPTIONS_ADVANCED_TOPSCORES=Najlepsze wyniki +OPTION_VALUE_ALL=Wszystko +OPTION_VALUE_PLAYER=Gracz + +SING_ABOUT=Informacje +SING_ABOUT_DESC=Informacje o Ultrastar Deluxe +ABOUT_MAIN=Informacje... +ABOUT_MAIN_DESC=Ultrastar Deluxe +ABOUT_MAIN_WHEREAMI=Informacje... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +ABOUT_OVERVIEW=UltraStar Deluxe jest darmową, OpenSource-ową grą karaoke dla Twojego komputera. Rozgrywka przypomina tą z komercyjnego produktu SingStar™ firmy Sony Computer Entertainment, która jest dostępna jedynie na konsolę Playstation®. Jednakże, w przeciwieństwie do SingStar™, UltraStar Deluxe pozwala graczom na tworzenie własnych utworów i rozgrywkę na komputerach PC.\nPublikując kod źródłowy, pozwalamy na modyfikację gry wedla własnego uznania, chęci i potrzeb.\nW szczególności, możesz modyfikować produkt tak jak tego chcesz.\n\nTwórz własne style lub pobieraj treści zgromadzone przez społeczność gry, takie jak pluginy, darmowe utwory lub łatki zawierające dodatkowe funkcjonalności.\nTryb imprezy pozwala aż dwunastu graczom śpiewać razem do ulubionej muzyki w celu zdobycia punktów, w zależności od wysokości tonu głosu i rytmiki śpiewu. diff --git a/game/languages/Portuguese.ini b/game/languages/Portuguese.ini index 5b594a09..153a148e 100644 --- a/game/languages/Portuguese.ini +++ b/game/languages/Portuguese.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=Inglês OPTION_VALUE_EUSKARA=Euskara OPTION_VALUE_FINNISH=Finlandês OPTION_VALUE_FRENCH=Francês +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic OPTION_VALUE_GALICIAN=Galego OPTION_VALUE_GERMAN=Alemão OPTION_VALUE_GREEK=Grego @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luxemburguês OPTION_VALUE_NORWEGIAN=Norueguês OPTION_VALUE_POLISH=Polaco OPTION_VALUE_PORTUGUESE=Português +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Russo OPTION_VALUE_SERBIAN=Sérvio OPTION_VALUE_SLOVAK=Eslovaco @@ -46,7 +48,10 @@ OPTION_VALUE_YEAR=Ano OPTION_VALUE_DECADE=Década OPTION_VALUE_PLAYLIST=Playlist +;TODO: OPTION_VALUE_BORDERLESS=Borderless + OPTION_VALUE_WHENNOVIDEO=Não existir Vídeo +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Pequeno OPTION_VALUE_BIG=Grande @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Parcial OPTION_VALUE_FULL_VID=Completo (Vídeo) OPTION_VALUE_FULL_VID_BG=Completo (Fundo & Vídeo) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=Segundo OPTION_VALUE_SECS=Segundos @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Cantar OPTION_VALUE_SELECT_PLAYERS=Escolher Jogadores OPTION_VALUE_OPEN_MENU=Abrir Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Opções SING_OPTIONS_GAME=Jogo SING_OPTIONS_GRAPHICS=Gráficos SING_OPTIONS_SOUND=Som +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Letras SING_OPTIONS_THEMES=Temas SING_OPTIONS_RECORD=Gravação @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Click de Ajuda SING_OPTIONS_SOUND_BEAT_CLICK=Click de Batida SING_OPTIONS_SOUND_THRESHOLD=Threshold SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modo de dois jogadores +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Preview Volume SING_OPTIONS_SOUND_PREVIEWFADING=Preview Fading +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Opções de Letras SING_OPTIONS_LYRICS_DESC=Configuração de Letras SING_OPTIONS_LYRICS_FONT=Fonte @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Fade do Ecrã SING_OPTIONS_ADVANCED_LOADANIMATION=Animação SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Segurança SING_OPTIONS_ADVANCED_LINEBONUS=Linha de Bônus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Escolha da Canção SING_OPTIONS_ADVANCED_PARTYPOPUP=Menu de Festa @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Playlist SING_SONGS_IN_CAT=Canções PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=TEMPO +;TODO: SING_TIME=TIME SING_TOTAL=Total SING_MODE=Cantar Solo SING_NOTES=Notas @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=Ganhou! MODE_RANDOM_NAME=Modo Aleatório -MODE_RANDOM_DESC=Será escolhido um Modo Aleatoriamente +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Manter a linha -MODE_HOLDTHELINE_DESC=Não piorar o ponteiro que é mostrado na barra de pontuação +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Até 5000 -MODE_5000POINTS_DESC=Quem obter primeiro 5000 pontos ganha a partida +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duelo -MODE_DUEL_DESC=Fazer um Duelo até aos 10000 pontos. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! + +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! -MODE_TEAMDUEL_NAME=Duelo de equipa -MODE_TEAMDUEL_DESC=Passa o Microfone! +MODE_BLIND_NAME=Cego S/Notas +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! -MODE_BLIND_NAME=Cego S/Notas -MODE_BLIND_DESC=Duelo sem ver as notas. +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! MODE_1000BLIND_NAME = +1000 Cego -MODE_1000BLIND_DESC = Mais de 1000 pontos à frente jogador cega. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! MODE_500BLIND_NAME = +500 Cego -MODE_500BLIND_DESC = Mais de 500 pontos à frente jogador cega. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! MODE_SHORTSONG_NAME = Canção Curta -MODE_SHORTSONG_DESC = Duelo em apenas metade da canção... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! MODE_HARDCORE_NAME=Hardcore -MODE_HARDCORE_DESC=Ganha quem conseguir 3 linhas de vantagem... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Estatísticas STAT_MAIN_DESC=Geral @@ -587,7 +633,7 @@ JUKEBOX_FIND=Procurar: JUKEBOX_SORT=Ordenar: JUKEBOX_SONGLIST=Lista de Músicas -SING_ERROR_DUET_MODE_PARTY=Dueto! Não é possível jogar no modo Festa! +SING_ERROR_DUET_MODE_PARTY =Dueto! Não é possível jogar no modo Festa! SONG_MENU_SONG=Canção SONG_MENU_MEDLEY=Medley @@ -635,7 +681,7 @@ SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equilibrada SING_OPTIONS_WEBCAM_EFFECT_ERODE=Erosão -PARTY_PLAYLIST_MANUAL=Selecção Manual +;TODO: PARTY_PLAYLIST_MANUAL=Manual Selection PARTY_MODE_JUKEBOX_NO_SONGS=Lista de canções está vazia! SONG_MENU_OPEN_CATEGORY=Abrir Categoria SONG_MENU_CLOSE_CATEGORY=Fechar Categoria @@ -711,10 +757,10 @@ JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Guardado! SING_SONG_CREDITS=Créditos SING_JUKEBOX=Jukebox -SING_JUKEBOX_DESC=Ouvir a minha coleção de canções +;TODO: SING_JUKEBOX_DESC=Listen to my collection JUKEBOX_MODE=Modo Jukebox JUKEBOX_OPTIONS_DESC=Opções de Playlist -JUKEBOX_OPTIONS_WHEREAMI=Opções Jukebox +JUKEBOX_OPTIONS_WHEREAMI=Opções Jukebox JUKEBOX_OPTIONS_PLAYLIST=Playlist JUKEBOX_OPTIONS_PLAYLIST_MODE=Modo @@ -730,35 +776,3 @@ ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty ABOUT_MAIN_WHEREAMI=Sobre... ABOUT_USDX_CREDITS=Créditos ABOUT_OVERVIEW=WorldParty é um MOD da versão original Ultrastar Deluxe 1.1 desenvolvido pela equipa do Ultrastar España.\n\nPrincipais novidades desta versão:\n\n - Novos temas/skins\n - Novos menus de canções\n - Avatares\n - Novas Opções Jukebox \n - E muitas outras coisas...\n\nAgradecimentos:\n\n zup3r_vock, daniel20, jaher06 e a toda a equipa do Ultrastar España por todo o seu esforço e dedicação neste projecto.\n\nEste programa é gratuito e livre sobre a licença GPL.\n\nhttp://ultrastar-es.org - -JUKEBOX_DELETE_SONG=Deseja realmente eliminar a canção da lista? - -MODE_2000POINTS_NAME=Até 2000 -MODE_2000POINTS_DESC=Quem obter primeiro 2000 pontos ganha a partida - -MODE_7000POINTS_NAME=Até 7000 -MODE_7000POINTS_DESC=Quem obter primeiro 7000 pontos ganha a partida - -MODE_2000POINTSBLIND_NAME=Até 2000 S/Notas -MODE_2000POINTSBLIND_DESC=Quem obter primeiro 2000 pontos ganha a partida sem ver as notas - -MODE_5000POINTSBLIND_NAME=Até 5000 S/Notas -MODE_5000POINTSBLIND_DESC=Quem obter primeiro 5000 pontos ganha a partida sem ver as notas - -MODE_7000POINTSBLIND_NAME=Até 7000 S/Notas -MODE_7000POINTSBLIND_DESC=Quem obter primeiro 7000 pontos ganha a partida sem ver as notas - -MODE_BLINDLYRICS_NAME=Cego S/Letra -MODE_BLINDLYRICS_DESC=Duelo sem ver letra - -MODE_BLINDTOTAL_NAME=Cego Total -MODE_BLINDTOTAL_DESC=Duelo sem ver letra e notas - -MODE_DEAF_NAME=Surdo -MODE_DEAF_DESC=Duelo sem ouvir partes da canção - -MODE_HOLDTHELINEBLIND_NAME=Manter a linha S/Notas -MODE_HOLDTHELINEBLIND_DESC=Não piorar o ponteiro que é mostrado na barra de pontuação sem ver as notas - - - diff --git a/game/languages/Romanian.ini b/game/languages/Romanian.ini new file mode 100644 index 00000000..7ec90d36 --- /dev/null +++ b/game/languages/Romanian.ini @@ -0,0 +1,778 @@ +[Text] +OPTION_VALUE_CATALAN=Catalană +;TODO: OPTION_VALUE_CHINESE=Chinese +OPTION_VALUE_CROATIAN=Croată +OPTION_VALUE_CZECH=Cehă +OPTION_VALUE_DANISH=Daneză +OPTION_VALUE_DUTCH=Olandeză +OPTION_VALUE_ENGLISH=Engleză +OPTION_VALUE_EUSKARA=Euskera +OPTION_VALUE_FINNISH=Finlandeză +OPTION_VALUE_FRENCH=Franceză +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic +;TODO: OPTION_VALUE_GALICIAN=Galician +OPTION_VALUE_GERMAN=Germană +OPTION_VALUE_GREEK=Greacă +OPTION_VALUE_HUNGARIAN=Maghiară +OPTION_VALUE_ICELANDIC=Islandeză +OPTION_VALUE_ITALIAN=Italiană +OPTION_VALUE_JAPANESE=Japoneză +OPTION_VALUE_LUXEMBOURGISH=Luxemburgheză +OPTION_VALUE_NORWEGIAN=Norvegiană +OPTION_VALUE_POLISH=Poloneză +OPTION_VALUE_PORTUGUESE=Portugheză +;TODO: OPTION_VALUE_ROMANIAN=Romanian +;TODO: OPTION_VALUE_RUSSIAN=Russian +OPTION_VALUE_SERBIAN=Sârbă +OPTION_VALUE_SLOVAK=Slovacă +OPTION_VALUE_SLOVENIAN=Slovenă +OPTION_VALUE_SPANISH=Spaniolă +OPTION_VALUE_SWEDISH=Suedeză + +OPTION_VALUE_EASY=Uşor +OPTION_VALUE_MEDIUM=Mediu +OPTION_VALUE_HARD=Greu + +OPTION_VALUE_ON=Da +OPTION_VALUE_OFF=Nu + +OPTION_VALUE_EDITION=Ediție +OPTION_VALUE_GENRE=Gen +OPTION_VALUE_LANGUAGE=Limbă +OPTION_VALUE_FOLDER=Dosar +OPTION_VALUE_TITLE=Titlu +OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_TITLE2=Titlu2 +OPTION_VALUE_ARTIST2=Artist2 +;TODO: OPTION_VALUE_YEAR=Year +;TODO: OPTION_VALUE_DECADE=Decade +;TODO: OPTION_VALUE_PLAYLIST=Playlist + +;TODO: OPTION_VALUE_BORDERLESS=Borderless + +OPTION_VALUE_WHENNOVIDEO=În cazul în care nu există video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image + +OPTION_VALUE_SMALL=Mic +OPTION_VALUE_BIG=Mare + +OPTION_VALUE_HALF=Jumătate +OPTION_VALUE_FULL_VID=Complet (Video) +OPTION_VALUE_FULL_VID_BG=Complet(Fond şi Video) + +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + +OPTION_VALUE_AUTO=Automat +OPTION_VALUE_SEC=Al doilea +OPTION_VALUE_SECS=Secunde + +OPTION_VALUE_PLAIN=Simplu +OPTION_VALUE_OLINE1=OLine1 +OPTION_VALUE_OLINE2=OLine2 + +OPTION_VALUE_SIMPLE=Simplu +OPTION_VALUE_ZOOM=Apropiere +OPTION_VALUE_SLIDE=Alunecare +OPTION_VALUE_BALL=Minge +OPTION_VALUE_SHIFT=Săritură + +OPTION_VALUE_EURO=European +OPTION_VALUE_JAPAN=Japonez +OPTION_VALUE_AMERICAN=American + +OPTION_VALUE_BLUE=Albastru +OPTION_VALUE_GREEN=Verde +OPTION_VALUE_PINK=Roz +OPTION_VALUE_RED=Roșu +OPTION_VALUE_VIOLET=Violet +OPTION_VALUE_ORANGE=Orange +OPTION_VALUE_YELLOW=Galben +OPTION_VALUE_BROWN=Maro +OPTION_VALUE_BLACK=Negru + +OPTION_VALUE_SING=Cântă +OPTION_VALUE_SELECT_PLAYERS=Alege Jucători +OPTION_VALUE_OPEN_MENU=Deschide Meniu + +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] +OPTION_VALUE_HARDWARE_CURSOR=Cursor hardware +OPTION_VALUE_SOFTWARE_CURSOR=Cursor software + +SING_LOADING=Încărcând ... + +SING_CHOOSE_MODE=Alege modul +SING_SING=Cântă! +SING_SING_DESC=joc rapid: cântă singur sau în duet + +SING_MULTI=Party +SING_MULTI_DESC=cântă în grup + +SING_TOOLS=Unelte + +SING_STATS=Statistici +SING_STATS_DESC=vezi statistici + +SING_EDITOR=Editor +SING_EDITOR_DESC=creează melodia ta + +SING_GAME_OPTIONS=Opţiuni de joc +SING_GAME_OPTIONS_DESC=modifică opţiunile de joc + +SING_EXIT=Ieşire +SING_EXIT_DESC=ieşi din joc + +SING_OPTIONS=Opţiuni +SING_OPTIONS_DESC=modifică opţiunile +SING_OPTIONS_WHEREAMI=Opţiuni + +SING_OPTIONS_GAME=Joc +SING_OPTIONS_GRAPHICS=Grafică +SING_OPTIONS_SOUND=Sunet +;TODO: SING_OPTIONS_INPUT=Input +SING_OPTIONS_LYRICS=Versuri +SING_OPTIONS_THEMES=Aspect +SING_OPTIONS_RECORD=Microfoane +SING_OPTIONS_ADVANCED=Avansat +SING_OPTIONS_EXIT=Înapoi + +SING_OPTIONS_GAME_WHEREAMI=Opţiuni de joc +SING_OPTIONS_GAME_DESC=opţiuni de joc generale +SING_OPTIONS_GAME_PLAYERS=Jucători +SING_OPTIONS_GAME_DIFFICULTY=Dificultate +SING_OPTIONS_GAME_LANGUAGE=Limbă +SING_OPTIONS_GAME_TABS=Etichete +SING_OPTIONS_GAME_SORTING=Sortează după +SING_OPTIONS_GAME_DEBUG=Mod de depanare + +SING_OPTIONS_GRAPHICS_WHEREAMI=Opţiuni grafice +SING_OPTIONS_GRAPHICS_DESC=modifică configurația video +SING_OPTIONS_GRAPHICS_RESOLUTION=Rezoluție +SING_OPTIONS_GRAPHICS_FULLSCREEN=Ecran complet +SING_OPTIONS_GRAPHICS_DEPTH=Adâncime de culoare +SING_OPTIONS_GRAPHICS_VISUALIZER=Vizualizare +SING_OPTIONS_GRAPHICS_OSCILLOSCOPE=Osciloscop +SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus de linie +SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Mărime video + +SING_OPTIONS_SOUND_WHEREAMI=Opţiuni sunet +SING_OPTIONS_SOUND_DESC=modifică configurația audio +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Ascultă microfon +SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Muzică de fundal +;TODO: SING_OPTIONS_SOUND_MIC_BOOST=Mic boost +SING_OPTIONS_SOUND_CLICK_ASSIST=Ajutor note +SING_OPTIONS_SOUND_BEAT_CLICK=Clic ritm +;TODO: SING_OPTIONS_SOUND_THRESHOLD=Threshold +SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mod 2 jucători +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain +SING_OPTIONS_SOUND_PREVIEWVOLUME=Vezi volum +SING_OPTIONS_SOUND_PREVIEWFADING=Vezi atenuare + +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + +SING_OPTIONS_LYRICS_WHEREAMI=Opţiuni versuri +SING_OPTIONS_LYRICS_DESC=schimbă modul de afișare a versurilor +SING_OPTIONS_LYRICS_FONT=Set de caractere +SING_OPTIONS_LYRICS_EFFECT=Efect +SING_OPTIONS_LYRICS_SOLMIZATION=Solfegiu +SING_OPTIONS_LYRICS_NOTELINES=Partitură + +SING_OPTIONS_THEMES_WHEREAMI=Opţiuni aspect +SING_OPTIONS_THEMES_DESC=schimbă culori şi aspect +SING_OPTIONS_THEMES_THEME=Temă +SING_OPTIONS_THEMES_SKIN=Skin +SING_OPTIONS_THEMES_COLOR=Culoare + +SING_OPTIONS_RECORD_WHEREAMI=Opţiuni înregistrare +SING_OPTIONS_RECORD_DESC=configurează microfon +SING_OPTIONS_RECORD_CARD=Placă de sunet +SING_OPTIONS_RECORD_INPUT=Intrare +SING_OPTIONS_RECORD_CHANNEL=Canal + +SING_OPTIONS_ADVANCED_WHEREAMI=Opțiuni avansate +SING_OPTIONS_ADVANCED_DESC=opțiuni avansate +SING_OPTIONS_ADVANCED_EFFECTSING=Efecte cântând +SING_OPTIONS_ADVANCED_SCREENFADE=Atenuare ecran +SING_OPTIONS_ADVANCED_LOADANIMATION=Încarcă animaţie +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Confirmă ştergere +SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de linie +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= +SING_OPTIONS_ADVANCED_ONSONGCLICK=După alegere cântec.. +SING_OPTIONS_ADVANCED_PARTYPOPUP=Meniu party automat + +SING_EDIT=Editor +SING_EDIT_MENU_DESCRIPTION=creează cântecul tău + +SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Încarcă text din fişier MIDI +SING_EDIT_BUTTON_DESCRIPTION_EXIT=Înapoi +SING_EDIT_BUTTON_CONVERT=Încarcă +SING_EDIT_BUTTON_EXIT=Înapoi + +SING_EDIT_NAVIGATE=Navighează +SING_EDIT_SELECT=Alege +SING_EDIT_EXIT=Înapoi + +SING_LEGEND_SELECT=Alege +SING_LEGEND_NAVIGATE=Navighează +SING_LEGEND_CONTINUE=Continuă +SING_LEGEND_ESC=Înapoi + +SING_PLAYER_DESC=scrie nume jucător(i) +SING_PLAYER_WHEREAMI=Nume jucători +SING_PLAYER_ENTER_NAME=Introduce nume + +SING_DIFFICULTY_DESC=selectează dificultatea +SING_DIFFICULTY_WHEREAMI=Dificultate +SING_DIFFICULTY_CONTINUE=Alege cântec +SING_EASY=Uşor +SING_MEDIUM=Mediu +SING_HARD=Greu + +SING_SONG_SELECTION_DESC=alege-ți cântecul +SING_SONG_SELECTION_WHEREAMI=Alege cântec +SING_SONG_SELECTION_GOTO=Du-te la ... +SING_SONG_SELECTION=Alege cântec +SING_SONG_SELECTION_MENU=Meniu +SING_SONG_SELECTION_PLAYLIST=Lista +SING_SONGS_IN_CAT=Cântece +PLAYLIST_CATTEXT=Lista: %s + +;TODO: SING_TIME=TIME +SING_TOTAL=Total +SING_MODE=Cântă singur +SING_NOTES=Note +SING_GOLDEN_NOTES=Note de aur +SING_PHRASE_BONUS=Bonus de linie + +SING_MENU=Meniu principal + +SONG_SCORE=Punctaj cântec +SONG_SCORE_WHEREAMI=Punctaj + +SING_SCORE_TONE_DEAF=Afon +SING_SCORE_AMATEUR=Amator +SING_SCORE_WANNABE=Începător +SING_SCORE_HOPEFUL=Promițător +SING_SCORE_RISING_STAR=Cântareț +SING_SCORE_LEAD_SINGER=Mare Cântareț +SING_SCORE_SUPERSTAR=Superstar +SING_SCORE_ULTRASTAR=Ultrastar + +SING_TOP_5_CHARTS=Primii 5 jucători +SING_TOP_5_CHARTS_WHEREAMI=primii 5 +SING_TOP_5_CHARTS_CONTINUE=la alegerea cântecului +SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Schimbă dificultatea + +POPUP_PERFECT=perfect! +POPUP_AWESOME=uimitor! +POPUP_GREAT=grozav! +POPUP_GOOD=bine! +POPUP_NOTBAD=nu-i rău! +POPUP_BAD=rău! +POPUP_POOR=groaznic! +POPUP_AWFUL=oribil! + +IMPLODE_GLUE1=, +IMPLODE_GLUE2=și + +SONG_MENU_NAME_MAIN=Meniu cântece +SONG_MENU_PLAY=Cântă +SONG_MENU_CHANGEPLAYERS=Schimbă jucători +SONG_MENU_EDIT=Editează +SONG_MENU_MODI=Cântă un Modi +SONG_MENU_CANCEL=Renunță + +SONG_MENU_NAME_PLAYLIST=Meniu cântece +SONG_MENU_PLAYLIST_ADD=Adaugă cântec +SONG_MENU_PLAYLIST_DEL=Şterge cântec + +SONG_MENU_NAME_PLAYLIST_ADD=Adaugă cântec +SONG_MENU_PLAYLIST_ADD_NEW=la o listă nouă +SONG_MENU_PLAYLIST_ADD_EXISTING=la o listă existentă +SONG_MENU_PLAYLIST_NOEXISTING=nu sunt liste + +SONG_MENU_NAME_PLAYLIST_NEW=listă nouă de cântece +SONG_MENU_PLAYLIST_NEW_CREATE=Creează +SONG_MENU_PLAYLIST_NEW_UNNAMED=Nedenumit + +SONG_MENU_NAME_PLAYLIST_DELITEM=Chiar ștergi? +SONG_MENU_YES=Da +SONG_MENU_NO=Nu + +SONG_MENU_NAME_PLAYLIST_LOAD=Deschide lista +SONG_MENU_PLAYLIST_LOAD=Deschide +SONG_MENU_PLAYLIST_DELCURRENT=Ştergi lista actuală + +SONG_MENU_NAME_PLAYLIST_DEL=Ştergi listă? + +SONG_MENU_NAME_PARTY_MAIN=Meniu Party +SONG_MENU_JOKER=Cântă unul la întâmplare + +SONG_MENU_NAME_PARTY_JOKER=la întâmplare + +SONG_JUMPTO_DESC=Caută cântec +SONG_JUMPTO_TYPE_DESC=Caută după: +SONG_JUMPTO_TYPE1=Toate +SONG_JUMPTO_TYPE2=Titlu +SONG_JUMPTO_TYPE3=Artist +SONG_JUMPTO_SONGSFOUND=%d cântec(e) găsite +SONG_JUMPTO_NOSONGSFOUND=nu s-au găsit cântece +SONG_JUMPTO_HELP=Introduce textul de căutat +SONG_JUMPTO_CATTEXT=Caută: %s + +PARTY_MODE=Modul party +PARTY_DIFFICULTY=Dificultate +PARTY_PLAYLIST=Mod listă +PARTY_PLAYLIST_ALL=Toate +PARTY_PLAYLIST_CATEGORY=Dosar +PARTY_PLAYLIST_PLAYLIST=Liste +PARTY_TEAMS=Numărul echipelor +PARTY_TEAMS_PLAYER1=Număr membri: +PARTY_TEAMS_PLAYER2=Număr membri: +PARTY_TEAMS_PLAYER3=Număr membri: + +PARTY_LEGEND_CONTINUE=Continuă + +PARTY_OPTIONS_DESC=opţiuni mod party +PARTY_OPTIONS_WHEREAMI=Opţiuni mod party + +PARTY_PLAYER_DESC=introduce numele jucătorilor şi al echipelor +PARTY_PLAYER_WHEREAMI=Numele echipei +PARTY_PLAYER_ENTER_NAME=_Introduce nume + + +PARTY_ROUNDS_DESC=alege ce mod vrei să joci +PARTY_ROUNDS_WHEREAMI=Runde party +PARTY_ROUNDS_LEGEND_CONTINUE=Pornește joc party +PARTY_ROUNDCOUNT=Numărul de runde +;TODO: PARTY_SELECTMODE=Round %d + +PARTY_ROUND_DESC=următorii jucători la microfoane +PARTY_ROUND_WHEREAMI=Urmatoarea rundă +PARTY_ROUND_LEGEND_CONTINUE=Pornește runda + +PARTY_SONG_WHEREAMI=Alege cântec party +PARTY_SONG_LEGEND_CONTINUE=Cântă +PARTY_SONG_MENU=Meniu party + +PARTY_SCORE_DESC=scorul ultimei runde +PARTY_SCORE_WHEREAMI=Puncte party + +PARTY_WIN_DESC=Echipa câştigătoare +PARTY_WIN_WHEREAMI=Câştigător party +PARTY_WIN_LEGEND_CONTINUE=înapoi la meniul principal + +PARTY_ROUND=Runda +PARTY_ROUND_WINNER=Câştigător +PARTY_NOTPLAYEDYET=nejucat încă +PARTY_NOBODY=Nimeni +NEXT_ROUND=Urmatoarea rundă: + +PARTY_DISMISSED=Eliminat! +PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS2=Câștigă! + +MODE_RANDOM_NAME=Mod aleatoriu +MODE_RANDOM_DESC=un mod va fi ales aleatoriu + +MODE_HOLDTHELINE_NAME=Păstrează linia +MODE_HOLDTHELINE_DESC=menține punctajul mai mare decât cel afişat pe ecran + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! + +MODE_5000POINTS_NAME=Până la 5000 +MODE_5000POINTS_DESC=câștigă cel care obţine primul 5000 de puncte. + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! + +MODE_DUEL_NAME=Duel +MODE_DUEL_DESC=cântă un duel la 10000 de puncte. + +MODE_TEAMDUEL_NAME=Duel de echipe +MODE_TEAMDUEL_DESC=dă mai departe microfonul! + +MODE_BLIND_NAME=Mod Orb +MODE_BLIND_DESC=duel fără să vadă notele. + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! + +;TODO: MODE_1000BLIND_NAME = +1000 Blind +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! + +;TODO: MODE_500BLIND_NAME = +500 Blind +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! + +;TODO: MODE_SHORTSONG_NAME = Short Song +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! + +;TODO: MODE_HARDCORE_NAME=Hardcore +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! + +STAT_MAIN=Statistici +STAT_MAIN_DESC=general +STAT_MAIN_WHEREAMI=Statistici + +STAT_OVERVIEW_INTRO=%0:s \nStatistici \nUltima reinițiere pe %1:.2d.%2:.2d.%3:d +STAT_OVERVIEW_SONG=%0:d Cântece(%3:d cu video), dintre care %1:d deja au fost cântate și %2:d nu au fost cântate încă.\n Cântecul preferat este %4:s de %5:s. +STAT_OVERVIEW_PLAYER=De la ultima reinițiere s-au înregistrat %0:d jucător(i) diferiți.\n Cel mai bun jucător este %1:s cu un punctaj mediu de %2:d puncte.\n %3:s a realizat cel mai bun punctaj cu %4:d puncte. + +STAT_FORMAT_DATE=%0:.2d.%1:.2d.%2:d + +STAT_DETAIL=Statistici +STAT_DETAIL_WHEREAMI=Statistici detaliate + +STAT_NEXT=Următoarele +STAT_PREV=Anterioare +STAT_REVERSE=Schimbă ordinea +STAT_PAGE=pagina %0:d din %1:d pagini\n (%2:d din %3:d elemente) + +STAT_DESC_SCORES=Top punctaje +STAT_DESC_SCORES_REVERSED=Cele mai mici punctaje +STAT_FORMAT_SCORES=%0:s - %1:d [%2:s] %5:s \n (%3:s - %4:s) + +STAT_DESC_SINGERS=Top cântăreți +STAT_DESC_SINGERS_REVERSED=Cei mai slabi cântăreți +STAT_FORMAT_SINGERS=%0:s \n Punctaj mediu: %1:d + +STAT_DESC_SONGS=Cele mai cântate +STAT_DESC_SONGS_REVERSED=Cele mai puțin cântate +STAT_FORMAT_SONGS=%0:s - %1:s \n cântat de %2:d ori + +STAT_DESC_BANDS=Top formații +STAT_DESC_BANDS_REVERSED=Formații preferate +STAT_FORMAT_BANDS=%0:s \n %1:dx cântat + +SCREENSHOT_SAVED=Captură ecran salvată +SCREENSHOT_FAILED=Nu s-a putut salva captura ecran + +INFO_FILE_SAVED=Fişier salvat +ERROR_SAVE_FILE_FAILED=Nu s-a putut salva fișierul +ERROR_FILE_NOT_FOUND=Fişierul nu a fost găsit + +ENCODING_ERROR_ASK_FOR_UTF8=Nu se pot salva modificările în codificarea actuală. Convertesc la UTF-8? +EDITOR_ERROR_NO_TRACK_SELECTED=nici o pistă aleasă + +MSG_ERROR_TITLE=Eroare +MSG_INFO_TITLE=Informaţii +MSG_QUESTION_TITLE=Întrebare +MSG_QUIT_USDX=Chiar ieşi? +MSG_END_PARTY=Chiar ieşi din modul party? + +ERROR_NO_SONGS=Nu există cântece +ERROR_NO_PLUGINS=Nu există plugin-uri +ERROR_NO_MODES_FOR_CURRENT_SETUP=Nu există moduri disponibile pentru jucătorul și echipele actuale +ERROR_CAN_NOT_START_PARTY=O eroare a avut loc la pornirea jocului in mod party +ERROR_CORRUPT_SONG=Imposibil de încărcat cântecul. +ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Imposibil de încărcat cântecul: Fişierul nu a fost găsit +ERROR_CORRUPT_SONG_NO_NOTES=Nu pot încărca cântecul: Nu există note +ERROR_CORRUPT_SONG_NO_BREAKS=Nu pot încărca cântecul: Nu sunt pauze de linie +ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Imposibil de încărcat cântecul: Eroare în analiza liniei %0:d +ERROR_NO_EDITOR=Această caracteristică nu este disponibilă în Linux/Mac +ERROR_PLAYER_DEVICE_ASSIGNMENT=Jucătorului %d i s-au atribuit mai multe microfoane. Verifică opţiunile de microfon. +ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Jucătorului %d nu i s-a atribuit nici un microfon. Verifică opţiunile de microfon. + +;TODO: SING_OPTIONS_NETWORK=Internet +;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options +;TODO: SING_OPTIONS_NETWORK_DESC=Internet General Settings +;TODO: SING_OPTIONS_NETWORK_INSERT_USER_INFO=Press key "Insert" to add user to this web... +;TODO: SING_OPTIONS_NETWORK_WEBSITE=Website +;TODO: SING_OPTIONS_NETWORK_USERNAME=Username +;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password +;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name +;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player +;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) +;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) +;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_HARD=Auto-Send (Hard) +;TODO: SING_OPTIONS_NETWORK_NO_DLL=No compatible leaderboard-plugin found! +;TODO: SING_OPTIONS_NETWORK_DELETE_PLAYER=Really delete the user %0:s of the website %1:s? +;TODO: SING_OPTIONS_NETWORK_LEGEND_INSERT=Insert +;TODO: SING_OPTIONS_NETWORK_LEGEND_DELETE=Delete + +;TODO: OPTION_PLAYER_1=Player 1 +;TODO: OPTION_PLAYER_2=Player 2 +;TODO: OPTION_PLAYER_3=Player 3 +;TODO: OPTION_PLAYER_4=Player 4 +;TODO: OPTION_PLAYER_5=Player 5 +;TODO: OPTION_PLAYER_6=Player 6 +;TODO: OPTION_ALL_PLAYERS=All +;TODO: OPTION_ALL_SCORES=All +;TODO: OPTION_VALUE_SAVE=Save +;TODO: OPTION_VALUE_SEND=Send + +;TODO: MSG_INSERT_USER_TITLE=%0:s +;TODO: MSG_INSERT_USER_DESC=Fill the fields: +;TODO: MSG_INSERT_USER_ADD=Add +;TODO: MSG_INSERT_USER_CANCEL=Cancel + +;TODO: WEBSITE_NO_CONNECTION=No website connection! +;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! +;TODO: WEBSITE_BLANK_LOGIN=There are blank fields! +;TODO: WEBSITE_EXIST_USER=Existing user! +;TODO: WEBSITE_ERROR_SCORE=Scoring Error! +;TODO: WEBSITE_OK_SEND=Score sent successfully! +;TODO: WEBSITE_ERROR_SCORE_DUPLICATED=Existing Score! +;TODO: WEBSITE_ERROR_SONG=Song Not Found! +;TODO: WEBSITE_SAVE_SCORE=Score save successfully! +;TODO: WEBSITE_NO_CONNECTION_SAVE=No website connection! Save user anyway? + +;TODO: SONG_MENU_REFRESH_SCORES=Update Scores +;TODO: SONG_MENU_REFRESH_SCORES_TITLE=Update +;TODO: SONG_MENU_REFRESH_SCORES_NO_WEB=There aren't websites! +;TODO: SONG_MENU_REFRESH_SCORES_ONLINE=Online +;TODO: SONG_MENU_REFRESH_SCORES_FILE=File +;TODO: SONG_MENU_REFRESH_SCORES_ALL_WEB=All Websites +;TODO: SONG_MENU_REFRESH_SCORES_ALL_SONGS=All Songs +;TODO: SONG_MENU_REFRESH_SCORES_ONLY_SONG=This Song +;TODO: SONG_MENU_REFRESH_SCORES_REFRESH=Update +;TODO: SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION=Error connect to the website: %0:s! +;TODO: SONG_MENU_REFRESH_SCORES_ERROR_FILE=File not found: '%0:s [Download Scores]'! + +;TODO: SONG_SCORE_MAX=Best: +;TODO: SONG_SCORE_MEDIA=Average: + +;TODO: SCORE_SEND_DESC=Send Score +;TODO: SCORE_SEND=Send +;TODO: SCORE_SEND_PLAYER=Player +;TODO: SCORE_SEND_OTHER_USER= Other Username +;TODO: SCORE_SAVE=Save + +;TODO: SCORE_DOWNLOAD_TITLE=Download +;TODO: SCORE_DOWNLOAD_SONG=Song: +;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... +;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... +;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +;TODO: SCORE_DOWNLOAD_OK=OK +;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! + +;TODO: SING_OPTIONS_GAME_SHOWSCORES=Show Scores +;TODO: OPTION_VALUE_WHENEXIST=When Exists + +;TODO: PARTY_SELECT_MODE=Mode +;TODO: PARTY_MODE_CLASSIC=Classic +;TODO: PARTY_MODE_CLASSIC_FREE=Classic Free +;TODO: PARTY_MODE_CHALLENGE=Challenge +;TODO: PARTY_MODE_TOURNAMENT=Tournament +;TODO: PARTY_MODE_JUKEBOX=Jukebox +;TODO: PARTY_MODE_NOT_AVAILABLE=Not Available! + +;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name +;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players +;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final +;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals +;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals +;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 +;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result +;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! + +;TODO: EDIT_TITLE=Title: +;TODO: EDIT_ARTIST=Artist: +;TODO: EDIT_MP3=MP3: +;TODO: EDIT_BPM=BPM: +;TODO: EDIT_GAP=GAP: +;TODO: EDIT_COVER=Cover: +;TODO: EDIT_BACKGROUND=Background: + +;TODO: EDIT_START=Start: +;TODO: EDIT_DURATION=Duration: +;TODO: EDIT_TONE=Tone: +;TODO: EDIT_LYRIC=Lyric: +;TODO: EDIT_VIDEOGAP=Video Gap: +;TODO: EDIT_VOLUME_AUDIO=Audio Volume: +;TODO: EDIT_VOLUME_MIDI=Midi Volume: +;TODO: EDIT_VOLUME_CLICK=Click Volume: +;TODO: INFO_UNDO=Undo last operation + +INFO_FILE_SAVED=Fişier salvat +;TODO: INFO_TIME_FIXED=Timings corrected +;TODO: INFO_CAPITALIZE=Capitalization corrected +;TODO: INFO_EXIT=Do you want leave editor without save ? +;TODO: INFO_SONG_RELOADED=Song reloaded +;TODO: INFO_DIVIDED_BPM=BPM Divided +;TODO: INFO_MULTIPLIED_BPM=BPM Multiplied +;TODO: INFO_PLAY_SONG=Play song +;TODO: INFO_PLAY_SENTENCE=Play sentence +;TODO: INFO_CURRENT_LINE=Line: +;TODO: INFO_CURRENT_NOTE=Note: + +;TODO: INFO_MIDI_CHANNEL_OFF= Channel %0:s off! +;TODO: INFO_MIDI_CHANNEL_RESET= All channel's on! + +;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? +;TODO: JUKEBOX_RANDOM=Random +;TODO: JUKEBOX_REPEAT=Repeat +;TODO: JUKEBOX_FIND=Find: +;TODO: JUKEBOX_SORT=Sort: +;TODO: JUKEBOX_SONGLIST=List of Songs + +;TODO: SING_ERROR_DUET_MODE_PARTY = Duet! Not playable in Party Mode! + +;TODO: SONG_MENU_SONG=Song +;TODO: SONG_MENU_MEDLEY=Medley +;TODO: SONG_MENU_SORTING=Sort +;TODO: SONG_MENU_EXTRA=Extra + +;TODO: SONG_MENU_NAME_SONG=Song Menu +;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu +;TODO: SONG_MENU_ADD_SONG=Add Song +;TODO: SONG_MENU_DELETE_SONG=Delete Song +;TODO: SONG_MENU_START_MEDLEY=Sing! +;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! + +;TODO: SONG_MENU_NAME_SORTING=Sort Menu +;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On +;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off +;TODO: SONG_MENU_SORTING_ALL=All +;TODO: SONG_MENU_SORTING_DUET=Duets +;TODO: SONG_MENU_SORTING_APPLY=Apply + +;TODO: SING_OPTIONS_WEBCAM=Webcam +;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings +;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options +;TODO: SING_OPTIONS_WEBCAM_ID=Webcam +;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +;TODO: SING_OPTIONS_WEBCAM_FPS=FPS +;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! +;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip +;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness +;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation +;TODO: SING_OPTIONS_WEBCAM_HUE=Hue +;TODO: SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Enable Preview +;TODO: SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Disable Preview + +;TODO: SING_OPTIONS_WEBCAM_EFFECT_NORMAL=Normal +;TODO: SING_OPTIONS_WEBCAM_EFFECT_GRAYSCALE=Grayscale +;TODO: SING_OPTIONS_WEBCAM_EFFECT_BLACK_WHITE=Black & White +;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative +;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image +;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate +;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges +;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur +;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized +;TODO: SING_OPTIONS_WEBCAM_EFFECT_ERODE=Erode + +;TODO: PARTY_PLAYLIST_MANUAL=Manual Selection +;TODO: PARTY_MODE_JUKEBOX_NO_SONGS=Playlist is empty! +;TODO: SONG_MENU_OPEN_CATEGORY=Open category +;TODO: SONG_MENU_CLOSE_CATEGORY=Close category +;TODO: SONG_MENU_START_JUKEBOX=Start Jukebox! +;TODO: SONG_MENU_NAME_JUKEBOX=Menu Jukebox + +;TODO: WEBSITE_EXIST_SONG=The song belongs to the website: %0:s +;TODO: WEBSITE_NOT_EXIST_SONG=The song does not belong to any website! + +;TODO: NAME_PLAYERS_COUNT=Number of Players +;TODO: NAME_CURRENT_PLAYER=Player + +;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +;TODO: OPTION_VALUE_ROULETTE=Roulette +;TODO: OPTION_VALUE_CHESSBOARD=Chessboard +;TODO: OPTION_VALUE_CAROUSEL=Carousel +;TODO: OPTION_VALUE_SLOTMACHINE=Slot Machine +;TODO: OPTION_VALUE_LIST=List +;TODO: OPTION_VALUE_MOSAIC=Tile + +;TODO: SING_OPTIONS_JUKEBOX=Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options + +;TODO: OPTION_VALUE_TO_SING=Sing +;TODO: OPTION_VALUE_ACTUAL=Actual +;TODO: OPTION_VALUE_NEXT=Next +;TODO: OPTION_VALUE_OTHER=Other +;TODO: OPTION_VALUE_FILL=Fill +;TODO: OPTION_VALUE_OUTLINE=Outline +;TODO: OPTION_VALUE_GRAY=Gray +;TODO: OPTION_VALUE_WHITE=White +;TODO: OPTION_VALUE_TURQUOISE=Turquoise +;TODO: OPTION_VALUE_SALMON=Salmon +;TODO: OPTION_VALUE_GREENYELLOW=GreenYellow +;TODO: OPTION_VALUE_LAVENDER=Lavender +;TODO: OPTION_VALUE_BEIGE=Beige +;TODO: OPTION_VALUE_TEAL=Teal +;TODO: OPTION_VALUE_ORCHID=Orchid +;TODO: OPTION_VALUE_STEELBLUE=Steel Blue +;TODO: OPTION_VALUE_PLUM=Plum +;TODO: OPTION_VALUE_CHOCOLATE=Chocolate +;TODO: OPTION_VALUE_GOLD=Gold +;TODO: OPTION_VALUE_DARKBLUE=Dark Blue +;TODO: OPTION_VALUE_SKY=Sky +;TODO: OPTION_VALUE_HARLEQUIN=Harlequin +;TODO: OPTION_VALUE_CYAN=Cyan +;TODO: OPTION_VALUE_FLAME=Flame + +;TODO: JUKEBOX_SONGOPTIONS_VIDEO=Video Options +;TODO: JUKEBOX_SONGOPTIONS_VIDEO_ASPECT=Aspect +;TODO: JUKEBOX_SONGOPTIONS_VIDEO_WIDTH=Width +;TODO: JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Height +;TODO: JUKEBOX_SONGOPTIONS_LYRIC=Lyric Options +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green +;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue + +;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch +;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop +;TODO: JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=LetterBox + +;TODO: JUKEBOX_SONGOPTIONS_SAVE=Save +;TODO: JUKEBOX_SONGOPTIONS_CLOSE=Close +;TODO: JUKEBOX_SONGOPTIONS_DEFAULT=Default +;TODO: JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Saved! + +;TODO: SING_SONG_CREDITS=Credits +;TODO: SING_JUKEBOX=Jukebox +;TODO: SING_JUKEBOX_DESC=Listen to my collection +;TODO: JUKEBOX_MODE=Jukebox Mode +;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode + +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores +;TODO: OPTION_VALUE_ALL=All +;TODO: OPTION_VALUE_PLAYER=Player + +;TODO: SING_ABOUT=About +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe +;TODO: ABOUT_MAIN=About... +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe +;TODO: ABOUT_MAIN_WHEREAMI=About... +;TODO: ABOUT_USDX_CREDITS=Credits +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Russian.ini b/game/languages/Russian.ini index dc2ac4a1..d7dbab90 100644 --- a/game/languages/Russian.ini +++ b/game/languages/Russian.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=Английский OPTION_VALUE_EUSKARA=Баскский OPTION_VALUE_FINNISH=Финский OPTION_VALUE_FRENCH=Французский +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=Немецкий OPTION_VALUE_GREEK=Греческий @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Люксембуржский OPTION_VALUE_NORWEGIAN=Норвежский OPTION_VALUE_POLISH=Польский OPTION_VALUE_PORTUGUESE=Португальский +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Русский OPTION_VALUE_SERBIAN=Сербский OPTION_VALUE_SLOVAK=Словацкий @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=Название 2 OPTION_VALUE_ARTIST2=Исполнитель 2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=плэйлист + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=Если нет видео +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Маленький OPTION_VALUE_BIG=Большой @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Половина OPTION_VALUE_FULL_VID=Полный (Видео) OPTION_VALUE_FULL_VID_BG=Полный (Фон и видео) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Авто OPTION_VALUE_SEC=Секунда OPTION_VALUE_SECS=Секунд(ы) @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Пение OPTION_VALUE_SELECT_PLAYERS=Выбор игроков OPTION_VALUE_OPEN_MENU=Открыть меню +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Аппаратный курсор OPTION_VALUE_SOFTWARE_CURSOR=Програмный курсор @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Настройки SING_OPTIONS_GAME=игра SING_OPTIONS_GRAPHICS=графика SING_OPTIONS_SOUND=звук +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=текст SING_OPTIONS_THEMES=темы SING_OPTIONS_RECORD=запись @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Метроном-помощник SING_OPTIONS_SOUND_BEAT_CLICK=Метроном SING_OPTIONS_SOUND_THRESHOLD=Погрешность SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Режим двух игроков +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Громкость превью SING_OPTIONS_SOUND_PREVIEWFADING=Затухание превью +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Настройки текстов SING_OPTIONS_LYRICS_DESC=настройки текстов SING_OPTIONS_LYRICS_FONT=Шрифт @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Затухание экрана SING_OPTIONS_ADVANCED_LOADANIMATION=Анимация загрузки SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Запросы SING_OPTIONS_ADVANCED_LINEBONUS=Бонус "В линию" +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=После выбора песни ;TODO: SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto PartyMenu @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=плэйлист SING_SONGS_IN_CAT=Песни PLAYLIST_CATTEXT=Плэйлист: %s -SING_TIME=ВРЕМЯ +;TODO: SING_TIME=TIME SING_TOTAL=всего SING_MODE=пение соло SING_NOTES=ноты @@ -356,37 +375,64 @@ NEXT_ROUND=Следующий раунд: PARTY_DISMISSED=Отменено! PARTY_SCORE_WINS=Победители: %s ! -;TODO: PARTY_SCORE_WINS2=wins! +;TODO: PARTY_SCORE_WINS2=Wins! MODE_RANDOM_NAME=Случайный режим -MODE_RANDOM_DESC=Режим будет выбран случайным образом +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Оставайтесь на линии -MODE_HOLDTHELINE_DESC=Будьте не хуже, чем вам показывает указатель рэйтинга. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=До 5000 -MODE_5000POINTS_DESC=Матч выигрывает тот, кто первым наберёт 5000 очков. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Дуэль -MODE_DUEL_DESC=Дуэль до 10000 очков. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Командная дуэль -MODE_TEAMDUEL_DESC=Передавайте микрофон! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Слепой режим -MODE_BLIND_DESC=Дуэль, в которой вы не видите нот. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Статистика STAT_MAIN_DESC=Главная @@ -450,8 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Песня не может быть загр ERROR_NO_EDITOR=Эта возможность недоступна в Linux/Mac ERROR_PLAYER_DEVICE_ASSIGNMENT=Игроку %d назначено несколько микрофонов. Пожалуйста проверьте опции записи ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни одного микрофона. Пожалуйста проверьте опции записи -;TRANSLATOR: Dmitry "Sadler" Manachkin - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -461,7 +505,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Авто ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -477,15 +521,15 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Всё +OPTION_ALL_SCORES=Всё ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Отмена ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -523,7 +567,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Отмена ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -540,12 +584,12 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: PARTY_MODE_TOURNAMENT_PLAYER_DESC=Insert number and players name ;TODO: PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Number of Players -;TODO: PARTY_MODE_TOURNAMENT_OPTIONS_DESC=Number of rounds +PARTY_MODE_TOURNAMENT_OPTIONS_DESC=число раундов ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=следующие игроки к микрофонам: ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! @@ -567,7 +611,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: EDIT_VOLUME_CLICK=Click Volume: ;TODO: INFO_UNDO=Undo last operation -;TODO: INFO_FILE_SAVED=File saved +INFO_FILE_SAVED=Файл сохранён ;TODO: INFO_TIME_FIXED=Timings corrected ;TODO: INFO_CAPITALIZE=Capitalization corrected ;TODO: INFO_EXIT=Do you want leave editor without save ? @@ -585,7 +629,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -596,17 +640,17 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Меню песен ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Добавить песню +SONG_MENU_DELETE_SONG=Удалить песню ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Всё ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -614,11 +658,11 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Разрешение ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Эффект ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -631,7 +675,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Погрешность ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -650,7 +694,7 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Меню песен ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -659,10 +703,10 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Пение ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -695,12 +739,12 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Цвет ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Красный +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Зелёный +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Синий ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -716,19 +760,19 @@ ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Игроку %d не назначено ни ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=плэйлист ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Всё ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Serbian.ini b/game/languages/Serbian.ini index 344e2407..eafa5268 100644 --- a/game/languages/Serbian.ini +++ b/game/languages/Serbian.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=Lako +OPTION_VALUE_MEDIUM=Normalno +OPTION_VALUE_HARD=Tesko ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=Jezik +OPTION_VALUE_FOLDER=Direktorijum +OPTION_VALUE_TITLE=Naziv +OPTION_VALUE_ARTIST=Izvodjac ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=lista pesama + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=pevaj ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Opcije SING_OPTIONS_GAME=igra SING_OPTIONS_GRAPHICS=grafika SING_OPTIONS_SOUND=zvuk +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=lirike SING_OPTIONS_THEMES=teme SING_OPTIONS_RECORD=snimanje @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Click assist SING_OPTIONS_SOUND_BEAT_CLICK=Beat click SING_OPTIONS_SOUND_THRESHOLD=Stepen Cujnosti SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mod za dva igraca +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Provera jacine tona SING_OPTIONS_SOUND_PREVIEWFADING=Provera pomracenja +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Opcije Lirike SING_OPTIONS_LYRICS_DESC=Podesavanja lirika SING_OPTIONS_LYRICS_FONT=Font @@ -183,20 +201,21 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Pomracenje Ekrana SING_OPTIONS_ADVANCED_LOADANIMATION=Animacija Ucitavanja SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Bezbednosna Pitanja SING_OPTIONS_ADVANCED_LINEBONUS=Linijski Bonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Posle Odabira Pesme SING_OPTIONS_ADVANCED_PARTYPOPUP=Automatski Timski Meni -;TODO: SING_EDIT=Editor -;TODO: SING_EDIT_MENU_DESCRIPTION=create your own song +SING_EDIT=editor +SING_EDIT_MENU_DESCRIPTION=napravi svoje pesme ;TODO: SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Import text from midi file -;TODO: SING_EDIT_BUTTON_DESCRIPTION_EXIT=back +SING_EDIT_BUTTON_DESCRIPTION_EXIT=nazad ;TODO: SING_EDIT_BUTTON_CONVERT=Import -;TODO: SING_EDIT_BUTTON_EXIT=back +SING_EDIT_BUTTON_EXIT=nazad -;TODO: SING_EDIT_NAVIGATE=navigate -;TODO: SING_EDIT_SELECT=select -;TODO: SING_EDIT_EXIT=back +SING_EDIT_NAVIGATE=biraj +SING_EDIT_SELECT=izaberi +SING_EDIT_EXIT=nazad SING_LEGEND_SELECT=izaberi SING_LEGEND_NAVIGATE=biraj @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=lista pesama SING_SONGS_IN_CAT=Pesme PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=TIME +;TODO: SING_TIME=TIME SING_TOTAL=total SING_MODE=pevaj solo SING_NOTES=note @@ -247,7 +266,7 @@ SING_SCORE_ULTRASTAR=UltraZvezda SING_TOP_5_CHARTS=najboljih 5 Igraca SING_TOP_5_CHARTS_WHEREAMI=najboljih pet SING_TOP_5_CHARTS_CONTINUE=do izbora pesme -;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=switch difficulty +;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Switch difficulty POPUP_PERFECT=savrseno! POPUP_AWESOME=odlicno! @@ -258,8 +277,8 @@ POPUP_BAD=lose! POPUP_POOR=jedno! POPUP_AWFUL=grozno! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= i +IMPLODE_GLUE1=, +IMPLODE_GLUE2= i SONG_MENU_NAME_MAIN=meni pesme SONG_MENU_PLAY=Pevaj @@ -327,10 +346,10 @@ PARTY_PLAYER_WHEREAMI=Imena Timova PARTY_PLAYER_ENTER_NAME=unesi imena -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds PARTY_ROUNDS_LEGEND_CONTINUE=zapocni timsku igru -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=sledeci igraci za mikrofonom @@ -355,38 +374,65 @@ PARTY_NOBODY=niko NEXT_ROUND=Sledeca runda: PARTY_DISMISSED=Otpusten! -PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=Pobedio! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Drzi liniju -MODE_HOLDTHELINE_DESC=Ne budi losiji nego sto ti strelica pokazuje. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Do 5000 -MODE_5000POINTS_DESC=Ko stigne prvi do 5000 poena pobedjuje. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duel -MODE_DUEL_DESC=Pevaj duel do 10000 poena. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -;TODO: MODE_TEAMDUEL_NAME=Team Duell -;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Slepi Mod -MODE_BLIND_DESC=Duel bez gledanja nota. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statistike STAT_MAIN_DESC=Generalne @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx Pevano ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -440,8 +486,8 @@ MSG_END_PARTY=Stvarno napustate Timski Mod? ERROR_NO_SONGS=Nema ucitanih pesama ERROR_NO_PLUGINS=Nema ucitanih plugin-ova -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Song could not be loaded: File not found ;TODO: ERROR_CORRUPT_SONG_NO_NOTES=Song could not be loaded: Can''t find any notes @@ -450,9 +496,6 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: SING_SCORE_HIT_ARTIST=Hit Pevac -;UNUSED: PARTY_ROUNDS=Runde - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -478,15 +521,15 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Sve +OPTION_ALL_SCORES=Sve ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Nazad ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,7 +567,7 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Nazad ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -546,11 +589,10 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=sledeci igraci za mikrofonom ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -587,7 +629,7 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -598,17 +640,17 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Meni Pesme ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Dodaj Pesmu +SONG_MENU_DELETE_SONG=Obrisi Pesmu ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Sve ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -616,11 +658,11 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Rezolucija ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Efekti ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -633,7 +675,7 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Stepen Cujnosti ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -652,7 +694,7 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Meni Pesme ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -661,10 +703,10 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=pevaj ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -697,7 +739,7 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Boja ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -718,19 +760,19 @@ ERROR_CORRUPT_SONG=Pesma se ne moze ucitati. ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=lista pesama ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Sve ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Slovak.ini b/game/languages/Slovak.ini index fdb0bc01..34dbfd0e 100644 --- a/game/languages/Slovak.ini +++ b/game/languages/Slovak.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=Ľahká +OPTION_VALUE_MEDIUM=Stredná +OPTION_VALUE_HARD=Ťažká ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=Jazyk +OPTION_VALUE_FOLDER=Kategória +OPTION_VALUE_TITLE=v názve skladby +OPTION_VALUE_ARTIST=v mene autora ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Playlist + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=Hra ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Nastavenia SING_OPTIONS_GAME=hra SING_OPTIONS_GRAPHICS=grafika SING_OPTIONS_SOUND=zvuk +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=text SING_OPTIONS_THEMES=témy SING_OPTIONS_RECORD=mikrofón @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Pomocný klik SING_OPTIONS_SOUND_BEAT_CLICK=Rytmický klik SING_OPTIONS_SOUND_THRESHOLD=Prah počuteľ. SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Mód dvoch hráčov +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Náhľad(volume) SING_OPTIONS_SOUND_PREVIEWFADING=Prechod skladieb +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Text SING_OPTIONS_LYRICS_DESC=nastavenia zobrazovania textov piesní SING_OPTIONS_LYRICS_FONT=Písmo @@ -183,20 +201,21 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Jemný prechod SING_OPTIONS_ADVANCED_LOADANIMATION=Animácia loading(u) SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Potvrdzovanie SING_OPTIONS_ADVANCED_LINEBONUS=Bonus za riadok +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Po zvolení skladby SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto PartyMenu -;TODO: SING_EDIT=Editor -;TODO: SING_EDIT_MENU_DESCRIPTION=create your own song +SING_EDIT=editor +SING_EDIT_MENU_DESCRIPTION=vytvorte si vlastnú skladbu ;TODO: SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Import text from midi file -;TODO: SING_EDIT_BUTTON_DESCRIPTION_EXIT=back +SING_EDIT_BUTTON_DESCRIPTION_EXIT=späť ;TODO: SING_EDIT_BUTTON_CONVERT=Import -;TODO: SING_EDIT_BUTTON_EXIT=back +SING_EDIT_BUTTON_EXIT=späť -;TODO: SING_EDIT_NAVIGATE=navigate -;TODO: SING_EDIT_SELECT=select -;TODO: SING_EDIT_EXIT=back +SING_EDIT_NAVIGATE=navigácia +SING_EDIT_SELECT=výber +SING_EDIT_EXIT=späť SING_LEGEND_SELECT=výber SING_LEGEND_NAVIGATE=navigácia @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=playlist SING_SONGS_IN_CAT=Skladba PLAYLIST_CATTEXT=Playlist: %s -SING_TIME=Čas +;TODO: SING_TIME=TIME SING_TOTAL=celkovo SING_MODE=spievať sólo SING_NOTES=noty @@ -247,7 +266,7 @@ SING_SCORE_ULTRASTAR=Ultrastar SING_TOP_5_CHARTS=najlepších 5 SING_TOP_5_CHARTS_WHEREAMI=top 5 SING_TOP_5_CHARTS_CONTINUE=pre výber skladby -;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=switch difficulty +;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Switch difficulty POPUP_PERFECT=neskutočné! POPUP_AWESOME=paráda! @@ -258,8 +277,8 @@ POPUP_BAD=zle! POPUP_POOR=bieda! POPUP_AWFUL=otrasné! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= a +IMPLODE_GLUE1=, +IMPLODE_GLUE2= a SONG_MENU_NAME_MAIN=Výber hudby SONG_MENU_PLAY=Štart @@ -327,18 +346,18 @@ PARTY_PLAYER_WHEREAMI=Párty mená PARTY_PLAYER_ENTER_NAME=zadajte mená -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds PARTY_ROUNDS_LEGEND_CONTINUE=Pokračovať -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=párty pre hráčov PARTY_ROUND_WHEREAMI=List párty disciplín PARTY_ROUND_LEGEND_CONTINUE=Štart disciplíny -PARTY_SONG_WHEREAMI=Párty - Výver Skladby -PARTY_SONG_LEGEND_CONTINUE=Štart +PARTY_SONG_WHEREAMI=Párty - Výver Skladby +PARTY_SONG_LEGEND_CONTINUE=Štart PARTY_SONG_MENU=party menu PARTY_SCORE_DESC=skóre posledného kola @@ -355,38 +374,65 @@ PARTY_NOBODY=ani jedno družstvo NEXT_ROUND=Ďalšie kolo: PARTY_DISMISSED=Ukončené ! -PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=víťaz tohto kola ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Superstar -MODE_HOLDTHELINE_DESC=nesmieš klesnúť pod hranicu ukazovateľa úspešnosti +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Po 5000 -MODE_5000POINTS_DESC=kto prvý získa 5000 bodov sa stane víťazom +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duel -MODE_DUEL_DESC=spievaj, kým nedosiahneš 10000 bodov +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Duel Tímov -MODE_TEAMDUEL_DESC=každý hráč sa vystrieda za mikrofónom +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Slepý -MODE_BLIND_DESC=neuvidíš noty pre hlas +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Štatistika STAT_MAIN_DESC=Všeobecne @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx spievaná ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -440,8 +486,8 @@ MSG_END_PARTY=Skutočne chcete skončit Párty Mód ? ERROR_NO_SONGS=Žiadna skladba ERROR_NO_PLUGINS=Žiadny zásuvný modul -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Song could not be loaded: File not found ;TODO: ERROR_CORRUPT_SONG_NO_NOTES=Song could not be loaded: Can''t find any notes @@ -450,9 +496,6 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: SING_SCORE_HIT_ARTIST=Star -;UNUSED: PARTY_ROUNDS=Počet kôl - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -478,15 +521,15 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=všade +OPTION_ALL_SCORES=všade ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Zrušiť ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -524,7 +567,7 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Zrušiť ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -546,11 +589,10 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=párty pre hráčov ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -587,7 +629,7 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -598,17 +640,17 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Skladby ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Pridaj Skladbu +SONG_MENU_DELETE_SONG=Zmaž skladbu ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=všade ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -616,11 +658,11 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Rozlíšenie ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Efekt zvýraznenia ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -633,7 +675,7 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Prah počuteľ. ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -652,7 +694,7 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Skladby ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -661,10 +703,10 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Hra ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -697,7 +739,7 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Farba ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -718,19 +760,19 @@ ERROR_CORRUPT_SONG=Skladbu sa nepodarilo nahrať. ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Playlist ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=všade ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Slovenian.ini b/game/languages/Slovenian.ini index 82f234ba..056976ee 100644 --- a/game/languages/Slovenian.ini +++ b/game/languages/Slovenian.ini @@ -9,6 +9,7 @@ ;TODO: OPTION_VALUE_EUSKARA=Euskara ;TODO: OPTION_VALUE_FINNISH=Finnish ;TODO: OPTION_VALUE_FRENCH=French +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician ;TODO: OPTION_VALUE_GERMAN=German ;TODO: OPTION_VALUE_GREEK=Greek @@ -20,6 +21,7 @@ ;TODO: OPTION_VALUE_NORWEGIAN=Norwegian ;TODO: OPTION_VALUE_POLISH=Polish ;TODO: OPTION_VALUE_PORTUGUESE=Portuguese +;TODO: OPTION_VALUE_ROMANIAN=Romanian ;TODO: OPTION_VALUE_RUSSIAN=Russian ;TODO: OPTION_VALUE_SERBIAN=Serbian ;TODO: OPTION_VALUE_SLOVAK=Slovak @@ -27,26 +29,29 @@ ;TODO: OPTION_VALUE_SPANISH=Spanish ;TODO: OPTION_VALUE_SWEDISH=Swedish -;TODO: OPTION_VALUE_EASY=Easy -;TODO: OPTION_VALUE_MEDIUM=Medium -;TODO: OPTION_VALUE_HARD=Hard +OPTION_VALUE_EASY=Enostavno +OPTION_VALUE_MEDIUM=Srednje +OPTION_VALUE_HARD=Težko ;TODO: OPTION_VALUE_ON=On ;TODO: OPTION_VALUE_OFF=Off ;TODO: OPTION_VALUE_EDITION=Edition ;TODO: OPTION_VALUE_GENRE=Genre -;TODO: OPTION_VALUE_LANGUAGE=Language -;TODO: OPTION_VALUE_FOLDER=Folder -;TODO: OPTION_VALUE_TITLE=Title -;TODO: OPTION_VALUE_ARTIST=Artist +OPTION_VALUE_LANGUAGE=Jezik +OPTION_VALUE_FOLDER=Mapa +OPTION_VALUE_TITLE=Naslov +OPTION_VALUE_ARTIST=Avtor ;TODO: OPTION_VALUE_TITLE2=Title2 ;TODO: OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Seznam + +;TODO: OPTION_VALUE_BORDERLESS=Borderless ;TODO: OPTION_VALUE_WHENNOVIDEO=When No Video +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image ;TODO: OPTION_VALUE_SMALL=Small ;TODO: OPTION_VALUE_BIG=Big @@ -55,6 +60,10 @@ ;TODO: OPTION_VALUE_FULL_VID=Full (Video) ;TODO: OPTION_VALUE_FULL_VID_BG=Full (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + ;TODO: OPTION_VALUE_AUTO=Auto ;TODO: OPTION_VALUE_SEC=Second ;TODO: OPTION_VALUE_SECS=Seconds @@ -83,10 +92,12 @@ ;TODO: OPTION_VALUE_BROWN=Brown ;TODO: OPTION_VALUE_BLACK=Black -;TODO: OPTION_VALUE_SING=Sing +OPTION_VALUE_SING=poj ;TODO: OPTION_VALUE_SELECT_PLAYERS=Select Players ;TODO: OPTION_VALUE_OPEN_MENU=Open Menu +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] ;TODO: OPTION_VALUE_HARDWARE_CURSOR=Hardware Cursor ;TODO: OPTION_VALUE_SOFTWARE_CURSOR=Software Cursor @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Nastavitve SING_OPTIONS_GAME=igra SING_OPTIONS_GRAPHICS=izgled SING_OPTIONS_SOUND=zvok +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=besedilo SING_OPTIONS_THEMES=tema SING_OPTIONS_RECORD=snemanje @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Asistent klikanja SING_OPTIONS_SOUND_BEAT_CLICK=Klikanje po ritmu SING_OPTIONS_SOUND_THRESHOLD=Prag SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Nacin za dva igralca +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Glasnost predogleda SING_OPTIONS_SOUND_PREVIEWFADING=narašcanje glasnosti +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Nastavitve besedila SING_OPTIONS_LYRICS_DESC=nastavitve besedila SING_OPTIONS_LYRICS_FONT=Pisava @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Zamegljevanje prikaza SING_OPTIONS_ADVANCED_LOADANIMATION=Zacetna animacija SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Zašcitno vprašanje SING_OPTIONS_ADVANCED_LINEBONUS=Bonus za vrstico +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Po izboru pesmi SING_OPTIONS_ADVANCED_PARTYPOPUP=Samodejni nacin Zabava @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=seznam predvajanja SING_SONGS_IN_CAT=Pesmi PLAYLIST_CATTEXT=Lista: %s -SING_TIME=CAS +;TODO: SING_TIME=TIME SING_TOTAL=skupaj SING_MODE=Petje SING_NOTES=note @@ -247,7 +266,7 @@ SING_SCORE_ULTRASTAR=Ultrazvezda SING_TOP_5_CHARTS=najboljših 5 pevcev SING_TOP_5_CHARTS_WHEREAMI=najboljših 5 SING_TOP_5_CHARTS_CONTINUE=k izbiri pesmi -;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=switch difficulty +;TODO: SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Switch difficulty POPUP_PERFECT=popolno! POPUP_AWESOME=odlicno! @@ -258,8 +277,8 @@ POPUP_BAD=slabo! POPUP_POOR=zelo slabo! POPUP_AWFUL=obupno! -IMPLODE_GLUE1=, -IMPLODE_GLUE2= in +IMPLODE_GLUE1=, +IMPLODE_GLUE2= in SONG_MENU_NAME_MAIN=meni pesmi SONG_MENU_PLAY=Poj @@ -327,10 +346,10 @@ PARTY_PLAYER_WHEREAMI=Imena PARTY_PLAYER_ENTER_NAME=vpiši imena -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds PARTY_ROUNDS_LEGEND_CONTINUE=zacni zabavo -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=naslednji igralec k mikrofonu @@ -355,38 +374,65 @@ PARTY_NOBODY=nobeden NEXT_ROUND=Naslednja runda: PARTY_DISMISSED=Zakljucena! -PARTY_SCORE_WINS=%s +PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=zmaga! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Zdrži nivo -MODE_HOLDTHELINE_DESC=Ne poj slabše, kot kaže kazalnik na števcu za ocenjevanje. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Do 5000 -MODE_5000POINTS_DESC=Kdor prvi doseže 5000 tock, zmaga. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Dvoboj -MODE_DUEL_DESC=Tekmovanje do 10000 tock. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Ekipni dvoboj -MODE_TEAMDUEL_DESC=Podaj mikrofon! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Slepi dvoboj -MODE_BLIND_DESC=Dvoboj brez prikaza not. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statika STAT_MAIN_DESC=Splošno @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx igrano ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -440,8 +486,8 @@ MSG_END_PARTY=Koncam zabavo? ERROR_NO_SONGS=Ni pesmi: Naloži jih v mapo Songs ERROR_NO_PLUGINS=Ni vkljuckov -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Ne morem naložiti pesmi. ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Ne morem naložiti pesmi: Ne najdem datoteke ERROR_CORRUPT_SONG_NO_NOTES=Ne morem naloziti pesmi: Ne najdem not. @@ -450,8 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: PARTY_ROUNDS=Število rund - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -477,15 +521,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Vse +OPTION_ALL_SCORES=Vse ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Preklici ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -523,7 +567,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Preklici ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -545,11 +589,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=naslednji igralec k mikrofonu ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -586,7 +629,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -597,17 +640,17 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Meni Pesem ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Dodaj pesem +SONG_MENU_DELETE_SONG=Izbriši pesem ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Vse ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -615,11 +658,11 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Locljivost ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Ucinek ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -632,7 +675,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Prag ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -651,7 +694,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Meni Pesem ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -660,10 +703,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=poj ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -696,7 +739,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Barva ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red @@ -717,19 +760,19 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Ne morem naložiti pesmi: Napaka v parsanju v ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Seznam ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Vse ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/Spanish.ini b/game/languages/Spanish.ini index d72073ac..105896ef 100644 --- a/game/languages/Spanish.ini +++ b/game/languages/Spanish.ini @@ -1,6 +1,6 @@ -[Text] +[Text] OPTION_VALUE_CATALAN=Catalán -;TODO: OPTION_VALUE_CHINESE=Chinese +OPTION_VALUE_CHINESE=Chino OPTION_VALUE_CROATIAN=Croata OPTION_VALUE_CZECH=Checo OPTION_VALUE_DANISH=Danés @@ -9,7 +9,8 @@ OPTION_VALUE_ENGLISH=Inglés OPTION_VALUE_EUSKARA=Euskera OPTION_VALUE_FINNISH=Finlandés OPTION_VALUE_FRENCH=Francés -;TODO: OPTION_VALUE_GALICIAN=Galician +OPTION_VALUE_GAELIC=Gaélico Escocés +OPTION_VALUE_GALICIAN=Gallego OPTION_VALUE_GERMAN=Alemán OPTION_VALUE_GREEK=Griego OPTION_VALUE_HUNGARIAN=Húngaro @@ -20,12 +21,15 @@ OPTION_VALUE_LUXEMBOURGISH=Luxemburgués OPTION_VALUE_NORWEGIAN=Noruego OPTION_VALUE_POLISH=Polaco OPTION_VALUE_PORTUGUESE=Portugués -;TODO: OPTION_VALUE_RUSSIAN=Russian +OPTION_VALUE_ROMANIAN=Rumano +OPTION_VALUE_RUSSIAN=Ruso OPTION_VALUE_SERBIAN=Serbio OPTION_VALUE_SLOVAK=Eslovaco OPTION_VALUE_SLOVENIAN=Esloveno OPTION_VALUE_SPANISH=Español OPTION_VALUE_SWEDISH=Sueco +OPTION_VALUE_ROMANIAN=Rumano +OPTION_VALUE_GAELIC=Gaélico OPTION_VALUE_EASY=Fácil OPTION_VALUE_MEDIUM=Medio @@ -44,9 +48,12 @@ OPTION_VALUE_TITLE2=Título2 OPTION_VALUE_ARTIST2=Artista2 OPTION_VALUE_YEAR=Año OPTION_VALUE_DECADE=Década -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Lista + +OPTION_VALUE_BORDERLESS=Maximizada OPTION_VALUE_WHENNOVIDEO=Si no hay video +OPTION_VALUE_WHENNOVIDEOANDIMAGE=Si no hay video ni imagen OPTION_VALUE_SMALL=Pequeño OPTION_VALUE_BIG=Grande @@ -55,13 +62,17 @@ OPTION_VALUE_HALF=Mitad OPTION_VALUE_FULL_VID=Completo (video) OPTION_VALUE_FULL_VID_BG=Completo (fondo y video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=Segundo OPTION_VALUE_SECS=Segundos -OPTION_VALUE_PLAIN=Sencillo -OPTION_VALUE_OLINE1=OLine1 -OPTION_VALUE_OLINE2=OLine2 +OPTION_VALUE_PLAIN=Estilizada +OPTION_VALUE_OLINE1=con borde +OPTION_VALUE_OLINE2=con borde 2 OPTION_VALUE_SIMPLE=Simple OPTION_VALUE_ZOOM=Acercar @@ -70,7 +81,7 @@ OPTION_VALUE_BALL=Pelotita OPTION_VALUE_SHIFT=Saltar OPTION_VALUE_EURO=Europeo -OPTION_VALUE_JAPAN=Japones +OPTION_VALUE_JAPAN=Japonés OPTION_VALUE_AMERICAN=Americano OPTION_VALUE_BLUE=Azul @@ -87,26 +98,20 @@ OPTION_VALUE_SING=Cantar OPTION_VALUE_SELECT_PLAYERS=Elegir jugadores OPTION_VALUE_OPEN_MENU=Abrir menú -OPTION_VALUE_HARDWARE_CURSOR=Cursor por hardware -OPTION_VALUE_SOFTWARE_CURSOR=Cursor por software - SING_LOADING=Cargando... SING_CHOOSE_MODE=Elige -SING_SING=¡Canta! -SING_SING_DESC=Juego rápido: cantar solo o acompañado +SING_SING=Canta +SING_SING_DESC=Canta solo o acompañado SING_MULTI=Fiesta -SING_MULTI_DESC=Cantar en una fiesta o en grupos +SING_MULTI_DESC=Canta en una fiesta o en grupos SING_TOOLS=Utilidades SING_STATS=Estadísticas SING_STATS_DESC=Ver estadísticas -SING_EDITOR=Editor -SING_EDITOR_DESC=Crea tu propia canción - SING_GAME_OPTIONS=Opciones SING_GAME_OPTIONS_DESC=Cambia las opciones del juego @@ -127,16 +132,24 @@ SING_OPTIONS_ADVANCED=Avanzado SING_OPTIONS_EXIT=Atrás SING_OPTIONS_GAME_WHEREAMI=Opciones del juego -SING_OPTIONS_GAME_DESC=Cambiar las preferencias generales del juego +SING_OPTIONS_GAME_DESC=Cambia las preferencias generales del juego SING_OPTIONS_GAME_PLAYERS=Jugadores SING_OPTIONS_GAME_DIFFICULTY=Dificultad SING_OPTIONS_GAME_LANGUAGE=Idioma -SING_OPTIONS_GAME_TABS=Etiquetas +SING_OPTIONS_GAME_TABS=Mostrar carpetas SING_OPTIONS_GAME_SORTING=Clasificar por -SING_OPTIONS_GAME_DEBUG=Modo depuración +SING_OPTIONS_GAME_DEBUG=Mostrar FPS +SING_OPTIONS_GAME_SONGMENU=Menú +OPTION_VALUE_ROULETTE=Ruleta +OPTION_VALUE_CHESSBOARD=Ajedrez +OPTION_VALUE_CAROUSEL=Diapositiva +OPTION_VALUE_SLOTMACHINE=Máquina tragaperras +OPTION_VALUE_LIST=Lista +OPTION_VALUE_MOSAIC=Baldosas + SING_OPTIONS_GRAPHICS_WHEREAMI=Opciones gráficas -SING_OPTIONS_GRAPHICS_DESC=Cambiar los ajustes de video +SING_OPTIONS_GRAPHICS_DESC=Cambia los ajustes de video SING_OPTIONS_GRAPHICS_RESOLUTION=Resolución SING_OPTIONS_GRAPHICS_FULLSCREEN=Pantalla completa SING_OPTIONS_GRAPHICS_DEPTH=Profundidad de color @@ -146,32 +159,36 @@ SING_OPTIONS_GRAPHICS_LINEBONUS=Bonus de línea SING_OPTIONS_GRAPHICS_MOVIE_SIZE=Tamaño del video SING_OPTIONS_SOUND_WHEREAMI=Opciones de sonido -SING_OPTIONS_SOUND_DESC=Cambiar los ajustes de audio -SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Oír el micrófono +SING_OPTIONS_SOUND_DESC=Cambia los ajustes de audio +SING_OPTIONS_SOUND_VOICEPASSTHROUGH=Escucha tu voz SING_OPTIONS_SOUND_BACKGROUNDMUSIC=Música de fondo SING_OPTIONS_SOUND_MIC_BOOST=Potenciar micrófono -SING_OPTIONS_SOUND_CLICK_ASSIST=Ayuda de notas -SING_OPTIONS_SOUND_BEAT_CLICK=Clic en compases -SING_OPTIONS_SOUND_THRESHOLD=Umbral del micro. +SING_OPTIONS_SOUND_CLICK_ASSIST=Clic en notas +SING_OPTIONS_SOUND_BEAT_CLICK=Activar metrónomo +SING_OPTIONS_SOUND_THRESHOLD=Reducción de ruido SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Modo 2 jugadores -SING_OPTIONS_SOUND_PREVIEWVOLUME=Volumen del adelanto -SING_OPTIONS_SOUND_PREVIEWFADING=Desvanecimiento +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain +SING_OPTIONS_SOUND_PREVIEWVOLUME=Volumen vista previa +SING_OPTIONS_SOUND_PREVIEWFADING=Desvanecer audio + + + SING_OPTIONS_LYRICS_WHEREAMI=Opciones de letras -SING_OPTIONS_LYRICS_DESC=Cambiar la forma en que se ven las canciones +SING_OPTIONS_LYRICS_DESC=Cambia la forma en que se ven las canciones SING_OPTIONS_LYRICS_FONT=Tipografía SING_OPTIONS_LYRICS_EFFECT=Efecto SING_OPTIONS_LYRICS_SOLMIZATION=Solfeo SING_OPTIONS_LYRICS_NOTELINES=Pentagrama SING_OPTIONS_THEMES_WHEREAMI=Opciones de apariencia -SING_OPTIONS_THEMES_DESC=Cambiar colores y temas +SING_OPTIONS_THEMES_DESC=Cambia la apariencia del juego SING_OPTIONS_THEMES_THEME=Tema SING_OPTIONS_THEMES_SKIN=Piel SING_OPTIONS_THEMES_COLOR=Color SING_OPTIONS_RECORD_WHEREAMI=Opciones de micrófonos -SING_OPTIONS_RECORD_DESC=Cambiar entradas de sonido +SING_OPTIONS_RECORD_DESC=Cambia tus micrófonos SING_OPTIONS_RECORD_CARD=Dispositivo de sonido SING_OPTIONS_RECORD_INPUT=Entrada SING_OPTIONS_RECORD_CHANNEL=Canal @@ -179,33 +196,28 @@ SING_OPTIONS_RECORD_CHANNEL=Canal SING_OPTIONS_ADVANCED_WHEREAMI=Opciones avanzadas SING_OPTIONS_ADVANCED_DESC=Opciones avanzadas SING_OPTIONS_ADVANCED_EFFECTSING=Efectos al cantar -SING_OPTIONS_ADVANCED_SCREENFADE=Desvanecimiento +SING_OPTIONS_ADVANCED_SCREENFADE=Animaciones SING_OPTIONS_ADVANCED_LOADANIMATION=Animación de carga -SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Preguntar al borrar +SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Confirmar al salir SING_OPTIONS_ADVANCED_LINEBONUS=Bonus de línea +SING_OPTIONS_ADVANCED_JOYPAD_SUPPORT=Activar gamepad +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Al seleccionar canción SING_OPTIONS_ADVANCED_PARTYPOPUP=Auto menú de fiesta -SING_EDIT=Editor -SING_EDIT_MENU_DESCRIPTION=Crear tu propia canción - -SING_EDIT_BUTTON_DESCRIPTION_CONVERT=Importar texto desde archivo MIDI -SING_EDIT_BUTTON_DESCRIPTION_EXIT=Atrás -SING_EDIT_BUTTON_CONVERT=Importar -SING_EDIT_BUTTON_EXIT=Atrás - -SING_EDIT_NAVIGATE=Navegar -SING_EDIT_SELECT=Seleccionar -SING_EDIT_EXIT=Atrás - SING_LEGEND_SELECT=Seleccionar SING_LEGEND_NAVIGATE=Navegar SING_LEGEND_CONTINUE=Continuar SING_LEGEND_ESC=Atrás -SING_PLAYER_DESC=Nombres de jugadores -SING_PLAYER_WHEREAMI=Nombres de jugadores -SING_PLAYER_ENTER_NAME=Escribe el nombre +SING_PLAYER_TITLE=Perfiles +SING_PLAYER_READY=Jugadores listos para cantar +SING_PLAYER_COUNT=Número de jugadores +SING_PLAYER_EDIT=Edita un jugador +SING_PLAYER_NAME=Escribe tu nombre +SING_PLAYER_COLOR=Escoge un color +SING_PLAYER_LEVEL=Elige un nivel +SING_PLAYER_AVATAR=Selecciona tu avatar SING_DIFFICULTY_DESC=Selecciona la dificultad SING_DIFFICULTY_WHEREAMI=Dificultad @@ -222,10 +234,14 @@ SING_SONG_SELECTION_MENU=Menú SING_SONG_SELECTION_PLAYLIST=Lista SING_SONGS_IN_CAT=canciones PLAYLIST_CATTEXT=Lista: %s +SING_SONG_SELECTION_LEGEND_TITLE=Leyenda +SING_SONG_SELECTION_LEGEND_VIDEO=Video +SING_SONG_SELECTION_LEGEND_MEDLEY=Versión corta +SING_SONG_SELECTION_LEGEND_MEDLEYC=Versión corta calculada +SING_SONG_SELECTION_LEGEND_DUET=Dueto -SING_TIME=TIEMPO SING_TOTAL=Total -SING_MODE=Solo +SING_MODE=Canta solo o acompañado SING_NOTES=Notas SING_GOLDEN_NOTES=Notas doradas SING_PHRASE_BONUS=Bonus de línea @@ -235,34 +251,34 @@ SING_MENU=Menú principal SONG_SCORE=Puntuaciones SONG_SCORE_WHEREAMI=Puntuaciones -SING_SCORE_TONE_DEAF=Desafinado -SING_SCORE_AMATEUR=Aficionado -SING_SCORE_WANNABE=Mejorando -SING_SCORE_HOPEFUL=Promesa -SING_SCORE_RISING_STAR=Cantante -SING_SCORE_LEAD_SINGER=Gran Cantante -SING_SCORE_SUPERSTAR=Superestrella -SING_SCORE_ULTRASTAR=Ultraestrella +SING_SCORE_TONE_DEAF=¿Cantaste algo? +SING_SCORE_AMATEUR=Cantas fatal +SING_SCORE_WANNABE=Desafinas +SING_SCORE_HOPEFUL=Necesitas mejorar +SING_SCORE_RISING_STAR=No está mal +SING_SCORE_LEAD_SINGER=Cantante +SING_SCORE_SUPERSTAR=Super cantante +SING_SCORE_ULTRASTAR=Toda una estrella SING_TOP_5_CHARTS=Los 5 mejores SING_TOP_5_CHARTS_WHEREAMI=Los 5 mejores SING_TOP_5_CHARTS_CONTINUE=A selección de canción SING_TOP_5_CHARTS_SWITCH_DIFFICULTY=Cambiar dificultad -POPUP_PERFECT=¡Perfecto! -POPUP_AWESOME=¡Asombroso! -POPUP_GREAT=¡Genial! -POPUP_GOOD=¡Bien! -POPUP_NOTBAD=¡Nada mal! -POPUP_BAD=¡Mal! -POPUP_POOR=¡Pésimo! -POPUP_AWFUL=¡Horrible! +POPUP_PERFECT=Perfecto +POPUP_AWESOME=Increíble +POPUP_GREAT=Estupendo +POPUP_GOOD=Bien +POPUP_NOTBAD=Aceptable +POPUP_BAD=Penoso +POPUP_POOR=Lamentable +POPUP_AWFUL=Terrible IMPLODE_GLUE1=, IMPLODE_GLUE2= y SONG_MENU_NAME_MAIN=Menú canciones -SONG_MENU_PLAY=Cantar +SONG_MENU_PLAY=Cantar esta canción SONG_MENU_CHANGEPLAYERS=Elegir jugadores SONG_MENU_EDIT=Editar SONG_MENU_MODI=Cantar una Modi @@ -292,9 +308,9 @@ SONG_MENU_PLAYLIST_DELCURRENT=Borrar lista actual SONG_MENU_NAME_PLAYLIST_DEL=¿Borrar lista? SONG_MENU_NAME_PARTY_MAIN=Menú fiesta -SONG_MENU_JOKER=Aleatorio +SONG_MENU_JOKER=Gastar comodín -SONG_MENU_NAME_PARTY_JOKER=Aleatorio +SONG_MENU_NAME_PARTY_JOKER=Gastar comodín SONG_JUMPTO_DESC=Buscar canción SONG_JUMPTO_TYPE_DESC=Buscar por: @@ -313,16 +329,16 @@ PARTY_PLAYLIST_ALL=Todo PARTY_PLAYLIST_CATEGORY=Carpeta PARTY_PLAYLIST_PLAYLIST=Lista PARTY_TEAMS=Equipos -PARTY_TEAMS_PLAYER1=Integrantes eq. 1 -PARTY_TEAMS_PLAYER2=Integrantes eq. 2 -PARTY_TEAMS_PLAYER3=Integrantes eq. 3 +PARTY_TEAMS_PLAYER1=Personas +PARTY_TEAMS_PLAYER2=Personas +PARTY_TEAMS_PLAYER3=Personas PARTY_LEGEND_CONTINUE=Continuar PARTY_OPTIONS_DESC=Opciones del modo fiesta PARTY_OPTIONS_WHEREAMI=Opciones del modo fiesta -PARTY_PLAYER_DESC=¡Escribe los nombres de jugadores y equipos! +PARTY_PLAYER_DESC=Escribe los nombres de jugadores y equipos PARTY_PLAYER_WHEREAMI=Nombre de los equipos PARTY_PLAYER_ENTER_NAME=Escribe los nombres @@ -354,21 +370,39 @@ PARTY_NOTPLAYEDYET=Aún no jugado PARTY_NOBODY=Nadie NEXT_ROUND=Siguiente ronda: -PARTY_DISMISSED=¡Perdió! +PARTY_DISMISSED=Perdió PARTY_SCORE_WINS=%s -PARTY_SCORE_WINS2=¡Ganó! +PARTY_SCORE_WINS2=Ganó MODE_RANDOM_NAME=Aleatorio MODE_RANDOM_DESC=Se elegirá el modo al azar MODE_HOLDTHELINE_NAME=Mantén la línea -MODE_HOLDTHELINE_DESC=¡Canta bien durante toda la canción! +MODE_HOLDTHELINE_DESC=Canta bien durante toda la canción + +MODE_HOLDTHELINEBLIND_NAME=A ciegas +MODE_HOLDTHELINEBLIND_DESC=Canta bien durante toda la canción con las notas ocultas + +MODE_7000POINTS_NAME=Hasta 7000 +MODE_7000POINTS_DESC=Alcanza los 7000 puntos + +MODE_7000POINTSBLIND_NAME=A ciegas 7000 +MODE_7000POINTSBLIND_DESC=Alcanza los 7000 puntos sin ver las notas MODE_5000POINTS_NAME=Hasta 5000 -MODE_5000POINTS_DESC=Gana quien obtenga 5000 puntos +MODE_5000POINTS_DESC=Alcanza los 5000 puntos + +MODE_5000POINTSBLIND_NAME=A ciegas 5000 +MODE_5000POINTSBLIND_DESC=Alcanza los 5000 puntos sin ver las notas + +MODE_2000POINTS_NAME=Hasta 2000 +MODE_2000POINTS_DESC=Alcanza los 2000 puntos + +MODE_2000POINTSBLIND_NAME=Blind 2000 +MODE_2000POINTSBLIND_DESC=Alcanza los 2000 puntos sin ver las notas MODE_DUEL_NAME=Duelo -MODE_DUEL_DESC=Canta un duelo hasta 10000 puntos +MODE_DUEL_DESC=Duelo normal MODE_TEAMDUEL_NAME=Duelo de equipos MODE_TEAMDUEL_DESC=¡Pasa el micro a otro jugador de tu equipo! @@ -376,16 +410,25 @@ MODE_TEAMDUEL_DESC=¡Pasa el micro a otro jugador de tu equipo! MODE_BLIND_NAME=Modo a ciegas MODE_BLIND_DESC=Duelo sin ver las notas. +MODE_BLINDTOTAL_NAME=Todo a ciegas +MODE_BLINDTOTAL_DESC=Duelo con notas y letras ocultas + MODE_1000BLIND_NAME = +1000 Ciego -MODE_1000BLIND_DESC = Si vas ganando por más de 1000 puntos te quedas a ciegas +MODE_1000BLIND_DESC = Si vas ganando por más de 1000 puntos, no verás las notas + +MODE_DEAF_NAME = Sordo +MODE_DEAF_DESC = Atrévete a cantar sin música + +MODE_BLINDLYRICS_NAME = Sin letra +MODE_BLINDLYRICS_DESC = Para aquellos que se saben la letra de memoria. MODE_500BLIND_NAME = +500 Ciego -MODE_500BLIND_DESC = Si vas ganando por más de 500 puntos te quedas a ciegas +MODE_500BLIND_DESC = Si vas ganando por más de 500 puntos, no verás las notas MODE_SHORTSONG_NAME = Canción corta MODE_SHORTSONG_DESC = Duelo hasta la mitad de la canción -MODE_HARDCORE_NAME=Hardcore +MODE_HARDCORE_NAME=Extremo MODE_HARDCORE_DESC=Gana quien consiga 3 líneas de ventaja STAT_MAIN=Estadísticas @@ -394,7 +437,7 @@ STAT_MAIN_WHEREAMI=Estadísticas STAT_OVERVIEW_INTRO=Estadísticas de %0:s\n Desde el %1:.2d/%2:.2d/%3:d STAT_OVERVIEW_SONG=Hay %0:d canciones (%3:d con vídeo),\n de las cuales %1:d han sido cantadas y %2:d aún no.\n La más popular es %5:s de %4:s. -STAT_OVERVIEW_PLAYER=Hay registrados %0:d jugadores diferentes.\n El mejor es %1:s con un promedio de %2:d puntos.\n El puntaje más alto fue logrado por %3:s con %4:d puntos. +STAT_OVERVIEW_PLAYER=Hay registrados %0:d jugadores diferentes.\n El mejor es %1:s con un promedio de %2:d puntos.\n La calificación más alta fue lograda por %3:s con %4:d puntos. STAT_FORMAT_DATE=%0:.2d/%1:.2d/%2:d @@ -406,9 +449,9 @@ STAT_PREV=Anterior STAT_REVERSE=Invertir el orden STAT_PAGE=Página %0:d de %1:d \n (%2:d ítems de un total de %3:d) -STAT_DESC_SCORES=Puntajes -STAT_DESC_SCORES_REVERSED=Peores puntajes -STAT_FORMAT_SCORES=%1:d - %0:s\n %3:s - %4:s (%2:s) el %5:s +STAT_DESC_SCORES=Calificaciones +STAT_DESC_SCORES_REVERSED=Peores Calificaciones +STAT_FORMAT_SCORES=%0:d - %1:s\n %2:s - %5:s (%3:s) el %4:s STAT_DESC_SINGERS=Cantantes STAT_DESC_SINGERS_REVERSED=Peores cantantes @@ -447,16 +490,13 @@ ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Imposible cargar la canción: Archivo no encon ERROR_CORRUPT_SONG_NO_NOTES=Imposible cargar la canción: No se encuentran notas ERROR_CORRUPT_SONG_NO_BREAKS=Imposible cargar la canción: No se encuentran interrupciones de línea ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Imposible cargar la canción: Error durante el parsing de la línea %0:d -ERROR_NO_EDITOR=Esta función no está disponible en Linux/Mac +ERROR_NO_EDITOR=Esta función no está disponible en ésta versión ERROR_PLAYER_DEVICE_ASSIGNMENT=Se han asignado más de 1 micrófono al jugador %d. Comprueba las opciones de micrófonos. ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Al jugador %d no se le ha asignado ningún micrófono. Comprueba las opciones de micrófonos -;UNUSED: PARTY_ROUNDS=Rondas -;TRANSLATOR: Daniela Rodríguez Careri - SING_OPTIONS_NETWORK=Internet SING_OPTIONS_NETWORK_WHEREAMI=Opciones de internet -SING_OPTIONS_NETWORK_DESC=Configuración general de internet +SING_OPTIONS_NETWORK_DESC=Sincroniza tu cuenta con nuestra web SING_OPTIONS_NETWORK_INSERT_USER_INFO=Pulsa la tecla "Insert" para añadir un usuario a esta web SING_OPTIONS_NETWORK_WEBSITE=Página web SING_OPTIONS_NETWORK_USERNAME=Usuario @@ -467,7 +507,7 @@ SING_OPTIONS_NETWORK_AUTO_PLAYER=Jugador SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Puntuación (Fácil) SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Puntuación (Medio) SING_OPTIONS_NETWORK_AUTO_SCORE_HARD=Puntuación (Difícil) -SING_OPTIONS_NETWORK_NO_DLL=No hay Web DLL's compatible con Ultrastar Deluxe... +SING_OPTIONS_NETWORK_NO_DLL=Está usando una versión desactualizada. Visite nuestra web. SING_OPTIONS_NETWORK_DELETE_PLAYER=¿De verdad quieres eliminar el usuario %0:s de la web de %1:s? SING_OPTIONS_NETWORK_LEGEND_INSERT=Insertar SING_OPTIONS_NETWORK_LEGEND_DELETE=Eliminar @@ -501,15 +541,15 @@ WEBSITE_NO_CONNECTION_SAVE=No se puede conectar a la web ¿Desea guardar? SONG_MENU_REFRESH_SCORES=Actualizar puntuación SONG_MENU_REFRESH_SCORES_TITLE=Actualización -SONG_MENU_REFRESH_SCORES_NO_WEB=¡No hay páginas web! +SONG_MENU_REFRESH_SCORES_NO_WEB=No hay páginas web SONG_MENU_REFRESH_SCORES_ONLINE=En red SONG_MENU_REFRESH_SCORES_FILE=Archivo SONG_MENU_REFRESH_SCORES_ALL_WEB=Todas las páginas web SONG_MENU_REFRESH_SCORES_ALL_SONGS=Todas las canciones SONG_MENU_REFRESH_SCORES_ONLY_SONG=Esta canción SONG_MENU_REFRESH_SCORES_REFRESH=Actualizar -SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION=Error,no se puede conectar a la web: %0:s! -SONG_MENU_REFRESH_SCORES_ERROR_FILE=No existe el ficheiro '%0:s [Download Scores]'! +SONG_MENU_REFRESH_SCORES_ERROR_CONNECTION=Error,no se puede conectar a la web: %0:s +SONG_MENU_REFRESH_SCORES_ERROR_FILE=No existe el ficheiro '%0:s [Download Scores]' SONG_SCORE_MAX=Máximo: SONG_SCORE_MEDIA=Media: @@ -528,7 +568,7 @@ SCORE_DOWNLOAD_CANCEL=Cancelar SCORE_DOWNLOAD_OK=OK SCORE_DOWNLOAD_SONG_UPDATE=Existe %0:d canciones(s) modificadas(s) en la web -SING_OPTIONS_GAME_SHOWSCORES=Mostrar puntuación +SING_OPTIONS_GAME_SHOWSCORES=Ver puntuación online OPTION_VALUE_WHENEXIST=Cuando exista PARTY_SELECT_MODE=Modo @@ -537,7 +577,7 @@ PARTY_MODE_CLASSIC_FREE=Clásico Libre PARTY_MODE_CHALLENGE=Desafío PARTY_MODE_TOURNAMENT=Torneo PARTY_MODE_JUKEBOX=Jukebox -PARTY_MODE_NOT_AVAILABLE=¡No Dispobible! +PARTY_MODE_NOT_AVAILABLE=No Disponible PARTY_MODE_TOURNAMENT_PLAYER_DESC=Inserta el nº y los nombres de los jugadores PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS=Nº de jugadores @@ -546,9 +586,9 @@ PARTY_MODE_TOURNAMENT_ROUNDS_FINAL=Final PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinal PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Cuartos de final PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Octavos de final -PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Jugadores siguientes para los microfonos +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Jugadores siguientes para los micrófonos PARTY_MODE_TOURNAMENT_WIN_DESC=Resultados de la ronda -PARTY_MODE_TOURNAMENT_CHAMPION=El campeón es: %0:s! +PARTY_MODE_TOURNAMENT_CHAMPION=El campeón es: %0:s EDIT_TITLE=Título: EDIT_ARTIST=Artista: @@ -556,7 +596,7 @@ EDIT_MP3=MP3: EDIT_BPM=BPM: EDIT_GAP=GAP: EDIT_COVER=Carátula -EDIT_BACKGROUND=Background: +EDIT_BACKGROUND=Fondo: EDIT_START=Inicio: EDIT_DURATION=Duración @@ -568,22 +608,22 @@ EDIT_VOLUME_MIDI=Volumen del midi: EDIT_VOLUME_CLICK=Volumen del click: INFO_UNDO=Deshacer la operación -INFO_FILE_SAVED=Fichero Guardado +INFO_FILE_SAVED=Archivo guardado INFO_TIME_FIXED=Tiempos corregidos INFO_CAPITALIZE=Capitalización corregida INFO_EXIT=¿Desea salir del editor sin guardar? INFO_SONG_RELOADED=Canción Reabierta INFO_DIVIDED_BPM=Dividir BPM INFO_MULTIPLIED_BPM=Multiplicar BPM -INFO_PLAY_SONG=Play Música -INFO_PLAY_SENTENCE=Play Frase +INFO_PLAY_SONG=Reproducir música +INFO_PLAY_SENTENCE=Reproducir línea INFO_CURRENT_LINE=Línea: INFO_CURRENT_NOTE=Nota: -INFO_MIDI_CHANNEL_OFF= ¡Canal %0:s desactivado! -INFO_MIDI_CHANNEL_RESET= ¡Todos los canales activos! +INFO_MIDI_CHANNEL_OFF= Canal %0:s desactivado +INFO_MIDI_CHANNEL_RESET= Todos los canales activos -MSG_END_JUKEBOX=¿Realmente quieres abandonar el modo Jukebox? +MSG_END_JUKEBOX=¿Seguro que quieres salir del reproductor de música? JUKEBOX_RANDOM=Aleatorio JUKEBOX_REPEAT=Repetir JUKEBOX_FIND=Buscar: @@ -601,8 +641,8 @@ SONG_MENU_NAME_SONG=Menu Canción SONG_MENU_NAME_MEDLEY=Menu Medley SONG_MENU_ADD_SONG=Añadir canción SONG_MENU_DELETE_SONG=Eliminar canción -SONG_MENU_START_MEDLEY=¡Cantar! -SONG_MENU_START_5_MEDLEY=¡Cantar %0:d canciones! +SONG_MENU_START_MEDLEY=Cantar +SONG_MENU_START_5_MEDLEY=Cantar %0:d canciones SONG_MENU_NAME_SORTING=Menu ordenar SONG_MENU_SORTING_TABS_ON=Etiquetas SI @@ -612,7 +652,7 @@ SONG_MENU_SORTING_DUET=Duetos SONG_MENU_SORTING_APPLY=Aplicar SING_OPTIONS_WEBCAM=Cámara -SING_OPTIONS_WEBCAM_DESC=Configuracion de cámara +SING_OPTIONS_WEBCAM_DESC=Configuración de la cámara SING_OPTIONS_WEBCAM_WHEREAMI=Opciones de la cámara SING_OPTIONS_WEBCAM_ID=Cámara SING_OPTIONS_WEBCAM_RESOLUTION=Resolución @@ -623,14 +663,15 @@ SING_OPTIONS_WEBCAM_EFFECT=Efecto SING_OPTIONS_WEBCAM_BRIGHTNESS=Brillo SING_OPTIONS_WEBCAM_SATURATION=Saturación SING_OPTIONS_WEBCAM_HUE=Matiz -SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Activar previsualización -SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=Desactivar previsualización +SING_OPTIONS_WEBCAM_PREVIEW=Activar previsualización +SING_OPTIONS_WEBCAM_ENABLE_PREVIEW=Sí +SING_OPTIONS_WEBCAM_DISABLE_PREVIEW=No SING_OPTIONS_WEBCAM_EFFECT_NORMAL=Normal SING_OPTIONS_WEBCAM_EFFECT_GRAYSCALE=Escala de grises SING_OPTIONS_WEBCAM_EFFECT_BLACK_WHITE=Blanco y negro SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negativo -SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Imagem binaria +SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Imagen binaria SING_OPTIONS_WEBCAM_EFFECT_DILATE=Estirada SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Umbral SING_OPTIONS_WEBCAM_EFFECT_EDGES=Bordes @@ -638,98 +679,90 @@ SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Difuminado Gaussiano SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equilibrada SING_OPTIONS_WEBCAM_EFFECT_ERODE=Erosión + PARTY_PLAYLIST_MANUAL=Seleción manual -PARTY_MODE_JUKEBOX_NO_SONGS=¡La lista de canciones está vacía! +PARTY_MODE_JUKEBOX_NO_SONGS=La lista de canciones está vacía SONG_MENU_OPEN_CATEGORY=Abrir categoria SONG_MENU_CLOSE_CATEGORY=Cerrar categoria SONG_MENU_START_JUKEBOX=¡Iniciar Jukebox! SONG_MENU_NAME_JUKEBOX=Menu Jukebox WEBSITE_EXIST_SONG=La cancion pertenece al sitio: %0:s -WEBSITE_NOT_EXIST_SONG=¡La canción no pertenece a ningún sitio! - -;TODO: NAME_PLAYERS_COUNT=Number of Players -;TODO: NAME_CURRENT_PLAYER=Player - -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu -;TODO: OPTION_VALUE_ROULETTE=Roulette -;TODO: OPTION_VALUE_CHESSBOARD=Chessboard -;TODO: OPTION_VALUE_CAROUSEL=Carousel -;TODO: OPTION_VALUE_SLOTMACHINE=Slot Machine -;TODO: OPTION_VALUE_LIST=List -;TODO: OPTION_VALUE_MOSAIC=Tile - -;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox -;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options - -;TODO: OPTION_VALUE_TO_SING=Sing -;TODO: OPTION_VALUE_ACTUAL=Actual -;TODO: OPTION_VALUE_NEXT=Next -;TODO: OPTION_VALUE_OTHER=Other -;TODO: OPTION_VALUE_FILL=Fill -;TODO: OPTION_VALUE_OUTLINE=Outline -;TODO: OPTION_VALUE_GRAY=Gray -;TODO: OPTION_VALUE_WHITE=White -;TODO: OPTION_VALUE_TURQUOISE=Turquoise -;TODO: OPTION_VALUE_SALMON=Salmon -;TODO: OPTION_VALUE_GREENYELLOW=GreenYellow -;TODO: OPTION_VALUE_LAVENDER=Lavender -;TODO: OPTION_VALUE_BEIGE=Beige -;TODO: OPTION_VALUE_TEAL=Teal -;TODO: OPTION_VALUE_ORCHID=Orchid -;TODO: OPTION_VALUE_STEELBLUE=Steel Blue -;TODO: OPTION_VALUE_PLUM=Plum -;TODO: OPTION_VALUE_CHOCOLATE=Chocolate -;TODO: OPTION_VALUE_GOLD=Gold -;TODO: OPTION_VALUE_DARKBLUE=Dark Blue -;TODO: OPTION_VALUE_SKY=Sky -;TODO: OPTION_VALUE_HARLEQUIN=Harlequin -;TODO: OPTION_VALUE_CYAN=Cyan -;TODO: OPTION_VALUE_FLAME=Flame - -;TODO: JUKEBOX_SONGOPTIONS_VIDEO=Video Options -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_ASPECT=Aspect -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_WIDTH=Width -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Height -;TODO: JUKEBOX_SONGOPTIONS_LYRIC=Lyric Options -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue - -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop -;TODO: JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=LetterBox - -;TODO: JUKEBOX_SONGOPTIONS_SAVE=Save -;TODO: JUKEBOX_SONGOPTIONS_CLOSE=Close -;TODO: JUKEBOX_SONGOPTIONS_DEFAULT=Default -;TODO: JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Saved! - -;TODO: SING_SONG_CREDITS=Credits -;TODO: SING_JUKEBOX=Jukebox -;TODO: SING_JUKEBOX_DESC=Listen to my collection -;TODO: JUKEBOX_MODE=Jukebox Mode -;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist -;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode - -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing -;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All -;TODO: OPTION_VALUE_PLAYER=Player - -;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty -;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty -;TODO: ABOUT_MAIN_WHEREAMI=About... -;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +WEBSITE_NOT_EXIST_SONG=La canción no pertenece a ningún sitio + +NAME_PLAYERS_COUNT=Número de jugadores +NAME_CURRENT_PLAYER=Jugador + +OPTION_VALUE_TO_SING=Canta +OPTION_VALUE_ACTUAL=Superior +OPTION_VALUE_NEXT=Inferior +OPTION_VALUE_OTHER=Otro +OPTION_VALUE_FILL=Relleno +OPTION_VALUE_OUTLINE=Borde +OPTION_VALUE_GRAY=Gris +OPTION_VALUE_WHITE=Blanco +OPTION_VALUE_TURQUOISE=Turquesa +OPTION_VALUE_SALMON=Salmón +OPTION_VALUE_GREENYELLOW=Lima +OPTION_VALUE_LAVENDER=Lavanda +OPTION_VALUE_BEIGE=Beis +OPTION_VALUE_TEAL=Verde azulado +OPTION_VALUE_ORCHID=Orquídea +OPTION_VALUE_STEELBLUE=Azul Metálico +OPTION_VALUE_PLUM=Ciruela +OPTION_VALUE_CHOCOLATE=Chocolate +OPTION_VALUE_GOLD=Oro +OPTION_VALUE_DARKBLUE=Azul Marino +OPTION_VALUE_SKY=Cielo +OPTION_VALUE_HARLEQUIN=Arlequín +OPTION_VALUE_CYAN=Cian +OPTION_VALUE_FLAME=LLama + +JUKEBOX_SONGOPTIONS_VIDEO=Opciones de vídeo +JUKEBOX_SONGOPTIONS_VIDEO_ASPECT=Aspecto +JUKEBOX_SONGOPTIONS_VIDEO_WIDTH=Ancho +JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT=Alto +JUKEBOX_SONGOPTIONS_LYRIC=Opciones de letra +JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Tamaño +JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Posición +JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Transparencia +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_LINE=Línea +JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Personalizado +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Rojo +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Verde +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Azul + +JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Estirar +JUKEBOX_SONGOPTIONS_VIDEO_CROP=Recortar +JUKEBOX_SONGOPTIONS_VIDEO_LETTERBOX=4:3 + +JUKEBOX_SONGOPTIONS_SAVE=Salvar +JUKEBOX_SONGOPTIONS_CLOSE=Cerrar +JUKEBOX_SONGOPTIONS_DEFAULT=Reiniciar valores +JUKEBOX_SONGOPTIONS_OPTIONSSAVED=Cambios guardados + +SING_SONG_CREDITS=Créditos +SING_JUKEBOX=Reproductor de música +SING_JUKEBOX_DESC=Escuchar mis canciones +JUKEBOX_MODE=Modo reproductor +JUKEBOX_OPTIONS_DESC=Opciones de la lista de música +JUKEBOX_OPTIONS_WHEREAMI=Opciones del reproductor +JUKEBOX_OPTIONS_PLAYLIST=Lista de música +JUKEBOX_OPTIONS_PLAYLIST_MODE=Modo + +SING_OPTIONS_ADVANCED_SINGSCORES=Marcador al cantar +SING_OPTIONS_ADVANCED_TOPSCORES=Mostrar calificaciones +OPTION_VALUE_ALL=Todos los jugadores +OPTION_VALUE_PLAYER=Jugador actual +SING_ABOUT=Acerca de +SING_ABOUT_DESC=Acerca de Ultrastar Deluxe WorldParty +ABOUT_MAIN=Acerca de... +ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +ABOUT_MAIN_WHEREAMI=Acerca de... +ABOUT_USDX_CREDITS=Créditos originales +ABOUT_USDX_DEVELOPEDBY=Desarrollado por +ABOUT_OVERVIEW=Descubre una nueva manera de cantar, solo, en pareja o con amigos. \nLa diversión estará asegurada.\n\nWorldParty es una modificación de la versión original Ultrastar Deluxe 1.1 diseñado y desarrollado por el equipo de UltraStar España, cuenta con el apoyo de la comunidad más grande del mundo de karaoke. \n\n\nEste programa es gratuito y libre bajo licencia GPL. \n\nVisitad nuestra web para más información.\n\nhttp://ultrastar-es.org + +DEVELOPERS_TITLE=Desarrollado por +DEVELOPERS_OVERVIEW=Gente que ha contribuido en este proyecto:\n\n\nZup3r_vock\n\nDaniel20\n\n\n\n Visítanos para más información.\n\nhttp://ultrastar-es.org diff --git a/game/languages/Swedish.ini b/game/languages/Swedish.ini index 93a892a5..7fbf3208 100644 --- a/game/languages/Swedish.ini +++ b/game/languages/Swedish.ini @@ -9,6 +9,7 @@ OPTION_VALUE_ENGLISH=Engelska OPTION_VALUE_EUSKARA=Euskara OPTION_VALUE_FINNISH=Finska OPTION_VALUE_FRENCH=Franska +;TODO: OPTION_VALUE_GAELIC=Scottish Gaelic ;TODO: OPTION_VALUE_GALICIAN=Galician OPTION_VALUE_GERMAN=Tyska OPTION_VALUE_GREEK=Grekiska @@ -20,6 +21,7 @@ OPTION_VALUE_LUXEMBOURGISH=Luxemburgska OPTION_VALUE_NORWEGIAN=Norska OPTION_VALUE_POLISH=Polska OPTION_VALUE_PORTUGUESE=Portuguesiska +;TODO: OPTION_VALUE_ROMANIAN=Romanian OPTION_VALUE_RUSSIAN=Ryska OPTION_VALUE_SERBIAN=Serbiska OPTION_VALUE_SLOVAK=Slovakiska @@ -44,9 +46,12 @@ OPTION_VALUE_TITLE2=Titel2 OPTION_VALUE_ARTIST2=Artist2 ;TODO: OPTION_VALUE_YEAR=Year ;TODO: OPTION_VALUE_DECADE=Decade -;TODO: OPTION_VALUE_PLAYLIST=Playlist +OPTION_VALUE_PLAYLIST=Spellista + +;TODO: OPTION_VALUE_BORDERLESS=Borderless OPTION_VALUE_WHENNOVIDEO=När video saknas +;TODO: OPTION_VALUE_WHENNOVIDEOANDIMAGE=When No Video and Image OPTION_VALUE_SMALL=Liten OPTION_VALUE_BIG=Stor @@ -55,6 +60,10 @@ OPTION_VALUE_HALF=Halv OPTION_VALUE_FULL_VID=Hel (Video) OPTION_VALUE_FULL_VID_BG=Hel (BG & Video) +;TODO: OPTION_VALUE_GAIN_SOFT=Soft +;TODO: OPTION_VALUE_GAIN_MEDIUM=Medium +;TODO: OPTION_VALUE_GAIN_HARD=Hard + OPTION_VALUE_AUTO=Auto OPTION_VALUE_SEC=Sekund OPTION_VALUE_SECS=Sekunder @@ -87,6 +96,8 @@ OPTION_VALUE_SING=Sjung OPTION_VALUE_SELECT_PLAYERS=Välj spelare OPTION_VALUE_OPEN_MENU=Öppna meny +;TODO: OPTION_VALUE_SYSTEM_CURSOR=On [System Cursor] +;TODO: OPTION_VALUE_GAME_CURSOR=On [Game Cursor] OPTION_VALUE_HARDWARE_CURSOR=Systempekare OPTION_VALUE_SOFTWARE_CURSOR=Programpekare @@ -120,6 +131,7 @@ SING_OPTIONS_WHEREAMI=Inställningar SING_OPTIONS_GAME=Spel SING_OPTIONS_GRAPHICS=Grafik SING_OPTIONS_SOUND=Ljud +;TODO: SING_OPTIONS_INPUT=Input SING_OPTIONS_LYRICS=Text SING_OPTIONS_THEMES=Teman SING_OPTIONS_RECORD=Inspelning @@ -154,9 +166,15 @@ SING_OPTIONS_SOUND_CLICK_ASSIST=Hjälpljud SING_OPTIONS_SOUND_BEAT_CLICK=Taktljud SING_OPTIONS_SOUND_THRESHOLD=Ljudtröskel SING_OPTIONS_SOUND_TWO_PLAYERS_MODE=Tvåspelarläge +;TODO: SING_OPTIONS_SOUND_MUSICAUTOGAIN=Music Gain SING_OPTIONS_SOUND_PREVIEWVOLUME=Volym i låtvalsmenyn SING_OPTIONS_SOUND_PREVIEWFADING=Toning i låtvalsmenyn +;TODO: SING_OPTIONS_INPUT_WHEREAMI=Options Input +;TODO: SING_OPTIONS_INPUT_DESC=Input settings +;TODO: SING_OPTIONS_INPUT_MOUSE=Mouse +;TODO: SING_OPTIONS_INPUT_JOYPAD_SUPPORT=Controller support + SING_OPTIONS_LYRICS_WHEREAMI=Inställningar Text SING_OPTIONS_LYRICS_DESC=Sångtextinställningar SING_OPTIONS_LYRICS_FONT=Typsnitt @@ -183,6 +201,7 @@ SING_OPTIONS_ADVANCED_SCREENFADE=Skärmtoning SING_OPTIONS_ADVANCED_LOADANIMATION=Inläsningsanimation SING_OPTIONS_ADVANCED_ASKBEFOREDEL=Säkerhetsfråga SING_OPTIONS_ADVANCED_LINEBONUS=Radbonus +;SING_OPTIONS_ADVANCED_COUNT_HOW_OFTEN_SUNG= SING_OPTIONS_ADVANCED_ONSONGCLICK=Vid låtval SING_OPTIONS_ADVANCED_PARTYPOPUP=Automatisk Partymeny @@ -223,7 +242,7 @@ SING_SONG_SELECTION_PLAYLIST=Spellista SING_SONGS_IN_CAT=Låtar PLAYLIST_CATTEXT=Spellista: %s -SING_TIME=TID +;TODO: SING_TIME=TIME SING_TOTAL=Totalt SING_MODE=Sjung solo SING_NOTES=Noter @@ -327,10 +346,10 @@ PARTY_PLAYER_WHEREAMI=Partynamn PARTY_PLAYER_ENTER_NAME=skriv namn -;TODO: PARTY_ROUNDS_DESC=select which modes you want to play +;TODO: PARTY_ROUNDS_DESC=Select which modes you want to play ;TODO: PARTY_ROUNDS_WHEREAMI=Party Rounds PARTY_ROUNDS_LEGEND_CONTINUE=starta partyspel -;TODO: PARTY_ROUNDCOUNT=number of rounds +;TODO: PARTY_ROUNDCOUNT=Number of rounds ;TODO: PARTY_SELECTMODE=Round %d PARTY_ROUND_DESC=nästa spelare till mikrofonerna @@ -359,34 +378,61 @@ PARTY_SCORE_WINS=%s PARTY_SCORE_WINS2=vann! ;TODO: MODE_RANDOM_NAME=Random Mode -;TODO: MODE_RANDOM_DESC=One mode will be choosen randomly +;TODO: MODE_RANDOM_DESC=Keep yourself on your toes! The game will select a mode for you at random! MODE_HOLDTHELINE_NAME=Håll god ton -MODE_HOLDTHELINE_DESC=Bli inte sämre än vad markeringen på omdömesmätaren visar. +;TODO: MODE_HOLDTHELINE_DESC=Keep your rating above the line for the longest! + +;TODO: MODE_HOLDTHELINEBLIND_NAME=Hold the Blind +;TODO: MODE_HOLDTHELINEBLIND_DESC=Keep your rating above the line for the longest, but with the notes hidden! + +;TODO: MODE_7000POINTS_NAME=Until 7000 +;TODO: MODE_7000POINTS_DESC=Race to 7000 Points! + +;TODO: MODE_7000POINTSBLIND_NAME=Blind 7000 +;TODO: MODE_7000POINTSBLIND_DESC=Race to 7000 points, but without seeing the notes! MODE_5000POINTS_NAME=Till 5000 -MODE_5000POINTS_DESC=Den som först får 5000 poäng vinner matchen. +;TODO: MODE_5000POINTS_DESC=Race to 5000 Points! + +;TODO: MODE_5000POINTSBLIND_NAME=Blind 5000 +;TODO: MODE_5000POINTSBLIND_DESC=Race to 5000 points, but without seeing the notes! + +;TODO: MODE_2000POINTS_NAME=Until 2000 +;TODO: MODE_2000POINTS_DESC=Race to 2000 Points! + +;TODO: MODE_2000POINTSBLIND_NAME=Blind 2000 +;TODO: MODE_2000POINTSBLIND_DESC=Race to 2000 points, but without seeing the notes! MODE_DUEL_NAME=Duell -MODE_DUEL_DESC=Sjung en duett till 10000 poäng. +;TODO: MODE_DUEL_DESC=A 1v1 duel to get the highest score! -MODE_TEAMDUEL_NAME=Lagduell -MODE_TEAMDUEL_DESC=Skicka micken! +;TODO: MODE_TEAMDUEL_NAME=Team Duel +;TODO: MODE_TEAMDUEL_DESC=Pass The Mic! Work together to get a higher score than the other team! MODE_BLIND_NAME=Blindläge -MODE_BLIND_DESC=Duell utan att se tonerna. +;TODO: MODE_BLIND_DESC=A 1v1 duel, but with the notes hidden! + +;TODO: MODE_BLINDTOTAL_NAME=Total Darkness! +;TODO: MODE_BLINDTOTAL_DESC=A duel, but with the notes and the lyrics hidden. Only for the brave! ;TODO: MODE_1000BLIND_NAME = +1000 Blind -;TODO: MODE_1000BLIND_DESC = More than 1000 points ahead blind player. +;TODO: MODE_1000BLIND_DESC = Gain a lead of more than 1000 points, but without seeing the notes! + +;TODO: MODE_DEAF_NAME = Deaf +;TODO: MODE_DEAF_DESC = Think you know the notes? Can you sing it without the acompaniment? + +;TODO: MODE_BLINDLYRICS_NAME = No Lyrics +;TODO: MODE_BLINDLYRICS_DESC = Think you know all the lyrics? Sing with the lyrics hidden! ;TODO: MODE_500BLIND_NAME = +500 Blind -;TODO: MODE_500BLIND_DESC = More than 500 points ahead blind player. +;TODO: MODE_500BLIND_DESC = Gain a lead of more than 500 points, but without seeing the notes! ;TODO: MODE_SHORTSONG_NAME = Short Song -;TODO: MODE_SHORTSONG_DESC = Duel in only half of the song... +;TODO: MODE_SHORTSONG_DESC = A fast-paced 1v1 duel over half the song! ;TODO: MODE_HARDCORE_NAME=Hardcore -;TODO: MODE_HARDCORE_DESC=Win who get 3 lines of advantage... +;TODO: MODE_HARDCORE_DESC=Battle for a three-line lead on your opponent! STAT_MAIN=Statistik STAT_MAIN_DESC=Allmänn @@ -426,7 +472,7 @@ STAT_FORMAT_BANDS=%0:s \n %1:dx sjungna ;TODO: SCREENSHOT_FAILED=Couldn''t save screenshot ;TODO: INFO_FILE_SAVED=File saved -;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file +;TODO: ERROR_SAVE_FILE_FAILED=Couldn''t save file ;TODO: ERROR_FILE_NOT_FOUND=File not found ;TODO: ENCODING_ERROR_ASK_FOR_UTF8=Cannot save changes in current encoding. Convert to UTF-8? @@ -440,8 +486,8 @@ MSG_END_PARTY=Vill du verkligen avsluta partyläge? ERROR_NO_SONGS=Inga låtar laddade ERROR_NO_PLUGINS=Inga insticksprogram laddade -;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=no modes available for current player/team setup -;TODO: ERROR_CAN_NOT_START_PARTY=an error occurred starting the party game +;TODO: ERROR_NO_MODES_FOR_CURRENT_SETUP=No modes available for current player/team setup +;TODO: ERROR_CAN_NOT_START_PARTY=An error occurred starting the party game ERROR_CORRUPT_SONG=Låten kunde inte laddas. ERROR_CORRUPT_SONG_FILE_NOT_FOUND=Låten kunde inte laddas: Filen kunde inte hittas ERROR_CORRUPT_SONG_NO_NOTES=Låten kunde inte laddas: Kan inte hitta toner @@ -450,8 +496,6 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: ERROR_NO_EDITOR=This feature is not available on this version. ;TODO: ERROR_PLAYER_DEVICE_ASSIGNMENT=Player %d is assigned to multiple microphones. Please check your record options ;TODO: ERROR_PLAYER_NO_DEVICE_ASSIGNMENT=Player %d is not assigned to a microphone. Please check your record options -;UNUSED: PARTY_ROUNDS=Omgångar - ;TODO: SING_OPTIONS_NETWORK=Internet ;TODO: SING_OPTIONS_NETWORK_WHEREAMI=Internet Options @@ -461,7 +505,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: SING_OPTIONS_NETWORK_USERNAME=Username ;TODO: SING_OPTIONS_NETWORK_PASSWORD=Password ;TODO: SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME=Send Name -;TODO: SING_OPTIONS_NETWORK_AUTO_MODE=Auto +SING_OPTIONS_NETWORK_AUTO_MODE=Auto ;TODO: SING_OPTIONS_NETWORK_AUTO_PLAYER=Player ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_EASY=Auto-Send (Easy) ;TODO: SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM=Auto-Send (Medium) @@ -477,15 +521,15 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: OPTION_PLAYER_4=Player 4 ;TODO: OPTION_PLAYER_5=Player 5 ;TODO: OPTION_PLAYER_6=Player 6 -;TODO: OPTION_ALL_PLAYERS=All -;TODO: OPTION_ALL_SCORES=All +OPTION_ALL_PLAYERS=Alla +OPTION_ALL_SCORES=Alla ;TODO: OPTION_VALUE_SAVE=Save ;TODO: OPTION_VALUE_SEND=Send ;TODO: MSG_INSERT_USER_TITLE=%0:s ;TODO: MSG_INSERT_USER_DESC=Fill the fields: ;TODO: MSG_INSERT_USER_ADD=Add -;TODO: MSG_INSERT_USER_CANCEL=Cancel +MSG_INSERT_USER_CANCEL=Ångra ;TODO: WEBSITE_NO_CONNECTION=No website connection! ;TODO: WEBSITE_LOGIN_ERROR=Login Incorrect! @@ -523,7 +567,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: SCORE_DOWNLOAD_SONG=Song: ;TODO: SCORE_DOWNLOAD_CREATE_LIST=Preparing List... ;TODO: SCORE_DOWNLOAD_RECEIVE_LIST=Downloading... -;TODO: SCORE_DOWNLOAD_CANCEL=Cancel +SCORE_DOWNLOAD_CANCEL=Ångra ;TODO: SCORE_DOWNLOAD_OK=OK ;TODO: SCORE_DOWNLOAD_SONG_UPDATE=%0:d song(s) change(s) by web! @@ -545,11 +589,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL=Semifinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL=Quarterfinals ;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL=Round of 16 -;TODO: PARTY_MODE_TOURNAMENT_ROUNDS_DESC=Next players to the mics +PARTY_MODE_TOURNAMENT_ROUNDS_DESC=nästa spelare till mikrofonerna ;TODO: PARTY_MODE_TOURNAMENT_WIN_DESC=Round result ;TODO: PARTY_MODE_TOURNAMENT_CHAMPION=The champion is: %0:s! - ;TODO: EDIT_TITLE=Title: ;TODO: EDIT_ARTIST=Artist: ;TODO: EDIT_MP3=MP3: @@ -586,7 +629,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: MSG_END_JUKEBOX=Do you want leave Jukebox Mode? ;TODO: JUKEBOX_RANDOM=Random ;TODO: JUKEBOX_REPEAT=Repeat -;TODO: JUKEBOX_FIND=Find +;TODO: JUKEBOX_FIND=Find: ;TODO: JUKEBOX_SORT=Sort: ;TODO: JUKEBOX_SONGLIST=List of Songs @@ -597,17 +640,17 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: SONG_MENU_SORTING=Sort ;TODO: SONG_MENU_EXTRA=Extra -;TODO: SONG_MENU_NAME_SONG=Song Menu +SONG_MENU_NAME_SONG=Låtmeny ;TODO: SONG_MENU_NAME_MEDLEY=Medley Menu -;TODO: SONG_MENU_ADD_SONG=Add Song -;TODO: SONG_MENU_DELETE_SONG=Delete Song +SONG_MENU_ADD_SONG=Lägg till låt +SONG_MENU_DELETE_SONG=Ta bort låt ;TODO: SONG_MENU_START_MEDLEY=Sing! ;TODO: SONG_MENU_START_5_MEDLEY=Sing %0:d Songs! ;TODO: SONG_MENU_NAME_SORTING=Sort Menu ;TODO: SONG_MENU_SORTING_TABS_ON=Tabs On ;TODO: SONG_MENU_SORTING_TABS_OFF=Tabs Off -;TODO: SONG_MENU_SORTING_ALL=All +SONG_MENU_SORTING_ALL=Alla ;TODO: SONG_MENU_SORTING_DUET=Duets ;TODO: SONG_MENU_SORTING_APPLY=Apply @@ -615,11 +658,11 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: SING_OPTIONS_WEBCAM_DESC=Webcam Settings ;TODO: SING_OPTIONS_WEBCAM_WHEREAMI=Webcam Options ;TODO: SING_OPTIONS_WEBCAM_ID=Webcam -;TODO: SING_OPTIONS_WEBCAM_RESOLUTION=Resolution +SING_OPTIONS_WEBCAM_RESOLUTION=Upplösning ;TODO: SING_OPTIONS_WEBCAM_FPS=FPS ;TODO: SING_OPTIONS_WEBCAM_NO_WEBCAM=No Webcam Found! ;TODO: SING_OPTIONS_WEBCAM_FLIP=Flip -;TODO: SING_OPTIONS_WEBCAM_EFFECT=Effect +SING_OPTIONS_WEBCAM_EFFECT=Effekt ;TODO: SING_OPTIONS_WEBCAM_BRIGHTNESS=Brightness ;TODO: SING_OPTIONS_WEBCAM_SATURATION=Saturation ;TODO: SING_OPTIONS_WEBCAM_HUE=Hue @@ -632,7 +675,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: SING_OPTIONS_WEBCAM_EFFECT_NEGATIVE=Negative ;TODO: SING_OPTIONS_WEBCAM_EFFECT_BINARY_IMAGE=Binary Image ;TODO: SING_OPTIONS_WEBCAM_EFFECT_DILATE=Dilate -;TODO: SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Threshold +SING_OPTIONS_WEBCAM_EFFECT_THRESHOLD=Ljudtröskel ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EDGES=Edges ;TODO: SING_OPTIONS_WEBCAM_EFFECT_GAUSSIAN_BLUR=Gaussian Blur ;TODO: SING_OPTIONS_WEBCAM_EFFECT_EQUALIZED=Equalized @@ -651,7 +694,7 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: NAME_PLAYERS_COUNT=Number of Players ;TODO: NAME_CURRENT_PLAYER=Player -;TODO: SING_OPTIONS_GAME_SONGMENU=Song Menu +SING_OPTIONS_GAME_SONGMENU=Låtmeny ;TODO: OPTION_VALUE_ROULETTE=Roulette ;TODO: OPTION_VALUE_CHESSBOARD=Chessboard ;TODO: OPTION_VALUE_CAROUSEL=Carousel @@ -660,10 +703,10 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: OPTION_VALUE_MOSAIC=Tile ;TODO: SING_OPTIONS_JUKEBOX=Jukebox -;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox +;TODO: SING_OPTIONS_JUKEBOX_DESC=Default Configurations of Jukebox ;TODO: SING_OPTIONS_JUKEBOX_WHEREAMI=Jukebox Options -;TODO: OPTION_VALUE_TO_SING=Sing +OPTION_VALUE_TO_SING=Sjung ;TODO: OPTION_VALUE_ACTUAL=Actual ;TODO: OPTION_VALUE_NEXT=Next ;TODO: OPTION_VALUE_OTHER=Other @@ -696,12 +739,12 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_SIZE=Size ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_POSITION=Position ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_ALPHA=Alpha -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Color +JUKEBOX_SONGOPTIONS_LYRIC_COLOR=Färg ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_LINE=Line ;TODO: JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY=Property -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Red -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Green -;TODO: JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blue +JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED=Röd +JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN=Grön +JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE=Blå ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_STRETCH=Stretch ;TODO: JUKEBOX_SONGOPTIONS_VIDEO_CROP=Crop @@ -717,19 +760,19 @@ ERROR_CORRUPT_SONG_UNKNOWN_IN_LINE=Låten kunde inte laddas: Fel på rad %0:d ;TODO: SING_JUKEBOX_DESC=Listen to my collection ;TODO: JUKEBOX_MODE=Jukebox Mode ;TODO: JUKEBOX_OPTIONS_DESC=Playlist Options -;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options -;TODO: JUKEBOX_OPTIONS_PLAYLIST=Playlist +;TODO: JUKEBOX_OPTIONS_WHEREAMI=Jukebox Options +JUKEBOX_OPTIONS_PLAYLIST=Spellista ;TODO: JUKEBOX_OPTIONS_PLAYLIST_MODE=Mode -;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing +;TODO: SING_OPTIONS_ADVANCED_SINGSCORES=Scores on Singing ;TODO: SING_OPTIONS_ADVANCED_TOPSCORES=Top Scores -;TODO: OPTION_VALUE_ALL=All +OPTION_VALUE_ALL=Alla ;TODO: OPTION_VALUE_PLAYER=Player ;TODO: SING_ABOUT=About -;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe WorldParty +;TODO: SING_ABOUT_DESC=About Ultrastar Deluxe ;TODO: ABOUT_MAIN=About... -;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe WorldParty +;TODO: ABOUT_MAIN_DESC=Ultrastar Deluxe ;TODO: ABOUT_MAIN_WHEREAMI=About... ;TODO: ABOUT_USDX_CREDITS=Credits -;TODO: ABOUT_OVERVIEW=WorldParty is a MOD of the original version Ultrastar Deluxe 1.1 designed and developed by UltraStar España Team.\n\nWhat's new in this version:\n\n - Themes/skins \n - Menu songs \n - Avatars \n - Jukebox Options \n - and many other things and fixs... \n\nSpecial thanks:\n\nzup3r_vock, daniel20, jaher06 and the whole team of the Ultrastar España for all your effort and dedication in this project. \n\nThis program is free and free under the GPL license. \n\n http://ultrastar-es.org +;TODO: ABOUT_OVERVIEW=UltraStar Deluxe is a free OpenSource karaoke game for your PC. The gameplay experience is similar to that of the commercial product SingStar™ by Sony Computer Entertainment, which is exclusively available for the Playstation®. Unlike SingStar™, however, UltraStar Deluxe allows users to create their own songs and sing them on their PC.\nBy publishing the sourcecode, we’ve enabled you to customize the game completly to your heart’s content, desires and particular needs.\nEspecially you are allowed to modify the product as you wish.\n\nCreate your own themes or download content from the community, such as plugins, free songs or code patches for extended features.\nIn party mode it allows up to twelve players to sing along to your favorite music in order to score points, depending on the pitch of the voice and the rhythm of singing. diff --git a/game/languages/convert.sh b/game/languages/convert.sh index 328efcda..c39909c6 100644 --- a/game/languages/convert.sh +++ b/game/languages/convert.sh @@ -1,43 +1,71 @@ #!/bin/bash # See: http://www.microsoft.com/resources/msdn/goglobal/default.mspx?OS=Windows%20Vista +declare -a forceLang=() +declare -a forceCP=() + function convertUTF8 { - if [ ! -f $2.ini ]; then - echo "skip $2.ini: does not exist" + local fromcp; + local fromcptext; + if [ ! -f "$1" ]; then + echo "skip $1: does not exist" return fi + + fromcp=`getCP "$1"` + if [ -n "$fromcp" ]; then + fromcptext=" from $fromcp"; + fromcp=" -f $fromcp" + fi # UTF-8 BOM (0xEF 0xBB 0xBF) BOM=`echo -n -e "\0357\0273\0277"` - HEADER=`head -c3 $2.ini` + HEADER=`head -c3 "$1"` if [ $HEADER != $BOM ]; then - echo "Convert $2.ini from $1 to UTF8" - echo -n $BOM >$2.tmp - iconv -f $1 -t UTF-8 $2.ini >>$2.tmp - mv $2.tmp $2.ini + echo -n "Convert $1$fromcptext to UTF8" + echo -n $BOM >"$1.tmp" + ERROR=$(iconv $fromcp -t UTF-8 "$1" 2>&1 >> "$1.tmp" ) + + if [ -z "$ERROR" ]; then + mv "$1.tmp" "$1" + echo "... done." + else + # file wasn't converted propertly + rm -f "$1.tmp" + echo ". Error, unable to convert. Check $1.log" + echo $ERROR>"$1.log" + fi else - echo "skip $2.ini: already UTF8" + echo "skip $1: already UTF8" fi } -#convertUTF8 UTF8 Catalan -convertUTF8 CP1252 French -convertUTF8 CP1252 Italian -convertUTF8 CP1252 Spanish -convertUTF8 CP1250 Croatian -convertUTF8 CP1252 Euskara -convertUTF8 CP1252 German -#convertUTF8 UCS-2LE Japanese -convertUTF8 CP1252 Swedish -convertUTF8 CP1252 Dutch -convertUTF8 CP1252 Finnish -convertUTF8 CP1253 Greek -convertUTF8 CP1252 Portuguese +function Force() { + forceLang+=($1.ini) + forceCP+=($2) +} + +function getCP () { + local e + local found + local value=$1 + + i=0 + for e in "${forceLang[@]}" + do + if [ "$e" == "$value" ] ; then + echo ${forceCP[$i]} + return 1 + fi + let i=i+1 + done + + return 0 +} + +# Enable forcing a specific codepage to convert from +# add likes like the following to do so +#Force "Spanish" "CP1252" -convertUTF8 CP1252 Danish -convertUTF8 CP1252 Norwegian -#convertUTF8 CP1251 Serbian -convertUTF8 CP1250 Serbian -convertUTF8 CP1250 Slovenian -convertUTF8 CP1250 Polish -convertUTF8 CP1250 Slovak +for f in *.ini; do convertUTF8 "$f"; done +convertUTF8 Language.new diff --git a/game/languages/update.py b/game/languages/update.py index 7447b19e..a3f07e1f 100644 --- a/game/languages/update.py +++ b/game/languages/update.py @@ -21,40 +21,59 @@ # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. +from __future__ import with_statement, print_function + import re import sys import os import codecs +def xopen(file, mode, encoding): + if sys.version_info[0] > 2: + return open(file=file, mode=mode, encoding=encoding) + else: + return open(name=file, mode=mode) + +def xwriteline(file, content): + if sys.version_info[0] > 2: + # line endings should be handled by the file writer in newer python version + file.write(content + u"\n") + else: + # binary mode does not convert "\n" to the os specific line-ending. + # Use os.linesep instead. + file.write(content + os.linesep) + +def xutf8header(): + if sys.version_info[0] > 2: + return u'\ufeff'; + else: + return codecs.BOM_UTF8; + + # buffer english file (always open binary, handle newline uniformly as "\n") -f = open("English.ini", "rbU") english = [] -for line in f: - english.append(line.rstrip("\n")) -f.close +with xopen("English.ini", "rU", encoding="utf8") as f: + for line in f: + english.append(line.strip()) transPattern = re.compile("\s*(\w+)\s*=(.+)$") + def update(lang): - print "\nUpdate " + lang + print("\nUpdate " + lang) # buffer translation file (always open binary, handle newline uniformly) - f = open(lang, "rbU") translation = [] - for line in f: - translation.append(line.rstrip("\n")) - f.close - # WORKAROUND: On windows the file does not seem to be closed by f.close - # as long as it is still referenced. Hence os.rename(lang, oldLang) will - # fail later as the file is still opened for reading. - f = None; + with xopen(lang, "rU", encoding="utf8") as f: + for line in f: + translation.append(line.strip()) outList = [] # find new fields for line in english: # header if re.search("\[Text\]", line, re.I): - outList.append(codecs.BOM_UTF8 + "[Text]") + outList.append(xutf8header() + "[Text]") continue # ignore comments elif re.match("\s*[;#]", line): @@ -65,7 +84,7 @@ def update(lang): continue m = transPattern.match(line) if (not m): - print "Invalid line: " + line + print("Invalid line: " + line) sys.exit(1) untranslated = True for transline in translation: @@ -75,7 +94,7 @@ def update(lang): untranslated = False break if (untranslated): - print (" +" + m.group(1)) + print(" +" + m.group(1)) outList.append(";TODO: " + line) # find unsupported (not in English.ini) translations @@ -95,7 +114,7 @@ def update(lang): continue m = transPattern.match(line) if (not m): - print (" -" + line) + print(" -" + line) outList.append(";INVALID: " + line) continue # check if field is in English.ini @@ -108,7 +127,7 @@ def update(lang): break # unsupported translation if (unsupported): - print (" -" + m.group(1)) + print(" -" + m.group(1)) outList.append(";UNUSED: " + m.group(1) + "=" + m.group(2)) # check if file changed @@ -130,12 +149,9 @@ def update(lang): os.remove(oldLang) os.rename(lang, oldLang) - f = open(lang, 'wb') - for line in outList: - # binary mode does not convert "\n" to the os specific line-ending. - # Use os.linesep instead. - f.write(line + os.linesep) - f.close() + with xopen(lang, 'w', encoding='utf-8') as f: + for line in outList: + xwriteline(f, line) if len(sys.argv) >= 2: # update specific language file passed as command-line argument diff --git a/game/LICENSE.FLAC.txt b/game/licenses/LICENSE.FLAC.txt similarity index 100% rename from game/LICENSE.FLAC.txt rename to game/licenses/LICENSE.FLAC.txt diff --git a/game/license.txt b/game/licenses/LICENSE.Ultrastar-Deluxe-WorldParty.txt similarity index 99% rename from game/license.txt rename to game/licenses/LICENSE.Ultrastar-Deluxe-WorldParty.txt index 2f4b8c0b..9392e239 100644 --- a/game/license.txt +++ b/game/licenses/LICENSE.Ultrastar-Deluxe-WorldParty.txt @@ -1,3 +1,7 @@ +Ultrastar Deluxe WorldParty +Official Website: http://ultrastar-es.org +-------------------------------------------- + GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 diff --git a/game/LICENSE.jpeg.txt b/game/licenses/LICENSE.jpeg.txt similarity index 100% rename from game/LICENSE.jpeg.txt rename to game/licenses/LICENSE.jpeg.txt diff --git a/game/LICENSE.modplug.txt b/game/licenses/LICENSE.modplug.txt similarity index 100% rename from game/LICENSE.modplug.txt rename to game/licenses/LICENSE.modplug.txt diff --git a/game/LICENSE.ogg-vorbis.txt b/game/licenses/LICENSE.ogg-vorbis.txt similarity index 100% rename from game/LICENSE.ogg-vorbis.txt rename to game/licenses/LICENSE.ogg-vorbis.txt diff --git a/game/LICENSE.png.txt b/game/licenses/LICENSE.png.txt similarity index 100% rename from game/LICENSE.png.txt rename to game/licenses/LICENSE.png.txt diff --git a/game/licenses/LICENSE.sdl2.txt b/game/licenses/LICENSE.sdl2.txt new file mode 100644 index 00000000..14e2f777 --- /dev/null +++ b/game/licenses/LICENSE.sdl2.txt @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/game/LICENSE.smpeg.txt b/game/licenses/LICENSE.smpeg.txt similarity index 100% rename from game/LICENSE.smpeg.txt rename to game/licenses/LICENSE.smpeg.txt diff --git a/game/LICENSE.tiff.txt b/game/licenses/LICENSE.tiff.txt similarity index 100% rename from game/LICENSE.tiff.txt rename to game/licenses/LICENSE.tiff.txt diff --git a/game/LICENSE.webp.txt b/game/licenses/LICENSE.webp.txt similarity index 100% rename from game/LICENSE.webp.txt rename to game/licenses/LICENSE.webp.txt diff --git a/game/LICENSE.zlib.txt b/game/licenses/LICENSE.zlib.txt similarity index 100% rename from game/LICENSE.zlib.txt rename to game/licenses/LICENSE.zlib.txt diff --git a/game/postproc-53.dll b/game/postproc-53.dll deleted file mode 100644 index 2402049c..00000000 Binary files a/game/postproc-53.dll and /dev/null differ diff --git a/game/postproc-54.dll b/game/postproc-54.dll new file mode 100644 index 00000000..59318e24 Binary files /dev/null and b/game/postproc-54.dll differ diff --git a/res/ultrastardx.res b/game/resources/icons/WorldParty.ico similarity index 96% rename from res/ultrastardx.res rename to game/resources/icons/WorldParty.ico index a5e02760..8e5fa3a1 100644 Binary files a/res/ultrastardx.res and b/game/resources/icons/WorldParty.ico differ diff --git a/game/resources/icons/WorldParty.png b/game/resources/icons/WorldParty.png new file mode 100644 index 00000000..d2611f30 Binary files /dev/null and b/game/resources/icons/WorldParty.png differ diff --git a/game/resources/icons/_ultrastardx-icon.png b/game/resources/icons/_ultrastardx-icon.png deleted file mode 100644 index 1b13a6ee..00000000 Binary files a/game/resources/icons/_ultrastardx-icon.png and /dev/null differ diff --git a/game/resources/icons/logotipo.svg b/game/resources/icons/logotipo.svg new file mode 100644 index 00000000..14d2a82d --- /dev/null +++ b/game/resources/icons/logotipo.svg @@ -0,0 +1,36 @@ + + + + +Created by potrace 1.13, written by Peter Selinger 2001-2015 + + + + + diff --git a/game/resources/icons/ultrastardx-icon.png b/game/resources/icons/ultrastardx-icon.png deleted file mode 100644 index 45eaeda3..00000000 Binary files a/game/resources/icons/ultrastardx-icon.png and /dev/null differ diff --git a/game/soundfonts/.include b/game/soundfonts/.include new file mode 100644 index 00000000..e69de29b diff --git a/game/sounds/Applause.mp3 b/game/sounds/Applause.mp3 new file mode 100644 index 00000000..d5eeb881 Binary files /dev/null and b/game/sounds/Applause.mp3 differ diff --git a/game/sounds/Common back.mp3 b/game/sounds/Common back.mp3 new file mode 100644 index 00000000..34354740 Binary files /dev/null and b/game/sounds/Common back.mp3 differ diff --git a/game/sounds/Common start.mp3 b/game/sounds/Common start.mp3 new file mode 100644 index 00000000..34354740 Binary files /dev/null and b/game/sounds/Common start.mp3 differ diff --git a/game/sounds/background track license.txt b/game/sounds/background track license.txt index 2395341c..35083a3f 100644 --- a/game/sounds/background track license.txt +++ b/game/sounds/background track license.txt @@ -1,10 +1,8 @@ This work is licensed under the Creative Commons license by-sa 3.0. (http://creativecommons.org/licenses/by-sa/3.0/) -Author: -DJad (http://www.jamendo.com/de/artist/DJad) +track used: http://www.youtube.com/watch?v=ZYjcfmxKbN4 -Distributed by: -Site: jamendo.com -File: DJad - Walking Alone.mp3 -URL: http://www.jamendo.com/de/track/543970 +From the original one: + +on Jamendo: http://www.jamendo.com/en/track/30058/making-me-nervous diff --git a/game/sounds/background track.mp3 b/game/sounds/background track.mp3 new file mode 100644 index 00000000..2102b8f9 Binary files /dev/null and b/game/sounds/background track.mp3 differ diff --git a/game/sounds/credits-outro-tune.mp3 b/game/sounds/credits-outro-tune.mp3 new file mode 100644 index 00000000..fc23561c Binary files /dev/null and b/game/sounds/credits-outro-tune.mp3 differ diff --git a/game/sounds/dismissed.mp3 b/game/sounds/dismissed.mp3 new file mode 100644 index 00000000..f478e7a3 Binary files /dev/null and b/game/sounds/dismissed.mp3 differ diff --git a/game/sounds/menu swoosh.mp3 b/game/sounds/menu swoosh.mp3 new file mode 100644 index 00000000..1025a86f Binary files /dev/null and b/game/sounds/menu swoosh.mp3 differ diff --git a/game/sounds/option change col.mp3 b/game/sounds/option change col.mp3 new file mode 100644 index 00000000..c2fcb43b Binary files /dev/null and b/game/sounds/option change col.mp3 differ diff --git a/game/sounds/rimshot022b.mp3 b/game/sounds/rimshot022b.mp3 new file mode 100644 index 00000000..9f49bab4 Binary files /dev/null and b/game/sounds/rimshot022b.mp3 differ diff --git a/game/sounds/select music change music 50.mp3 b/game/sounds/select music change music 50.mp3 new file mode 100644 index 00000000..ade19a70 Binary files /dev/null and b/game/sounds/select music change music 50.mp3 differ diff --git a/game/sounds/select music change music.mp3 b/game/sounds/select music change music.mp3 new file mode 100644 index 00000000..86a7218d Binary files /dev/null and b/game/sounds/select music change music.mp3 differ diff --git a/game/sounds/wome-credits-tune.mp3 b/game/sounds/wome-credits-tune.mp3 new file mode 100644 index 00000000..564e8d6f Binary files /dev/null and b/game/sounds/wome-credits-tune.mp3 differ diff --git a/game/swresample-1.dll b/game/swresample-1.dll deleted file mode 100644 index 625876f1..00000000 Binary files a/game/swresample-1.dll and /dev/null differ diff --git a/game/swresample-2.dll b/game/swresample-2.dll new file mode 100644 index 00000000..60fa41e6 Binary files /dev/null and b/game/swresample-2.dll differ diff --git a/game/swscale-3.dll b/game/swscale-3.dll deleted file mode 100644 index 4999ad3c..00000000 Binary files a/game/swscale-3.dll and /dev/null differ diff --git a/game/swscale-4.dll b/game/swscale-4.dll new file mode 100644 index 00000000..9f07e6dc Binary files /dev/null and b/game/swscale-4.dll differ diff --git a/game/themes/Deluxe/[bg-load]basic.jpg b/game/themes/Deluxe/[bg-load]basic.jpg deleted file mode 100644 index b7db834b..00000000 Binary files a/game/themes/Deluxe/[bg-load]basic.jpg and /dev/null differ diff --git a/game/themes/Deluxe/[helper]buttonFade.png b/game/themes/Deluxe/[helper]buttonFade.png deleted file mode 100644 index 27a94c44..00000000 Binary files a/game/themes/Deluxe/[helper]buttonFade.png and /dev/null differ diff --git a/game/themes/Deluxe/[icon]cd.png b/game/themes/Deluxe/[icon]cd.png deleted file mode 100644 index 2633d235..00000000 Binary files a/game/themes/Deluxe/[icon]cd.png and /dev/null differ diff --git a/game/themes/Deluxe/[icon]score.png b/game/themes/Deluxe/[icon]score.png deleted file mode 100644 index ccc3d8ff..00000000 Binary files a/game/themes/Deluxe/[icon]score.png and /dev/null differ diff --git a/game/themes/Deluxe/[icon]song_calcmedley.png b/game/themes/Deluxe/[icon]song_calcmedley.png deleted file mode 100644 index bfe3948a..00000000 Binary files a/game/themes/Deluxe/[icon]song_calcmedley.png and /dev/null differ diff --git a/game/themes/Deluxe/[icon]song_medley.png b/game/themes/Deluxe/[icon]song_medley.png deleted file mode 100644 index 19d4e182..00000000 Binary files a/game/themes/Deluxe/[icon]song_medley.png and /dev/null differ diff --git a/game/themes/Deluxe/[icon]song_video.png b/game/themes/Deluxe/[icon]song_video.png deleted file mode 100644 index 00750b1d..00000000 Binary files a/game/themes/Deluxe/[icon]song_video.png and /dev/null differ diff --git a/game/themes/Deluxe/[interface]selectbg_search.png b/game/themes/Deluxe/[interface]selectbg_search.png deleted file mode 100644 index 57d0ca88..00000000 Binary files a/game/themes/Deluxe/[interface]selectbg_search.png and /dev/null differ diff --git a/game/themes/Deluxe/[jukebox]timeBarBG.png b/game/themes/Deluxe/[jukebox]timeBarBG.png deleted file mode 100644 index fc47fbfd..00000000 Binary files a/game/themes/Deluxe/[jukebox]timeBarBG.png and /dev/null differ diff --git a/game/themes/Deluxe/[menu]songMenuBg.png b/game/themes/Deluxe/[menu]songMenuBg.png deleted file mode 100644 index 92beff8e..00000000 Binary files a/game/themes/Deluxe/[menu]songMenuBg.png and /dev/null differ diff --git a/game/themes/Deluxe/[sing]lineBonusPopUp.png b/game/themes/Deluxe/[sing]lineBonusPopUp.png deleted file mode 100644 index c7bd0a41..00000000 Binary files a/game/themes/Deluxe/[sing]lineBonusPopUp.png and /dev/null differ diff --git a/game/themes/Deluxe/[sing]p.png b/game/themes/Deluxe/[sing]p.png deleted file mode 100644 index 7458d8e5..00000000 Binary files a/game/themes/Deluxe/[sing]p.png and /dev/null differ diff --git a/game/themes/Deluxe/[sing]scoreBg.png b/game/themes/Deluxe/[sing]scoreBg.png deleted file mode 100644 index db6ba67f..00000000 Binary files a/game/themes/Deluxe/[sing]scoreBg.png and /dev/null differ diff --git a/game/themes/Deluxe/[sing]textBar.png b/game/themes/Deluxe/[sing]textBar.png deleted file mode 100644 index d2069235..00000000 Binary files a/game/themes/Deluxe/[sing]textBar.png and /dev/null differ diff --git a/game/themes/Deluxe/[sing]textBarDuet.png b/game/themes/Deluxe/[sing]textBarDuet.png deleted file mode 100644 index 82e0bb3e..00000000 Binary files a/game/themes/Deluxe/[sing]textBarDuet.png and /dev/null differ diff --git a/game/themes/Deluxe/[sing]timeBarBG.png b/game/themes/Deluxe/[sing]timeBarBG.png deleted file mode 100644 index a66ad995..00000000 Binary files a/game/themes/Deluxe/[sing]timeBarBG.png and /dev/null differ diff --git a/game/themes/Deluxe/[special]bar1.png b/game/themes/Deluxe/[special]bar1.png deleted file mode 100644 index 00afb41d..00000000 Binary files a/game/themes/Deluxe/[special]bar1.png and /dev/null differ diff --git a/game/themes/Deluxe/[special]bar2.png b/game/themes/Deluxe/[special]bar2.png deleted file mode 100644 index c828a8e1..00000000 Binary files a/game/themes/Deluxe/[special]bar2.png and /dev/null differ diff --git a/game/themes/Deluxe.ini b/game/themes/Fantasy.ini similarity index 79% rename from game/themes/Deluxe.ini rename to game/themes/Fantasy.ini index f7e8e68d..42f6cb59 100644 --- a/game/themes/Deluxe.ini +++ b/game/themes/Fantasy.ini @@ -1,8 +1,17 @@ + +################################### +# theme developed by Daniel20 # +# for http:\\ultrastar-es.org # +# visit us to get songs, plugins, # +# themes and more... # +# # +################################### + [Theme] -Name = Deluxe -Creator = Ultrastar Deluxe Team +Name = Fantasy +Creator = Daniel20 US_Version = USD 110 -DefaultSkin = Blue +DefaultSkin = Static Violet [Colors] White = 255 255 255 @@ -34,198 +43,68 @@ Red = 255 0 0 [Loading] [LoadingBackground] Tex = LoadingBG -Color = DarkRed -Type = Colorized - -[LoadingStatic1] -X = 0 -Y = 545 -W = 250 -H = 30 -Z = 0.4 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[LoadingStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Z = 0.4 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 [LoadingText1] -X = 30 -Y = 548 +X = 780 +Y = 570 Color = White -Font = 0 -Align = 0 +Font = 1 +Align = 2 Size = 24 Text = SING_LOADING -Reflection = 1 -ReflectionSpacing = 13 - -[LoadingText2] -X = 790 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 2 -Text = US_VERSION -Reflection = 1 +Reflection = 0 ReflectionSpacing = 13 [Main] [MainBackground] Tex = MainBG -[MainStatic1] -X = 65 -Y = 205 -W = 25 -H = 23 -Tex = MainIcon -Color = White -Type = Transparent - [MainText1] -X = 95 -Y = 186 +X = 5 +Y = 15 Color = White Font = 0 -Size = 54 -Align = 0 -Text = SING_MENU - -[MainTextDescriptionLong] -X = 95 -Y = 233 -Color = ColorLightest -Font = 0 -Size = 30 +Size = 15 Align = 0 -Text = - -[MainStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Z = 0.4 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[MainStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Z = 0.4 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[MainStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Z = 0.5 -Tex = ButtonNavi -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Text = Ultrastar Deluxe WorldParty 17.3 [MainText2] -X = 300 -Y = 548 -Z = 0.5 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_LEGEND_NAVIGATE -Reflection = 1 -ReflectionSpacing = 13 - -[MainStatic5] -X = 543 -Y = 545 -W = 32 -H = 30 +X = 5 +Y = 35 Z = 0.5 -Tex = ButtonEnter Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[MainText3] -X = 582 -Y = 548 -Z = 0.5 -Color = Black Font = 0 -Size = 24 +Size = 15 Align = 0 -Text = SING_LEGEND_SELECT -Reflection = 1 +Text = Release Candidate 1 - http://ultrastar-es.org +Reflection = 0 ReflectionSpacing = 13 -[MainStatic6] -X = 400 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonC -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[MainText4] -X = 440 -Y = 548 -Z = 0.952 -Color = Black +[MainTextDescriptionLong] +X = 385 +Y = 550 +Color = White Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_CREDITS -Reflection = 1 -ReflectionSpacing = 13 +Size = 30 +Align = 1 +Text = [MainButtonSolo] -X = 95 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +X = 135 +Y = 125 +W = 110 +H = 130 +Tex = ButtonSolo +Color = White +DColor = White Type = Transparent Texts = 1 Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 +ReflectionSpacing = 0 Fade = 1 FadeText = 1 -SelectH = 150 +SelectH = 115 FadeTex = ButtonFade FadeTexPos = 0 @@ -233,27 +112,26 @@ FadeTexPos = 0 X = 75 Y = 10 Font = 0 -Size = 30 +Size = 0 Align = 1 Text = SING_SING Color = White [MainButtonMulti] -X = 250 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +X = 340 +Y = 125 +W = 110 +H = 130 +Tex = ButtonParty +Color = White +DColor = White Type = Transparent Texts = 1 Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 +ReflectionSpacing = 0 Fade = 1 FadeText = 1 -SelectH = 150 +SelectH = 115 FadeTex = ButtonFade FadeTexPos = 0 @@ -261,7261 +139,7410 @@ FadeTexPos = 0 X = 75 Y = 10 Font = 0 -Size = 30 +Size = 0 Align = 1 Text = SING_MULTI Color = White [MainButtonJukebox] -X = 405 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +X = 515 +Y = 135 +W = 90 +H = 120 +Tex = ButtonJukebox +Color = White +DColor = White Type = Transparent Texts = 1 Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 +ReflectionSpacing = 0 Fade = 1 FadeText = 1 -SelectH = 150 +SelectH = 110 FadeTex = ButtonFade FadeTexPos = 0 [MainButtonJukeboxText1] -X = 75 -Y = 10 +X = 45 +Y = 575 Font = 0 Size = 30 Align = 1 Text = SING_JUKEBOX Color = White -[MainButtonCollection1] -X = 560 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +[MainButtonStats] +X = 170 +Y = 345 +W = 80 +H = 115 +Tex = ButtonStats +Color = White +DColor = White Type = Transparent Texts = 1 Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 +ReflectionSpacing = 0 Fade = 1 -FadeText = 0 -SelectH = 150 +FadeText = 1 +SelectH = 95 FadeTex = ButtonFade FadeTexPos = 0 -FirstChild = 4 - -[MainButtonCollection1Text1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_TOOLS -Color = White - -[MainButtonStats] -X = 565 -Y = 310 -W = 140 -H = 30 -Tex = Button -Color = ColorDark -DColor = ColorLight -Type = Transparent -Texts = 1 -Reflection = 0 -Parent = 1 [MainButtonStatsText1] X = 70 -Y = 5 +Y = 3 Font = 0 -Size = 20 +Size = 0 Align = 1 Text = SING_STATS Color = White -[MainButtonEditor] -X = 565 +[MainButtonOptions] +X = 340 Y = 345 -W = 140 -H = 30 -Tex = Button -Color = ColorDark -DColor = ColorLight +W = 90 +H = 115 +Tex = ButtonOption +Color = White +DColor = White Type = Transparent Texts = 1 -Reflection = 0 -Parent = 1 +Reflection = 1 +ReflectionSpacing = 10 +Fade = 1 +FadeText = 1 +SelectH = 100 +FadeTex = ButtonFade +FadeTexPos = 0 -[MainButtonEditorText1] +[MainButtonOptionsText1] X = 70 -Y = 5 +Y = 3 Font = 0 -Size = 20 +Size = 0 Align = 1 -Text = SING_EDITOR +Text = SING_OPTIONS Color = White -[MainButtonOptions] -X = 565 -Y = 380 -W = 140 -H = 30 -Tex = Button -Color = ColorDark -DColor = ColorLight +[MainButtonExit] +X = 525 +Y = 350 +W = 80 +H = 110 +Tex = ButtonExit +Color = White +DColor = White Type = Transparent Texts = 1 -Reflection = 0 -Parent = 1 +Reflection = 1 +ReflectionSpacing = 0 +Fade = 1 +FadeText = 1 +SelectH = 95 +FadeTex = ButtonFade +FadeTexPos = 0 -[MainButtonOptionsText1] -X = 70 -Y = 5 +[MainButtonExitText1] +X = 75 +Y = 10 Font = 0 -Size = 20 +Size = 0 Align = 1 -Text = SING_OPTIONS +Text = SING_EXIT Color = White [MainButtonAbout] -X = 465 -Y = 490 -W = 120 -H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark +X = 12 +Y = 535 +W = 40 +H = 50 +Tex = ButtonAbout +Color = White +DColor = White Type = Transparent Texts = 1 +Reflection = 0 +ReflectionSpacing = 0 +Fade = 1 +FadeText = 1 +SelectH = 40 +FadeTex = ButtonFade +FadeTexPos = 0 [MainButtonAboutText1] -X = 60 -Y = 8 +X = 30 +Y = 50 Font = 0 -Size = 24 +Size = 0 Align = 1 Text = SING_ABOUT Color = White -[MainButtonExit] -X = 590 -Y = 490 -W = 120 -H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 +[Name] +Texts = 2 -[MainButtonExitText1] -X = 60 -Y = 8 -Font = 0 -Size = 24 -Align = 1 -Text = SING_EXIT -Color = White +[NameBackground] +Tex = MainBG -[Sing] -Texts = 1 +#write your name +[NameStatic1] +X = 30 +Y = 400 +W = 200 +H = 35 +Tex = MainBar +Color = +Type = Transparent -[SingBackground] -Type=color -ColR=1 -ColB=1 -ColG=1 +#choose avatar +[NameStatic2] +X = 30 +Y = 535 +W = 200 +H = 35 +Tex = MainBar +Color = +Type = Transparent -[SingText1] -Text = SING_TIME -X = 43 -Y = 577 -Font = 1 -Size = 18 +[NameText1] +X = 30 +Y = 20 Color = White -Align = 1 +Font = 0 +Size = 45 +Align = 0 +Text = SING_PLAYER_TITLE -[SingStatic1] -;TextBG -Tex = LyricBar -X = 10 -Y = 492 -W = 780 -H = 85 +[NameText2] +X = 50 +Y = 75 Color = White -Type = Transparent +Font = 1 +Size = 26 +Text = SING_PLAYER_READY -[SingStatic2] -;TimeBar -Tex = TimeBar1 -X = 10 -Y = 577 -W = 780 -H = 20 +[NameText3] +X = 50 +Y = 350 Color = White -Type = Transparent +Font = 1 +Size = 26 +Align = 0 +Text = SING_PLAYER_EDIT -[SingTimeProgress] -X = 87 -Y = 584 -W = 633 -H = 6 +[NameText4] +X = 50 +Y = 405 Color = White +Font = 0 +Size = 22 +Align = 0 +Text = SING_PLAYER_NAME -[SingTimeText] -Text = SING_TIME -X = 761 -Y = 577 -Font = 1 -Size = 18 +[NameText5] +X = 50 +Y = 540 Color = White -Align = 1 +Font = 0 +Size = 22 +Align = 0 +Text = SING_PLAYER_AVATAR -[SingInfoMessageBG] -Tex = SongMessage -X = 250 -Y = 40 -W = 300 -H = 25 -Z = 0.98 -Color = GrayDark +[NameSelectPlayerCount] +Text = SING_PLAYER_COUNT +Tex = MainBar Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 30 +Y = 265 +W = 200 +H = 35 +Size=5 +SkipX = 30 +SBGW = 160 +Align = 0 +TextSize = 22 +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[SingInfoMessageText] -X = 400 -Y = 44 -Color = White -Font = 1 -Size = 20 -Align = 1 - -# O N E P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#PlayerOne -[SingP1Static] -X = 20 -Y = 275 -W = 50 -H = 50 +[NamePlayerSelectStatic1] +X = 102 +Y = 128 +W = 68 +H = 80 Tex = AvatarFrame2 Color = P1Dark -Type = Transparent -Alpha = 1 +Type = Colorized +Z = 1 -[SingP1Text] -Text = PLAYERNAME -X = 80 -Y = 300 +[NamePlayerSelectStatic1Text] +X = 135 +Y = 209 Font = 1 -Size = 22 +Size = 17 +Align = 1 Color = White -Align = 0 +Z = 1 -[SingP1Static2] -Tex = ScoreBG -X = 680 -Y = 282 -W = 100 -H = 36 -Color = P1Dark +[NamePlayerSelectStatic1Avatar] +X = 110 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P1 +Type = Transparent + +[NamePlayerSelectStatic2] +X = 202 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P2Dark Type = Colorized +Z = 1 -[SingP1TextScore] -Text = 00000 -X = 698 -Y = 284 -Font = 0 -Size = 30 +[NamePlayerSelectStatic2Text] +X = 241 +Y = 209 +Font = 1 +Size = 17 +Align = 1 Color = White -Align = 0 +Text = P2 +Z = 1 -[SingP1SingBar] -X = 680 -Y = 316 -W = 100 -H = 8 +[NamePlayerSelectStatic2Avatar] +X = 210 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P2 +Type = Transparent -[SingP1Avatar] -X = 24 -Y = 280 -W = 42 -H = 41 +[NamePlayerSelectStatic3] +X = 312 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P3Dark +Type = Colorized Z = 1 -Alpha = 1 -# T W O P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1TwoPStatic] -X = 20 -Y = 95 -W = 50 -H = 50 -Tex = AvatarFrame2 -Color = P1Dark -Type = Transparent -Alpha = 1 - -[SingP1TwoPText] -Text = PLAYERNAME -X = 80 -Y = 122 +[NamePlayerSelectStatic3Text] +X = 347 +Y = 209 Font = 1 -Size = 22 +Size = 17 +Align = 1 Color = White -Align = 0 +Text = P3 +Z = 1 -[SingP1TwoPStatic2] -Tex = ScoreBG -X = 680 -Y = 102 -W = 100 -H = 36 -Color = P1Dark +[NamePlayerSelectStatic3Avatar] +X = 320 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P3 +Type = Transparent + +[NamePlayerSelectStatic4] +X = 418 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P4Dark Type = Colorized +Z = 1 -[SingP1TwoPTextScore] -Text = 00000 -X = 698 -Y = 104 -Font = 0 -Size = 30 +[NamePlayerSelectStatic4Text] +X = 453 +Y = 209 +Font = 1 +Size = 17 +Align = 1 Color = White -Align = 0 - -[SingP1TwoPSingBar] -X = 680 -Y = 136 -W = 100 -H = 8 +Text = P4 +Z = 1 -[SingP1TwoPAvatar] -X = 24 -Y = 99 -W = 42 -H = 42 +[NamePlayerSelectStatic4Avatar] +X = 426 +Y = 135 +W = 52 +H = 65 Z = 1 -Alpha = 1 +Tex = NoAvatar_P4 +Type = Transparent -#Player Two -[SingP2RStatic] -X = 20 -Y = 275 -W = 50 -H = 50 +[NamePlayerSelectStatic5] +X = 524 +Y = 128 +W = 68 +H = 80 Tex = AvatarFrame2 -Color = P2Dark -Type = Transparent -Alpha = 1 +Color = P5Dark +Type = Colorized +Z = 1 -[SingP2RText] -Text = PLAYERNAME -X = 80 -Y = 302 +[NamePlayerSelectStatic5Text] +X = 559 +Y = 209 Font = 1 -Size = 22 +Size = 17 +Align = 1 Color = White -Align = 0 +Text = P5 +Z = 1 -[SingP2RStatic2] -Tex = ScoreBG -X = 680 -Y = 282 -W = 100 -H = 36 -Color = P2Dark +[NamePlayerSelectStatic5Avatar] +X = 532 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P5 +Type = Transparent + +[NamePlayerSelectStatic6] +X = 630 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P6Dark Type = Colorized +Z = 1 -[SingP2RTextScore] -Text = 00000 -X = 698 -Y = 284 -Font = 0 -Size = 30 +[NamePlayerSelectStatic6Text] +X = 665 +Y = 209 +Font = 1 +Size = 17 +Align = 1 Color = White -Align = 0 - -[SingP2RSingBar] -X = 680 -Y = 316 -W = 100 -H = 8 - -[SingP2RAvatar] -X = 24 -Y = 280 -W = 42 -H = 41 +Text = P6 Z = 1 -Alpha = 1 -# T H R E E P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1ThreePStatic] -X = 16 -Y = 57 -W = 50 -H = 50 -Tex = AvatarFrame2 -Color = P1Dark +[NamePlayerSelectStatic6Avatar] +X = 638 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P6 Type = Transparent -Alpha = 1 - -#[SingP1ThreePText] -#Text = -#X = 27 -#Y = 66 -#Font = 1 -#Size = 24 -#Color = White -#Align = 0 -[SingP1ThreePStatic2] -Tex = ScoreBG -X = 75 -Y = 61 -W = 100 -H = 36 -Color = P1Dark +[NamePlayerSelectStatic7] +X = 830 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P6Dark Type = Colorized +Z = 1 -[SingP1ThreePTextScore] -Text = 00000 -X = 93 -Y = 63 -Font = 0 -Size = 30 +[NamePlayerSelectStatic7Text] +X = 865 +Y = 209 +Font = 1 +Size = 17 +Align = 1 Color = White -Align = 0 - -[SingP1ThreePSingBar] -X = 75 -Y = 95 -W = 100 -H = 8 - -[SingP1ThreePAvatar] -X = 20 -Y = 62 -W = 42 -H = 41 +Text = P6 Z = 1 -Alpha = 1 -#Player Two -[SingP2MStatic] -X = 311 -Y = 57 -W = 50 -H = 50 -Tex = AvatarFrame2 -Color = P2Dark +[NamePlayerSelectStatic7Avatar] +X = 838 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P7 Type = Transparent -Alpha = 1 - -#[SingP2MText] -#Text = P2 -#X = 321 -#Y = 66 -#Font = 1 -#Size = 24 -#Color = White -#Align = 0 -[SingP2MStatic2] -Tex = ScoreBG -X = 370 -Y = 61 -W = 100 -H = 36 -Color = P2Dark +[NamePlayerSelectStatic8] +X = 830 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P6Dark Type = Colorized +Z = 1 -[SingP2MTextScore] -Text = 00000 -X = 388 -Y = 63 -Font = 0 -Size = 30 +[NamePlayerSelectStatic8Text] +X = 865 +Y = 209 +Font = 1 +Size = 17 +Align = 1 Color = White -Align = 0 - -[SingP2MSingBar] -X = 370 -Y = 95 -W = 100 -H = 8 - -[SingP2MAvatar] -X = 315 -Y = 62 -W = 42 -H = 41 +Text = P6 Z = 1 -Alpha = 1 -#Player Three -[SingP3RStatic] -X = 611 -Y = 57 -W = 50 -H = 50 -Tex = AvatarFrame2 -Color = P3Dark +[NamePlayerSelectStatic8Avatar] +X = 838 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P8 Type = Transparent -Alpha = 1 -#[SingP3RText] -#Text = P3 -#X = 621 -#Y = 66 -#Font = 1 -#Size = 24 -#Color = White -#Align = 0 - -[SingP3RStatic2] -Tex = ScoreBG -X = 670 -Y = 61 -W = 100 -H = 36 -Color = P3Dark +[NamePlayerSelectStatic9] +X = 830 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P6Dark Type = Colorized +Z = 1 -[SingP3RTextScore] -Text = 00000 -X = 688 -Y = 63 -Font = 0 -Size = 30 +[NamePlayerSelectStatic9Text] +X = 865 +Y = 209 +Font = 1 +Size = 17 +Align = 1 Color = White -Align = 0 +Text = P6 +Z = 1 -[SingP3SingBar] -X = 670 -Y = 95 -W = 100 -H = 8 +[NamePlayerSelectStatic9Avatar] +X = 838 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P9 +Type = Transparent -[SingP3RAvatar] -X = 615 -Y = 62 -W = 42 -H = 41 +[NamePlayerSelectStatic10] +X = 830 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P6Dark +Type = Colorized Z = 1 -Alpha = 1 -[SingSongNameStatic] -Tex = SongName -X = 10 -Y = 10 -W = 780 -H = 29 +[NamePlayerSelectStatic10Text] +X = 865 +Y = 209 +Font = 1 +Size = 17 +Align = 1 Color = White +Text = P6 +Z = 1 + +[NamePlayerSelectStatic10Avatar] +X = 838 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P10 Type = Transparent -[SingSongNameText] -Text = SongNameText -X = 400 -Y = 13 -Font = 0 -Size = 25 -Color = Black +[NamePlayerSelectStatic11] +X = 830 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P6Dark +Type = Colorized +Z = 1 + +[NamePlayerSelectStatic11Text] +X = 865 +Y = 209 +Font = 1 +Size = 17 Align = 1 +Color = White +Text = P6 +Z = 1 -[Score] -Texts = 1 +[NamePlayerSelectStatic11Avatar] +X = 838 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P11 +Type = Transparent -[ScoreBackground] -Tex = ScoreScreenBG +[NamePlayerSelectStatic12] +X = 830 +Y = 128 +W = 68 +H = 80 +Tex = AvatarFrame2 +Color = P6Dark +Type = Colorized +Z = 1 -[ScoreText1] -X = 70 -Y = 6 +[NamePlayerSelectStatic12Text] +X = 865 +Y = 209 +Font = 1 +Size = 17 +Align = 1 Color = White -Font = 0 -Size = 60 -Text = SONG_SCORE -Align = 0 +Text = P6 +Z = 1 -[ScoreTextArtistTitle] -X = 70 -Y = 59 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = ArtistTitle +[NamePlayerSelectStatic12Avatar] +X = 838 +Y = 135 +W = 52 +H = 65 +Z = 1 +Tex = NoAvatar_P12 +Type = Transparent -[ScoreStatic1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = ScoreIcon -Type = Colorized +[NamePlayerSelectCurrent] +X = -12 +Y = 120 +W = 95 +H = 120 +Z = 0.95 +Tex = SelectFrame +Color = ColorDark +DColor = ColorLight +Type = Transparent -[ScoreStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[NamePlayerAvatar] +X = 560 +Y = 420 +W = 70 +H = 90 +Reflection = 0 -[ScoreStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 -Color = White +[NamePlayerButtonAvatar] +X = 541 +Y = 405 +W = 111 +H = 122 +Tex = AvatarFrame +Color = ColorDark +DColor = ColorLight Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[ScoreStatic4] +[NamePlayerScrollAvatar] +Count = 3 +Distance = 40 + +[NamePlayerButtonName] X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEnter -Color = White +Y = 400 +W = 160 +H = 35 +Z = 1 +Tex = Button +Color = ColorLight +DColor = ColorDark Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[ScoreText2] -X = 300 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_LEGEND_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 -#end of main stuff +Texts = 1 -# # # # # # # # # # # # # # # # # # One Player Score # # # # # # # # # # # # -[ScoreTextName1] -X = 197 -Y = 280 +[NamePlayerButtonNameText1] +X = 80 +Y = 5 Font = 0 -Size = 40 -Text = P1 -Font = 1 +Size = 22 +Align = 1 Color = White -Align = 0 -# Rating -[ScoreStaticRatingPicture1] -X = 385 -Y = 165 -H = 75 -W = 75 +[NameSelectPlayerColor] +Text= SING_PLAYER_COLOR +Tex = MainBar +TexSBG = SelectBG +Type = Transparent +TypeSBG = Transparent +X = 30 +Y = 445 +W = 200 +H = 35 +Size=5 +SkipX = 30 +SBGW = 160 +TextSize = 22 +DColor = +Color = +TColor = White +TDColor = White +SBGDColor = PlayerDark +SBGColor = PlayerLight +STColor = White +STDColor = GrayDark -[ScoreTextScore1] -X = 422 -Y = 235 -W = 100 -Color = White -Font = 0 -Size = 27 -Text = Tone Deaf -Align = 1 +[NameSelectPlayerLevel] +Text = SING_PLAYER_LEVEL +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +Type = Transparent +TypeSBG = Transparent +X = 30 +Y = 490 +W = 200 +H = 35 +Size=5 +SkipX = 30 +SBGW = 160 +TextSize = 22 +DColor = +Color = +TColor = White +TDColor = White +SBGDColor = PlayerDark +SBGColor = PlayerLight +STColor = White +STDColor = GrayDark -# Note Score -[ScoreStaticBoxDark1] -Tex = ScoreBar_box_dark -X = 200 -Y = 327 -W = 22 -H = 20 -Color = P1Dark -Type = Colorized +######################################### +##### S O N G S E L E C T I O N ##### +######################################### -[ScoreTextNotes1] -X = 227 -Y = 322 -Color = White -Font = 0 -Size = 30 -Text = SING_NOTES -Align = 0 +[SongMenu] -[ScoreTextNotesScore1] -X = 487 -Y = 322 +[SongMenuBackground] +Type=Fade +ColR=0 +ColG=0 +ColB=0 +Alpha=0.6 + +[SongMenuStatic1] +Tex = interface_dialog_backgroundtop +X = 250 +Y = 0 +W = 300 +H = 210 +Z = 0.96 Color = White -Font = 0 -Size = 30 -Align = 2 -Text = 0 +Type = Transparent +#Reflection = 1 +#ReflectionSpacing = 0 -# A simple line -[ScorePlayer1Static1] -Tex = ScoreLine -X = 200 -Y = 351 -W = 287 -H = 1 +[SongMenuStatic2] +X = 258 +Y = 15 +W = 24 +H = 24 Color = White +Tex = icon_song_menu Type = Colorized +Z = 0.97 -# Line Bonus -[ScoreStaticBoxLight1] -Tex = ScoreBar_box_light -X = 200 -Y = 358 -W = 22 -H = 20 -Color = P1Light +[SongMenuTextMenu] +X = 288 +Y = 9 +Z = 0.97 +Color = ColorLight +Size = 36 +Text = MENU + +[SongMenuButton1] +X = 280 +Y = 58 +Z = 0.97 +W = 220 +H = 25 +Tex = Rectangle +Color = ColorLight +DColor = ColorDark Type = Colorized +Texts = 1 -[ScoreTextLineBonus1] -X = 227 -Y = 352 +[SongMenuButton1Text1] +X = 6 +Y = 0 +Z = 0.97 Color = White -Font = 0 -Size = 30 -Text = SING_PHRASE_BONUS -Align = 0 +Size = 24 +Text = SONG_MENU_PLAY -[ScoreTextLineBonusScore1] -X = 487 -Y = 352 -Color = White -Font = 0 -Size = 30 -Align = 2 -Text = 0 +# shows up instead of Button 1 +# in some song menus +[SongMenuSelectSlide1] +TexSBG = Rectangle +Text = +TypeSBG = Colorized +ShowArrows = 1 +OneItemOnly = 1 +X = 280 +Y = 58 +W = 0 +H = 25 +Z = 0.97 +SkipX = 0 +SBGW = 220 +TextSize = 24 +Color = ColorLight +DColor = ColorDark +TColor = White +TDColor = White +SBGColor = ColorLight +SBGDColor = ColorDark +STColor = White +STDColor = White -# A simple line -[ScorePlayer1Static2] -Tex = ScoreLine -X = 200 -Y = 382 -W = 287 -H = 1 -Color = White +[SongMenuButton2] +X = 280 +Y = 85 +Z = 0.97 +W = 220 +H = 25 +Tex = Rectangle +Color = ColorLight +DColor = ColorDark Type = Colorized +Texts = 1 -# Golden Notes -[ScoreStaticBoxLightest1] -Tex = ScoreBar_box_lightest -X = 200 -Y = 390 -W = 22 -H = 20 -Color = P1Lightest +[SongMenuButton2Text1] +X = 6 +Y = 0 +Color = White +Size = 24 +Text = SONG_MENU_EDIT +Z = 0.97 + +# shows up instead of Button 2 +# in some song menus +[SongMenuSelectSlide2] +TexSBG = Rectangle +Text = +TypeSBG = Colorized +ShowArrows = 1 +OneItemOnly = 1 +X = 280 +Y = 85 +W = 0 +H = 25 +Z = 0.97 +SkipX = 0 +SBGW = 220 +TextSize = 24 +Color = ColorLight +DColor = ColorDark +TColor = White +TDColor = White +SBGColor = ColorLight +SBGDColor = ColorDark +STColor = White +STDColor = White + +[SongMenuButton3] +X = 280 +Y = 115 +Z = 0.97 +W = 220 +H = 25 +Tex = Rectangle +Color = ColorLight +DColor = ColorDark Type = Colorized +Texts = 1 -[ScoreTextGoldenNotes1] -X = 227 -Y = 383 +[SongMenuButton3Text1] +X = 6 +Y = 0 Color = White Font = 0 -Size = 30 -Text = SING_GOLDEN_NOTES +Size = 24 +Text = SONG_MENU_MODI Align = 0 +Z = 0.97 -[ScoreTextGoldenNotesScore1] -X = 487 -Y = 383 -Color = White -Font = 0 -Size = 30 -Align = 2 -Text = 0 +# shows up instead of BUtton 3 +# in some song menus +[SongMenuSelectSlide3] +TexSBG = Rectangle +Text = +TypeSBG = Colorized +ShowArrows = 1 +OneItemOnly = 1 +X = 280 +Y = 115 +W = 0 +H = 25 +Z = 0.97 +SkipX = 0 +SBGW = 220 +TextSize = 24 +Color = ColorLight +DColor = ColorDark +TColor = White +TDColor = White +SBGColor = ColorLight +SBGDColor = ColorDark +STColor = White +STDColor = White -[ScoreTextTotal1] -X = 237 -Y = 454 +[SongMenuButton4] +X = 280 +Y = 145 +Z = 0.97 +W = 220 +H = 25 +Tex = Rectangle +Color = ColorLight +DColor = ColorDark +Type = Colorized +Texts = 1 + +[SongMenuButton4Text1] +X = 6 +Y = 0 Color = White Font = 0 -Size = 30 -Text = SING_TOTAL +Size = 24 +Text = SONG_MENU_CANCEL Align = 0 -Reflection = 1 -ReflectionSpacing = 26 +Z = 0.97 -[ScoreTextTotalSCore1] -X = 487 -Y = 444 +[SongMenuButton5] +X = 280 +Y = 175 +Z = 0.97 +W = 220 +H = 25 +Tex = Rectangle +Color = ColorLight +DColor = ColorDark +Type = Colorized +Texts = 1 + +[SongMenuButton5Text1] +X = 6 +Y = 0 Color = White Font = 0 -Size = 42 -Align = 2 -Text = 0 -Reflection = 1 -ReflectionSpacing = 24 +Size = 24 +Text = SONG_MENU_CANCEL +Align = 0 +Z = 0.97 -#ScoreBar -[ScoreStaticBackLevel1] -Tex = ScoreLevel -X = 503 -Y = 168 -W = 95 -H = 310 -Color = P1Lightest -Type = Colorized +[SongJumpto] -[ScoreStaticBackLevelRound1] -Tex = ScoreLevelRound -X = 503 -Y = 138 -W = 95 -H = 8 -Color = P1Lightest -Type = Colorized +[SongJumptoBackground] +Type=Fade +ColR=0 +ColG=0 +ColB=0 +Alpha=0.5 -[ScoreStaticLevel1] -Tex = ScoreLevel -X = 503 -Y = 400 -W = 95 -H = 10 -Color = P1Dark +[SongJumptoStatic1] +X = 458 +Y = 20 +W = 24 +H = 24 +Color = White +Tex = icon_song_search Type = Colorized +Z = 0.97 -[ScoreStaticLevelRound1] -Tex = ScoreLevelRound -X = 503 -Y = 392 -W = 95 -H = 8 -Color = P1Dark -Type = Colorized +[SongJumptoText1] +X = 488 +Y = 15 +Z = 0.97 +Color = ColorLight +Size = 30 +Text = SONG_JUMPTO_TYPE_DESC -[ScorePlayer1Static3] -Tex = ScoreEndCap -X = 499 -Y = 478 -W = 110 +[SongJumptoSelectSlideType] +X = 455 +Y = -40 +Z = 0.97 H = 30 -z = 0.9 -Color = P1Dark -Type = Colorized -Reflection = 1 -ReflectionSpacing = 0 - -[ScorePlayer1Static4] -Tex = ScoreGlassBox -X = 499 -Y = 148 -W = 113 -H = 331 -z = 0.89 -Color = White -Type = Transparent +SBGW = 240 +SkipX = 0 +Size = 1 +oneItemOnly = 1 +showArrows = 1 -[ScorePlayer1Static5] -Tex = P -X = 200 -Y = 455 -W = 26 -H = 23 -Color = P1Dark -Type = Colorized -Reflection = 1 -ReflectionSpacing = 31 +#text +TColor = White +TDColor = White +#Select0r.Text.Color +STColor = White +STDColor = White -[ScorePlayer1Text1] -Text = P1 -X = 204 -Y = 458 -Size = 18 +[SongJumptoButtonSearchText] +X = 475 +Y = 32 +Z = 0.97 +W = 290 +H = 50 +Size = 30 Font = 1 -Color = White -Type = Colorized -Reflection = 1 -ReflectionSpacing = 40 +Align = 0 +Color = ColorLight -[ScorePlayer1Avatar] -X = 203 -Y = 168 -W = 104 -H = 104 -Z = 1 +#[SongJumptoTextFound] +#X = 270 +#Y = 125 +#Color = White +#Font = 0 +#Size = 20 +#Text = SONG_JUMPTO_HELP +#Align = 0 +#Z = 0.97 -[ScorePlayer1Static6] -X = 195 -Y = 160 -W = 120 -H = 120 -Z = 0.9 -Tex = AvatarFrame2 -Color = P1Dark +##################### +### screen song ### +##################### + +[SongRouletteStatic2PlayersDuetSingerP1] +X = 35 +Y = 520 +W = 154 +H = 30 +Z = 0.95 Type = Transparent +Color = P1Dark +Tex = SongDuetSinger -# # # # # # # # # # # # # # # # # # Two Player Score # # # # # # # # # # # # -# P L A Y E R O N E -[ScoreTextName2] -X = 42 -Y = 284 -Font = 1 -Size = 36 -Text = P1 +[SongRouletteText2PlayersDuetSingerP1] +X = 112 +Y = 525 +Font = 0 +Size = 20 +Align = 1 Color = White -Align = 0 -[ScoreStaticRatingPicture2] -X = 180 -Y = 165 -H = 75 -W = 75 +[SongRouletteStatic2PlayersDuetSingerP2] +X = 35 +Y = 550 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextScore2] -X = 217 -Y = 235 -W = 100 -Color = White +[SongRouletteText2PlayersDuetSingerP2] +X = 112 +Y = 555 Font = 0 -Size = 27 -Text = Tone Deaf +Size = 20 Align = 1 +Color = White -[ScoreStaticBoxDark2] -Tex = ScoreBar_box_dark -X = 45 -Y = 327 -W = 22 -H = 20 +[SongRouletteStatic3PlayersDuetSingerP1] +X = 35 +Y = 490 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent Color = P1Dark -Type = Colorized +Tex = SongDuetSinger -[ScoreTextNotes2] -X = 72 -Y = 324 -Color = White +[SongRouletteText3PlayersDuetSingerP1] +X = 112 +Y = 495 Font = 0 -Size = 24 -Text = SING_NOTES -Align = 0 - -[ScoreTextNotesScore2] -X = 282 -Y = 324 +Size = 20 +Align = 1 Color = White -Font = 0 -Size = 24 -Align = 2 -Text = 0000 -[ScoreStaticBoxLight2] -Tex = ScoreBar_box_light -X = 45 -Y = 358 -W = 22 -H = 20 -Color = P1Lightest -Type = Colorized +[SongRouletteStatic3PlayersDuetSingerP2] +X = 35 +Y = 520 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger3 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextLineBonus2] -X = 72 -Y = 355 -Color = White +[SongRouletteText3PlayersDuetSingerP2] +X = 112 +Y = 525 Font = 0 -Size = 24 -Text = SING_PHRASE_BONUS -Align = 0 +Size = 20 +Align = 1 +Color = White -[ScoreTextLineBonusScore2] -X = 282 -Y = 355 -Color = White -Font = 0 -Size = 24 -Align = 2 -Text = 0000 - -[ScoreStaticBoxLightest2] -Tex = ScoreBar_box_lightest -X = 45 -Y = 390 -W = 22 -H = 20 -Color = P1Lightest -Type = Colorized +[SongRouletteStatic3PlayersDuetSingerP3] +X = 35 +Y = 550 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextGoldenNotes2] -X = 72 -Y = 387 -Color = White +[SongRouletteText3PlayersDuetSingerP3] +X = 112 +Y = 555 Font = 0 -Size = 24 -Text = SING_GOLDEN_NOTES -Align = 0 - -[ScoreTextGoldenNotesScore2] -X = 282 -Y = 387 +Size = 20 +Align = 1 Color = White -Font = 0 -Size = 24 -Align = 2 -Text = 0000 -[ScoreTextTotal2] -X = 82 -Y = 454 -Color = White -Font = 0 -Size = 30 -Text = SING_TOTAL -Reflection = 1 -ReflectionSpacing = 24 +[SongRouletteStatic4PlayersDuetSingerP3] +X = 50 +Y = 520 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger -[ScoreTextTotalSCore2] -X = 283 -Y = 444 -Color = White -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -Reflection = 1 -ReflectionSpacing = 24 +[SongRouletteStatic4PlayersDuetSingerP4] +X = 50 +Y = 550 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger2 -# Lines -[ScorePlayer2Static1] -Tex = ScoreLine -X = 45 -Y = 351 -W = 237 -H = 1 -Type = Colorized -Color = White +[SongRouletteStatic6PlayersDuetSingerP4] +X = 50 +Y = 490 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger -[ScorePlayer2Static2] -Tex = ScoreLine -X = 45 -Y = 382 -W = 237 -H = 1 -Type = Colorized -Color = White +[SongRouletteStatic6PlayersDuetSingerP5] +X = 50 +Y = 520 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P5Dark +Tex = SongDuetSinger3 -#ScoreBar -[ScoreStaticBackLevel2] -Tex = ScoreLevel -X = 298 -Y = 168 -W = 95 -H = 310 -Color = P1Lightest -Type = Colorized +[SongRouletteStatic6PlayersDuetSingerP6] +X = 50 +Y = 550 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P6Dark +Tex = SongDuetSinger2 -[ScoreStaticBackLevelRound2] -Tex = ScoreLevelRound -X = 298 -Y = 138 -W = 95 -H = 8 -Color = P1Lightest -Type = Colorized -[ScoreStaticLevel2] -Tex = ScoreLevel -X = 298 -Y = 400 -W = 95 -H = 10 -Color = P1Dark -Type = Colorized +##################### -[ScoreStaticLevelRound2] -Tex = ScoreLevelRound -X = 298 -Y = 392 -W = 95 -H = 8 +[SongCarouselStatic2PlayersDuetSingerP1] +X = 55 +Y = 500 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent Color = P1Dark -Type = Colorized +Tex = SongDuetSinger -[ScorePlayer2Static3] -Tex = ScoreEndCap -X = 294 -Y = 478 -W = 110 +[SongCarouselText2PlayersDuetSingerP1] +X = 132 +Y = 505 +Font = 0 +Size = 20 +Align = 1 +Color = White + +[SongCarouselStatic2PlayersDuetSingerP2] +X = 55 +Y = 530 +W = 154 H = 30 -z = 0.9 -Color = P1Dark -Type = Colorized +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger2 Reflection = 1 -ReflectionSpacing = 0 +ReflectionSpacing = 1 -[ScorePlayer2Static4] -Tex = ScoreGlassBox -X = 294 -Y = 148 -W = 113 -H = 331 -z = 0.89 +[SongCarouselText2PlayersDuetSingerP2] +X = 132 +Y = 535 +Font = 0 +Size = 20 +Align = 1 Color = White + +[SongCarouselStatic3PlayersDuetSingerP1] +X = 55 +Y = 500 +W = 154 +H = 30 +Z = 0.95 Type = Transparent - -[ScorePlayer2Static5] -Tex = P -X = 45 -Y = 455 -W = 26 -H = 23 -Type = Colorized Color = P1Dark -Reflection = 1 -ReflectionSpacing = 31 +Tex = SongDuetSinger -[ScorePlayer2Text1] -Text = P1 -X = 49 -Y = 458 -Size = 18 -Font = 1 +[SongCarouselText3PlayersDuetSingerP1] +X = 132 +Y = 505 +Font = 0 +Size = 20 +Align = 1 Color = White -Type = Colorized -Reflection = 1 -ReflectionSpacing = 40 - -[ScorePlayer2Avatar] -X = 48 -Y = 168 -W = 104 -H = 104 -Z = 1 -[ScorePlayer2Static6] -X = 40 -Y = 160 -W = 120 -H = 120 -Z = 0.9 -Tex = AvatarFrame2 -Color = P1Dark +[SongCarouselStatic3PlayersDuetSingerP2] +X = 55 +Y = 530 +W = 154 +H = 30 +Z = 0.95 Type = Transparent +Color = P2Dark +Tex = SongDuetSinger3 +Reflection = 1 +ReflectionSpacing = 1 -# P L A Y E R T W O -[ScoreTextName3] -X = 755 -Y = 284 -Font = 1 -Size = 36 -Text = P2 +[SongCarouselText3PlayersDuetSingerP2] +X = 132 +Y = 535 +Font = 0 +Size = 20 +Align = 1 Color = White -Align = 2 -[ScoreStaticRatingPicture3] -X = 545 -Y = 165 -H = 75 -W = 75 +[SongCarouselStatic3PlayersDuetSingerP3] +X = 55 +Y = 560 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextScore3] -X = 583 -Y = 235 -W = 100 -Color = White +[SongCarouselText3PlayersDuetSingerP3] +X = 132 +Y = 565 Font = 0 -Size = 27 -Text = Tone Deaf +Size = 20 Align = 1 +Color = White -[ScoreStaticBoxDark3] -Tex = ScoreBar_box_dark -X = 733 -Y = 327 -W = 22 -H = 20 -Color = P2Dark -Type = Colorized +[SongCarouselStatic4PlayersDuetSingerP3] +X = 65 +Y = 500 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger -[ScoreTextNotes3] -X = 728 -Y = 324 -Color = White -Font = 0 -Size = 24 -Text = SING_NOTES -Align = 2 +[SongCarouselStatic4PlayersDuetSingerP4] +X = 65 +Y = 530 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger2 -[ScoreTextNotesScore3] -X = 518 -Y = 324 -Color = White -Font = 0 -Size = 24 -Align = 0 -Text = 0000 +[SongCarouselStatic6PlayersDuetSingerP4] +X = 65 +Y = 500 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger -[ScoreStaticBoxLight3] -Tex = ScoreBar_box_light -X = 733 -Y = 358 -W = 22 -H = 20 -Color = P2Lightest -Type = Colorized +[SongCarouselStatic6PlayersDuetSingerP5] +X = 65 +Y = 530 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P5Dark +Tex = SongDuetSinger3 -[ScoreTextLineBonus3] -X = 728 -Y = 355 -Color = White -Font = 0 -Size = 24 -Text = SING_PHRASE_BONUS -Align = 2 +[SongCarouselStatic6PlayersDuetSingerP6] +X = 65 +Y = 560 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P6Dark +Tex = SongDuetSinger2 -[ScoreTextLineBonusScore3] -X = 518 -Y = 355 -Color = White -Font = 0 -Size = 24 -Align = 0 -Text = 0000 +################################## -[ScoreStaticBoxLightest3] -Tex = ScoreBar_box_lightest -X = 733 -Y = 390 -W = 22 -H = 20 -Color = P2Lightest -Type = Colorized +[SongSlotMachineStatic2PlayersDuetSingerP1] +X = 295 +Y = 435 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P1Dark +Tex = SongDuetSinger -[ScoreTextGoldenNotes3] -X = 728 -Y = 387 -Color = White +[SongSlotMachineText2PlayersDuetSingerP1] +X = 372 +Y = 440 Font = 0 -Size = 24 -Text = SING_GOLDEN_NOTES -Align = 2 - -[ScoreTextGoldenNotesScore3] -X = 518 -Y = 387 +Size = 20 +Align = 1 Color = White -Font = 0 -Size = 24 -Align = 0 -Text = 0000 -[ScoreTextTotal3] -X = 718 -Y = 454 -Color = White -Font = 0 -Size = 30 -Text = SING_TOTAL -Align = 2 +[SongSlotMachineStatic2PlayersDuetSingerP2] +X = 295 +Y = 465 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger2 Reflection = 1 -ReflectionSpacing = 24 +ReflectionSpacing = 1 -[ScoreTextTotalScore3] -X = 517 -Y = 444 +[SongSlotMachineText2PlayersDuetSingerP2] +X = 372 +Y = 470 +Font = 0 +Size = 20 +Align = 1 Color = White + +[SongSlotMachineStatic3PlayersDuetSingerP1] +X = 295 +Y = 425 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P1Dark +Tex = SongDuetSinger + +[SongSlotMachineText3PlayersDuetSingerP1] +X = 372 +Y = 430 Font = 0 -Size = 42 -Align = 0 -Text = 00000 +Size = 20 +Align = 1 +Color = White + +[SongSlotMachineStatic3PlayersDuetSingerP2] +X = 295 +Y = 455 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger3 Reflection = 1 -ReflectionSpacing = 24 +ReflectionSpacing = 1 -#Lines -[ScorePlayer3Static1] -Tex = ScoreLine -X = 518 -Y = 351 -W = 237 -H = 1 -Type = Colorized +[SongSlotMachineText3PlayersDuetSingerP2] +X = 372 +Y = 460 +Font = 0 +Size = 20 +Align = 1 Color = White -[ScorePlayer3Static2] -Tex = ScoreLine -X = 518 -Y = 382 -W = 237 -H = 1 -Type = Colorized +[SongSlotMachineStatic3PlayersDuetSingerP3] +X = 295 +Y = 485 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 + +[SongSlotMachineText3PlayersDuetSingerP3] +X = 372 +Y = 490 +Font = 0 +Size = 20 +Align = 1 Color = White -#ScoreBar -[ScoreStaticBackLevel3] -Tex = ScoreLevel -X = 409 -Y = 168 -W = 95 -H = 310 -Color = P2Lightest -Type = Colorized - -[ScoreStaticBackLevelRound3] -Tex = ScoreLevelRound -X = 409 -Y = 138 -W = 95 -H = 8 -Color = P2Lightest -Type = Colorized - -[ScoreStaticLevel3] -Tex = ScoreLevel -X = 409 -Y = 400 -W = 95 -H = 10 -Color = P2Dark -Type = Colorized - -[ScoreStaticLevelRound3] -Tex = ScoreLevelRound -X = 409 -Y = 392 -W = 95 -H = 8 -Color = P2Dark -Type = Colorized +[SongSlotMachineStatic4PlayersDuetSingerP3] +X = 305 +Y = 435 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger -[ScorePlayer3Static3] -Tex = ScoreEndCap -X = 405 -Y = 478 -W = 110 +[SongSlotMachineStatic4PlayersDuetSingerP4] +X = 305 +Y = 465 +W = 154 H = 30 -z = 0.9 -Color = P2Dark -Type = Colorized -Reflection = 1 -ReflectionSpacing = 0 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger2 -[ScorePlayer3Static4] -Tex = ScoreGlassBox -X = 405 -Y = 148 -W = 113 -H = 331 -z = 0.89 -Color = White +[SongSlotMachineStatic6PlayersDuetSingerP4] +X = 305 +Y = 425 +W = 154 +H = 30 +Z = 0.95 Type = Transparent +Color = P4Dark +Tex = SongDuetSinger -[ScorePlayer3Static5] -Tex = P -X = 729 +[SongSlotMachineStatic6PlayersDuetSingerP5] +X = 305 Y = 455 -W = 26 -H = 23 -Type = Colorized -Color = P2Dark -Reflection = 1 -ReflectionSpacing = 31 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P5Dark +Tex = SongDuetSinger3 -[ScorePlayer3Text1] -Text = P2 -X = 733 -Y = 458 -Size = 18 -Font = 1 -Color = White -Type = Colorized -Reflection = 1 -ReflectionSpacing = 40 +[SongSlotMachineStatic6PlayersDuetSingerP6] +X = 305 +Y = 485 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P6Dark +Tex = SongDuetSinger2 -[ScorePlayer3Avatar] -X = 648 -Y = 168 -W = 104 -H = 104 -Z = 1 -[ScorePlayer3Static6] -X = 640 -Y = 160 -W = 120 -H = 120 -Z = 0.9 -Tex = AvatarFrame2 -Color = P2Dark +############################# + +[SongSlideStatic2PlayersDuetSingerP1] +X = 55 +Y = 500 +W = 154 +H = 30 +Z = 0.95 Type = Transparent +Color = P1Dark +Tex = SongDuetSinger -# # # # # # # # # # # # # # # # # # Three Player Score # # # # # # # # # # # # -# P L A Y E R O N E -[ScoreTextName4] -X = 20 -Y = 135 -Font = 1 -Size = 38 -Align = 0 -Text = P1 +[SongSlideText2PlayersDuetSingerP1] +X = 132 +Y = 505 +Font = 0 +Size = 20 +Align = 1 Color = White -# Rating -[ScoreStaticRatingPicture4] -X = 160 -Y = 265 -H = 75 -W = 75 -Z = 2 +[SongSlideStatic2PlayersDuetSingerP2] +X = 55 +Y = 530 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextScore4] -X = 197 -Y = 335 -W = 100 -Color = White +[SongSlideText2PlayersDuetSingerP2] +X = 132 +Y = 535 Font = 0 -Size = 27 -Text = Tone Deaf +Size = 20 Align = 1 - -[ScoreTextNotes4] -X = 45 -Y = 180 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES Color = White -[ScoreTextNotesScore4] -X = 260 -Y = 180 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[SongSlideStatic3PlayersDuetSingerP1] +X = 55 +Y = 500 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P1Dark +Tex = SongDuetSinger -[ScoreTextLineBonus4] -X = 45 -Y = 205 +[SongSlideText3PlayersDuetSingerP1] +X = 132 +Y = 505 Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS +Size = 20 +Align = 1 Color = White -[ScoreTextLineBonusScore4] -X = 260 -Y = 205 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[SongSlideStatic3PlayersDuetSingerP2] +X = 55 +Y = 530 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger3 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextGoldenNotes4] -X = 45 -Y = 230 +[SongSlideText3PlayersDuetSingerP2] +X = 132 +Y = 535 Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES +Size = 20 +Align = 1 Color = White -[ScoreTextGoldenNotesScore4] -X = 260 -Y = 230 +[SongSlideStatic3PlayersDuetSingerP3] +X = 55 +Y = 560 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 + +[SongSlideText3PlayersDuetSingerP3] +X = 132 +Y = 565 Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 20 +Align = 1 Color = White -[ScoreStaticBoxDark4] -Tex = ScoreBar_box_dark -X = 20 -Y = 185 -W = 22 -H = 20 -Color = P1Dark -Type = Colorized - -[ScoreStaticBoxLight4] -Tex = ScoreBar_box_light -X = 20 -Y = 210 -W = 22 -H = 20 -Color = P1Light -Type = Colorized - -[ScoreStaticBoxLightest4] -Tex = ScoreBar_box_lightest -X = 20 -Y = 235 -W = 22 -H = 20 -Color = P1Lightest -Type = Colorized - -[ScoreTextTotal4] -X = 55 +[SongSlideStatic4PlayersDuetSingerP3] +X = 65 Y = 500 -Font = 0 -Size = 30 -Align = 0 -Text = SING_TOTAL -Color = White - -[ScoreTextTotalScore4] -X = 250 -Y = 495 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -Color = White +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger -#lines -[ScorePlayer4Static1] -X = 20 -Y = 180 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongSlideStatic4PlayersDuetSingerP4] +X = 65 +Y = 530 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger2 -[ScorePlayer4Static2] -X = 20 -Y = 205 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongSlideStatic6PlayersDuetSingerP4] +X = 65 +Y = 500 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger -[ScorePlayer4Static3] -X = 20 -Y = 230 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongSlideStatic6PlayersDuetSingerP5] +X = 65 +Y = 530 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P5Dark +Tex = SongDuetSinger3 -[ScorePlayer4Static4] -X = 20 -Y = 255 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongSlideStatic6PlayersDuetSingerP6] +X = 65 +Y = 560 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P6Dark +Tex = SongDuetSinger2 -#ScoreBar -[ScoreStaticBackLevel4] -Tex = ScoreLevel -X = 24 -Y = 291 -W = 95 -H = 169 -Color = P4Lightest -Type = Colorized -[ScoreStaticBackLevelRound4] -Tex = ScoreLevelRound -X = 24 -Y = 138 -W = 95 -H = 8 -Color = P4Lightest -Type = Colorized +############################# -[ScoreStaticLevel4] -Tex = ScoreLevel -X = 24 -Y = 400 -W = 95 -H = 10 -Color = P4Dark -Type = Colorized +[SongListStatic2PlayersDuetSingerP1] +X = 555 +Y = 115 +W = 194 +H = 30 +Z = 0.95 +Type = Transparent +Color = P1Dark +Tex = SongDuetSinger -[ScoreStaticLevelRound4] -Tex = ScoreLevelRound -X = 24 -Y = 392 -W = 95 -H = 8 -Color = P4Dark -Type = Colorized +[SongListText2PlayersDuetSingerP1] +X = 660 +Y = 120 +Font = 0 +Size = 20 +Align = 1 +Color = White -[ScorePlayer4Static5] -Tex = ScoreEndCap -X = 20 -Y = 450 -W = 110 +[SongListStatic2PlayersDuetSingerP2] +X = 555 +Y = 145 +W = 194 H = 30 -Z = 0.9 -Color = P1Dark -Type = Colorized +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger2 Reflection = 1 -ReflectionSpacing = 0 +ReflectionSpacing = 1 -[ScorePlayer4Static6] -Tex = ScoreGlassBox -X = 20 -Y = 270 -W = 113 -H = 180 -Z = 0.89 +[SongListText2PlayersDuetSingerP2] +X = 660 +Y = 150 +Font = 0 +Size = 20 +Align = 1 Color = White -Type = Transparent -[ScorePlayer4Static7] -Tex = P -X = 20 -Y = 500 -W = 25 -H = 25 -Type = Colorized +[SongListStatic3PlayersDuetSingerP1] +X = 555 +Y = 110 +W = 194 +H = 30 +Z = 0.95 +Type = Transparent Color = P1Dark -Z = 0.9 -Reflection = 1 -ReflectionSpacing = 4 +Tex = SongDuetSinger -[ScorePlayer4Text1] -Text = P1 -X = 24 -Y = 503 -Size = 18 -Font = 1 -Type = Colorized +[SongListText3PlayersDuetSingerP1] +X = 660 +Y = 115 +Font = 0 +Size = 20 +Align = 1 Color = White -Z = 1 -Reflection = 1 -ReflectionSpacing = 16 -[ScorePlayer4Avatar] -X = 157 -Y = 390 -W = 84 -H = 84 -Z = 1 - -[ScorePlayer4Static8] -X = 149 -Y = 382 -W = 100 -H = 100 -Z = 0.9 -Tex = AvatarFrame2 -Color = P1Dark +[SongListStatic3PlayersDuetSingerP2] +X = 555 +Y = 140 +W = 194 +H = 30 +Z = 0.95 Type = Transparent +Color = P2Dark +Tex = SongDuetSinger3 +Reflection = 1 +ReflectionSpacing = 1 -# P L A Y E R T W O -[ScoreTextName5] -X = 280 -Y = 135 -Font = 1 -Size = 38 -Align = 0 -Text = P2 +[SongListText3PlayersDuetSingerP2] +X = 660 +Y = 145 +Font = 0 +Size = 20 +Align = 1 Color = White -# Rating -[ScoreStaticRatingPicture5] -X = 420 -Y = 265 -H = 75 -W = 75 +[SongListStatic3PlayersDuetSingerP3] +X = 555 +Y = 170 +W = 194 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextScore5] -X = 457 -Y = 335 -W = 100 -Color = White +[SongListText3PlayersDuetSingerP3] +X = 660 +Y = 175 Font = 0 -Size = 27 -Text = Tone Deaf +Size = 20 Align = 1 - -[ScoreTextNotes5] -X = 305 -Y = 180 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES Color = White -[ScoreTextNotesScore5] -X = 520 -Y = 180 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[SongListStatic4PlayersDuetSingerP3] +X = 567 +Y = 115 +W = 194 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger -[ScoreTextLineBonus5] -X = 305 -Y = 205 -Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS -Color = White +[SongListStatic4PlayersDuetSingerP4] +X = 567 +Y = 145 +W = 194 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger2 -[ScoreTextLineBonusScore5] -X = 520 -Y = 205 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[SongListStatic6PlayersDuetSingerP4] +X = 567 +Y = 110 +W = 200 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger -[ScoreTextGoldenNotes5] -X = 305 -Y = 230 -Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES -Color = White +[SongListStatic6PlayersDuetSingerP5] +X = 567 +Y = 140 +W = 200 +H = 30 +Z = 0.95 +Type = Transparent +Color = P5Dark +Tex = SongDuetSinger3 -[ScoreTextGoldenNotesScore5] -X = 520 -Y = 230 +[SongListStatic6PlayersDuetSingerP6] +X = 567 +Y = 170 +W = 200 +H = 30 +Z = 0.95 +Type = Transparent +Color = P6Dark +Tex = SongDuetSinger2 + +############################# + +[SongChessboardStatic2PlayersDuetSingerP1] +X = 30 +Y = 475 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P1Dark +Tex = SongDuetSinger + +[SongChessboardText2PlayersDuetSingerP1] +X = 107 +Y = 480 Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 20 +Align = 1 Color = White -[ScoreStaticBoxDark5] -Tex = ScoreBar_box_dark -X = 280 -Y = 185 -W = 22 -H = 20 +[SongChessboardStatic2PlayersDuetSingerP2] +X = 30 +Y = 505 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent Color = P2Dark -Type = Colorized - -[ScoreStaticBoxLight5] -Tex = ScoreBar_box_light -X = 280 -Y = 210 -W = 22 -H = 20 -Color = P2Light -Type = Colorized - -[ScoreStaticBoxLightest5] -Tex = ScoreBar_box_lightest -X = 280 -Y = 235 -W = 22 -H = 20 -Color = P2Lightest -Type = Colorized +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextTotal5] -X = 315 -Y = 500 +[SongChessboardText2PlayersDuetSingerP2] +X = 107 +Y = 510 Font = 0 -Size = 30 -Align = 0 -Text = SING_TOTAL +Size = 20 +Align = 1 Color = White -[ScoreTextTotalScore5] -X = 520 -Y = 495 +[SongChessboardStatic3PlayersDuetSingerP1] +X = 30 +Y = 475 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P1Dark +Tex = SongDuetSinger + +[SongChessboardText3PlayersDuetSingerP1] +X = 107 +Y = 480 Font = 0 -Size = 42 -Align = 2 -Text = 00000 +Size = 20 +Align = 1 Color = White -#lines -[ScorePlayer5Static1] -X = 280 -Y = 180 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongChessboardStatic3PlayersDuetSingerP2] +X = 30 +Y = 505 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger3 +Reflection = 1 +ReflectionSpacing = 1 -[ScorePlayer5Static2] -X = 280 -Y = 205 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[SongChessboardText3PlayersDuetSingerP2] +X = 107 +Y = 510 +Font = 0 +Size = 20 +Align = 1 Color = White -[ScorePlayer5Static3] -X = 280 -Y = 230 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongChessboardStatic3PlayersDuetSingerP3] +X = 30 +Y = 535 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScorePlayer5Static4] -X = 280 -Y = 255 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[SongChessboardText3PlayersDuetSingerP3] +X = 107 +Y = 540 +Font = 0 +Size = 20 +Align = 1 Color = White -#ScoreBar -[ScoreStaticBackLevel5] -Tex = ScoreLevel -X = 284 -Y = 291 -W = 95 -H = 169 -Color = P5Lightest -Type = Colorized - -[ScoreStaticBackLevelRound5] -Tex = ScoreLevelRound -X = 284 -Y = 138 -W = 95 -H = 8 -Color = P5Lightest -Type = Colorized - -[ScoreStaticLevel5] -Tex = ScoreLevel -X = 284 -Y = 400 -W = 95 -H = 10 -Color = P5Dark -Type = Colorized - -[ScoreStaticLevelRound5] -Tex = ScoreLevelRound -X = 284 -Y = 392 -W = 95 -H = 8 -Color = P5Dark -Type = Colorized +[SongChessboardStatic4PlayersDuetSingerP3] +X = 40 +Y = 475 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger -[ScorePlayer5Static5] -Tex = ScoreEndCap -X = 280 -Y = 450 -W = 110 +[SongChessboardStatic4PlayersDuetSingerP4] +X = 40 +Y = 505 +W = 154 H = 30 -Z = 0.9 -Color = P2Dark -Type = Colorized -Reflection = 1 -ReflectionSpacing = 0 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger2 -[ScorePlayer5Static6] -Tex = ScoreGlassBox -X = 280 -Y = 270 -W = 113 -H = 180 -Z = 0.89 -Color = White +[SongChessboardStatic6PlayersDuetSingerP4] +X = 40 +Y = 475 +W = 154 +H = 30 +Z = 0.95 Type = Transparent +Color = P4Dark +Tex = SongDuetSinger -[ScorePlayer5Static7] -Tex = P -X = 280 -Y = 500 -W = 25 -H = 25 -Type = Colorized -Color = P2Dark -Z = 0.9 -Reflection = 1 -ReflectionSpacing = 4 +[SongChessboardStatic6PlayersDuetSingerP5] +X = 40 +Y = 505 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P5Dark +Tex = SongDuetSinger3 -[ScorePlayer5Text1] -Text = P2 -X = 284 -Y = 503 -Size = 18 -Font = 1 -Type = Colorized -Color = White -Z = 1 -Reflection = 1 -ReflectionSpacing = 16 +[SongChessboardStatic6PlayersDuetSingerP6] +X = 40 +Y = 535 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P6Dark +Tex = SongDuetSinger2 -[ScorePlayer5Avatar] -X = 417 -Y = 390 -W = 84 -H = 84 -Z = 0.9 +############################# -[ScorePlayer5Static8] -X = 409 -Y = 382 -W = 100 -H = 100 -Z = 0.9 -Tex = AvatarFrame2 -Color = P2Dark +[SongMosaicStatic2PlayersDuetSingerP1] +X = 565 +Y = 435 +W = 154 +H = 30 +Z = 0.95 Type = Transparent +Color = P1Dark +Tex = SongDuetSinger -# P L A Y E R T H R E E -[ScoreTextName6] -X = 540 -Y = 135 -Font = 1 -Size = 38 -Align = 0 -Text = P3 +[SongMosaicText2PlayersDuetSingerP1] +X = 642 +Y = 440 +Font = 0 +Size = 20 +Align = 1 Color = White -# Rating -[ScoreStaticRatingPicture6] -X = 680 -Y = 265 -H = 75 -W = 75 +[SongMosaicStatic2PlayersDuetSingerP2] +X = 565 +Y = 465 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextScore6] -X = 717 -Y = 335 -W = 100 -Color = White +[SongMosaicText2PlayersDuetSingerP2] +X = 642 +Y = 470 Font = 0 -Size = 27 -Text = Tone Deaf +Size = 20 Align = 1 +Color = White -[ScoreTextNotes6] +[SongMosaicStatic3PlayersDuetSingerP1] X = 565 -Y = 180 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES -Color = White +Y = 420 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P1Dark +Tex = SongDuetSinger -[ScoreTextNotesScore6] -X = 780 -Y = 180 +[SongMosaicText3PlayersDuetSingerP1] +X = 642 +Y = 425 Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 20 +Align = 1 Color = White -[ScoreTextLineBonus6] +[SongMosaicStatic3PlayersDuetSingerP2] X = 565 -Y = 205 -Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS -Color = White +Y = 450 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P2Dark +Tex = SongDuetSinger3 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextLineBonusScore6] -X = 780 -Y = 205 +[SongMosaicText3PlayersDuetSingerP2] +X = 642 +Y = 455 Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 20 +Align = 1 Color = White -[ScoreTextGoldenNotes6] +[SongMosaicStatic3PlayersDuetSingerP3] X = 565 -Y = 230 -Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES -Color = White +Y = 480 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P3Dark +Tex = SongDuetSinger2 +Reflection = 1 +ReflectionSpacing = 1 -[ScoreTextGoldenNotesScore6] -X = 780 -Y = 230 +[SongMosaicText3PlayersDuetSingerP3] +X = 642 +Y = 485 Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 20 +Align = 1 Color = White -[ScoreStaticBoxDark6] -Tex = ScoreBar_box_dark -X = 540 -Y = 185 -W = 22 -H = 20 +[SongMosaicStatic4PlayersDuetSingerP3] +X = 575 +Y = 435 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent Color = P3Dark -Type = Colorized - -[ScoreStaticBoxLight6] -Tex = ScoreBar_box_light -X = 540 -Y = 210 -W = 22 -H = 20 -Color = P3Light -Type = Colorized - -[ScoreStaticBoxLightest6] -Tex = ScoreBar_box_lightest -X = 540 -Y = 235 -W = 22 -H = 20 -Color = P3Lightest -Type = Colorized +Tex = SongDuetSinger -[ScoreTextTotal6] +[SongMosaicStatic4PlayersDuetSingerP4] X = 575 -Y = 500 -Font = 0 -Size = 30 -Align = 0 -Text = SING_TOTAL -Color = White +Y = 465 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger2 -[ScoreTextTotalScore6] -X = 780 -Y = 495 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -Color = White +[SongMosaicStatic6PlayersDuetSingerP4] +X = 575 +Y = 420 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P4Dark +Tex = SongDuetSinger -#lines -[ScorePlayer6Static1] -X = 540 -Y = 180 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongMosaicStatic6PlayersDuetSingerP5] +X = 575 +Y = 450 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P5Dark +Tex = SongDuetSinger3 -[ScorePlayer6Static2] -X = 540 -Y = 205 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongMosaicStatic6PlayersDuetSingerP6] +X = 575 +Y = 480 +W = 154 +H = 30 +Z = 0.95 +Type = Transparent +Color = P6Dark +Tex = SongDuetSinger2 -[ScorePlayer6Static3] -X = 540 -Y = 230 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +######################################################################################## +##### ##### +##### Roulette ##### +##### ##### +######################################################################################## -[ScorePlayer6Static4] -X = 540 -Y = 255 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[SongRoulette] -#ScoreBar -[ScoreStaticBackLevel6] -Tex = ScoreLevel -X = 544 -Y = 291 -W = 95 -H = 169 -Color = P6Lightest -Type = Colorized +[SongRouletteBackground] +Tex = SongBG -[ScoreStaticBackLevelRound6] -Tex = ScoreLevelRound -X = 544 -Y = 138 -W = 95 -H = 8 -Color = P6Lightest -Type = Colorized -[ScoreStaticLevel6] -Tex = ScoreLevel -X = 544 -Y = 400 -W = 95 -H = 10 -Color = P6Dark -Type = Colorized -[ScoreStaticLevelRound6] -Tex = ScoreLevelRound -X = 544 -Y = 392 -W = 95 -H = 8 -Color = P6Dark -Type = Colorized +[SongRouletteCover] +X = 300 +Y = 150 +W = 200 +H = 150 +Reflections = 1 -[ScorePlayer6Static5] -Tex = ScoreEndCap -X = 540 -Y = 450 -W = 110 -H = 30 -z = 0.9 -Color = P3Dark -Type = Colorized +[SongRouletteEqualizer] +Visible = 1 +Direction = 1 +Color = White +Alpha = 1 +X = 265 +Y = 476 +PieceW = 4 +PieceH = 4 +Space = 1 +Bands = 5 +Length = 15 Reflection = 1 -ReflectionSpacing = 0 +ReflectionSpacing = 2 -[ScorePlayer6Static6] -Tex = ScoreGlassBox -X = 540 -Y = 270 -W = 113 -H = 180 -Z = 0.89 +[SongRouletteMedleyIcon] +X = 335 +Y = 477 +W = 30 +H = 20 +Z = 0.95 Color = White +Tex = icon_song_medley Type = Transparent - -[ScorePlayer6Static7] -Tex = P -X = 540 -Y = 500 -W = 25 -H = 25 -Type = Colorized -Color = P3Dark -Z = 0.9 -Reflection = 1 -ReflectionSpacing = 4 +Reflection = 0 +ReflectionSpacing = 22 -[ScoreStaticNavigate] -X = 440 -Y = 545 -W = 32 -H = 30 -Z = 0.5 -Tex = ButtonNavi +[SongRouletteCalculatedMedleyIcon] +X = 335 +Y = 477 +W = 30 +H = 20 +Z = 0.95 Color = White +Tex = icon_song_calcmedley Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[ScoreTextNavigate] -X = 480 -Y = 548 -Z = 0.5 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_LEGEND_NAVIGATE -Reflection = 1 -ReflectionSpacing = 13 +Reflection = 0 +ReflectionSpacing = 22 -[ScorePlayer6Text1] -Text = P3 -X = 544 -Y = 503 -Size = 18 -Font = 1 -Type = Colorized +[SongRouletteVideoIcon] +X = 310 +Y = 475 +W = 18 +H = 24 +Z = 0.95 Color = White -Z = 1 -Reflection = 1 -ReflectionSpacing = 16 +Tex = icon_song_video +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 -[ScorePlayer6Avatar] -X = 677 -Y = 390 -W = 84 -H = 84 -Z = 0.9 - -[ScorePlayer6Static8] -X = 669 -Y = 382 -W = 100 -H = 100 -Z = 0.9 -Tex = AvatarFrame2 -Color = P3Dark +[SongRouletteDuetIcon] +X = 335 +Y = 465 +W = 20 +H = 24 +Z = 0.95 +Color = White +Tex = icon_song_duet Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 -[Options] -Texts = 6 -Fade = 2 +[SongRouletteStatic1] +X = 278 +Y = 100 +W = 244 +H = 200 +Z = 0.95 +Color = ColorLight +Tex = SongSelection1 +Type = Colorized -[OptionsBackground] -Tex = OptionsBG +[SongRouletteStatic2] +X = 300 +Y = 300 +W = 200 +H = 210 +Z = 0.95 +Color = ColorLight +Tex = SongSelection2 +Type = Colorized +Reflection = 0 +ReflectionSpacing = 2 -[OptionsStatic1] -X = 65 -Y = 110 -W = 25 -H = 25 +[SongRouletteTextArtist] +X = 400 +Y = 318 +W = 190 Color = White -Tex = IconOption -Type = Colorized +Font = 1 +Size = 24 +Align = 1 +Text = -[OptionsText1] -X = 95 -Y = 95 +[SongRouletteTextTitle] +X = 400 +Y = 384 +W = 190 Color = White Font = 0 -Size = 54 -Text = SING_OPTIONS -Align = 0 +Size = 24 +Align = 1 +Text = -[OptionsText2] -X = 95 -Y = 145 -Color = ColorLightest -Font = 0 -Size = 30 -Align = 0 -Text = SING_OPTIONS_DESC +[SongRouletteTextNumber] +X = 492 +Y = 477 +Z = 0.95 +Color = White +Size = 18 +Align = 2 +Reflection = 0 +ReflectionSpacing = 21 -[OptionsTextDescription] -X = 95 -Y = 175 +[SongRouletteTextYear] +X = 400 +Y = 477 +Z = 0.95 Color = White -Font = 0 -Size = 30 -Align = 0 -Text = +Size = 20 +Align = 1 -[OptionsStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +########## LEGEND ROULETTE ######### -[OptionsStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[SongRouletteStaticNonParty1] +X = 527 +Y = 405 +W = 163 +H = 107 +Z = 0 +Tex = BGFade Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi +[SongRouletteTextNonParty1] +X = 606 +Y = 410 +Z = 0.952 +Color = White +Font = 1 +Size = 14 +Align = 1 +Text = SING_SONG_SELECTION_LEGEND_TITLE + +[SongRouletteStaticNonParty2] +X = 541 +Y = 430 +W = 15 +H = 20 +Tex = icon_song_video Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsText3] -X = 300 -Y = 548 -Color = Black + +[SongRouletteTextNonParty2] +X = 570 +Y = 432 +Z = 0.952 +Color = White Font = 0 -Size = 24 +Size = 12 Align = 0 -Text = SING_LEGEND_NAVIGATE -Reflection=1 -ReflectionSpacing=13 +Text = SING_SONG_SELECTION_LEGEND_VIDEO -[OptionsStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEnter +[SongRouletteStaticNonParty3] +X = 540 +Y = 450 +W = 26 +H = 16 +Tex = icon_song_medley Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsText4] -X = 440 -Y = 548 -Color = Black +[SongRouletteTextNonParty3] +X = 570 +Y = 452 +Z = 0.952 +Color = White Font = 0 -Size = 24 +Size = 12 Align = 0 -Text = SING_LEGEND_SELECT -Reflection=1 -ReflectionSpacing=13 +Text = SING_SONG_SELECTION_LEGEND_MEDLEY -[OptionsStatic6] -X = 550 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEsc +[SongRouletteStaticNonParty4] +X = 540 +Y = 470 +W = 26 +H = 16 +Tex = icon_song_calcmedley Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsText5] -X = 590 -Y = 548 -Color = Black +[SongRouletteTextNonParty4] +X = 570 +Y = 472 +Z = 0.952 +Color = White Font = 0 -Size = 24 +Size = 12 Align = 0 -Text = SING_LEGEND_ESC -Reflection=1 -ReflectionSpacing=13 +Text = SING_SONG_SELECTION_LEGEND_MEDLEYC -[OptionsButtonGame] -X = 95 -Y = 215 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark + +[SongRouletteStaticNonParty5] +X = 540 +Y = 490 +W = 13 +H = 17 +Tex = icon_song_duet +Color = White Type = Transparent -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 -[OptionsButtonGameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_GAME +[SongRouletteTextNonParty5] +X = 570 +Y = 492 +Z = 0.952 Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_DUET -[OptionsButtonGraphics] -X = 250 -Y = 215 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 -[OptionsButtonGraphicsText1] -X = 75 -Y = 10 +#[SongRouletteTextScore] +#X = 130 +#Y = 450 +#Color = ColorLight +#Font = 0 +#Size = 24 +#Align = 0 + +[SongRouletteTextMaxScore] +X = 30 +Y = 500 +Color = White Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_GRAPHICS +Size = 22 +Align = 0 +Text =SONG_SCORE_MAX + +[SongRouletteTextMediaScore] +X = 30 +Y = 540 Color = White +Font = 0 +Size = 22 +Align = 0 +Text =SONG_SCORE_MEDIA -[OptionsButtonSound] -X = 405 -Y = 215 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 - -[OptionsButtonSoundText1] -X = 75 -Y = 10 +[SongRouletteTextMaxScore2] +X = 170 +Y = 500 +Color = White Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_SOUND +Size = 22 +Align = 2 + +[SongRouletteTextMediaScore2] +X = 170 +Y = 540 Color = White +Font = 0 +Size = 22 +Align = 2 -[OptionsButtonLyrics] -X = 560 -Y = 215 -W = 150 -H = 50 -Tex = Button +[SongRouletteTextScoreUser] +X = 170 +Y = 518 Color = ColorLight -DColor = ColorDark -Type = Transparent -Align = 0 -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 - -[OptionsButtonLyricsText1] -X = 75 -Y = 10 Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_LYRICS -Color = White +Size = 20 +Align = 2 -[OptionsButtonThemes] -X = 95 -Y = 325 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent +[SongRouletteTextMaxScoreLocal] +X = 180 +Y = 500 +Color = White +Font = 0 +Size = 22 Align = 0 -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 -[OptionsButtonThemesText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_THEMES +[SongRouletteTextMediaScoreLocal] +X = 180 +Y = 540 Color = White +Font = 0 +Size = 22 +Align = 0 -[OptionsButtonRecord] -X = 250 -Y = 325 -W = 150 -H = 50 -Tex = Button +[SongRouletteTextScoreUserLocal] +X = 180 +Y = 518 Color = ColorLight -DColor = ColorDark -Type = Transparent +Font = 0 +Size = 20 Align = 0 -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 -[OptionsButtonRecordText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_RECORD -Color = White -Texts = 1 +#Variable statics and texts for song-screen in sing- and partymode +# There can be an unlimited Number of Statics and Texts, As long +# as the numbers are in order. +# Statics that are shown in PartyMode Only are Named_ +# SongStaticParty[No] +# Texts that are shown in PartyMode Only are Named_ +# SongTextParty[No] +# Statics that are shown in Normal Mode Only are Named_ +# SongStaticNonParty[No] +# Texts that are shown in Normal Mode Only are Named_ +# SongTextNonParty[No] +#Here are the ones for singmode -[OptionsButtonAdvanced] -X = 405 -Y = 325 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent +[SongRouletteTextNonParty6] +X = 30 +Y = 6 +Color = White +Font = 0 +Size = 60 +Text = SING_SONG_SELECTION Align = 0 -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 -[OptionsButtonAdvancedText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_ADVANCED +# Menu opens with [M] +[SongRouletteStaticNonParty6] +X = 255 +Y = 560 +W = 25 +H = 30 +Z = 0.952 +Tex = ButtonM Color = White -Texts = 1 - -[OptionsButtonNetwork] -X = 560 -Y = 325 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark Type = Transparent -Align = 0 -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 +Reflection = 0 +ReflectionSpacing = 2 -[OptionsButtonNetworkText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_NETWORK +[SongRouletteTextNonParty7] +X = 287 +Y = 563 +Z = 0.952 Color = White -Texts = 1 - -[OptionsButtonWebcam] -X = 95 -Y = 435 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent +Font = 0 +Size = 24 Align = 0 -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 +Text = SING_SONG_SELECTION_MENU +Reflection = 0 +ReflectionSpacing = 13 -[OptionsButtonWebcamText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_WEBCAM +# The so famous search, shown with [J] +[SongRouletteStaticNonParty7] +X = 375 +Y = 560 +W = 25 +H = 30 +Z = 0.952 +Tex = ButtonJ Color = White - -[OptionsButtonJukebox] -X = 250 -Y = 435 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark Type = Transparent -Align = 0 -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 +Reflection = 0 +ReflectionSpacing = 2 -[OptionsButtonJukeboxText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_JUKEBOX +[SongRouletteTextNonParty8] +X = 407 +Y = 563 +Z = 0.952 Color = White +Font = 0 +Size = 24 +Align = 0 +Text = SONG_JUMPTO_DESC +Reflection = 0 +ReflectionSpacing = 13 -[OptionsButtonExit] -X = 405 -Y = 435 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Align = 0 -Texts = 1 -Fade = 1 -FadeText = 1 -SelectH = 100 -FadeTex = ButtonFade -FadeTexPos = 0 - -[OptionsButtonExitText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_EXIT -Color = White - -[OptionsGame] -Texts = 5 - -[OptionsGameBackground] -Tex = OptionsBG - -[OptionsGameStatic1] -X = 40 -Y = 22 +# [P]laylist +[SongRouletteStaticNonParty8] +X = 580 +Y = 560 W = 25 -H = 23 +H = 30 +Z = 0.952 +Tex = ButtonP Color = White -Tex = IconOption Type = Transparent +Reflection = 0 +ReflectionSpacing = 2 -[OptionsGameText1] -X = 70 -Y = 5 -Color = White -Size = 54 -Text = SING_OPTIONS - -[OptionsGameText2] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_GAME_DESC - -[OptionsGameText3] -X = 70 -Y = 85 +[SongRouletteTextNonParty9] +X = 612 +Y = 563 +Z = 0.952 Color = White -Size = 30 -Text = SING_OPTIONS_GAME_WHEREAMI +Font = 0 +Size = 24 +Align = 0 +Text = SING_SONG_SELECTION_PLAYLIST +Reflection = 0 +ReflectionSpacing = 13 -[OptionsGameStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +#and these are the ones for partymode -[OptionsGameStatic3] -X = 250 +# NAVBAR for party +# enter a number +[SongRouletteStaticParty1] +X = 200 Y = 545 -W = 550 +Z = 0.952 +W = 26 H = 30 -Tex = Leiste2 +Tex = Button13 Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsGameStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi +[SongRouletteTextParty1] +X = 230 +Y = 547 +Z = 0.952 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[OptionsGameText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black +Font = 0 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_NAVIGATE +Align = 0 +Text = SONG_MENU_NAME_PARTY_JOKER +Reflection = 0 +ReflectionSpacing = 13 -[OptionsGameStatic5] -X = 400 +# menu +[SongRouletteStaticParty2] +X = 390 Y = 545 -W = 32 +Z = 0.952 +W = 26 H = 30 -Tex = ButtonEsc +Tex = ButtonM Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsGameText5] -X = 440 -Y = 548 -Z = 0.5 -Color = Black +[SongRouletteTextParty2] +X = 420 +Y = 547 +Z = 0.952 +Color = White +Font = 0 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_ESC +Align = 0 +Text = PARTY_SONG_MENU +Reflection = 0 +ReflectionSpacing = 13 -[OptionsGameSelectSlideLanguage] -Text = SING_OPTIONS_GAME_LANGUAGE -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent +#Texts for Party Mode +[SongRouletteTextParty3] X = 70 -Y = 130 -W = 250 -H = 40 -SkipX = 10 +Y = 5 +Font = 0 +Size = 60 +Color = White +Text = PARTY_MODE -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongRouletteTextParty3] +X = 238 +Y = 548 +Color = White +Font = 0 +Size = 21 +Align = 2 +Text = PARTY_SONG_WHEREAMI +#variable statics end -[OptionsGameSelectSongMenu] -Text = SING_OPTIONS_GAME_SONGMENU -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 180 -W = 250 +# Jokers, 5 for each team, only shown in party Mode +[SongRouletteStaticTeam1Joker1] +Tex = Joker +X = 505 +Y = 400 +W = 35 H = 40 -SkipX = 10 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGameSelectTabs] -Text = SING_OPTIONS_GAME_TABS -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 230 -W = 250 +[SongRouletteStaticTeam1Joker2] +Tex = Joker +X = 555 +Y = 400 +W = 35 H = 40 -SkipX = 10 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGameSelectSlideSorting] -Text = SING_OPTIONS_GAME_SORTING -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 280 -W = 250 +[SongRouletteStaticTeam1Joker3] +Tex = Joker +X = 605 +Y = 400 +W = 35 H = 40 -SkipX = 10 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGameSelectShowScores] -Text = SING_OPTIONS_GAME_SHOWSCORES -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 330 -W = 250 +[SongRouletteStaticTeam1Joker4] +Tex = Joker +X = 655 +Y = 400 +W = 35 H = 40 -SkipX = 10 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongRouletteStaticTeam1Joker5] +Tex = Joker +X = 705 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGameSelectDebug] -Text = SING_OPTIONS_GAME_DEBUG -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 380 -W = 250 +[SongRouletteStaticTeam2Joker1] +Tex = Joker +X = 505 +Y = 450 +W = 35 H = 40 -SkipX = 10 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongRouletteStaticTeam2Joker2] +Tex = Joker +X = 555 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGameButtonExit] -X = 70 -Y = 440 -W = 250 +[SongRouletteStaticTeam2Joker3] +Tex = Joker +X = 605 +Y = 450 +W = 35 H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGraphics] -Texts = 5 +[SongRouletteStaticTeam2Joker4] +Tex = Joker +X = 655 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGraphicsBackground] -Tex = OptionsBG +[SongRouletteStaticTeam2Joker5] +Tex = Joker +X = 705 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGraphicsStatic1] -X = 40 -Y = 22 -W = 25 -H = 23 -Color = White -Tex = IconOption -Type = Transparent +[SongRouletteStaticTeam3Joker1] +Tex = Joker +X = 505 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGraphicsText1] -X = 70 -Y = 5 -Color = White -Size = 54 -Text = SING_OPTIONS +[SongRouletteStaticTeam3Joker2] +Tex = Joker +X = 555 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGraphicsText2] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_GRAPHICS_DESC +[SongRouletteStaticTeam3Joker3] +Tex = Joker +X = 605 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGraphicsText3] -X = 70 -Y = 85 -Color = White -Size = 30 -Text = SING_OPTIONS_GRAPHICS_WHEREAMI +[SongRouletteStaticTeam3Joker4] +Tex = Joker +X = 655 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGraphicsStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight +[SongRouletteStaticTeam3Joker5] +Tex = Joker +X = 705 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsGraphicsStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[SongRouletteTextPartyTime] +X = 750 +Y = 450 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +DColor = Red +Font = 1 +Size = 70 +Align = 2 -[OptionsGraphicsStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi -Color = White +[SongRouletteInfoMessageBG] +Tex = SongMessage +X = 250 +Y = 90 +W = 300 +H = 25 +Z = 0.98 +Color = ColorDark Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[OptionsGraphicsText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Text = SING_LEGEND_NAVIGATE -Reflection = 1 -ReflectionSpacing = 20 -[OptionsGraphicsStatic5] +[SongRouletteInfoMessageText] X = 400 -Y = 545 -W = 32 -H = 30 -Z = 0.5 -Tex = ButtonEsc +Y = 94 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Font = 1 +Size = 20 +Align = 1 -[OptionsGraphicsText5] -X = 440 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Text = SING_LEGEND_ESC -Reflection = 1 -ReflectionSpacing = 20 +############################# +## ## +## Medley Playlist ## +## ## +############################# -[OptionsGraphicsSelectSlideResolution] -Text = SING_OPTIONS_GRAPHICS_RESOLUTION -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 130 -W = 250 -H = 40 -SkipX = 10 +[SongRouletteTextMedleyMax] +N = 3 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongRouletteTextMedleyNumber1] +X=27 +Y=375 +Color=White +Font=1 +Size=20 +Align=1 -[OptionsGraphicsSelectFullscreen] -Text = SING_OPTIONS_GRAPHICS_FULLSCREEN -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 180 -W = 250 -H = 40 -SkipX = 10 +[SongRouletteTextMedleyArtist1] +X=50 +Y=366 +Color=ColorDark +Font=0 +Size=20 +Align=0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongRouletteTextMedleyTitle1] +X=50 +Y=383 +Color=White +Font=0 +Size=20 +Align=0 -[OptionsGraphicsSelectDepth] -Text = SING_OPTIONS_GRAPHICS_DEPTH -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 230 -W = 250 -H = 40 -SkipX = 10 +[SongRouletteTextMedleyNumber2] +X=27 +Y=420 +Color=White +Font=1 +Size=20 +Align=1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongRouletteTextMedleyArtist2] +X=50 +Y=411 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[OptionsGraphicsSelectVisualizer] -Text = SING_OPTIONS_GRAPHICS_VISUALIZER -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 280 -W = 250 -H = 40 -SkipX = 10 +[SongRouletteTextMedleyTitle2] +X=50 +Y=428 +Color=White +Font=0 +Size=20 +Align=0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongRouletteTextMedleyNumber3] +X=27 +Y=465 +Color=White +Font=1 +Size=20 +Align=1 -[OptionsGraphicsSelectOscilloscope] -Text = SING_OPTIONS_GRAPHICS_OSCILLOSCOPE -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 330 -W = 250 -H = 40 -SkipX = 10 +[SongRouletteTextMedleyArtist3] +X=50 +Y=454 +Color=ColorDark +Font=0 +Size=20 +Align=0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongRouletteTextMedleyTitle3] +X=50 +Y=471 +Color=White +Font=0 +Size=20 +Align=0 -[OptionsGraphicsSelectMovieSize] -Text = SING_OPTIONS_GRAPHICS_MOVIE_SIZE -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 380 -W = 250 -H = 40 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[OptionsGraphicsButtonExit] -X = 70 -Y = 440 -W = 250 -H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongRouletteStaticMedley1] +Tex = PlayerNumberBox +X = 15 +Y = 370 +W = 25 +H = 30 +Color = ColorDark +Type = Colorized -[OptionsSound] -Texts = 5 - -[OptionsSoundBackground] -Tex = OptionsBG +[SongRouletteStaticMedley2] +Tex = PlayerNumberBox +X = 15 +Y = 415 +W = 25 +H = 30 +Color = ColorDark +Type = Colorized -[OptionsSoundStatic1] -X = 40 -Y = 22 +[SongRouletteStaticMedley3] +Tex = PlayerNumberBox +X = 15 +Y = 460 W = 25 -H = 23 -Color = White -Tex = IconOption -Type = Transparent +H = 30 +Color = ColorDark +Type = Colorized -[OptionsSoundText1] -X = 70 -Y = 5 -Color = White -Size = 54 -Text = SING_OPTIONS -[OptionsSoundText2] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_SOUND_DESC -[OptionsSoundText3] -X = 70 -Y = 85 -Color = White -Size = 30 -Text = SING_OPTIONS_SOUND_WHEREAMI +######################################################################################## +##### ##### +##### Chessboard ##### +##### ##### +######################################################################################## -[OptionsSoundStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 +[SongChessboard] + +[SongChessboardBackground] +Tex = SongBG + +[SongChessboardStatic1] +X = 750 +Y = 189 +W = 35 +H = 46 +Z = 0.4 +Tex = SongSelection1up Color = ColorLight Type = Colorized -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[OptionsSoundStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 +[SongChessboardStatic2] +X = 750 +Y = 333 +W = 35 +H = 46 +Z = 0.951 +Tex = SongSelection1dn +Color = ColorLight +Type = Colorized +Reflection = 0 ReflectionSpacing = 2 -[OptionsSoundStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi +[SongChessboardCover] +X = 240 +Y = 100 +W = 80 +H = 90 +SelectX = 10 +SelectY = 100 +SelectW = 195 +SelectH = 170 +ZoomThumbW = 100 +ZoomThumbH = 120 +ZoomThumbStyle = 0 +Rows = 4 +Cols = 6 +Padding = 2 +Reflections = 0 +Tex = PlayerNumberBox + +[SongChessboardEqualizer] +Visible = 0 +Direction = 1 Color = White -Type = Transparent +Alpha = 1 +X = 745 +Y = 570 +PieceW = 4 +PieceH = 4 +Space = 1 +Bands = 8 +Length = 30 Reflection = 1 ReflectionSpacing = 2 -[OptionsSoundText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Text = SING_LEGEND_NAVIGATE -Reflection = 1 -ReflectionSpacing = 20 +[SongChessboardMedleyIcon] +X = 40 +Y = 433 +W = 28 +H = 18 +Z = 0.95 +Color = White +Tex = icon_song_medley +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 -[OptionsSoundStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEsc +[SongChessboardCalculatedMedleyIcon] +X = 40 +Y = 433 +W = 28 +H = 18 +Z = 0.95 Color = White +Tex = icon_song_calcmedley Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Reflection = 0 +ReflectionSpacing = 22 -[OptionsSoundText5] -X = 440 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Text = SING_LEGEND_ESC -Reflection = 1 -ReflectionSpacing = 20 +[SongChessboardVideoIcon] +X = 18 +Y = 430 +W = 16 +H = 23 +Z = 0.95 +Color = White +Tex = icon_song_video +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 -[OptionsSoundSelectVoicePassthrough] -Tex = MainBar +[SongChessboardDuetIcon] +X = 40 +Y = 430 +W = 18 +H = 22 +Z = 0.95 +Color = White +Tex = icon_song_duet Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_SOUND_VOICEPASSTHROUGH -X = 70 -Y = 130 -W = 250 -H = 35 -SkipX = 10 +Reflection = 0 +ReflectionSpacing = 22 -DColor = ColorDark +[SongChessboardStatic3] +X = 10 +Y = 270 +W = 195 +H = 195 +Z = 0.10 Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +alpha = 0.45 +Tex = SongSelection2 +Type = Colorized +Reflection = 0 +ReflectionSpacing = 2 -[OptionsSoundSelectBackgroundMusic] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_SOUND_BACKGROUNDMUSIC -X = 70 -Y = 170 -W = 250 -H = 35 -SkipX = 10 +[SongChessboardTextArtist] +X = 105 +Y = 292 +W = 180 +Color = White +Font = 1 +Size = 21 +Align = 1 +Text = -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardTextTitle] +X = 105 +Y = 355 +W = 180 +Color = White +Font = 0 +Size = 21 +Align = 1 +Text = -[OptionsSoundSelectMicBoost] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_SOUND_MIC_BOOST -X = 70 -Y = 417 -W = 250 -H = 40 -SkipX = 10 +[SongChessboardTextNumber] +X = 195 +Y = 435 +Z = 0.95 +Color = White +Size = 15 +Align = 2 +Reflection = 0 +ReflectionSpacing = 21 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardTextYear] +X = 105 +Y = 431 +Z = 0.95 +Color = White +Size = 18 +Align = 1 -[OptionsSoundSelectClickAssist] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_SOUND_CLICK_ASSIST -X = 70 -Y = 250 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +################# +#### Legend #### +################# -[OptionsSoundSelectBeatClick] -Tex = MainBar +[SongChessboardStaticNonParty1] +X = 567 +Y = 485 +W = 163 +H = 107 +Z = 0 +Tex = BGFade +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_SOUND_BEAT_CLICK -X = 70 -Y = 290 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardTextNonParty1] +X = 646 +Y = 490 +Z = 0.952 +Color = White +Font = 1 +Size = 14 +Align = 1 +Text = SING_SONG_SELECTION_LEGEND_TITLE -[OptionsSoundSelectSlidePreviewVolume] -Tex = MainBar +[SongChessboardStaticNonParty2] +X = 581 +Y = 510 +W = 15 +H = 20 +Tex = icon_song_video +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_SOUND_PREVIEWVOLUME -X = 70 -Y = 370 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[OptionsSoundSelectSlidePreviewFADING] -Tex = MainBar +[SongChessboardTextNonParty2] +X = 610 +Y = 512 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_VIDEO + +[SongChessboardStaticNonParty3] +X = 580 +Y = 530 +W = 26 +H = 16 +Tex = icon_song_medley +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_SOUND_PREVIEWFADING -X = 70 -Y = 410 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardTextNonParty3] +X = 610 +Y = 532 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEY -[OptionsSoundButtonExit] -X = 70 -Y = 460 -W = 250 -H = 35 -Tex = Button -Color = ColorLight -DColor = ColorDark +[SongChessboardStaticNonParty4] +X = 580 +Y = 550 +W = 26 +H = 16 +Tex = icon_song_calcmedley +Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsLyrics] -Texts = 1 +[SongChessboardTextNonParty4] +X = 610 +Y = 552 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEYC -[OptionsLyricsBackground] -Tex = OptionsBG -[OptionsLyricsStatic1] -X = 40 -Y = 22 -W = 25 -H = 23 +[SongChessboardStaticNonParty5] +X = 580 +Y = 570 +W = 13 +H = 17 +Tex = icon_song_duet Color = White -Tex = IconOption Type = Transparent -[OptionsLyricsText1] -X = 70 -Y = 5 +[SongChessboardTextNonParty5] +X = 610 +Y = 572 +Z = 0.952 Color = White -Size = 54 -Text = SING_OPTIONS +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_DUET -[OptionsLyricsText2] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_LYRICS_DESC +[SongChessboardTextScore] +X = 30 +Y = 410 +Color = White +Font = 1 +Size = 24 +Align = 0 -[OptionsLyricsText3] -X = 70 -Y = 85 +[SongChessboardTextMaxScore] +X = 15 +Y = 488 Color = White -Size = 30 -Text = SING_OPTIONS_LYRICS_WHEREAMI +Font = 0 +Size = 20 +Align = 0 +Text =SONG_SCORE_MAX -[OptionsLyricsStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[SongChessboardTextMediaScore] +X = 15 +Y = 528 +Color = White +Font = 0 +Size = 20 +Align = 0 +Text =SONG_SCORE_MEDIA -[OptionsLyricsStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[SongChessboardTextMaxScore2] +X = 110 +Y = 488 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 20 +Align = 2 -[OptionsLyricsStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi +[SongChessboardTextMediaScore2] +X = 110 +Y = 528 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 20 +Align = 2 -[OptionsLyricsText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Text = SING_LEGEND_NAVIGATE -Reflection = 1 -ReflectionSpacing = 20 +[SongChessboardTextScoreUser] +X = 70 +Y = 506 +Color = ColorLight +Font = 0 +Size = 20 +Align = 2 -[OptionsLyricsStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEsc +[SongChessboardTextMaxScoreLocal] +X = 85 +Y = 488 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 20 +Align = 0 -[OptionsLyricsText5] -X = 440 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Text = SING_LEGEND_ESC -Reflection = 1 -ReflectionSpacing = 20 +[SongChessboardTextMediaScoreLocal] +X = 85 +Y = 528 +Color = White +Font = 0 +Size = 20 +Align = 0 -[OptionsLyricsSelectLyricsFont] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_LYRICS_FONT -X = 70 -Y = 130 -W = 250 -H = 40 -SkipX = 10 - -DColor = ColorDark +[SongChessboardTextScoreUserLocal] +X = 85 +Y = 506 Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark - -[OptionsLyricsSelectLyricsEffect] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_LYRICS_EFFECT -X = 70 -Y = 180 -W = 250 -H = 40 -SkipX = 10 +Font = 0 +Size = 20 +Align = 0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +#Variable statics and texts for song-screen in sing- and partymode +# There can be an unlimited Number of Statics and Texts, As long +# as the numbers are in order. +# Statics that are shown in PartyMode Only are Named_ +# SongStaticParty[No] +# Texts that are shown in PartyMode Only are Named_ +# SongTextParty[No] +# Statics that are shown in Normal Mode Only are Named_ +# SongStaticNonParty[No] +# Texts that are shown in Normal Mode Only are Named_ +# SongTextNonParty[No] +#Here are the ones for singmode -[OptionsLyricsSelectNoteLines] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_LYRICS_NOTELINES -X = 70 -Y = 230 -W = 250 -H = 40 -SkipX = 10 +[SongChessboardTextNonParty6] +X = 30 +Y = 15 +Color = White +Font = 0 +Size = 60 +Text = SING_SONG_SELECTION +Align = 0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[OptionsLyricsButtonExit] -X = 70 -Y = 290 -W = 250 -H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark +# Menu opens with [M] +[SongChessboardStaticNonParty6] +X = 200 +Y = 560 +W = 28 +H = 30 +Z = 0.952 +Tex = ButtonM +Color = White Type = Transparent -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[OptionsThemes] -Texts = 5 - -[OptionsThemesBackground] -Tex = OptionsBG - -[OptionsThemesStatic1] -X = 40 -Y = 22 -W = 25 -H = 23 +[SongChessboardTextNonParty7] +X = 237 +Y = 562 +Z = 0.952 Color = White -Tex = IconOption -Type = Transparent +Font = 0 +Size = 22 +Align = 0 +Text = SING_SONG_SELECTION_MENU +Reflection = 0 +ReflectionSpacing = 13 -[OptionsThemesText1] -X = 70 -Y = 5 +# The so famous search, shown with [J] +[SongChessboardStaticNonParty7] +X = 295 +Y = 560 +W = 28 +H = 30 +Z = 0.952 +Tex = ButtonJ Color = White -Size = 54 -Text = SING_OPTIONS - -[OptionsThemesText2] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_THEMES_DESC +Type = Transparent +Reflection = 0 +ReflectionSpacing = 2 -[OptionsThemesText3] -X = 70 -Y = 85 +[SongChessboardTextNonParty8] +X = 331 +Y = 562 +Z = 0.952 Color = White -Size = 30 -Text = SING_OPTIONS_THEMES_WHEREAMI - -[OptionsThemesStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 22 +Align = 0 +Text = SONG_JUMPTO_DESC +Reflection = 0 +ReflectionSpacing = 13 -[OptionsThemesStatic3] -X = 250 -Y = 545 -W = 550 +# [P]laylist +[SongChessboardStaticNonParty8] +X = 465 +Y = 560 +W = 28 H = 30 -Tex = Leiste2 +Z = 0.952 +Tex = ButtonP Color = White Type = Transparent -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[OptionsThemesStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi +[SongChessboardTextNonParty9] +X = 501 +Y = 562 +Z = 0.952 +Color = White +Font = 0 +Size = 22 +Align = 0 +Text = SING_SONG_SELECTION_PLAYLIST +Reflection = 0 +ReflectionSpacing = 13 + +#and these are the ones for partymode +# NAVBAR for party +# enter a number +[SongChessboardStaticParty1] +X = 232 +Y = 561 +Z = 0.952 +W = 26 +H = 28 +Tex = Button13 Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsThemesText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black +[SongChessboardTextParty1] +X = 262 +Y = 562 +Z = 0.952 +Color = White +Font = 0 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_NAVIGATE +Align = 0 +Text = SONG_MENU_NAME_PARTY_JOKER +Reflection = 0 +ReflectionSpacing = 13 -[OptionsThemesStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEsc +# menu +[SongChessboardStaticParty2] +X = 410 +Y = 561 +Z = 0.952 +W = 26 +H = 28 +Tex = ButtonM Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsThemesText5] +[SongChessboardTextParty2] X = 440 -Y = 548 -Z = 0.5 -Color = Black +Y = 562 +Z = 0.952 +Color = White +Font = 0 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_ESC - -[OptionsThemesSelectTheme] -Text = SING_OPTIONS_THEMES_THEME -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 130 -W = 250 -H = 40 -SkipX = 10 +Align = 0 +Text = PARTY_SONG_MENU +Reflection = 0 +ReflectionSpacing = 13 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +#Texts for Party Mode +[SongChessboardTextParty3] +X = 30 +Y = 15 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 +Font = 0 +Size = 60 +Color = White +Text = PARTY_MODE -[OptionsThemesSelectSkin] -Text = SING_OPTIONS_THEMES_SKIN -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 180 -W = 250 -H = 40 -SkipX = 10 +# Jokers, 5 for each team, only shown in party Mode +[SongChessboardStaticTeam1Joker1] +Tex = Joker +X = 565 +Y = 489 +W = 25 +H = 28 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardStaticTeam1Joker2] +Tex = Joker +X = 600 +Y = 489 +W = 25 +H = 28 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsThemesSelectColor] -Text = SING_OPTIONS_THEMES_COLOR -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 230 -W = 250 -H = 40 -SkipX = 10 +[SongChessboardStaticTeam1Joker3] +Tex = Joker +X = 635 +Y = 489 +W = 25 +H = 28 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardStaticTeam1Joker4] +Tex = Joker +X = 670 +Y = 489 +W = 25 +H = 28 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsThemesButtonExit] -X = 70 -Y = 290 -W = 250 -H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongChessboardStaticTeam1Joker5] +Tex = Joker +X = 705 +Y = 489 +W = 25 +H = 28 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecord] -Texts = 5 +[SongChessboardStaticTeam2Joker1] +Tex = Joker +X = 565 +Y = 526 +W = 25 +H = 28 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordBackground] -Tex = OptionsBG +[SongChessboardStaticTeam2Joker2] +Tex = Joker +X = 600 +Y = 526 +W = 25 +H = 28 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordStatic1] -X = 40 -Y = 22 +[SongChessboardStaticTeam2Joker3] +Tex = Joker +X = 635 +Y = 526 W = 25 -H = 23 -Color = White -Tex = IconOption -Type = Transparent +H = 28 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordText1] -X = 70 -Y = 5 -Color = White -Size = 54 -Text = SING_OPTIONS +[SongChessboardStaticTeam2Joker4] +Tex = Joker +X = 670 +Y = 526 +W = 25 +H = 28 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordText2] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_RECORD_DESC +[SongChessboardStaticTeam2Joker5] +Tex = Joker +X = 705 +Y = 526 +W = 25 +H = 28 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordText3] -X = 70 -Y = 85 -Color = White -Size = 30 -Text = SING_OPTIONS_RECORD_WHEREAMI +[SongChessboardStaticTeam3Joker1] +Tex = Joker +X = 565 +Y = 561 +W = 25 +H = 28 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight +[SongChessboardStaticTeam3Joker2] +Tex = Joker +X = 600 +Y = 561 +W = 25 +H = 28 +Z = 0.98 +Color = P3Dark Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongChessboardStaticTeam3Joker3] +Tex = Joker +X = 635 +Y = 561 +W = 25 +H = 28 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongChessboardStaticTeam3Joker4] +Tex = Joker +X = 670 +Y = 561 +W = 25 +H = 28 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_NAVIGATE +[SongChessboardStaticTeam3Joker5] +Tex = Joker +X = 705 +Y = 561 +W = 25 +H = 28 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsRecordStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEsc +[SongChessboardTextPartyTime] +X = 750 +Y = 450 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[OptionsRecordText5] -X = 440 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_ESC +DColor = Red +Font = 1 +Size = 70 +Align = 2 -[OptionsRecordSelectSlideCard] -Text = SING_OPTIONS_RECORD_CARD -Tex = MainBar +[SongChessboardInfoMessageBG] +Tex = SongMessage +X = 250 +Y = 90 +W = 300 +H = 25 +Z = 0.98 +Color = ColorDark Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 130 -W = 250 -H = 40 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardInfoMessageText] +X = 400 +Y = 94 +Color = White +Font = 1 +Size = 20 +Align = 1 -[OptionsRecordSelectSlideInput] -Text = SING_OPTIONS_RECORD_INPUT -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 180 -W = 250 -H = 40 -SkipX = 10 +############################# +## ## +## Medley Playlist ## +## ## +############################# -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardTextMedleyMax] +N = 2 -[OptionsRecordSelectSlideChannel] -Text = SING_OPTIONS_RECORD_CHANNEL -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 230 -W = 250 -H = 40 -SkipX = 10 +[SongChessboardTextMedleyNumber1] +X=215 +Y=485 +Color=White +Font=1 +Size=20 +Align=1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardTextMedleyArtist1] +X=237 +Y=480 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[OptionsSoundSelectThreshold] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_SOUND_THRESHOLD -X = 70 -Y = 367 -W = 250 -H = 40 -SkipX = 10 +[SongChessboardTextMedleyTitle1] +X=237 +Y=495 +Color=White +Font=0 +Size=20 +Align=0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongChessboardTextMedleyNumber2] +X=215 +Y=525 +Color=White +Font=1 +Size=20 +Align=1 -[OptionsRecordButtonExit] -X = 70 -Y = 470 -W = 250 -H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongChessboardTextMedleyArtist2] +X=237 +Y=515 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[OptionsAdvanced] -Texts = 5 +[SongChessboardTextMedleyTitle2] +X=237 +Y=530 +Color=White +Font=0 +Size=20 +Align=0 -[OptionsAdvancedBackground] -Tex = OptionsBG +[SongChessboardStaticMedley1] +Tex = PlayerNumberBox +X = 203 +Y = 480 +W = 25 +H = 30 +Color = ColorDark +Type = Colorized -[OptionsAdvancedStatic1] -X = 40 -Y = 22 +[SongChessboardStaticMedley2] +Tex = PlayerNumberBox +X = 203 +Y = 520 W = 25 -H = 23 -Color = White -Tex = IconOption -Type = Transparent +H = 30 +Color = ColorDark +Type = Colorized -[OptionsAdvancedText1] -X = 70 -Y = 5 -Color = White -Size = 54 -Text = SING_OPTIONS -[OptionsAdvancedText3] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_ADVANCED_DESC +######################################################################################## +##### ##### +##### Carousel ##### +##### ##### +######################################################################################## -[OptionsAdvancedText2] -X = 70 -Y = 85 -Color = White -Size = 30 -Text = SING_OPTIONS_ADVANCED_WHEREAMI +[SongCarousel] -[OptionsAdvancedStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[SongCarouselBackground] +Tex = SongBG -[OptionsAdvancedStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 + +[SongCarouselCover] +X = 300 +Y = 120 +W = 200 +H = 200 +Padding = 60 +Reflections = 1 + +[SongCarouselEqualizer] +Visible = 1 +Direction = 1 Color = White -Type = Transparent +Alpha = 1 +X = 265 +Y = 500 +PieceW = 4 +PieceH = 4 +Space = 1 +Bands = 5 +Length = 15 Reflection = 1 ReflectionSpacing = 2 -[OptionsAdvancedStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi +[SongCarouselMedleyIcon] +X = 335 +Y = 477 +W = 30 +H = 20 +Z = 0.95 Color = White +Tex = icon_song_medley Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Reflection = 0 +ReflectionSpacing = 22 -[OptionsAdvancedText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_NAVIGATE +[SongCarouselCalculatedMedleyIcon] +X = 335 +Y = 477 +W = 30 +H = 20 +Z = 0.95 +Color = White +Tex = icon_song_calcmedley +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 -[OptionsAdvancedStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEsc +[SongCarouselVideoIcon] +X = 310 +Y = 475 +W = 18 +H = 24 +Z = 0.95 Color = White +Tex = icon_song_video Type = Transparent -Reflection = 1 +Reflection = 0 +ReflectionSpacing = 22 + +[SongCarouselDuetIcon] +X = 335 +Y = 475 +W = 20 +H = 24 +Z = 0.95 +Color = White +Tex = icon_song_duet +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 + +[SongCarouselStatic1] +X = 278 +Y = 120 +W = 244 +H = 200 +Z = 0.95 +Color = ColorLight +Tex = SongSelection1 +Type = Colorized + +[SongCarouselStatic2] +X = 300 +Y = 320 +W = 200 +H = 190 +Z = 0.95 +Color = ColorLight +Tex = SongSelection2 +Type = Colorized +Reflection = 0 ReflectionSpacing = 2 -[OptionsAdvancedText5] -X = 440 -Y = 548 -Z = 0.5 -Color = Black +[SongCarouselTextArtist] +X = 400 +Y = 328 +W = 190 +Color = White +Font = 1 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_ESC +Align = 1 +Text = -#########unused at the moment######### -#[OptionsAdvancedSelectLoadAnimation] -#Text = SING_OPTIONS_ADVANCED_LOADANIMATION -#Tex = MainBar -#TexSBG = SelectBG -#X = 40 -#Y = 85 -#W = 230 -#H = 70 -#SkipX = 10 +[SongCarouselTextTitle] +X = 400 +Y = 394 +W = 190 +Color = White +Font = 0 +Size = 24 +Align = 1 +Text = -#Color = ColorDark -#DColor = ColorLight -#TColor = White -#TDColor = White +[SongCarouselTextNumber] +X = 492 +Y = 477 +Z = 0.95 +Color = White +Size = 18 +Align = 2 +Reflection = 0 +ReflectionSpacing = 21 -#SBGColor = ColorDark -#SBGDColor = ColorLight -#STColor = White -#STDColor = GrayDark +[SongCarouselTextYear] +X = 400 +Y = 477 +Z = 0.95 +Color = White +Size = 20 +Align = 1 -[OptionsAdvancedSelectScreenFade] -Text = SING_OPTIONS_ADVANCED_SCREENFADE -Tex = MainBar +########## LEGEND CAROUSEL ######### + +[SongCarouselStaticNonParty3] +X = 582 +Y = 405 +W = 163 +H = 107 +Z = 0 +Tex = BGFade +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 130 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselTextNonParty5] +X = 661 +Y = 410 +Z = 0.952 +Color = White +Font = 1 +Size = 14 +Align = 1 +Text = SING_SONG_SELECTION_LEGEND_TITLE -[OptionsAdvancedSelectEffectSing] -Text = SING_OPTIONS_ADVANCED_EFFECTSING -Tex = MainBar +[SongCarouselStaticNonParty4] +X = 596 +Y = 430 +W = 15 +H = 20 +Tex = icon_song_video +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 175 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[OptionsAdvancedSelectLineBonus] -Text = SING_OPTIONS_GRAPHICS_LINEBONUS -Tex = MainBar +[SongCarouselTextNonParty6] +X = 625 +Y = 432 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_VIDEO + +[SongCarouselStaticNonParty5] +X = 595 +Y = 450 +W = 26 +H = 16 +Tex = icon_song_medley +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 220 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselTextNonParty7] +X = 625 +Y = 452 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEY -[OptionsAdvancedSelectSlideOnSongClick] -Text = SING_OPTIONS_ADVANCED_ONSONGCLICK -Tex = MainBar +[SongCarouselStaticNonParty6] +X = 595 +Y = 470 +W = 26 +H = 16 +Tex = icon_song_calcmedley +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 265 -W = 250 -H = 35 -SkipX = 10 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[OptionsAdvancedSelectAskbeforeDel] -Text = SING_OPTIONS_ADVANCED_ASKBEFOREDEL -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 310 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselTextNonParty8] +X = 625 +Y = 472 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEYC -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[OptionsAdvancedSelectPartyPopup] -Text = SING_OPTIONS_ADVANCED_PARTYPOPUP -Tex = MainBar +[SongCarouselStaticNonParty7] +X = 595 +Y = 490 +W = 13 +H = 17 +Tex = icon_song_duet +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 355 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselTextNonParty9] +X = 625 +Y = 492 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_DUET -[OptionsAdvancedSelectSingScores] -Text = SING_OPTIONS_ADVANCED_SINGSCORES -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 400 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselTextMaxScore] +X = 30 +Y = 500 +Color = White +Font = 0 +Size = 22 +Align = 0 +Text =SONG_SCORE_MAX -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselTextMediaScore] +X = 30 +Y = 540 +Color = White +Font = 0 +Size = 22 +Align = 0 +Text =SONG_SCORE_MEDIA -[OptionsAdvancedSelectTopScores] -Text = SING_OPTIONS_ADVANCED_TOPSCORES -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 445 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselTextMaxScore2] +X = 170 +Y = 500 +Color = White +Font = 0 +Size = 22 +Align = 2 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselTextMediaScore2] +X = 170 +Y = 540 +Color = White +Font = 0 +Size = 22 +Align = 2 -[OptionsAdvancedButtonExit] -X = 70 -Y = 490 -W = 250 -H = 40 -Tex = Button +[SongCarouselTextScoreUser] +X = 170 +Y = 518 Color = ColorLight -DColor = ColorDark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[OptionsNetwork] -Texts = 5 - -[OptionsNetworkBackground] -Tex = OptionsBG +Font = 0 +Size = 20 +Align = 2 -[OptionsNetworkStatic1] -X = 40 -Y = 22 -W = 25 -H = 23 +[SongCarouselTextMaxScoreLocal] +X = 180 +Y = 500 Color = White -Tex = IconOption -Type = Transparent +Font = 0 +Size = 22 +Align = 0 -[OptionsNetworkText1] -X = 70 -Y = 5 +[SongCarouselTextMediaScoreLocal] +X = 180 +Y = 540 Color = White -Size = 54 -Text = SING_OPTIONS +Font = 0 +Size = 22 +Align = 0 -[OptionsNetworkText3] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_NETWORK_DESC +[SongCarouselTextScoreUserLocal] +X = 180 +Y = 518 +Color = ColorLight +Font = 0 +Size = 20 +Align = 0 -[OptionsNetworkText2] -X = 70 -Y = 85 -Color = White -Size = 30 -Text = SING_OPTIONS_NETWORK_WHEREAMI +#Variable statics and texts for song-screen in sing- and partymode +# There can be an unlimited Number of Statics and Texts, As long +# as the numbers are in order. +# Statics that are shown in PartyMode Only are Named_ +# SongStaticParty[No] +# Texts that are shown in PartyMode Only are Named_ +# SongTextParty[No] +# Statics that are shown in Normal Mode Only are Named_ +# SongStaticNonParty[No] +# Texts that are shown in Normal Mode Only are Named_ +# SongTextNonParty[No] +#Here are the ones for singmode -[OptionsNetworkStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[SongCarouselTextNonParty1] +X = 30 +Y = 6 +Color = White +Font = 0 +Size = 60 +Text = SING_SONG_SELECTION +Align = 0 -[OptionsNetworkStatic3] -X = 250 -Y = 545 -W = 550 +# Menu opens with [M] +[SongCarouselStaticNonParty1] +X = 255 +Y = 560 +W = 25 H = 30 -Tex = Leiste2 +Z = 0.952 +Tex = ButtonM Color = White Type = Transparent -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[OptionsNetworkStatic4] -X = 260 -Y = 545 -W = 32 +[SongCarouselTextNonParty2] +X = 287 +Y = 563 +Z = 0.952 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = SING_SONG_SELECTION_MENU +Reflection = 0 +ReflectionSpacing = 13 + +# The so famous search, shown with [J] +[SongCarouselStaticNonParty2] +X = 375 +Y = 560 +W = 25 H = 30 -Tex = ButtonNavi +Z = 0.952 +Tex = ButtonJ Color = White Type = Transparent -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[OptionsNetworkText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black +[SongCarouselTextNonParty3] +X = 407 +Y = 563 +Z = 0.952 +Color = White +Font = 0 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_NAVIGATE +Align = 0 +Text = SONG_JUMPTO_DESC +Reflection = 0 +ReflectionSpacing = 13 -[OptionsNetworkStatic5] -X = 400 -Y = 545 -W = 32 +# [P]laylist +[SongCarouselStaticNonParty8] +X = 580 +Y = 560 +W = 25 H = 30 -Tex = ButtonIns +Z = 0.952 +Tex = ButtonP Color = White Type = Transparent -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[OptionsNetworkText5] -X = 440 -Y = 548 -Z = 0.5 -Color = Black +[SongCarouselTextNonParty4] +X = 612 +Y = 563 +Z = 0.952 +Color = White +Font = 0 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_OPTIONS_NETWORK_LEGEND_INSERT +Align = 0 +Text = SING_SONG_SELECTION_PLAYLIST +Reflection = 0 +ReflectionSpacing = 13 -[OptionsNetworkStatic6] -X = 530 -Y = 545 -W = 32 -H = 30 -Tex = ButtonDel +#and these are the ones for partymode +# NAVBAR for party +# enter a number +[SongCarouselStaticParty1] +X = 245 +Y = 555 +Z = 0.952 +W = 25 +H = 28 +Tex = Button13 Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsNetworkText6] -X = 570 -Y = 548 -Z = 0.5 -Color = Black +[SongCarouselTextParty1] +X = 278 +Y = 555 +Z = 0.952 +Color = White +Font = 0 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_OPTIONS_NETWORK_LEGEND_DELETE +Align = 0 +Text = SONG_MENU_NAME_PARTY_JOKER +Reflection = 0 +ReflectionSpacing = 13 -[OptionsNetworkStatic7] -X = 660 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEsc +# menu +[SongCarouselStaticParty2] +X = 420 +Y = 555 +Z = 0.952 +W = 25 +H = 28 +Tex = ButtonM Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsNetworkText7] -X = 700 -Y = 548 -Z = 0.5 -Color = Black +[SongCarouselTextParty2] +X = 448 +Y = 555 +Z = 0.952 +Color = White +Font = 0 Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_ESC +Align = 0 +Text = PARTY_SONG_MENU +Reflection = 0 +ReflectionSpacing = 13 -[OptionsNetworkTextInsertUser] -X = 400 -Y = 270 -W = 600 -Z = 1 -Align = 1 +#Texts for Party Mode +[SongCarouselTextParty3] +X = 30 +Y = 30 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 +Font = 0 +Size = 60 Color = White -Size = 32 - -[OptionsNetworkSelectWebsite] -Text = SING_OPTIONS_NETWORK_WEBSITE -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 130 -W = 250 -H = 35 -SkipX = 10 +Text = PARTY_MODE -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +# Jokers, 5 for each team, only shown in party Mode +[SongCarouselStaticTeam1Joker1] +Tex = Joker +X = 505 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkSelectUsername] -Text = SING_OPTIONS_NETWORK_USERNAME -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 175 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselStaticTeam1Joker2] +Tex = Joker +X = 555 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselStaticTeam1Joker3] +Tex = Joker +X = 605 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkSelectSendSaveName] -Text = SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 220 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselStaticTeam1Joker4] +Tex = Joker +X = 655 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselStaticTeam1Joker5] +Tex = Joker +X = 705 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkSelectAutoMode] -Text = SING_OPTIONS_NETWORK_AUTO_MODE -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 265 -W = 250 -H = 35 -SkipX = 10 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselStaticTeam2Joker1] +Tex = Joker +X = 505 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkSelectAutoPlayer] -Text = SING_OPTIONS_NETWORK_AUTO_PLAYER -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 310 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselStaticTeam2Joker2] +Tex = Joker +X = 555 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselStaticTeam2Joker3] +Tex = Joker +X = 605 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkSelectAutoScoreEasy] -Text = SING_OPTIONS_NETWORK_AUTO_SCORE_EASY -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 355 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselStaticTeam2Joker4] +Tex = Joker +X = 655 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselStaticTeam2Joker5] +Tex = Joker +X = 705 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkSelectAutoScoreMedium] -Text = SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 400 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselStaticTeam3Joker1] +Tex = Joker +X = 505 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselStaticTeam3Joker2] +Tex = Joker +X = 555 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkSelectAutoScoreHard] -Text = SING_OPTIONS_NETWORK_AUTO_SCORE_HARD -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 445 -W = 250 -H = 35 -SkipX = 10 +[SongCarouselStaticTeam3Joker3] +Tex = Joker +X = 605 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongCarouselStaticTeam3Joker4] +Tex = Joker +X = 655 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkButtonInsert] -X = 550 -Y = 490 -W = 180 +[SongCarouselStaticTeam3Joker5] +Tex = Joker +X = 705 +Y = 500 +W = 35 H = 40 -Tex = MainBar -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsNetworkButtonInsertText1] -X = 90 -Y = 5 -Align = 1 +[SongCarouselTextPartyTime] +X = 750 +Y = 450 Color = White -Size = 30 -Text = SING_OPTIONS_NETWORK_LEGEND_INSERT - -[OptionsNetworkButtonExit] -X = 70 -Y = 490 -W = 250 -H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +DColor = Red +Font = 1 +Size = 70 +Align = 2 -[OptionsWebcam] -Texts = 5 - -[OptionsWebcamBackground] -Tex = OptionsBG - -[OptionsWebcamStatic1] -X = 40 -Y = 22 -W = 25 -H = 23 -Color = White -Tex = IconOption +[SongCarouselInfoMessageBG] +Tex = SongMessage +X = 250 +Y = 90 +W = 300 +H = 25 +Z = 0.98 +Color = ColorDark Type = Transparent -[OptionsWebcamText1] -X = 70 -Y = 5 +[SongCarouselInfoMessageText] +X = 400 +Y = 94 Color = White -Size = 54 -Text = SING_OPTIONS +Font = 1 +Size = 20 +Align = 1 -[OptionsWebcamText3] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_WEBCAM_DESC +############################# +## ## +## Medley Playlist ## +## ## +############################# -[OptionsWebcamText2] -X = 70 -Y = 85 -Color = White -Size = 30 -Text = SING_OPTIONS_WEBCAM_WHEREAMI +[SongCarouselTextMedleyMax] +N = 3 -[OptionsWebcamStatic2] -X = 0 -Y = 545 -W = 250 +[SongCarouselTextMedleyNumber1] +X=27 +Y=375 +Color=White +Font=1 +Size=20 +Align=1 + +[SongCarouselTextMedleyArtist1] +X=50 +Y=366 +Color=ColorDark +Font=0 +Size=20 +Align=0 + +[SongCarouselTextMedleyTitle1] +X=50 +Y=383 +Color=White +Font=0 +Size=20 +Align=0 + +[SongCarouselTextMedleyNumber2] +X=27 +Y=420 +Color=White +Font=1 +Size=20 +Align=1 + +[SongCarouselTextMedleyArtist2] +X=50 +Y=411 +Color=ColorDark +Font=0 +Size=20 +Align=0 + +[SongCarouselTextMedleyTitle2] +X=50 +Y=428 +Color=White +Font=0 +Size=20 +Align=0 + +[SongCarouselTextMedleyNumber3] +X=27 +Y=465 +Color=White +Font=1 +Size=20 +Align=1 + +[SongCarouselTextMedleyArtist3] +X=50 +Y=454 +Color=ColorDark +Font=0 +Size=20 +Align=0 + +[SongCarouselTextMedleyTitle3] +X=50 +Y=471 +Color=White +Font=0 +Size=20 +Align=0 + + +[SongCarouselStaticMedley1] +Tex = PlayerNumberBox +X = 15 +Y = 370 +W = 25 H = 30 -Tex = Leiste1 -Color = ColorLight +Color = ColorDark Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 -[OptionsWebcamStatic3] -X = 250 -Y = 545 -W = 550 +[SongCarouselStaticMedley2] +Tex = PlayerNumberBox +X = 15 +Y = 415 +W = 25 H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Color = ColorDark +Type = Colorized -[OptionsWebcamStatic4] -X = 260 -Y = 545 -W = 32 +[SongCarouselStaticMedley3] +Tex = PlayerNumberBox +X = 15 +Y = 460 +W = 25 H = 30 -Tex = ButtonNavi +Color = ColorDark +Type = Colorized + +######################################################################################## +##### ##### +##### SlotMachine ##### +##### ##### +######################################################################################## + +[SongSlotMachine] + +[SongSlotMachineBackground] +Tex = SongBG + +[SongSlotMachineCover] +X = 60 +Y = 190 +W = 325 +H = 200 + +[SongSlotMachineEqualizer] +Visible = 1 +Direction = 1 +Color = White +Alpha = 1 +X = 580 +Y = 380 +PieceW = 3 +PieceH = 3 +Space = 1 +Bands = 30 +Length = 15 + +[SongSlotMachineMedleyIcon] +X = 315 +Y = 352 +W = 36 +H = 26 +Z = 0.95 Color = White +Tex = icon_song_medley Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[OptionsWebcamText4] -X = 300 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_NAVIGATE +[SongSlotMachineCalculatedMedleyIcon] +X = 315 +Y = 352 +W = 36 +H = 26 +Z = 0.95 +Color = White +Tex = icon_song_calcmedley +Type = Transparent -[OptionsWebcamStatic5] -X = 400 -Y = 545 -W = 32 +[SongSlotMachineVideoIcon] +X = 280 +Y = 350 +W = 26 H = 30 -Tex = ButtonEsc +Z = 0.95 Color = White +Tex = icon_song_video Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[OptionsWebcamText5] -X = 440 -Y = 548 -Z = 0.5 -Color = Black -Size = 24 -Reflection = 1 -ReflectionSpacing = 20 -Text = SING_LEGEND_ESC -[OptionsWebcamSelectWebcam] -Text = SING_OPTIONS_WEBCAM_ID -Tex = MainBar +[SongSlotMachineDuetIcon] +X = 315 +Y = 350 +W = 25 +H = 30 +Z = 0.95 +Color = White +Tex = icon_song_duet Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 130 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark +[SongSlotMachineStatic1] +X = 260 +Y = 190 +W = 460 +H = 200 +Z = 0.95 Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark - -[OptionsWebcamSelectResolution] -Text = SING_OPTIONS_WEBCAM_RESOLUTION -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 170 -W = 250 -H = 35 -SkipX = 10 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +Tex = SongSelection3 +Type = Colorized -[OptionsWebcamSelectFPS] -Text = SING_OPTIONS_WEBCAM_FPS -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 +[SongSlotMachineTextArtist] +X = 280 Y = 210 -W = 250 -H = 35 -SkipX = 10 +W = 420 +Color = White +Font = 1 +Size = 40 +Align = 0 +Text = -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongSlotMachineTextTitle] +X = 280 +Y = 280 +W = 420 +Color = White +Font = 0 +Size = 36 +Align = 0 +Text = -[OptionsWebcamSelectFlip] -Text = SING_OPTIONS_WEBCAM_FLIP -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 250 -W = 250 -H = 35 -SkipX = 10 +[SongSlotMachineTextNumber] +X = 705 +Y = 200 +Z = 0.95 +Color = White +Size = 22 +Align = 2 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongSlotMachineTextYear] +X = 460 +Y = 350 +Z = 0.95 +Color = White +Size = 28 +Align = 1 -[OptionsWebcamSelectBrightness] -Text = SING_OPTIONS_WEBCAM_BRIGHTNESS -Tex = MainBar +########## LEGEND ROULETTE ######### + +[SongSlotMachineStaticNonParty1] +X = 555 +Y = 415 +W = 163 +H = 107 +Z = 0 +Tex = BGFade +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 290 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongSlotMachineTextNonParty1] +X = 635 +Y = 420 +Z = 0.952 +Color = White +Font = 1 +Size = 14 +Align = 1 +Text = SING_SONG_SELECTION_LEGEND_TITLE -[OptionsWebcamSelectSaturation] -Text = SING_OPTIONS_WEBCAM_SATURATION -Tex = MainBar +[SongSlotMachineStaticNonParty2] +X = 566 +Y = 438 +W = 15 +H = 20 +Tex = icon_song_video +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 330 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[OptionsWebcamSelectHue] -Text = SING_OPTIONS_WEBCAM_HUE -Tex = MainBar +[SongSlotMachineTextNonParty2] +X = 595 +Y = 442 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_VIDEO + +[SongSlotMachineStaticNonParty3] +X = 565 +Y = 460 +W = 26 +H = 16 +Tex = icon_song_medley +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 370 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongSlotMachineTextNonParty3] +X = 595 +Y = 462 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEY -[OptionsWebcamSelectEffect] -Text = SING_OPTIONS_WEBCAM_EFFECT -Tex = MainBar +[SongSlotMachineStaticNonParty4] +X = 565 +Y = 480 +W = 26 +H = 16 +Tex = icon_song_calcmedley +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 410 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongSlotMachineTextNonParty4] +X = 595 +Y = 482 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEYC -[OptionsWebcamButtonPreVisualization] -X = 70 -Y = 450 -W = 660 -H = 35 -Tex = MainBar -Color = ColorLight -DColor = ColorDark + +[SongSlotMachineStaticNonParty5] +X = 565 +Y = 500 +W = 13 +H = 17 +Tex = icon_song_duet +Color = White Type = Transparent -Texts = 1 -[OptionsWebcamButtonPreVisualizationText1] -X = 330 -Y = 5 -Align = 1 +[SongSlotMachineTextNonParty5] +X = 595 +Y = 502 +Z = 0.952 Color = White -Size = 30 -Text = SING_OPTIONS_WEBCAM_ENABLE_PREVIEW +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_DUET -[OptionsWebcamButtonExit] -X = 70 -Y = 490 -W = 250 -H = 35 -Tex = Button +[SongSlotMachineTextScore] +X = 290 +Y = 420 Color = ColorLight -DColor = ColorDark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 24 +Align = 0 -[OptionsJukebox] -Texts = 5 +[SongSlotMachineTextMaxScore] +X = 290 +Y = 450 +Color = White +Font = 0 +Size = 22 +Align = 0 +Text =SONG_SCORE_MAX -[OptionsJukeboxBackground] -Tex=OptionsBG +[SongSlotMachineTextMediaScore] +X = 290 +Y = 490 +Color = White +Font = 0 +Size = 22 +Align = 0 +Text =SONG_SCORE_MEDIA -[OptionsJukeboxStatic1] -X = 40 -Y = 22 -W = 25 -H = 23 +[SongSlotMachineTextMaxScore2] +X = 430 +Y = 450 Color = White -Tex = IconOption -Type = Transparent +Font = 0 +Size = 22 +Align = 2 -[OptionsJukeboxText1] -X = 70 -Y = 5 +[SongSlotMachineTextMediaScore2] +X = 430 +Y = 490 Color = White -Size = 54 -Text = SING_OPTIONS +Font = 0 +Size = 22 +Align = 2 -[OptionsJukeboxText2] -X = 70 -Y = 55 -Color = ColorLightest -Size = 30 -Text = SING_OPTIONS_JUKEBOX_DESC +[SongSlotMachineTextScoreUser] +X = 430 +Y = 468 +Color = ColorLight +Font = 0 +Size = 20 +Align = 2 -[OptionsJukeboxText3] -X = 70 -Y = 85 +[SongSlotMachineTextMaxScoreLocal] +X = 440 +Y = 450 Color = White -Size = 30 -Text = SING_OPTIONS_JUKEBOX_WHEREAMI +Font = 0 +Size = 22 +Align = 0 -[OptionsJukeboxStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 +[SongSlotMachineTextMediaScoreLocal] +X = 440 +Y = 490 +Color = White +Font = 0 +Size = 22 +Align = 0 + +[SongSlotMachineTextScoreUserLocal] +X = 440 +Y = 468 Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 20 +Align = 0 -[OptionsJukeboxStatic3] -X = 250 +#Variable statics and texts for song-screen in sing- and partymode +# There can be an unlimited Number of Statics and Texts, As long +# as the numbers are in order. +# Statics that are shown in PartyMode Only are Named_ +# SongStaticParty[No] +# Texts that are shown in PartyMode Only are Named_ +# SongTextParty[No] +# Statics that are shown in Normal Mode Only are Named_ +# SongStaticNonParty[No] +# Texts that are shown in Normal Mode Only are Named_ +# SongTextNonParty[No] +#Here are the ones for singmode + +[SongSlotMachineTextNonParty6] +X = 30 +Y = 6 +Color = White +Font = 0 +Size = 60 +Text = SING_SONG_SELECTION +Align = 0 + + +# Menu opens with [M] +[SongSlotMachineStaticNonParty6] +X = 340 Y = 545 -W = 550 +W = 25 H = 30 -Tex = Leiste2 +Z = 0.952 +Tex = ButtonM Color = White Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[OptionsJukeboxStatic4] -X = 260 +[SongSlotMachineTextNonParty7] +X = 370 +Y = 548 +Z = 0.952 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = SING_SONG_SELECTION_MENU +Reflection = 1 +ReflectionSpacing = 13 + +# The so famous search, shown with [J] +[SongSlotMachineStaticNonParty7] +X = 440 Y = 545 -W = 32 +W = 25 H = 30 -Tex = ButtonNavi +Z = 0.952 +Tex = ButtonJ Color = White Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[OptionsJukeboxText4] -X = 300 +[SongSlotMachineTextNonParty8] +X = 470 Y = 548 -Z = 0.5 -Color = Black +Z = 0.952 +Color = White +Font = 0 Size = 24 -Text = SING_LEGEND_NAVIGATE +Align = 0 +Text = SONG_JUMPTO_DESC Reflection = 1 -ReflectionSpacing = 20 +ReflectionSpacing = 13 -[OptionsJukeboxStatic5] -X = 400 +# [P]laylist +[SongSlotMachineStaticNonParty8] +X = 630 Y = 545 -W = 32 +W = 25 H = 30 -Tex = ButtonEsc +Z = 0.952 +Tex = ButtonP Color = White Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[OptionsJukeboxText5] -X = 440 +[SongSlotMachineTextNonParty9] +X = 660 Y = 548 -Z = 0.5 -Color = Black +Z = 0.952 +Color = White +Font = 0 Size = 24 -Text = SING_LEGEND_ESC +Align = 0 +Text = SING_SONG_SELECTION_PLAYLIST Reflection = 1 -ReflectionSpacing = 20 +ReflectionSpacing = 13 -[OptionsJukeboxSelectLyricsFont] -Tex = MainBar +#and these are the ones for partymode +# NAVBAR for party +# enter a number +[SongSlotMachineStaticParty1] +X = 245 +Y = 555 +Z = 0.952 +W = 25 +H = 28 +Tex = Button13 +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_LYRICS_FONT -X = 70 -Y = 130 -W = 250 -H = 35 -SkipX = 10 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SongSlotMachineTextParty1] +X = 278 +Y = 555 +Z = 0.952 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = SONG_MENU_NAME_PARTY_JOKER +Reflection = 0 +ReflectionSpacing = 13 -[OptionsJukeboxSelectLyricsEffect] -Tex = MainBar +# menu +[SongSlotMachineStaticParty2] +X = 420 +Y = 555 +Z = 0.952 +W = 25 +H = 28 +Tex = ButtonM +Color = White Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = SING_OPTIONS_LYRICS_EFFECT -X = 70 -Y = 170 -W = 250 -H = 35 -SkipX = 10 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[OptionsJukeboxSelectLyricsAlpha] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = JUKEBOX_SONGOPTIONS_LYRIC_ALPHA -X = 70 -Y = 210 -W = 250 -H = 35 -SkipX = 10 +[SongSlotMachineTextParty2] +X = 448 +Y = 555 +Z = 0.952 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = PARTY_SONG_MENU +Reflection = 0 +ReflectionSpacing = 13 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +#Texts for Party Mode +[SongSlotMachineTextParty3] +X = 30 +Y = 30 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 +Font = 0 +Size = 60 +Color = White +Text = PARTY_MODE -[OptionsJukeboxSelectLine] -Text = JUKEBOX_SONGOPTIONS_LYRIC_LINE -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 250 -W = 250 -H = 35 -SkipX = 10 +# Jokers, 5 for each team, only shown in party Mode +[SongSlotMachineStaticTeam1Joker1] +Tex = Joker +X = 505 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White +[SongSlotMachineStaticTeam1Joker2] +Tex = Joker +X = 555 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = GrayDark +[SongSlotMachineStaticTeam1Joker3] +Tex = Joker +X = 605 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsJukeboxSelectProperty] -Text = JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 290 -W = 250 -H = 35 -SkipX = 10 +[SongSlotMachineStaticTeam1Joker4] +Tex = Joker +X = 655 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White +[SongSlotMachineStaticTeam1Joker5] +Tex = Joker +X = 705 +Y = 400 +W = 35 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = GrayDark +[SongSlotMachineStaticTeam2Joker1] +Tex = Joker +X = 505 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsJukeboxSelectColor] -Text = JUKEBOX_SONGOPTIONS_LYRIC_COLOR -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 330 -W = 250 -H = 35 -SkipX = 10 +[SongSlotMachineStaticTeam2Joker2] +Tex = Joker +X = 555 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White +[SongSlotMachineStaticTeam2Joker3] +Tex = Joker +X = 605 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = GrayDark +[SongSlotMachineStaticTeam2Joker4] +Tex = Joker +X = 655 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsJukeboxSelectR] -Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 220 -Y = 370 -W = 100 -H = 15 -SkipX = 10 -TextSize = 16 +[SongSlotMachineStaticTeam2Joker5] +Tex = Joker +X = 705 +Y = 450 +W = 35 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White +[SongSlotMachineStaticTeam3Joker1] +Tex = Joker +X = 505 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = GrayDark +[SongSlotMachineStaticTeam3Joker2] +Tex = Joker +X = 555 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsJukeboxSelectG] -Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Plain -X = 220 -Y = 390 -W = 100 -H = 15 -Z = 0.8 -SkipX = 10 -TextSize = 16 +[SongSlotMachineStaticTeam3Joker3] +Tex = Joker +X = 605 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White +[SongSlotMachineStaticTeam3Joker4] +Tex = Joker +X = 655 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = GrayDark +[SongSlotMachineStaticTeam3Joker5] +Tex = Joker +X = 705 +Y = 500 +W = 35 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[OptionsJukeboxSelectB] -Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 220 -Y = 410 -W = 100 -H = 15 -SkipX = 10 -TextSize = 16 +[SongSlotMachineTextPartyTime] +X = 750 +Y = 450 +Color = White +DColor = Red +Font = 1 +Size = 70 +Align = 2 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White +[SongSlotMachineInfoMessageBG] +Tex = SongMessage +X = 250 +Y = 90 +W = 300 +H = 25 +Z = 0.98 +Color = ColorDark +Type = Transparent -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = GrayDark +[SongSlotMachineInfoMessageText] +X = 400 +Y = 94 +Color = White +Font = 1 +Size = 20 +Align = 1 -[OptionsJukeboxRed] -X = 360 -Y = 373 -W = 340 -H = 10 -Z = 1 -Tex = Picker -Type = Transparent +############################# +## ## +## Medley Playlist ## +## ## +############################# -[OptionsJukeboxGreen] -X = 360 -Y = 393 -W = 340 -H = 10 -Z = 1 -Tex = Picker -Type = Transparent +[SongSlotMachineTextMedleyMax] +N = 3 -[OptionsJukeboxBlue] -X = 360 -Y = 413 -W = 340 -H = 10 -Z = 1 -Tex = Picker -Type = Transparent +[SongSlotMachineTextMedleyNumber1] +X=275 +Y=79 +Color=White +Font=1 +Size=20 +Align=1 -[OptionsJukeboxPointerR] -X = 360 -Y = 372 -W = 1 -H = 12 -Z = 1 -Tex = Picker -Color = Black -Type = Transparent +[SongSlotMachineTextMedleyArtist1] +X=295 +Y=72 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[OptionsJukeboxPointerG] -X = 360 -Y = 392 -W = 1 -H = 12 -Z = 1 -Tex = Picker -Color = Black -Type = Transparent +[SongSlotMachineTextMedleyTitle1] +X=295 +Y=86 +Color=White +Font=0 +Size=20 +Align=0 -[OptionsJukeboxPointerB] -X = 360 -Y = 412 -W = 1 -H = 12 -Z = 1 -Tex = Picker -Color = Black -Type = Transparent +[SongSlotMachineTextMedleyNumber2] +X=275 +Y=115 +Color=White +Font=1 +Size=20 +Align=1 -[OptionsJukeboxColor] -X = 70 -Y = 370 -W = 145 -H = 55 -Z = 1 -Tex = Picker -Type = Transparent +[SongSlotMachineTextMedleyArtist2] +X=295 +Y=107 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[OptionsJukeboxUpperBar] -X = 340 -Y = 440 -W = 400 -H = 40 +[SongSlotMachineTextMedleyTitle2] +X=295 +Y=122 +Color=White +Font=0 +Size=20 +Align=0 -[OptionsJukeboxLowerBar] -X = 340 -Y = 475 -W = 400 -H = 40 +[SongSlotMachineTextMedleyNumber3] +X=275 +Y=151 +Color=White +Font=1 +Size=20 +Align=1 -[OptionsJukeboxButtonExit] -X = 70 -Y = 435 -W = 250 -H = 40 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongSlotMachineTextMedleyArtist3] +X=295 +Y=141 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[Top5] -Texts = 1 +[SongSlotMachineTextMedleyTitle3] +X=295 +Y=156 +Color=White +Font=0 +Size=20 +Align=0 -[Top5Background] -Tex = Top5BG +[SongSlotMachineStaticMedley1] +Tex = PlayerNumberBox +X = 263 +Y = 74 +W = 25 +H = 30 +Color = ColorDark +Type = Colorized -[Top5Text1] -X = 70 -Y = 6 -Color = White -Font = 0 -Size = 60 -Align = 0 -Text = SING_TOP_5_CHARTS +[SongSlotMachineStaticMedley2] +Tex = PlayerNumberBox +X = 263 +Y = 110 +W = 25 +H = 30 +Color = ColorDark +Type = Colorized -[Top5TextArtistTitle] -X = 70 -Y = 59 +[SongSlotMachineStaticMedley3] +Tex = PlayerNumberBox +X = 263 +Y = 146 +W = 25 +H = 30 +Color = ColorDark +Type = Colorized + +######################################################################################## +##### ##### +##### Slide ##### +##### ##### +######################################################################################## + +[SongSlide] + +[SongSlideBackground] +Tex = SongBG + +[SongSlideCover] +X = 300 +Y = 120 +W = 200 +H = 200 +Padding = 120 +Reflections = 1 +ReflectionSpacing = 10 + +[SongSlideEqualizer] +Visible = 1 +Direction = 1 Color = White -Font = 0 -Size = 30 -Align = 0 -Text = artist - title +Alpha = 1 +X = 265 +Y = 500 +PieceW = 4 +PieceH = 4 +Space = 1 +Bands = 5 +Length = 15 +Reflection = 1 +ReflectionSpacing = 2 -[Top5Text4] -X = 70 -Y = 83 +[SongSlideMedleyIcon] +X = 335 +Y = 477 +W = 30 +H = 20 +Z = 0.95 Color = White -Font = 0 -Size = 30 -Align = 0 -Text = SING_OPTIONS_GAME_DIFFICULTY +Tex = icon_song_medley +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 -[Top5TextLevel] -X = 270 -Y = 83 +[SongSlideCalculatedMedleyIcon] +X = 335 +Y = 477 +W = 30 +H = 20 +Z = 0.95 Color = White -Font = 0 -Size = 30 -Align = 1 -Text = easy +Tex = icon_song_calcmedley +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 +[SongSlideVideoIcon] +X = 310 +Y = 475 +W = 18 +H = 24 +Z = 0.95 +Color = White +Tex = icon_song_video +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 -[Top5Static1] -X = 40 -Y = 22 -W = 27 -H = 27 +[SongSlideDuetIcon] +X = 335 +Y = 475 +W = 20 +H = 24 +Z = 0.95 Color = White -Tex = ScoreIcon +Tex = icon_song_duet +Type = Transparent +Reflection = 0 +ReflectionSpacing = 22 + +[SongSlideStatic1] +X = 278 +Y = 120 +W = 244 +H = 200 +Z = 0.95 +Color = ColorLight +Tex = SongSelection1 Type = Colorized -[Top5Static2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 +[SongSlideStatic2] +X = 300 +Y = 320 +W = 200 +H = 190 +Z = 0.95 Color = ColorLight +Tex = SongSelection2 Type = Colorized -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[Top5Static3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[SongSlideTextArtist] +X = 400 +Y = 328 +W = 190 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Font = 1 +Size = 24 +Align = 1 +Text = -[Top5Text2] -X = 238 -Y = 552 -Color = Black +[SongSlideTextTitle] +X = 400 +Y = 394 +W = 190 +Color = White Font = 0 -Size = 21 +Size = 24 +Align = 1 +Text = + +[SongSlideTextNumber] +X = 492 +Y = 478 +Z = 0.95 +Color = White +Size = 18 Align = 2 -Text = SING_TOP_5_CHARTS_WHEREAMI +Reflection = 0 +ReflectionSpacing = 21 -[Top5Static4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonEnter +[SongSlideTextYear] +X = 400 +Y = 477 +Z = 0.95 +Color = White +Size = 20 +Align = 1 + +########## LEGEND CAROUSEL ######### + +[SongSlideStatic3] +X = 582 +Y = 405 +W = 163 +H = 107 +Z = 0 +Tex = BGFade Color = White Type = Transparent -[Top5Text3] -X = 290 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_TOP_5_CHARTS_CONTINUE +[SongSlideTextNonParty5] +X = 661 +Y = 410 +Z = 0.952 +Color = White +Font = 1 +Size = 14 +Align = 1 +Text = SING_SONG_SELECTION_LEGEND_TITLE -[Top5Static5] -X = 530 -Y = 552 -W = 24 -H = 23 -Tex = ButtonNavi +[SongSlideStatic4] +X = 596 +Y = 430 +W = 15 +H = 20 +Tex = icon_song_video Color = White Type = Transparent -[Top5Text5] -X = 560 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_TOP_5_CHARTS_SWITCH_DIFFICULTY -[Top5TextName1] -X = 150 -Y = 190 +[SongSlideTextNonParty6] +X = 625 +Y = 432 +Z = 0.952 Color = White Font = 0 -Size = 42 +Size = 12 Align = 0 -Text = 1. Player1 +Text = SING_SONG_SELECTION_LEGEND_VIDEO -[Top5TextName2] -X = 150 -Y = 240 +[SongSlideStatic5] +X = 595 +Y = 450 +W = 26 +H = 16 +Tex = icon_song_medley Color = White -Font = 0 -Size = 42 -Align = 0 -Text = 2. Player2 +Type = Transparent -[Top5TextName3] -X = 150 -Y = 290 +[SongSlideTextNonParty7] +X = 625 +Y = 452 +Z = 0.952 Color = White Font = 0 -Size = 42 +Size = 12 Align = 0 -Text = 3. Player3 +Text = SING_SONG_SELECTION_LEGEND_MEDLEY -[Top5TextName4] -X = 150 -Y = 340 +[SongSlideStatic6] +X = 595 +Y = 470 +W = 26 +H = 16 +Tex = icon_song_calcmedley Color = White -Font = 0 -Size = 42 -Align = 0 -Text = 4. Player4 +Type = Transparent -[Top5TextName5] -X = 150 -Y = 390 +[SongSlideTextNonParty8] +X = 625 +Y = 472 +Z = 0.952 Color = White Font = 0 -Size = 42 +Size = 12 Align = 0 -Text = 5. Player5 +Text = SING_SONG_SELECTION_LEGEND_MEDLEYC -[Top5TextScore1] -X = 560 -Y = 190 -Color = White -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -[Top5TextScore2] -X = 560 -Y = 240 +[SongSlideStatic7] +X = 595 +Y = 490 +W = 13 +H = 17 +Tex = icon_song_duet Color = White -Font = 0 -Size = 42 -Align = 2 -Text = 00000 +Type = Transparent -[Top5TextScore3] -X = 560 -Y = 290 +[SongSlideTextNonParty9] +X = 625 +Y = 492 +Z = 0.952 Color = White Font = 0 -Size = 42 -Align = 2 -Text = 00000 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_DUET -[Top5TextScore4] -X = 560 -Y = 340 -Color = White -Font = 0 -Size = 42 -Align = 2 -Text = 00000 +#[SongCarouselTextScore] +#X = 530 +#Y = 420 +#Color = ColorLight +#Font = 0 +#Size = 24 +#Align = 0 -[Top5TextScore5] -X = 560 -Y = 390 +[SongSlideTextMaxScore] +X = 30 +Y = 500 Color = White Font = 0 -Size = 42 -Align = 2 -Text = 00000 - +Size = 22 +Align = 0 +Text =SONG_SCORE_MAX -[Top5TextDate1] -X = 760 -Y = 190 +[SongSlideTextMediaScore] +X = 30 +Y = 540 Color = White Font = 0 -Size = 42 -Align = 2 -Text = 00000 +Size = 22 +Align = 0 +Text =SONG_SCORE_MEDIA -[Top5TextDate2] -X = 760 -Y = 240 +[SongSlideTextMaxScore2] +X = 170 +Y = 500 Color = White Font = 0 -Size = 42 +Size = 22 Align = 2 -Text = 00000 -[Top5TextDate3] -X = 760 -Y = 290 +[SongSlideTextMediaScore2] +X = 170 +Y = 540 Color = White Font = 0 -Size = 42 +Size = 22 Align = 2 -Text = 00000 -[Top5TextDate4] -X = 760 -Y = 340 -Color = White +[SongSlideTextScoreUser] +X = 170 +Y = 518 +Color = ColorLight Font = 0 -Size = 42 +Size = 20 Align = 2 -Text = 00000 -[Top5TextDate5] -X = 760 -Y = 390 +[SongSlideTextMaxScoreLocal] +X = 180 +Y = 500 Color = White Font = 0 -Size = 42 -Align = 2 -Text = 00000 - -[Top5TextNumber1] -X = 120 -Y = 193 -Color = White -Font = 1 -Size = 27 -Align = 1 -Text = 1 +Size = 22 +Align = 0 -[Top5TextNumber2] -X = 120 -Y = 243 +[SongSlideTextMediaScoreLocal] +X = 180 +Y = 540 Color = White -Font = 1 -Size = 27 -Align = 1 -Text = 2 +Font = 0 +Size = 22 +Align = 0 -[Top5TextNumber3] -X = 120 -Y = 293 -Color = White -Font = 1 -Size = 27 -Align = 1 -Text = 3 +[SongSlideTextScoreUserLocal] +X = 180 +Y = 518 +Color = ColorLight +Font = 0 +Size = 20 +Align = 0 -[Top5TextNumber4] -X = 120 -Y = 343 -Color = White -Font = 1 -Size = 27 -Align = 1 -Text = 4 +#Variable statics and texts for song-screen in sing- and partymode +# There can be an unlimited Number of Statics and Texts, As long +# as the numbers are in order. +# Statics that are shown in PartyMode Only are Named_ +# SongStaticParty[No] +# Texts that are shown in PartyMode Only are Named_ +# SongTextParty[No] +# Statics that are shown in Normal Mode Only are Named_ +# SongStaticNonParty[No] +# Texts that are shown in Normal Mode Only are Named_ +# SongTextNonParty[No] +#Here are the ones for singmode -[Top5TextNumber5] -X = 120 -Y = 393 +[SongSlideTextNonParty1] +X = 30 +Y = 6 Color = White -Font = 1 -Size = 27 -Align = 1 -Text = 5 - -[Top5StaticNumber1] -Tex = PlayerNumberBox -X = 100 -Y = 186 -W = 40 -H = 40 -Color = ColorDark -Type = Colorized - -[Top5StaticNumber2] -Tex = PlayerNumberBox -X = 100 -Y = 236 -W = 40 -H = 40 -Color = ColorDark -Type = Colorized - -[Top5StaticNumber3] -Tex = PlayerNumberBox -X = 100 -Y = 286 -W = 40 -H = 40 -Color = ColorDark -Type = Colorized - -[Top5StaticNumber4] -Tex = PlayerNumberBox -X = 100 -Y = 336 -W = 40 -H = 40 -Color = ColorDark -Type = Colorized - -[Top5StaticNumber5] -Tex = PlayerNumberBox -X = 100 -Y = 386 -W = 40 -H = 40 -Color = ColorDark -Type = Colorized - -[Edit] -Texts = 5 - -[EditBackground] -Tex = EditBG +Font = 0 +Size = 60 +Text = SING_SONG_SELECTION +Align = 0 -# main icon -[EditStatic1] -X = 65 -Y = 150 +# Menu opens with [M] +[SongSlideStaticNonParty1] +X = 255 +Y = 560 W = 25 -H = 25 +H = 30 +Z = 0.952 +Tex = ButtonM Color = White -Tex = IconEdit Type = Transparent -# Type = Colorized +Reflection = 0 +ReflectionSpacing = 2 -# main icon title -[EditText1] -X = 95 -Y = 135 +[SongSlideTextNonParty2] +X = 287 +Y = 563 +Z = 0.952 Color = White Font = 0 -Size = 54 +Size = 24 Align = 0 -Text = SING_EDIT +Text = SING_SONG_SELECTION_MENU +Reflection = 0 +ReflectionSpacing = 13 -# main icon subtitle -[EditText2] -X = 95 -Y = 175 -Color = ColorLightest -Font = 0 -Size = 30 -Align = 0 -Text = SING_EDIT_MENU_DESCRIPTION +# The so famous search, shown with [J] +[SongSlideStaticNonParty2] +X = 375 +Y = 560 +W = 25 +H = 30 +Z = 0.952 +Tex = ButtonJ +Color = White +Type = Transparent +Reflection = 0 +ReflectionSpacing = 2 -# Navigate button text -[EditText3] -X = 300 -Y = 548 -Color = Black +[SongSlideTextNonParty3] +X = 407 +Y = 563 +Z = 0.952 +Color = White Font = 0 Size = 24 Align = 0 -Text = SING_EDIT_NAVIGATE -Reflection = 1 +Text = SONG_JUMPTO_DESC +Reflection = 0 ReflectionSpacing = 13 -# Select button text -[EditText4] -X = 440 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_EDIT_SELECT -Reflection=1 -ReflectionSpacing=13 - -# Esc button text -[EditText5] -X = 590 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_EDIT_EXIT -Reflection=1 -ReflectionSpacing=13 - -[EditTextDescription] -X = 95 -Y = 195 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = SING_EDIT_TEXTDESCRIPTION - -[EditStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[EditStatic3] -X = 250 -Y = 545 -W = 550 +# [P]laylist +[SongSlideStaticNonParty3] +X = 580 +Y = 560 +W = 25 H = 30 -Tex = Leiste2 +Z = 0.952 +Tex = ButtonP Color = White Type = Transparent -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[EditStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi +[SongSlideTextNonParty4] +X = 612 +Y = 563 +Z = 0.952 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 24 +Align = 0 +Text = SING_SONG_SELECTION_PLAYLIST +Reflection = 0 +ReflectionSpacing = 13 -[EditStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEnter +#and these are the ones for partymode +[SongSlideStaticParty1] +X = 40 +Y = 22 +W = 27 +H = 27 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Tex = PartyIcon +Type = Colorized -[EditStatic6] -X = 550 +# NAVBAR for party +# enter a number +[SongSlideStaticParty2] +X = 260 Y = 545 +Z = 0.952 W = 32 H = 30 -Tex = ButtonEsc +Tex = Button13 Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[EditButtonConvert] -X = 250 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 -Fade = 1 -FadeText = 1 -SelectH = 150 -FadeTex = ButtonFade -FadeTexPos = 0 -[EditButtonConvertText1] -X = 75 -Y = 10 +[SongSlideTextParty3] +X = 300 +Y = 548 +Z = 0.952 +Color = Black Font = 0 -Size = 30 -Align = 1 -Text = SING_EDIT_BUTTON_CONVERT -Color = White - -[EditButtonExit] -X = 405 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 +Size = 24 +Align = 0 +Text = SONG_MENU_NAME_PARTY_JOKER Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 -Fade = 1 -FadeText = 1 -SelectH = 150 -FadeTex = ButtonFade -FadeTexPos = 0 - -[EditButtonExitText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_EDIT_BUTTON_EXIT -Color = White - -[Level] -Texts = 5 - -[LevelBackground] -Tex = MainBG +ReflectionSpacing = 13 -[LevelStatic1] -X = 65 -Y = 205 -W = 25 +# menu +[SongSlideStaticParty3] +X = 400 +Y = 552 +Z = 0.952 +W = 24 H = 23 -Tex = MainIcon +Tex = ButtonM Color = White Type = Transparent -[LevelText1] -X = 95 -Y = 186 -Color = White -Font = 0 -Size = 54 -Align = 0 -Text = SING_MODE - -[LevelText2] -X = 95 -Y = 233 -Color = ColorLightest +[SongSlideTextParty4] +X = 426 +Y = 548 +Z = 0.952 +Color = Black Font = 0 -Size = 30 +Size = 24 Align = 0 -Text = SING_DIFFICULTY_DESC - -[LevelStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[LevelStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[LevelStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi -Color = White -Type = Transparent +Text = PARTY_SONG_MENU Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 13 -[LevelStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 +[SongSlideStaticParty4] +X = 540 +Y = 552 +Z = 0.952 +W = 24 +H = 24 Tex = ButtonEnter Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[LevelText3] -X = 300 +[SongSlideTextParty5] +X = 570 Y = 548 Color = Black Font = 0 Size = 24 Align = 0 -Text = SING_LEGEND_NAVIGATE +Text = PARTY_SONG_LEGEND_CONTINUE Reflection = 1 ReflectionSpacing = 13 -[LevelText4] -X = 440 +#Texts for Party Mode +[SongSlideTextParty1] +X = 70 +Y = 5 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 +Font = 0 +Size = 60 +Color = White +Text = PARTY_MODE + +[SongSlideTextParty2] +X = 238 Y = 548 Color = Black Font = 0 -Size = 24 -Align = 0 -Text = SING_DIFFICULTY_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 - -[LevelButtonEasy] -X = 180 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 -Fade = 1 -FadeText = 1 -SelectH = 150 -FadeTex = ButtonFade -FadeTexPos = 0 +Size = 21 +Align = 2 +Text = PARTY_SONG_WHEREAMI +#variable statics end -[LevelButtonMedium] -X = 335 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 -Fade = 1 -FadeText = 1 -SelectH = 150 -FadeTex = ButtonFade -FadeTexPos = 0 - -[LevelButtonHard] -X = 490 -Y = 270 -W = 150 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Reflection = 1 -ReflectionSpacing = 15 -DeSelectReflectionSpacing = 280 -Fade = 1 -FadeText = 1 -SelectH = 150 -FadeTex = ButtonFade -FadeTexPos = 0 +# Jokers, 5 for each team, only shown in party Mode +[SongSlideStaticTeam1Joker1] +Tex = Joker +X = 505 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[LevelButtonEasyText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Color = White -Text = SING_EASY +[SongSlideStaticTeam1Joker2] +Tex = Joker +X = 555 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[LevelButtonMediumText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Color = White -Text = SING_MEDIUM +[SongSlideStaticTeam1Joker3] +Tex = Joker +X = 605 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[LevelButtonHardText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Color = White -Text = SING_HARD +[SongSlideStaticTeam1Joker4] +Tex = Joker +X = 655 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[Name] -Texts = 2 +[SongSlideStaticTeam1Joker5] +Tex = Joker +X = 705 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameBackground] -Tex = MainBG +[SongSlideStaticTeam2Joker1] +Tex = Joker +X = 505 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameStatic1] -X = 65 -Y = 22 -W = 25 -H = 23 -Tex = MainIcon -Color = White -Type = Transparent +[SongSlideStaticTeam2Joker2] +Tex = Joker +X = 555 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameText1] -X = 95 -Y = 6 -Color = White -Font = 0 -Size = 54 -Text = SING_MODE +[SongSlideStaticTeam2Joker3] +Tex = Joker +X = 605 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameText2] -X = 95 -Y = 59 -Color = ColorLightest -Font = 0 -Size = 30 -Align = 0 -Text = SING_PLAYER_DESC +[SongSlideStaticTeam2Joker4] +Tex = Joker +X = 655 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight +[SongSlideStaticTeam2Joker5] +Tex = Joker +X = 705 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongSlideStaticTeam3Joker1] +Tex = Joker +X = 505 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameStatic4] -X = 260 -Y = 545 -W = 32 -H = 30 -Tex = ButtonNavi -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongSlideStaticTeam3Joker2] +Tex = Joker +X = 555 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameText3] -X = 300 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_LEGEND_NAVIGATE -Reflection = 1 -ReflectionSpacing = 13 +[SongSlideStaticTeam3Joker3] +Tex = Joker +X = 605 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameStatic5] -X = 400 -Y = 545 -W = 32 -H = 30 -Tex = ButtonAZ -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SongSlideStaticTeam3Joker4] +Tex = Joker +X = 655 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameText4] -X = 440 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_PLAYER_ENTER_NAME -Reflection = 1 -ReflectionSpacing = 13 +[SongSlideStaticTeam3Joker5] +Tex = Joker +X = 705 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[NameStatic6] -X = 590 -Y = 545 -W = 32 -H = 30 -Tex = ButtonEnter +[SongSlideTextPartyTime] +X = 750 +Y = 450 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[NameText5] -X = 630 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_LEGEND_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 - -[NameSelectPlayerCount] -Text = NAME_PLAYERS_COUNT -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 90 -Y = 130 -W = 250 -H = 35 -SkipX = 10 -SBGW = 360 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +DColor = Red +Font = 1 +Size = 70 +Align = 2 -[NamePlayerSelectStatic1] -X = 100 -Y = 185 -W = 70 -H = 60 -Tex = AvatarFrame2 -Color = P1Dark +[SongSlideInfoMessageBG] +Tex = SongMessage +X = 250 +Y = 90 +W = 300 +H = 25 +Z = 0.98 +Color = ColorDark Type = Transparent -Z = 1 -[NamePlayerSelectStatic1Text] -X = 135 -Y = 248 +[SongSlideInfoMessageText] +X = 400 +Y = 94 +Color = White Font = 1 -Size = 16 +Size = 20 Align = 1 -Color = White -Z = 1 - -[NamePlayerSelectStatic1Avatar] -X = 105 -Y = 190 -W = 60 -H = 51 -Z = 1 -[NamePlayerSelectStatic2] -X = 206 -Y = 185 -W = 70 -H = 60 -Tex = AvatarFrame2 -Color = P2Dark -Type = Transparent -Z = 1 +############################# +## ## +## Medley Playlist ## +## ## +############################# -[NamePlayerSelectStatic2Text] -X = 241 -Y = 248 -Font = 1 -Size = 16 -Align = 1 -Color = White -Text = P2 -Z = 1 +[SongSlideTextMedleyMax] +N = 3 -[NamePlayerSelectStatic2Avatar] -X = 211 -Y = 190 -W = 60 -H = 51 -Z = 1 +[SongSlideTextMedleyNumber1] +X=27 +Y=375 +Color=White +Font=1 +Size=20 +Align=1 -[NamePlayerSelectStatic3] -X = 312 -Y = 185 -W = 70 -H = 60 -Tex = AvatarFrame2 -Color = P3Dark -Type = Transparent -Z = 1 +[SongSlideTextMedleyArtist1] +X=50 +Y=366 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[NamePlayerSelectStatic3Text] -X = 347 -Y = 248 -Font = 1 -Size = 16 -Align = 1 -Color = White -Text = P3 -Z = 1 +[SongSlideTextMedleyTitle1] +X=50 +Y=383 +Color=White +Font=0 +Size=20 +Align=0 -[NamePlayerSelectStatic3Avatar] -X = 317 -Y = 190 -W = 60 -H = 51 -Z = 1 +[SongSlideTextMedleyNumber2] +X=27 +Y=420 +Color=White +Font=1 +Size=20 +Align=1 -[NamePlayerSelectStatic4] -X = 418 -Y = 185 -W = 70 -H = 60 -Tex = AvatarFrame2 -Color = P4Dark -Type = Transparent -Z = 1 +[SongSlideTextMedleyArtist2] +X=50 +Y=411 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[NamePlayerSelectStatic4Text] -X = 453 -Y = 248 -Font = 1 -Size = 16 -Align = 1 -Color = White -Text = P4 -Z = 1 +[SongSlideTextMedleyTitle2] +X=50 +Y=428 +Color=White +Font=0 +Size=20 +Align=0 -[NamePlayerSelectStatic4Avatar] -X = 423 -Y = 190 -W = 60 -H = 51 -Z = 1 +[SongSlideTextMedleyNumber3] +X=27 +Y=465 +Color=White +Font=1 +Size=20 +Align=1 -[NamePlayerSelectStatic5] -X = 524 -Y = 185 -W = 70 -H = 60 -Tex = AvatarFrame2 -Color = P5Dark -Type = Transparent -Z = 1 +[SongSlideTextMedleyArtist3] +X=50 +Y=454 +Color=ColorDark +Font=0 +Size=20 +Align=0 -[NamePlayerSelectStatic5Text] -X = 559 -Y = 248 -Font = 1 -Size = 16 -Align = 1 -Color = White -Text = P5 -Z = 1 +[SongSlideTextMedleyTitle3] +X=50 +Y=471 +Color=White +Font=0 +Size=20 +Align=0 -[NamePlayerSelectStatic5Avatar] -X = 529 -Y = 190 -W = 60 -H = 51 +[SongSlideStaticMedley1] +Tex = PlayerNumberBox +X = 15 +Y = 370 +W = 25 +H = 30 Z = 1 +Color = ColorDark +Type = Colorized -[NamePlayerSelectStatic6] -X = 630 -Y = 185 -W = 70 -H = 60 -Tex = AvatarFrame2 -Color = P6Dark -Type = Transparent +[SongSlideStaticMedley2] +Tex = PlayerNumberBox +X = 15 +Y = 415 +W = 25 +H = 30 Z = 1 +Color = ColorDark +Type = Colorized -[NamePlayerSelectStatic6Text] -X = 665 -Y = 248 -Font = 1 -Size = 16 -Align = 1 -Color = White -Text = P6 -Z = 1 +[SongSlideStaticMedley3] +Tex = PlayerNumberBox +X = 15 +Y = 460 +W = 25 +H = 30 +Color = ColorDark +Type = Colorized -[NamePlayerSelectStatic6Avatar] -X = 635 -Y = 190 -W = 60 -H = 51 -Z = 1 -[NamePlayerSelectCurrent] -X = -10 -Y = 175 -W = 90 -H = 100 -Z = 0.95 -Tex = SelectFrame -Color = ColorLight -DColor = ColorDark -Type = Transparent +######################################################################################## +##### ##### +##### List ##### +##### ##### +######################################################################################## -[NamePlayerAvatar] -X = 340 -Y = 299 -W = 126 -H = 118 +[SongList] + +[SongListBackground] +Tex = SongBG + + +[SongListSelectSong] +X = 40 +Y = 90 +W = 490 +H = 80 +Z = 0.50 +Rows = 5 +Padding = 2 +DColor = GrayLightest +Color = ColorLight +Tex = SongSelection5 +DTex = SongSelection4 +Type = Colorized Reflection = 0 +ReflectionSpacing = 0 -[NamePlayerButtonAvatar] -X = 306 -Y = 275 -W = 198 -H = 164 -Tex = AvatarFrame -Color = ColorDark -DColor = ColorLight -Type = Transparent +[SongListCover] +X = 44 +Y = 95 +W = 55 +H = 70 +Z = 0.95 +SelectX = 555 +SelectY = 338 +SelectW = 215 +SelectH = 161 +SelectReflection = 0 +SelectReflectionSpacing = 0 +Padding = 12 +Reflections = 0 +Rows = 5 -[NamePlayerScrollAvatar] -Count = 5 -Distance = 40 +[SongListEqualizer] +Visible = 0 +Direction = 1 +Color = White +Alpha = 1 +X = 750 +Y = 505 +PieceW = 4 +PieceH = 4 +Space = 1 +Bands = 7 +Length = 15 +Reflection = 0 +ReflectionSpacing = 0 -[NamePlayerButtonName] -X = 265 -Y = 440 -W = 270 -H = 35 +[SongListMedleyIcon] +X = 490 +Y = 122 +W = 30 +H = 20 Z = 1 -Tex = Button -Color = P1Dark -DColor = P1Light +Color = White +Tex = icon_song_medley Type = Transparent -Texts = 1 +Reflection = 0 -[NamePlayerButtonNameText1] -X = 135 -Y = 5 -Font = 0 -Size = 26 -Align = 1 +[SongListCalculatedMedleyIcon] +X = 490 +Y = 122 +W = 30 +H = 20 +Z = 1 Color = White +Tex = icon_song_calcmedley +Type = Transparent +Reflection = 0 -[NameSelectPlayerColor] -TexSBG = SelectBG -TypeSBG = Transparent -X = 0 -Y = 480 -W = 285 -H = 25 +[SongListVideoIcon] +X = 491 +Y = 96 +W = 18 +H = 24 Z = 1 -SBGW = 230 -TextSize = 20 - -SBGDColor = PlayerDark -SBGColor = PlayerLight -STColor = White -STDColor = GrayDark +Color = White +Tex = icon_song_video +Type = Transparent +Reflection = 0 -[NameSelectPlayerLevel] -TexSBG = SelectBG -TypeSBG = Transparent -X = 0 -Y = 510 -W = 285 -H = 25 +[SongListDuetIcon] +X = 490 +Y = 122 +W = 22 +H = 24 Z = 1 -SBGW = 230 -TextSize = 20 - -SBGDColor = PlayerDark -SBGColor = PlayerLight -STColor = White -STDColor = GrayDark - -[PartyNewRound] -Texts = 7 - -[PartyNewRoundBackground] -Tex = MainBG - -[PartyNewRoundStatic1] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[PartyNewRoundStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 Color = White +Tex = icon_song_duet Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Reflection = 0 -[PartyNewRoundStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 +[SongListTextArtist] +X = 115 +Y = 100 +W = 440 Color = White -Tex = PartyIcon -Type = Colorized +Font = 1 +Size = 28 +Align = 0 +Text = -[PartyNewRoundText1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 +[SongListTextTitle] +X = 115 +Y = 130 +W = 330 +Color = White Font = 0 -Size = 60 +Size = 26 +Align = 0 +Text = + +[SongListTextNumber] +X = 522 +Y = 500 +Z = 0.95 Color = White -Text = PARTY_MODE +Size = 20 +Align = 2 +Reflection = 0 +ReflectionSpacing = 2 -[PartyNewRoundText2] -X = 70 -Y = 65 +[SongListTextYear] +X = 522 +Y = 148 +Z = 0.95 +Color = White +Size = 18 +Align = 2 + +########## LEGEND LIST ######### + +[SongListStaticNonParty1] +X = 555 +Y = 216 +W = 215 +H = 119 +Z = 0 +Tex = BGFade +Color = White +Type = Transparent + +[SongListTextNonParty1] +X = 661 +Y = 222 +Z = 0.952 +Color = White +Font = 1 +Size = 14 +Align = 1 +Text = SING_SONG_SELECTION_LEGEND_TITLE + +[SongListStaticNonParty2] +X = 596 +Y = 250 +W = 15 +H = 20 +Tex = icon_song_video +Color = White +Type = Transparent + + +[SongListTextNonParty2] +X = 625 +Y = 252 +Z = 0.952 Color = White Font = 0 -Size = 30 +Size = 12 Align = 0 -Text = PARTY_ROUND_DESC +Text = SING_SONG_SELECTION_LEGEND_VIDEO -[PartyNewRoundText3] -X = 238 -Y = 552 -Color = Black +[SongListStaticNonParty3] +X = 595 +Y = 270 +W = 26 +H = 16 +Tex = icon_song_medley +Color = White +Type = Transparent + +[SongListTextNonParty3] +X = 625 +Y = 272 +Z = 0.952 +Color = White Font = 0 -Size = 21 -Align = 2 -Text = PARTY_ROUND_WHEREAMI +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEY -[PartyNewRoundText4] -X = 290 -Y = 552 -Color = Black +[SongListStaticNonParty4] +X = 595 +Y = 290 +W = 26 +H = 16 +Tex = icon_song_calcmedley +Color = White +Type = Transparent + +[SongListTextNonParty4] +X = 625 +Y = 292 +Z = 0.952 +Color = White Font = 0 -Size = 21 +Size = 12 Align = 0 -Text = PARTY_ROUND_LEGEND_CONTINUE +Text = SING_SONG_SELECTION_LEGEND_MEDLEYC -[PartyNewRoundText5] -X = 460 -Y = 100 + +[SongListStaticNonParty5] +X = 595 +Y = 310 +W = 13 +H = 17 +Tex = icon_song_duet +Color = White +Type = Transparent + +[SongListTextNonParty5] +X = 625 +Y = 312 +Z = 0.952 Color = White Font = 0 -Size = 30 -Text = PARTY_ROUND +Size = 12 Align = 0 +Text = SING_SONG_SELECTION_LEGEND_DUET -[PartyNewRoundText6] -X = 600 -Y = 100 +#[SongListTextScore] +#X = 530 +#Y = 420 +#Color = ColorLight +#Font = 0 +#Size = 24 +#Align = 0 + +[SongListTextMaxScore] +X = 40 +Y = 510 Color = White Font = 0 -Size = 30 -Text = PARTY_ROUND_WINNER +Size = 22 Align = 0 +Text =SONG_SCORE_MAX -[PartyNewRoundText7] -X = 448 -Y = 350 +[SongListTextMediaScore] +X = 40 +Y = 550 Color = White Font = 0 -Size = 54 -Text = PARTY_ROUND +Size = 22 +Align = 0 +Text =SONG_SCORE_MEDIA + +[SongListTextMaxScore2] +X = 180 +Y = 510 +Color = White +Font = 0 +Size = 22 Align = 2 -[PartyNewRoundTextTeam1Players] -X = 30 -Y = 137 +[SongListTextMediaScore2] +X = 180 +Y = 550 Color = White Font = 0 -Size = 21 +Size = 22 +Align = 2 + +[SongListTextScoreUser] +X = 180 +Y = 528 +Color = ColorLight +Font = 0 +Size = 20 +Align = 2 + +[SongListTextMaxScoreLocal] +X = 190 +Y = 510 +Color = White +Font = 0 +Size = 22 Align = 0 -Text = Dummytext, Player2, Player3, Player4 -[PartyNewRoundTextTeam2Players] -X = 30 -Y = 218 +[SongListTextMediaScoreLocal] +X = 190 +Y = 550 Color = White Font = 0 -Size = 21 +Size = 22 Align = 0 -Text = Dummytext, Player2, Player3, Player4 -[PartyNewRoundTextTeam3Players] -X = 30 -Y = 299 +[SongListTextScoreUserLocal] +X = 190 +Y = 528 +Color = ColorLight +Font = 0 +Size = 20 +Align = 0 + +#Variable statics and texts for song-screen in sing- and partymode +# There can be an unlimited Number of Statics and Texts, As long +# as the numbers are in order. +# Statics that are shown in PartyMode Only are Named_ +# SongStaticParty[No] +# Texts that are shown in PartyMode Only are Named_ +# SongTextParty[No] +# Statics that are shown in Normal Mode Only are Named_ +# SongStaticNonParty[No] +# Texts that are shown in Normal Mode Only are Named_ +# SongTextNonParty[No] +#Here are the ones for singmode + +[SongListTextNonParty6] +X = 40 +Y = 12 Color = White Font = 0 -Size = 21 +Size = 60 +Text = SING_SONG_SELECTION Align = 0 -Text = Dummytext, Player2, Player3, Player4 -[PartyNewRoundStatic4] -Tex = PartyRoundBG1 -X = 450 -Y = 103 -W = 330 -H = 24 -Color = ColorDark -Type = Colorized +# Menu opens with [M] -[PartyNewRoundStatic5] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonEnter +[SongListStaticNonParty6] +X = 255 +Y = 560 +W = 25 +H = 30 +Z = 0.952 +Tex = ButtonM Color = White Type = Transparent +Reflection = 0 +ReflectionSpacing = 2 -[PartyNewRoundStatic6] -Tex = PartyRoundBG3 -X = 250 -Y = 350 -W = 300 -H = 50 -Color = ColorLight -Type = Colorized +[SongListTextNonParty7] +X = 287 +Y = 563 +Z = 0.952 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = SING_SONG_SELECTION_MENU +Reflection = 1 +ReflectionSpacing = 13 -[PartyNewRoundStatic7] -Tex = PartyRoundBG4 -X = 50 -Y = 495 -W = 700 +# The so famous search, shown with [J] +[SongListStaticNonParty7] +X = 375 +Y = 560 +W = 25 H = 30 -Color = ColorLight -Type = Colorized - -[PartyNewRoundStaticTeam1] -Tex = PartyTeamButton1 -X = 20 -Y = 110 -W = 400 -H = 50 -Color = P1Dark +Z = 0.952 +Tex = ButtonJ +Color = White Type = Transparent Reflection = 0 +ReflectionSpacing = 2 -[PartyNewRoundStaticTeam2] -Tex = PartyTeamButton1 -X = 20 -Y = 191 -W = 400 -H = 50 -Color = P2Dark -Type = Transparent -Reflection = 0 - -[PartyNewRoundStaticTeam3] -Tex = PartyTeamButton1 -X = 20 -Y = 272 -W = 400 -H = 50 -Color = P3Dark -Type = Transparent -Reflection = 0 - -[PartyNewRoundStaticNextPlayer1] -Tex = PartyPlayerButton -X = 155 -Y = 415 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = P1Dark -Reflection = 1 -ReflectionSpacing = 2 - -[PartyNewRoundStaticNextPlayer2] -Tex = PartyPlayerButton -X = 325 -Y = 415 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = P2Dark -Reflection = 1 -ReflectionSpacing = 2 - -[PartyNewRoundStaticNextPlayer3] -Tex = PartyPlayerButton -X = 495 -Y = 415 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = P3Dark -Reflection = 1 -ReflectionSpacing = 2 - -[PartyNewRoundTextRound1] -X = 460 -Y = 133 -Color = White -Font = 0 -Size = 24 -Text = Round 1 -Align = 0 - -[PartyNewRoundTextRound2] -X = 460 -Y = 162 +[SongListTextNonParty8] +X = 407 +Y = 563 +Z = 0.952 Color = White Font = 0 Size = 24 -Text = Round 2 Align = 0 +Text = SONG_JUMPTO_DESC +Reflection = 0 +ReflectionSpacing = 13 -[PartyNewRoundTextRound3] -X = 460 -Y = 191 +# [P]laylist +[SongListStaticNonParty8] +X = 580 +Y = 560 +W = 25 +H = 30 +Z = 0.952 +Tex = ButtonP Color = White -Font = 0 -Size = 24 -Text = Round 3 -Align = 0 +Type = Transparent +Reflection = 0 +ReflectionSpacing = 2 -[PartyNewRoundTextRound4] -X = 460 -Y = 220 +[SongListTextNonParty9] +X = 612 +Y = 563 +Z = 0.952 Color = White Font = 0 Size = 24 -Text = Round 4 Align = 0 +Text = SING_SONG_SELECTION_PLAYLIST +Reflection = 0 +ReflectionSpacing = 13 -[PartyNewRoundTextRound5] -X = 460 -Y = 249 +#and these are the ones for partymode +[SongListStaticParty1] +X = 40 +Y = 22 +W = 27 +H = 27 Color = White -Font = 0 -Size = 24 -Text = Round 5 -Align = 0 +Tex = PartyIcon +Type = Colorized -[PartyNewRoundTextRound6] -X = 460 -Y = 278 +# NAVBAR for party +# enter a number +[SongListStaticParty2] +X = 260 +Y = 545 +Z = 0.952 +W = 32 +H = 30 +Tex = Button13 Color = White -Font = 0 -Size = 24 -Text = Round 6 -Align = 0 +Type = Transparent -[PartyNewRoundTextRound7] -X = 460 -Y = 307 -Color = White +[SongListTextParty3] +X = 300 +Y = 548 +Z = 0.952 +Color = Black Font = 0 Size = 24 -Text = Round 7 Align = 0 +Text = SONG_MENU_NAME_PARTY_JOKER +Reflection = 1 +ReflectionSpacing = 13 -[PartyNewRoundTextWinner1] -X = 600 -Y = 133 +# menu +[SongListStaticParty3] +X = 400 +Y = 552 +Z = 0.952 +W = 24 +H = 23 +Tex = ButtonM Color = White -Font = 0 -Size = 24 -Text = Winner 1 -Align = 0 +Type = Transparent -[PartyNewRoundTextWinner2] -X = 600 -Y = 162 -Color = White +[SongListTextParty4] +X = 426 +Y = 548 +Z = 0.952 +Color = Black Font = 0 Size = 24 -Text = Winner 2 Align = 0 +Text = PARTY_SONG_MENU +Reflection = 1 +ReflectionSpacing = 13 -[PartyNewRoundTextWinner3] -X = 600 -Y = 191 +[SongListStaticParty4] +X = 540 +Y = 552 +Z = 0.952 +W = 24 +H = 24 +Tex = ButtonEnter Color = White -Font = 0 -Size = 24 -Text = Winner 3 -Align = 0 +Type = Transparent -[PartyNewRoundTextWinner4] -X = 600 -Y = 220 -Color = White +[SongListTextParty5] +X = 570 +Y = 548 +Color = Black Font = 0 Size = 24 -Text = Winner 4 Align = 0 +Text = PARTY_SONG_LEGEND_CONTINUE +Reflection = 1 +ReflectionSpacing = 13 -[PartyNewRoundTextWinner5] -X = 600 -Y = 249 -Color = White +#Texts for Party Mode +[SongListTextParty1] +X = 70 +Y = 5 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 Font = 0 -Size = 24 -Text = Winner 5 -Align = 0 - -[PartyNewRoundTextWinner6] -X = 600 -Y = 278 +Size = 60 Color = White -Font = 0 -Size = 24 -Text = Winner 6 -Align = 0 +Text = PARTY_MODE -[PartyNewRoundTextWinner7] -X = 600 -Y = 307 -Color = White +[SongListTextParty2] +X = 238 +Y = 548 +Color = Black Font = 0 -Size = 24 -Text = Winner 7 -Align = 0 +Size = 21 +Align = 2 +Text = PARTY_SONG_WHEREAMI +#variable statics end -[PartyNewRoundStaticRound1] -Tex = PartyRoundBG2 -X = 450 -Y = 135 -W = 330 -H = 20 -Color = ColorLightest +# Jokers, 5 for each team, only shown in party Mode +[SongListStaticTeam1Joker1] +Tex = Joker +X = 505 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundStaticRound2] -Tex = PartyRoundBG2 -X = 450 -Y = 164 -W = 330 -H = 20 -Color = ColorLightest +[SongListStaticTeam1Joker2] +Tex = Joker +X = 555 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundStaticRound3] -Tex = PartyRoundBG2 -X = 450 -Y = 193 -W = 330 -H = 20 -Color = ColorLightest +[SongListStaticTeam1Joker3] +Tex = Joker +X = 605 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundStaticRound4] -Tex = PartyRoundBG2 -X = 450 -Y = 222 -W = 330 -H = 20 -Color = ColorLightest +[SongListStaticTeam1Joker4] +Tex = Joker +X = 655 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundStaticRound5] -Tex = PartyRoundBG2 -X = 450 -Y = 251 -W = 330 -H = 20 -Color = ColorLightest +[SongListStaticTeam1Joker5] +Tex = Joker +X = 705 +Y = 400 +W = 40 +H = 40 +Z = 0.98 +Color = P1Dark Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundStaticRound6] -Tex = PartyRoundBG2 -X = 450 -Y = 280 -W = 330 -H = 20 -Color = ColorLightest +[SongListStaticTeam2Joker1] +Tex = Joker +X = 505 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundStaticRound7] -Tex = PartyRoundBG2 -X = 450 -Y = 309 -W = 330 -H = 20 -Color = ColorLightest +[SongListStaticTeam2Joker2] +Tex = Joker +X = 555 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundTextNextRound] -X = 400 -Y = 495 -Color = White -Font = 0 -Size = 30 -Text = Next Round -Align = 1 - -[PartyNewRoundTextNextRoundNo] -X = 457 -Y = 350 -Color = White -Font = 0 -Size = 54 -Text = 99 -Align = 0 - -[PartyNewRoundTextScoreTeam1] -X = 390 -Y = 110 -Color = White -Font = 0 -Size = 51 -Text = 3000 -Align = 1 +[SongListStaticTeam2Joker3] +Tex = Joker +X = 605 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundTextScoreTeam2] -X = 390 -Y = 191 -Color = White -Font = 0 -Size = 51 -Text = 2000 -Align = 1 +[SongListStaticTeam2Joker4] +Tex = Joker +X = 655 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundTextScoreTeam3] -X = 390 -Y = 272 -Color = White -Font = 0 -Size = 51 -Text = 1000 -Align = 1 +[SongListStaticTeam2Joker5] +Tex = Joker +X = 705 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundTextNameTeam1] -X = 30 -Y = 108 -Color = White -Font = 0 -Size = 36 -Text = Team 1 -Align = 0 +[SongListStaticTeam3Joker1] +Tex = Joker +X = 505 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundTextNameTeam2] -X = 30 -Y = 189 -Color = White -Font = 0 -Size = 36 -Text = Team 2 -Align = 0 +[SongListStaticTeam3Joker2] +Tex = Joker +X = 555 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundTextNameTeam3] -X = 30 -Y = 270 -Color = White -Font = 0 -Size = 36 -Text = Team 3 -Align = 0 +[SongListStaticTeam3Joker3] +Tex = Joker +X = 605 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyNewRoundTextNextPlayer1] -X = 230 -Y = 425 +[SongListStaticTeam3Joker4] +Tex = Joker +X = 655 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 + +[SongListStaticTeam3Joker5] +Tex = Joker +X = 705 +Y = 500 +W = 40 +H = 40 +Z = 0.98 +Color = P3Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 + +[SongListTextPartyTime] +X = 750 +Y = 450 Color = White -Font = 0 -Size = 30 -Text = Player 1 -Align = 1 +DColor = Red +Font = 1 +Size = 70 +Align = 2 -[PartyNewRoundTextNextPlayer2] +[SongListInfoMessageBG] +Tex = SongMessage +X = 250 +Y = 90 +W = 300 +H = 25 +Z = 0.98 +Color = ColorDark +Type = Transparent + +[SongListInfoMessageText] X = 400 -Y = 425 +Y = 94 Color = White -Font = 0 -Size = 30 -Text = Player 2 +Font = 1 +Size = 20 Align = 1 -[PartyNewRoundTextNextPlayer3] -X = 570 -Y = 425 -Color = White -Font = 0 -Size = 30 -Text = Player 3 -Align = 1 +############################# +## ## +## Medley Playlist ## +## ## +############################# +[SongListTextMedleyMax] +N = 3 -[PartyScore] -Texts = 5 +[SongListTextMedleyNumber1] +X=543 +Y=100 +Color=White +Font=1 +Size=18 +Align=1 -[PartyScoreBackground] -Tex = PartyBG +[SongListTextMedleyArtist1] +X=565 +Y=91 +Color=ColorDark +Font=0 +Size=18 +Align=0 -[PartyScoreDecoTextures] -ChangeTextures = 1 +[SongListTextMedleyTitle1] +X=565 +Y=108 +Color=White +Font=0 +Size=18 +Align=0 -FirstTexture = PartyScoreDeco -FirstTyp = Colorized -FirstColor = Gold +[SongListTextMedleyNumber2] +X=543 +Y=145 +Color=White +Font=1 +Size=18 +Align=1 -SecondTexture = PartyScoreDeco -SecondTyp = Colorized -SecondColor = Silver +[SongListTextMedleyArtist2] +X=565 +Y=136 +Color=ColorDark +Font=0 +Size=18 +Align=0 -ThirdTexture = PartyScoreDeco -ThirdTyp = Colorized -ThirdColor = Bronze +[SongListTextMedleyTitle2] +X=565 +Y=153 +Color=White +Font=0 +Size=18 +Align=0 -[PartyScoreStatic1] -X = 0 -Y = 545 -W = 250 +[SongListTextMedleyNumber3] +X=543 +Y=190 +Color=White +Font=1 +Size=18 +Align=1 + +[SongListTextMedleyArtist3] +X=565 +Y=181 +Color=ColorDark +Font=0 +Size=18 +Align=0 + +[SongListTextMedleyTitle3] +X=565 +Y=198 +Color=White +Font=0 +Size=18 +Align=0 + +[SongListStaticMedley1] +Tex = PlayerNumberBox +X = 532 +Y = 95 +W = 24 H = 30 -Tex = Leiste1 -Color = ColorLight +Color = ColorDark Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 -[PartyScoreStatic2] -X = 250 -Y = 545 -W = 550 +[SongListStaticMedley2] +Tex = PlayerNumberBox +X = 532 +Y = 140 +W = 24 H = 30 -Tex = Leiste2 +Color = ColorDark +Type = Colorized + +[SongListStaticMedley3] +Tex = PlayerNumberBox +X = 532 +Y = 185 +W = 24 +H = 30 +Color = ColorDark +Type = Colorized + +######################################################################################## +##### ##### +##### Mosaic ##### +##### ##### +######################################################################################## + +[SongMosaic] + +[SongMosaicBackground] +Tex = SongBG + +[SongMosaicCover] +X = 45 +Y = 90 +W = 120 +H = 135 +SelectX = 180 +SelectY = 90 +SelectW = 355 +SelectH = 278 +ZoomThumbW = 125 +ZoomThumbH = 140 +ZoomThumbStyle = 0 +Rows = 3 +Cols = 1 +Padding = 4 +Reflections = 0 + +[SongMosaicEqualizer] +Visible = 1 +Direction = 1 Color = White -Type = Transparent +Alpha = 1 +X = 15 +Y = 500 +PieceW = 5 +PieceH = 5 +Space = 1 +Bands = 4 +Length = 18 Reflection = 1 ReflectionSpacing = 2 -[PartyScoreStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 +[SongMosaicMedleyIcon] +X = 500 +Y = 432 +W = 30 +H = 20 +Z = 1 Color = White -Tex = PartyIcon -Type = Colorized +Tex = icon_song_medley +Type = Transparent +Reflection = 0 +ReflectionSpacing = 0 -[PartyScoreStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonEnter +[SongMosaicCalculatedMedleyIcon] +X = 500 +Y = 432 +W = 30 +H = 20 +Z = 1 Color = White +Tex = icon_song_calcmedley Type = Transparent +Reflection = 0 +ReflectionSpacing = 0 -[PartyScoreText1] -X = 70 -Y = 6 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 +[SongMosaicVideoIcon] +X = 502 +Y = 400 +W = 18 +H = 24 +Z = 1 Color = White -Text = PARTY_MODE - -[PartyScoreText2] -X = 70 -Y = 53 +Tex = icon_song_video +Type = Transparent +Reflection = 0 +ReflectionSpacing = 0 + +[SongMosaicDuetIcon] +X = 500 +Y = 432 +W = 22 +H = 24 +Z = 1 Color = White -Font = 0 -Size = 30 +Tex = icon_song_duet +Type = Transparent +Reflection = 0 +ReflectionSpacing = 0 + +[SongMosaicStatic1] +X = 180 +Y = 370 +W = 355 +H = 132 +Z = 0.9 +Color = ColorLight +Tex = JukeboxSongListBackground +Type = Colorized +Reflection = 1 +ReflectionSpacing = 2 + +[SongMosaicTextArtist] +X = 190 +Y = 380 +W = 300 +Color = White +Font = 1 +Size = 28 Align = 0 -Text = PARTY_SCORE_DESC +Text = -[PartyScoreText3] -X = 238 -Y = 552 -Color = Black +[SongMosaicTextTitle] +X = 190 +Y = 435 +W = 300 +Color = White Font = 0 -Size = 21 +Size = 24 +Align = 0 +Text = + +[SongMosaicTextNumber] +X = 141 +Y = 517 +Z = 0.95 +Color = White +Size = 18 +Align = 1 +Reflection = 0 +ReflectionSpacing = 0 + +[SongMosaicTextYear] +X = 530 +Y = 380 +Z = 1 +Color = White +Size = 18 Align = 2 -Text = PARTY_SCORE_WHEREAMI -[PartyScoreText4] -X = 290 -Y = 552 -Color = Black +########## LEGEND MOSAIC ######### + +[SongMosaicStaticNonParty1] +X = 555 +Y = 370 +W = 215 +H = 131 +Z = 0 +Tex = BGFade +Color = White +Type = Transparent + +[SongMosaicTextNonParty1] +X = 661 +Y = 376 +Z = 0.952 +Color = White +Font = 1 +Size = 14 +Align = 1 +Text = SING_SONG_SELECTION_LEGEND_TITLE + +[SongMosaicStaticNonParty2] +X = 596 +Y = 404 +W = 15 +H = 20 +Tex = icon_song_video +Color = White +Type = Transparent + + +[SongMosaicTextNonParty2] +X = 625 +Y = 406 +Z = 0.952 +Color = White Font = 0 -Size = 21 +Size = 12 Align = 0 -Text = PARTY_LEGEND_CONTINUE +Text = SING_SONG_SELECTION_LEGEND_VIDEO -[PartyScoreStatic5] -Tex = PartyScoreBG1 -X = 50 -Y = 100 -W = 700 -H = 80 -Color = ColorDark -Type = Colorized +[SongMosaicStaticNonParty3] +X = 595 +Y = 424 +W = 26 +H = 16 +Tex = icon_song_medley +Color = White +Type = Transparent -[PartyScoreStatic6] -Tex = PartyScoreBG2 -X = 50 -Y = 495 -W = 700 -H = 20 -Color = ColorLight -Type = Colorized +[SongMosaicTextNonParty3] +X = 625 +Y = 426 +Z = 0.952 +Color = White +Font = 0 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEY -[PartyScoreText5] -X = 400 -Y = 136 +[SongMosaicStaticNonParty4] +X = 595 +Y = 444 +W = 26 +H = 16 +Tex = icon_song_calcmedley +Color = White +Type = Transparent + +[SongMosaicTextNonParty4] +X = 625 +Y = 446 +Z = 0.952 Color = White Font = 0 -Size = 45 -Text = PARTY_SCORE_WINS2 -Align = 1 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_MEDLEYC -[PartyScoreTextWinner] -X = 400 -Y = 98 + +[SongMosaicStaticNonParty5] +X = 595 +Y = 464 +W = 13 +H = 17 +Tex = icon_song_duet +Color = White +Type = Transparent + +[SongMosaicTextNonParty5] +X = 625 +Y = 466 +Z = 0.952 Color = White Font = 0 -Size = 54 -Text = The Winner is... -Align = 1 +Size = 12 +Align = 0 +Text = SING_SONG_SELECTION_LEGEND_DUET -[PartyScoreTextScoreTeam1] -X = 568 -Y = 198 +#[SongListTextScore] +#X = 530 +#Y = 420 +#Color = ColorLight +#Font = 0 +#Size = 24 +#Align = 0 + +[SongMosaicTextMaxScore] +X = 565 +Y = 280 Color = White Font = 0 -Size = 36 -Text = 3000 -Align = 2 +Size = 22 +Align = 0 +Text =SONG_SCORE_MAX -[PartyScoreTextScoreTeam2] -X = 568 -Y = 298 +[SongMosaicTextMediaScore] +X = 565 +Y = 320 Color = White Font = 0 -Size = 36 -Text = 2000 +Size = 22 +Align = 0 +Text = SONG_SCORE_MEDIA + +[SongMosaicTextMaxScore2] +X = 705 +Y = 280 +Color = White +Font = 0 +Size = 22 Align = 2 -[PartyScoreTextScoreTeam3] -X = 568 -Y = 398 +[SongMosaicTextMediaScore2] +X = 705 +Y = 320 Color = White Font = 0 -Size = 36 -Text = 1000 +Size = 22 Align = 2 -[PartyScoreTextNameTeam1] -X = 188 -Y = 198 +[SongMosaicTextScoreUser] +X = 705 +Y = 298 +Color = ColorLight Font = 0 -Size = 36 +Size = 20 +Align = 2 + +[SongMosaicTextMaxScoreLocal] +X = 715 +Y = 280 +Color = White +Font = 0 +Size = 22 Align = 0 -Text = Team 1 + +[SongMosaicTextMediaScoreLocal] +X = 715 +Y = 320 Color = White +Font = 0 +Size = 22 +Align = 0 -[PartyScoreTextNameTeam2] -X = 188 +[SongMosaicTextScoreUserLocal] +X = 715 Y = 298 -Color = White +Color = ColorLight Font = 0 -Size = 36 -Text = Team 2 +Size = 20 Align = 0 -[PartyScoreTextNameTeam3] -X = 188 -Y = 398 +#Variable statics and texts for song-screen in sing- and partymode +# There can be an unlimited Number of Statics and Texts, As long +# as the numbers are in order. +# Statics that are shown in PartyMode Only are Named_ +# SongStaticParty[No] +# Texts that are shown in PartyMode Only are Named_ +# SongTextParty[No] +# Statics that are shown in Normal Mode Only are Named_ +# SongStaticNonParty[No] +# Texts that are shown in Normal Mode Only are Named_ +# SongTextNonParty[No] +#Here are the ones for singmode + +[SongMosaicTextNonParty6] +X = 40 +Y = 12 Color = White Font = 0 -Size = 36 -Text = Team 3 +Size = 60 +Text = SING_SONG_SELECTION Align = 0 -[PartyScoreStaticTeam1] -X = 188 -Y = 230 -W = 380 -H = 16 -Z = 1 -Tex = PartyTeamPoints -Color = P1Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 - -[PartyScoreStaticTeam1BG] -Tex = PartyTeamButton2 -X = 178 -Y = 200 -W = 400 -H = 50 -Type = Transparent -Color = P1Dark -DColor = P1Light -Reflection = 1 -ReflectionSpacing = 2 - -[PartyScoreStaticTeam1Deco] -Tex = PartyScoreDeco -X = 563 -Y = 191 -W = 64 -H = 64 -Type = Transparent -Color = Gold -Reflection = 1 -ReflectionSpacing = -5 - -[PartyScoreStaticTeam2] -X = 188 -Y = 330 -W = 380 -H = 15 -Z = 1 -Tex = PartyTeamPoints -Color = P2Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +# Menu opens with [M] -[PartyScoreStaticTeam2BG] -Tex = PartyTeamButton2 -X = 178 -Y = 300 -W = 400 -H = 50 +[SongMosaicStaticNonParty6] +X = 255 +Y = 560 +W = 25 +H = 30 +Z = 0.952 +Tex = ButtonM +Color = White Type = Transparent -Color = P2Dark -DColor = P2Light -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[PartyScoreStaticTeam2Deco] -Tex = PartyScoreDeco -X = 563 -Y = 291 -W = 64 -H = 64 -Type = Transparent -Color = Gold -Reflection = 1 -ReflectionSpacing = -5 - -[PartyScoreStaticTeam3] -X = 188 -Y = 430 -W = 380 -H = 15 -Z = 1 -Tex = PartyTeamPoints -Color = P3Dark -Type = Transparent +[SongMosaicTextNonParty7] +X = 287 +Y = 563 +Z = 0.952 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = SING_SONG_SELECTION_MENU Reflection = 1 -ReflectionSpacing = 12 +ReflectionSpacing = 13 -[PartyScoreStaticTeam3BG] -Tex = PartyTeamButton2 -X = 178 -Y = 400 -W = 400 -H = 50 +# The so famous search, shown with [J] +[SongMosaicStaticNonParty7] +X = 375 +Y = 560 +W = 25 +H = 30 +Z = 0.952 +Tex = ButtonJ +Color = White Type = Transparent -Color = P3Dark -DColor = P3Light -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[PartyScoreStaticTeam3Deco] -Tex = PartyScoreDeco -X = 563 -Y = 391 -W = 64 -H = 64 -Type = Transparent -Color = Gold -Reflection = 1 -ReflectionSpacing = -5 - -[PartyWin] -Texts = 4 - -[PartyWinBackground] -Tex = PartyBG - -[PartyWinStatic1] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[SongMosaicTextNonParty8] +X = 407 +Y = 563 +Z = 0.952 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = SONG_JUMPTO_DESC +Reflection = 0 +ReflectionSpacing = 13 -[PartyWinStatic2] -X = 250 -Y = 545 -W = 550 +# [P]layList +[SongMosaicStaticNonParty8] +X = 580 +Y = 560 +W = 25 H = 30 -Tex = Leiste2 +Z = 0.952 +Tex = ButtonP Color = White Type = Transparent -Reflection = 1 +Reflection = 0 ReflectionSpacing = 2 -[PartyWinStatic3] +[SongMosaicTextNonParty9] +X = 612 +Y = 563 +Z = 0.952 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = SING_SONG_SELECTION_PLAYLIST +Reflection = 0 +ReflectionSpacing = 13 + +#and these are the ones for partymode +[SongMosaicStaticParty1] X = 40 Y = 22 W = 27 @@ -7524,18 +7551,78 @@ Color = White Tex = PartyIcon Type = Colorized -[PartyWinStatic4] +# NAVBAR for party +# enter a number +[SongMosaicStaticParty2] X = 260 +Y = 545 +Z = 0.952 +W = 32 +H = 30 +Tex = Button13 +Color = White +Type = Transparent + +[SongMosaicTextParty3] +X = 300 +Y = 548 +Z = 0.952 +Color = Black +Font = 0 +Size = 24 +Align = 0 +Text = SONG_MENU_NAME_PARTY_JOKER +Reflection = 1 +ReflectionSpacing = 13 + +# menu +[SongMosaicStaticParty3] +X = 400 Y = 552 +Z = 0.952 W = 24 H = 23 +Tex = ButtonM +Color = White +Type = Transparent + +[SongMosaicTextParty4] +X = 426 +Y = 548 +Z = 0.952 +Color = Black +Font = 0 +Size = 24 +Align = 0 +Text = PARTY_SONG_MENU +Reflection = 1 +ReflectionSpacing = 13 + +[SongMosaicStaticParty4] +X = 540 +Y = 552 +Z = 0.952 +W = 24 +H = 24 Tex = ButtonEnter Color = White Type = Transparent -[PartyWinText1] +[SongMosaicTextParty5] +X = 570 +Y = 548 +Color = Black +Font = 0 +Size = 24 +Align = 0 +Text = PARTY_SONG_LEGEND_CONTINUE +Reflection = 1 +ReflectionSpacing = 13 + +#Texts for Party Mode +[SongMosaicTextParty1] X = 70 -Y = 6 +Y = 5 ColR = 0.7 ColG = 0.7 ColB = 0.7 @@ -7544,520 +7631,421 @@ Size = 60 Color = White Text = PARTY_MODE -[PartyWinText2] -X = 70 -Y = 53 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = PARTY_WIN_DESC - -[PartyWinText3] +[SongMosaicTextParty2] X = 238 -Y = 552 +Y = 548 Color = Black Font = 0 Size = 21 Align = 2 -Text = PARTY_WIN_WHEREAMI +Text = PARTY_SONG_WHEREAMI +#variable statics end -[PartyWinText4] -X = 290 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = PARTY_WIN_LEGEND_CONTINUE - -#[PartyWinTextWinner] -#X = 150 -#Y = 120 -#Color = White -#Font = 1 -#Size = 42 -#Text = The Winner is... -#Align = 0 - -[PartyWinTextScoreTeam1] -X = 699 -Y = 183 -Color = White -Font = 0 -Size = 57 -Text = 3000 -Align = 2 - -[PartyWinTextScoreTeam2] -X = 669 -Y = 298 -Color = White -Font = 0 -Size = 36 -Text = 2000 -Align = 2 - -[PartyWinTextScoreTeam3] -X = 649 -Y = 398 -Color = White -Font = 0 -Size = 27 -Text = 1000 -Align = 2 - -[PartyWinTextNameTeam1] -X = 169 -Y = 183 -Font = 0 -Size = 57 -Align = 0 -Text = Team 1 -Color = White - -[PartyWinTextNameTeam2] -X = 289 -Y = 298 -Color = White -Font = 0 -Size = 36 -Text = Team 2 -Align = 0 - -[PartyWinTextNameTeam3] -X = 369 -Y = 398 -Color = White -Font = 0 -Size = 27 -Text = Team 3 -Align = 0 - -[PartyWinStaticTeam1] -X = 169 -Y = 230 -W = 530 -H = 16 -Z = 1 -Tex = PartyTeamPoints -Color = TeamColor -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 - -[PartyWinStaticTeam1BG] -Tex = PartyTeamButton3 -X = 159 -Y = 185 -W = 550 -H = 65 -Type = Transparent -Color = TeamColor -Reflection = 1 -ReflectionSpacing = 2 - -[PartyWinStaticTeam1Rank1] -X = 169 -Y = 230 -W = 530 -H = 16 -Z = 1 -Tex = PartyTeamPoints -Color = P1Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 - -[PartyWinStaticTeam1BGRank1] -Tex = PartyTeamButton3 -X = 159 -Y = 185 -W = 550 -H = 65 -Type = Transparent +# Jokers, 5 for each team, only shown in party Mode +[SongMosaicStaticTeam1Joker1] +Tex = Joker +X = 505 +Y = 400 +W = 40 +H = 40 +Z = 0.98 Color = P1Dark -Reflection = 1 -ReflectionSpacing = 2 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam1Rank2] -X = 289 -Y = 330 -W = 380 -H = 15 -Z = 1 -Tex = PartyTeamPoints +[SongMosaicStaticTeam1Joker2] +Tex = Joker +X = 555 +Y = 400 +W = 40 +H = 40 +Z = 0.98 Color = P1Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam1BGRank2] -Tex = PartyTeamButton3 -X = 279 -Y = 300 -W = 400 -H = 50 -Type = Transparent +[SongMosaicStaticTeam1Joker3] +Tex = Joker +X = 605 +Y = 400 +W = 40 +H = 40 +Z = 0.98 Color = P1Dark -Reflection = 1 -ReflectionSpacing = 2 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam1Rank3] -X = 369 -Y = 420 -W = 280 -H = 15 -Z = 1 -Tex = PartyTeamPoints +[SongMosaicStaticTeam1Joker4] +Tex = Joker +X = 655 +Y = 400 +W = 40 +H = 40 +Z = 0.98 Color = P1Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam1BGRank3] -Tex = PartyTeamButton3 -X = 359 +[SongMosaicStaticTeam1Joker5] +Tex = Joker +X = 705 Y = 400 -W = 300 +W = 40 H = 40 -Type = Transparent +Z = 0.98 Color = P1Dark -Reflection = 1 -ReflectionSpacing = 2 - +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam1Deco] -Tex = PartyWinDeco1 -X = 91 -Y = 176 -W = 79 -H = 79 -Type = Transparent -Color = Gold -Reflection = 1 -ReflectionSpacing = 3 +[SongMosaicStaticTeam2Joker1] +Tex = Joker +X = 505 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam2] -X = 289 -Y = 330 -W = 380 -H = 15 -Z = 1 -Tex = PartyTeamPoints -Color = TeamColor -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +[SongMosaicStaticTeam2Joker2] +Tex = Joker +X = 555 +Y = 450 +W = 40 +H = 40 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam2BG] -Tex = PartyTeamButton4 -X = 279 -Y = 300 -W = 400 -H = 50 -Type = Transparent -Color = TeamColor -Reflection = 1 -ReflectionSpacing = 2 - -[PartyWinStaticTeam2Rank1] -X = 169 -Y = 230 -W = 530 -H = 16 -Z = 1 -Tex = PartyTeamButton3 -Color = P2Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 - -[PartyWinStaticTeam2BGRank1] -Tex = PartyTeamButton4 -X = 159 -Y = 185 -W = 550 -H = 65 -Type = Transparent -Color = P2Dark -Reflection = 1 -ReflectionSpacing = 2 - -[PartyWinStaticTeam2Rank2] -X = 289 -Y = 330 -W = 380 -H = 15 -Z = 1 -Tex = PartyTeamPoints +[SongMosaicStaticTeam2Joker3] +Tex = Joker +X = 605 +Y = 450 +W = 40 +H = 40 +Z = 0.98 Color = P2Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam2BGRank2] -Tex = PartyTeamButton4 -X = 279 -Y = 300 -W = 400 -H = 50 -Type = Transparent +[SongMosaicStaticTeam2Joker4] +Tex = Joker +X = 655 +Y = 450 +W = 40 +H = 40 +Z = 0.98 Color = P2Dark -Reflection = 1 -ReflectionSpacing = 2 - -[PartyWinStaticTeam2Rank3] -X = 369 -Y = 420 -W = 280 -H = 15 -Z = 1 -Tex = PartyTeamPoints -Color = TeamColor -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam2BGRank3] -Tex = PartyTeamButton4 -X = 359 -Y = 400 -W = 300 +[SongMosaicStaticTeam2Joker5] +Tex = Joker +X = 705 +Y = 450 +W = 40 H = 40 -Type = Transparent -Color = TeamColor -Reflection = 1 -ReflectionSpacing = 2 - -[PartyWinStaticTeam2Deco] -Tex = PartyWinDeco2 -X = 226 -Y = 291 -W = 64 -H = 64 -Type = Transparent -Color = Silver -Reflection = 1 -ReflectionSpacing = 3 - -[PartyWinStaticTeam3] -X = 369 -Y = 420 -W = 280 -H = 15 -Z = 1 -Tex = PartyTeamPoints -Color = TeamColor -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +Z = 0.98 +Color = P2Dark +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam3BG] -Tex = PartyTeamButton5 -X = 359 -Y = 400 -W = 300 +[SongMosaicStaticTeam3Joker1] +Tex = Joker +X = 505 +Y = 500 +W = 40 H = 40 -Type = Transparent -Color = TeamColor -Reflection = 1 -ReflectionSpacing = 2 - -[PartyWinStaticTeam3Rank1] -X = 169 -Y = 230 -W = 530 -H = 16 -Z = 1 -Tex = PartyTeamPoints -Color = P3Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 - -[PartyWinStaticTeam3BGRank1] -Tex = PartyTeamButton3 -X = 159 -Y = 185 -W = 550 -H = 65 -Type = Transparent +Z = 0.98 Color = P3Dark -Reflection = 1 -ReflectionSpacing = 2 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam3Rank2] -X = 289 -Y = 330 -W = 380 -H = 15 -Z = 1 -Tex = PartyTeamPoints +[SongMosaicStaticTeam3Joker2] +Tex = Joker +X = 555 +Y = 500 +W = 40 +H = 40 +Z = 0.98 Color = P3Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam3BGRank2] -Tex = PartyTeamButton5 -X = 279 -Y = 300 -W = 400 -H = 50 -Type = Transparent +[SongMosaicStaticTeam3Joker3] +Tex = Joker +X = 605 +Y = 500 +W = 40 +H = 40 +Z = 0.98 Color = P3Dark -Reflection = 1 -ReflectionSpacing = 2 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam3Rank3] -X = 369 -Y = 420 -W = 280 -H = 15 -Z = 1 -Tex = PartyTeamPoints +[SongMosaicStaticTeam3Joker4] +Tex = Joker +X = 655 +Y = 500 +W = 40 +H = 40 +Z = 0.98 Color = P3Dark -Type = Transparent -Reflection = 1 -ReflectionSpacing = 12 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam3BGRank3] -Tex = PartyTeamButton5 -X = 359 -Y = 400 -W = 300 +[SongMosaicStaticTeam3Joker5] +Tex = Joker +X = 705 +Y = 500 +W = 40 H = 40 -Type = Transparent +Z = 0.98 Color = P3Dark -Reflection = 1 -ReflectionSpacing = 2 +Type = Colorized +TexX1 = 0 +TexY1 = 0 +TexX2 = 1 +TexY2 = 1 -[PartyWinStaticTeam3Deco] -Tex = PartyWinDeco3 -X = 316 -Y = 391 -W = 54 -H = 54 +[SongMosaicTextPartyTime] +X = 750 +Y = 450 +Color = White +DColor = Red +Font = 1 +Size = 70 +Align = 2 + +[SongMosaicInfoMessageBG] +Tex = SongMessage +X = 250 +Y = 90 +W = 300 +H = 25 +Z = 0.98 +Color = ColorDark Type = Transparent -Color = Bronze -Reflection = 1 -ReflectionSpacing = 3 -[PartyOptions] -Texts = 5 +[SongMosaicInfoMessageText] +X = 400 +Y = 94 +Color = White +Font = 1 +Size = 20 +Align = 1 -[PartyOptionsBackground] -Tex = PartyBG +############################# +## ## +## Medley Playlist ## +## ## +############################# -[PartyOptionsStatic1] -X = 0 -Y = 545 -W = 250 +[SongMosaicTextMedleyMax] +N = 4 + +[SongMosaicTextMedleyNumber1] +X=548 +Y=111 +Color=White +Font=1 +Size=20 +Align=1 + +[SongMosaicTextMedleyNumber2] +X=548 +Y=156 +Color=White +Font=1 +Size=20 +Align=1 + +[SongMosaicTextMedleyNumber3] +X=548 +Y=201 +Color=White +Font=1 +Size=20 +Align=1 + +[SongMosaicTextMedleyNumber4] +X=548 +Y=246 +Color=White +Font=1 +Size=20 +Align=1 + +[SongMosaicTextMedleyArtist1] +X=570 +Y=102 +Color=ColorDark +Font=0 +Size=20 +Align=0 + +[SongMosaicTextMedleyArtist2] +X=570 +Y=146 +Color=ColorDark +Font=0 +Size=20 +Align=0 + +[SongMosaicTextMedleyArtist3] +X=570 +Y=192 +Color=ColorDark +Font=0 +Size=20 +Align=0 + +[SongMosaicTextMedleyArtist4] +X=570 +Y=237 +Color=ColorDark +Font=0 +Size=20 +Align=0 + + +[SongMosaicTextMedleyTitle1] +X=570 +Y=118 +Color=White +Font=0 +Size=20 +Align=0 + +[SongMosaicTextMedleyTitle2] +X=570 +Y=163 +Color=White +Font=0 +Size=20 +Align=0 + +[SongMosaicTextMedleyTitle3] +X=570 +Y=208 +Color=White +Font=0 +Size=20 +Align=0 + +[SongMosaicTextMedleyTitle4] +X=570 +Y=252 +Color=White +Font=0 +Size=20 +Align=0 + +[SongMosaicStaticMedley1] +Tex = PlayerNumberBox +X = 537 +Y = 105 +W = 24 H = 30 -Tex = Leiste1 -Color = ColorLight +Color = ColorDark Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 -[PartyOptionsStatic2] -X = 250 -Y = 545 -W = 550 +[SongMosaicStaticMedley2] +Tex = PlayerNumberBox +X = 537 +Y = 150 +W = 24 H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[PartyOptionsStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon +Color = ColorDark Type = Colorized -[PartyOptionsStatic4] -X = 260 -Y = 552 +[SongMosaicStaticMedley3] +Tex = PlayerNumberBox +X = 537 +Y = 195 W = 24 -H = 23 -Tex = ButtonNavi -Color = White -Type = Transparent +H = 30 +Color = ColorDark +Type = Colorized -[PartyOptionsStatic5] -X = 388 -Y = 552 +[SongMosaicStaticMedley4] +Tex = PlayerNumberBox +X = 537 +Y = 240 W = 24 -H = 23 -Tex = ButtonEnter -Color = White -Type = Transparent - -[PartyOptionsText1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 -Color = White -Text = PARTY_MODE - -[PartyOptionsText2] -X = 70 -Y = 65 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = PARTY_OPTIONS_DESC - -[PartyOptionsText3] -X = 238 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_OPTIONS_WHEREAMI +H = 30 +Color = ColorDark +Type = Colorized -[PartyOptionsText4] -X = 294 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE +############################# +# # +# Edit # +# # +############################# -[PartyOptionsText5] -X = 418 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_CONTINUE +[EditSub] +[EditSubBackground] +Tex = EditSubBG -[PartyOptionsSelectMode] +[EditSubTitle] +X = 30 +Y = 60 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_TITLE Tex = MainBar Type = Transparent -TexSBG = SelectBG +TexSBG = MainBar TypeSBG = Transparent -Text = PARTY_SELECT_MODE -X = 70 -Y = 110 -W = 230 -H = 40 -SkipX = 10 -Fields = 1 +ShowArrows = 0 +SBGW = 350 +Align = 0 DColor = ColorDark Color = ColorLight @@ -8069,18 +8057,21 @@ SBGColor = ColorLight STColor = White STDColor = GrayDark -[PartyOptionsSelectLevel] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_DIFFICULTY -X = 70 -Y = 165 -W = 230 -H = 40 +[EditSubArtist] +X = 30 +Y = 81 +W = 100 +H = 20 SkipX = 10 -Fields = 1 +TextSize = 16 +Text = EDIT_ARTIST +Tex = MainBar +Type = Transparent +TexSBG = MainBar +TypeSBG = Transparent +ShowArrows = 0 +SBGW = 350 +Align = 0 DColor = ColorDark Color = ColorLight @@ -8092,23 +8083,22 @@ SBGColor = ColorLight STColor = White STDColor = GrayDark -#TexSBG = SelectBG -#W = 230 -#H = 40 -#SkipX = 10 - -[PartyOptionsSelectPlayList] +[EditSubMP3] +X = 30 +Y = 102 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_MP3 Tex = MainBar Type = Transparent -TexSBG = SelectBG +TexSBG = MainBar TypeSBG = Transparent -Text = PARTY_PLAYLIST -X = 70 -Y = 220 -W = 230 -H = 40 -SkipX = 10 -Fields = 1 +ShowArrows = 1 +OneItemOnly = 1 +SBGW = 350 +Align = 0 DColor = ColorDark Color = ColorLight @@ -8120,18 +8110,22 @@ SBGColor = ColorLight STColor = White STDColor = GrayDark -[PartyOptionsSelectPlayList2] +[EditSubSlideCover] +X = 30 +Y = 123 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_COVER Tex = MainBar Type = Transparent TexSBG = SelectBG TypeSBG = Transparent -Text = PARTY_PLAYLIST -X = 70 -Y = 275 -W = 230 -H = 40 -SkipX = 10 -Fields = 1 +ShowArrows = 1 +OneItemOnly = 1 +SBGW = 350 +Align = 0 DColor = ColorDark Color = ColorLight @@ -8143,18 +8137,22 @@ SBGColor = ColorLight STColor = White STDColor = GrayDark -[PartyOptionsSelectRounds] +[EditSubSlideBG] +X = 30 +Y = 144 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_BACKGROUND Tex = MainBar Type = Transparent TexSBG = SelectBG TypeSBG = Transparent -Text = PARTY_ROUNDS -X = 70 -Y = 250 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 +ShowArrows = 1 +OneItemOnly = 1 +SBGW = 350 +Align = 0 DColor = ColorDark Color = ColorLight @@ -8166,144 +8164,22 @@ SBGColor = ColorLight STColor = White STDColor = GrayDark -[PartyPlayer] -Texts = 6 - -[PartyPlayerBackground] -Tex = PartyBG - -[PartyPlayerStatic1] -X = 0 -Y = 545 -Z = 0.7 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[PartyPlayerStatic2] -X = 250 -Y = 545 -Z = 0.7 -W = 550 -H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[PartyPlayerStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon -Type = Colorized - -[PartyPlayerStatic4] -X = 260 -Y = 552 -Z = 0.75 -W = 24 -H = 23 -Tex = ButtonNavi -Color = White -Type = Transparent - -[PartyPlayerStatic5] -X = 388 -Y = 552 -Z = 0.75 -W = 32 -H = 23 -Tex = ButtonAZ -Color = White -Type = Transparent - -[PartyPlayerStatic6] -X = 556 -Y = 552 -Z = 0.75 -W = 24 -H = 23 -Tex = ButtonEnter -Color = White -Type = Transparent - -[PartyPlayerText1] -X = 70 -Y = 6 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 -Color = White -Text = PARTY_MODE - -[PartyPlayerText2] -X = 70 -Y = 53 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = PARTY_PLAYER_DESC - -[PartyPlayerText3] -X = 238 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_PLAYER_WHEREAMI - -[PartyPlayerText4] -X = 294 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE - -[PartyPlayerText5] -X = 418 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = PARTY_PLAYER_ENTER_NAME - -[PartyPlayerText6] -X = 586 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_CONTINUE - -[PartyPlayerSelectTeams] +[EditSubBPM] +X = 30 +Y = 165 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_BPM Tex = MainBar -TexSBG = SelectBG Type = Transparent +TexSBG = MainBar TypeSBG = Transparent -Text = PARTY_TEAMS -X = 70 -Y = 110 -W = 230 -H = 40 -SkipX = 10 -Fields = 2 - +ShowArrows = 0 +SBGW = 100 +Align = 0 + DColor = ColorDark Color = ColorLight TColor = White @@ -8313,15728 +8189,13232 @@ SBGDColor = ColorDark SBGColor = ColorLight STColor = White STDColor = GrayDark - -[PartyPlayerSelectPlayers1] + +[EditSubGAP] +X = 30 +Y = 186 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_GAP Tex = MainBar -TexSBG = PartyPlayerSelectBG Type = Transparent +TexSBG = MainBar TypeSBG = Transparent -Text = PARTY_TEAMS_PLAYER1 -X = 310 -Y = 175 -W = 200 -SBGW = 190 -H = 40 -SkipX = 10 -Fields = 1 - +ShowArrows = 0 +SBGW = 100 +Align = 0 + +DColor = ColorDark +Color = ColorLight TColor = White TDColor = White +SBGDColor = ColorDark +SBGColor = ColorLight STColor = White STDColor = GrayDark - -[PartyPlayerSelectPlayers2] -Tex = MainBar -TexSBG = PartyPlayerSelectBG + +[EditSubStart] +X = 30 +Y = 207 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_START +Tex = MainBar Type = Transparent +TexSBG = MainBar TypeSBG = Transparent -Text = PARTY_TEAMS_PLAYER2 -X = 310 -Y = 300 -W = 200 -SBGW = 190 -H = 40 -SkipX = 10 -Fields = 1 - +ShowArrows = 0 +SBGW = 100 +Align = 0 + +DColor = ColorDark +Color = ColorLight TColor = White TDColor = White +SBGDColor = ColorDark +SBGColor = ColorLight STColor = White STDColor = GrayDark - -[PartyPlayerSelectPlayers3] + +[EditSubDuration] +X = 30 +Y = 228 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_DURATION Tex = MainBar Type = Transparent +TexSBG = MainBar TypeSBG = Transparent -TexSBG = PartyPlayerSelectBG -Text = PARTY_TEAMS_PLAYER3 -X = 310 -Y = 425 -W = 200 -SBGW = 190 -H = 40 -SkipX = 10 -Fields = 4 - +ShowArrows = 0 +SBGW = 100 +Align = 0 + +DColor = ColorDark +Color = ColorLight TColor = White TDColor = White +SBGDColor = ColorDark +SBGColor = ColorLight STColor = White STDColor = GrayDark - -[PartyPlayerTeam1Name] -Tex = PartyTeamButton2 -X = 70 -Y = 175 -W = 230 -H = 40 + +[EditSubTone] +X = 30 +Y = 249 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_TONE +Tex = MainBar Type = Transparent -Color = P1Dark -DColor = P1Light -Texts = 1 - -[PartyPlayerTeam1NameText1] -X = 115 -Y = 4 -Font = 0 -Size = 32 -Align = 1 -Text = Team 1 -Color = White +TexSBG = MainBar +TypeSBG = Transparent +ShowArrows = 0 +SBGW = 100 +Align = 0 + +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White -[PartyPlayerPlayer1Name] -Tex = Button -X = 70 -Y = 225 -W = 154 -H = 40 +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark + +[EditSubLyric] +X = 30 +Y = 270 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_LYRIC +Tex = MainBar Type = Transparent -Texts = 1 -Color = P1Lightest -DColor = P1Light -Reflection = 1 -ReflectionSpacing = 1 +TexSBG = MainBar +TypeSBG = Transparent +ShowArrows = 0 +SBGW = 350 +Align = 0 -[PartyPlayerPlayer1NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 1 -Color = White +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[PartyPlayerPlayer2Name] -Tex = Button -X = 232 -Y = 225 -W = 154 -H = 40 +[EditSubVideoGap] +X = 510 +Y = 270 +W = 100 +H = 20 +SkipX = 10 +TextSize = 16 +Text = EDIT_VIDEOGAP +Tex = MainBar Type = Transparent -Texts = 1 -Color = P1Lightest -DColor = P1Light -Reflection = 1 -ReflectionSpacing = 1 +TexSBG = MainBar +TypeSBG = Transparent +ShowArrows = 0 +SBGW = 100 +Align = 0 -[PartyPlayerPlayer2NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 2 -Color = White +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[PartyPlayerPlayer3Name] -Tex = Button -X = 394 -Y = 225 -W = 154 -H = 40 +[EditSubSelectVolAudio] +TexSBG = SelectBG +Text = EDIT_VOLUME_AUDIO Type = Transparent -Texts = 1 -Color = P1Lightest -DColor = P1Light -Reflection = 1 -ReflectionSpacing = 1 +TypeSBG = Transparent +X = 580 +Y = 545 +W = 250 +H = 16 +TextSize = 14 +SkipX = -150 +ShowArrows = 1 +OneItemOnly = 1 +SBGW = 100 -[PartyPlayerPlayer3NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 3 -Color = White +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[PartyPlayerPlayer4Name] -Tex = Button -X = 556 -Y = 225 -W = 154 -H = 40 +[EditSubSelectVolMidi] +TexSBG = SelectBG +Text = EDIT_VOLUME_MIDI Type = Transparent -Texts = 1 -Color = P1Lightest -DColor = P1Light -Reflection = 1 -ReflectionSpacing = 1 +TypeSBG = Transparent +X = 580 +Y = 562 +W = 0 +H = 16 +TextSize = 14 +SkipX = 100 +ShowArrows = 1 +OneItemOnly = 1 +SBGW = 100 -[PartyPlayerPlayer4NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 4 -Color = White +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[PartyPlayerTeam2Name] -Tex = PartyTeamButton2 -X = 70 -Y = 300 -W = 230 -H = 40 +[EditSubSelectVolClick] +TexSBG = SelectBG +Text = EDIT_VOLUME_CLICK Type = Transparent -Texts = 1 -Color = P2Dark -DColor = P2Light +TypeSBG = Transparent +X = 580 +Y = 579 +W = 0 +H = 16 +TextSize = 14 +SkipX = 100 +ShowArrows = 1 +OneItemOnly = 1 +SBGW = 100 -[PartyPlayerTeam2NameText1] -X = 115 -Y = 4 -Font = 0 -Size = 32 -Align = 1 -Text = Team 2 -Color = White +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[PartyPlayerPlayer5Name] -Tex = Button -X = 70 -Y = 350 -W = 154 -H = 40 +[EditSubBackgroundImage] +X = 510 +Y = 60 +W = 250 +H = 205 +Z = 0.95 +Color = Red +Tex = prevbackground Type = Transparent -Texts = 1 -Color = P2Lightest -DColor = P2Light -Reflection = 1 -ReflectionSpacing = 1 +Reflection = 0 +ReflectionSpacing = 22 -[PartyPlayerPlayer5NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 +[EditSubButtonCurrentLine] +X = 20 +Y = 10 +Z = 0.97 +W = 110 +H = 20 +Size = 20 +Font = 1 Align = 1 -Text = Player 5 -Color = White - -[PartyPlayerPlayer6Name] -Tex = Button -X = 232 -Y = 350 -W = 154 -H = 40 -Type = Transparent +Color = ColorLight +DColor = ColorLight +Tex = Leiste1 +Type = Colorized Texts = 1 -Color = P2Lightest -DColor = P2Light -Reflection = 1 -ReflectionSpacing = 1 -[PartyPlayerPlayer6NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 6 +[EditSubButtonCurrentLineText1] +X = 55 +Y = 2 Color = White +Font = 1 +Size = 18 +Align = 1 -[PartyPlayerPlayer7Name] -Tex = Button -X = 394 -Y = 350 -W = 154 -H = 40 -Type = Transparent +[EditSubButtonCurrentNote] +X = 140 +Y = 10 +Z = 0.97 +W = 110 +H = 20 +Size = 20 +Font = 1 +Align = 1 +Color = ColorLight +DColor = ColorLight +Tex = Leiste1 +Type = Colorized Texts = 1 -Color = P2Lightest -DColor = P2Light -Reflection = 1 -ReflectionSpacing = 1 -[PartyPlayerPlayer7NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 7 +[EditSubButtonCurrentNoteText1] +X = 55 +Y = 2 Color = White +Font = 1 +Size = 18 +Align = 1 -[PartyPlayerPlayer8Name] -Tex = Button -X = 556 -Y = 350 -W = 154 -H = 40 +[EditSubBarStatic1] +Tex = PlayOnly +X = 350 +Y = 245 +W = 24 +H = 24 Type = Transparent -Texts = 1 -Color = P2Lightest -DColor = P2Light -Reflection = 1 -ReflectionSpacing = 1 +Color = ColorLight +Reflection = 0 +ReflectionSpacing = 31 -[PartyPlayerPlayer8NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 8 -Color = White +[EditSubBarStatic2] +Tex = playwithnote +X = 376 +Y = 245 +W = 24 +H = 24 +Type = Transparent +Color = ColorLight +Reflection = 0 +ReflectionSpacing = 31 -[PartyPlayerTeam3Name] -Tex = PartyTeamButton2 -X = 70 -Y = 425 -W = 230 -H = 40 +[EditSubBarStatic3] +Tex = playnote +X = 402 +Y = 245 +W = 24 +H = 24 Type = Transparent -Texts = 1 -Color = P1Dark -DColor = P1Light +Color = ColorLight +Reflection = 0 +ReflectionSpacing = 31 -[PartyPlayerTeam3NameText1] -X = 115 -Y = 4 -Font = 0 -Size = 32 -Align = 1 -Text = Team 3 -Color = White +[EditSubBarStatic4] +Tex = previousseq +X = 363 +Y = 219 +W = 24 +H = 24 +Type = Transparent +Color = ColorLight +Reflection = 0 +ReflectionSpacing = 31 -[PartyPlayerPlayer9Name] -Tex = Button -X = 70 -Y = 475 -Z = 0.6 -W = 154 -H = 40 +[EditSubBarStatic5] +Tex = nextseq +X = 389 +Y = 219 +W = 24 +H = 24 Type = Transparent -Texts = 1 -Color = P3Lightest -DColor = P3Light -Reflection = 1 -ReflectionSpacing = 1 +Color = ColorLight +Reflection = 0 +ReflectionSpacing = 31 -[PartyPlayerPlayer9NameText1] -X = 75 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 9 -Color = White - -[PartyPlayerPlayer10Name] -Tex = Button -X = 232 -Y = 475 -Z = 0.6 -W = 154 -H = 40 +[EditSubBarStatic6] +Tex = gold +X = 440 +Y = 219 +W = 24 +H = 24 Type = Transparent -Texts = 1 -Color = P3Lightest -DColor = P3Light -Reflection = 1 -ReflectionSpacing = 1 +Color = ColorLight +Reflection = 0 +ReflectionSpacing = 31 -[PartyPlayerPlayer10NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 10 -Color = White +[EditSubBarStatic7] +Tex = freestyle +X = 440 +Y = 245 +W = 24 +H = 24 +Type = Transparent +Color = ColorLight +Reflection = 0 +ReflectionSpacing = 31 -[PartyPlayerPlayer11Name] -Tex = Button -X = 394 -Y = 475 -Z = 0.6 -W = 154 -H = 40 +[EditSubBarStatic8] +Tex = undo +X = 320 +Y = 219 +W = 24 +H = 24 Type = Transparent -Texts = 1 -Color = P3Lightest -DColor = P3Light -Reflection = 1 -ReflectionSpacing = 1 +Color = ColorLight +Reflection = 0 +ReflectionSpacing = 31 -[PartyPlayerPlayer11NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 11 -Color = White +########################################## +######### S I N G S C R E E N ########## +########################################## -[PartyPlayerPlayer12Name] -Tex = Button -X = 556 -Y = 475 -Z = 0.6 -W = 154 -H = 40 -Type = Transparent +[Sing] Texts = 1 -Color = P3Lightest -DColor = P3Light -Reflection = 1 -ReflectionSpacing = 1 - -[PartyPlayerPlayer12NameText1] -X = 77 -Y = 5 -Font = 0 -Size = 30 -Align = 1 -Text = Player 12 -Color = White -[PartyRoundsBackground] -Tex = PartyBG +[SingBackground] +Type=color +ColR=1 +ColB=1 +ColG=1 -[PartyRoundsStatic1] +[SingStatic1] +;TextBG +Tex = LyricBar X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +Y = 482 +W = 800 +H = 98 +Color = ColorDark +Type = Transparent -[PartyRoundsStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[SingStatic2] +;TimeBar +Tex = TimeBar1 +X = 0 +Y = 580 +W = 800 +H = 20 Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[PartyRoundsStatic3] +[SingTimeProgress] X = 40 -Y = 22 -W = 27 -H = 27 +Y = 587 +W = 679 +H = 6 Color = White -Tex = PartyIcon -Type = Colorized -[PartyRoundsStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonNavi +[SingTimeText] +Text = SING_TIME +X = 761 +Y = 582 +Font = 1 +Size = 18 Color = White -Type = Transparent +Align = 1 -[PartyRoundsStatic5] -X = 388 -Y = 552 -W = 24 -H = 23 -Tex = ButtonEnter -Color = White +[SingInfoMessageBG] +Tex = SongMessage +X = 250 +Y = 40 +W = 300 +H = 25 +Z = 0.98 +Color = GrayDark Type = Transparent -[PartyRoundsText1] -X = 70 -Y = 6 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 +[SingInfoMessageText] +X = 400 +Y = 44 Color = White -Text = PARTY_MODE +Font = 1 +Size = 20 +Align = 1 -[PartyRoundsText2] -X = 70 -Y = 53 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = PARTY_ROUNDS_DESC +[SingLyricsUpperBar] +X = 80 +W = 640 +Y = 493 +H = 41 +;YOffSet (+/-) for the Sing-Indicator +IndicatorYOffset = 3 -[PartyRoundsText3] -X = 238 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_ROUNDS_WHEREAMI +[SingLyricsLowerBar] +X = 80 +W = 640 +Y = 535 +H = 41 -[PartyRoundsText4] -X = 294 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE +# O N E P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#PlayerOne -[PartyRoundsText5] -X = 418 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = PARTY_ROUNDS_LEGEND_CONTINUE -[PartyRoundsSelectRoundCount] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_ROUNDCOUNT -X = 70 -Y = 100 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 +[SingP1Static] +X = 9 +Y = 258 +W = 52 +H = 70 +Tex = AvatarFrame2 +Color = P1Dark +Type = Colorized +Alpha = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +#[SingP1Text] +#Text = PLAYERNAME +#X = 80 +#Y = 300 +#Font = 1 +#Size = 22 +#Color = White +#Align = 0 -[PartyRoundsSelectRound1] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_SELECTMODE1 -X = 70 -Y = 155 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SingP1Static2] +Tex = ScoreBG +X = 680 +Y = 282 +W = 100 +H = 36 +Color = P1Dark +Type = Colorized -[PartyRoundsSelectRound2] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_SELECTMODE2 -X = 70 -Y = 210 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 +[SingP1TextScore] +Text = 00000 +X = 698 +Y = 284 +Font = 0 +Size = 30 +Color = White +Align = 0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SingP1SingBar] +X = 680 +Y = 316 +W = 100 +H = 8 -[PartyRoundsSelectRound3] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_SELECTMODE3 -X = 70 +[SingP1Avatar] +X = 15 Y = 265 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 +W = 40 +H = 55 +Z = 1 +Alpha = 0.6 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +# T W O P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1TwoPStatic] +X = 18 +Y = 82 +W = 45 +H = 56 +Tex = AvatarFrame2 +Color = P1Dark +Type = Colorized +Alpha = 1 -[PartyRoundsSelectRound4] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_SELECTMODE4 -X = 70 -Y = 320 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 +#[SingP1TwoPText] +#Text = PLAYERNAME +#X = 80 +#Y = 112 +#Font = 1 +#Size = 22 +#Color = White +#Align = 0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SingP1TwoPStatic2] +Tex = ScoreBG +X = 680 +Y = 92 +W = 100 +H = 36 +Color = P1Dark +Type = Colorized -[PartyRoundsSelectRound5] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_SELECTMODE5 -X = 70 -Y = 375 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 +[SingP1TwoPTextScore] +Text = 00000 +X = 698 +Y = 94 +Font = 0 +Size = 30 +Color = White +Align = 0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SingP1TwoPSingBar] +X = 680 +Y = 126 +W = 100 +H = 8 -[PartyRoundsSelectRound6] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_SELECTMODE6 -X = 70 -Y = 430 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 +[SingP1TwoPAvatar] +X = 23 +Y = 88 +W = 35 +H = 44 +Z = 1 +Alpha = 1 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +#Player Two +[SingP2RStatic] +X = 18 +Y = 273 +W = 45 +H = 56 +Tex = AvatarFrame2 +Color = P2Dark +Type = Colorized +Alpha = 1 -[PartyRoundsSelectRound7] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_SELECTMODE7 -X = 70 -Y = 485 -W = 230 -H = 40 -SkipX = 10 -Fields = 7 +#[SingP2RText] +#Text = PLAYERNAME +#X = 80 +#Y = 302 +#Font = 1 +#Size = 22 +#Color = White +#Align = 0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[SingP2RStatic2] +Tex = ScoreBG +X = 680 +Y = 282 +W = 100 +H = 36 +Color = P2Dark +Type = Colorized +[SingP2RTextScore] +Text = 00000 +X = 698 +Y = 284 +Font = 0 +Size = 30 +Color = White +Align = 0 -[SongMenu] +[SingP2RSingBar] +X = 680 +Y = 316 +W = 100 +H = 8 -[SongMenuBackground] -Type=Fade -ColR=0 -ColG=0 -ColB=0 -Alpha=0.6 +[SingP2RAvatar] +X = 23 +Y = 279 +W = 35 +H = 44 +Z = 1 +Alpha = 1 -[SongMenuStatic1] -Tex = interface_dialog_backgroundtop -X = 250 -Y = 0 -W = 300 -H = 210 -Z = 0.96 -Color = White -Type = Transparent -#Reflection = 1 -#ReflectionSpacing = 0 - -[SongMenuStatic2] -X = 258 -Y = 15 -W = 24 -H = 24 -Color = White -Tex = icon_song_menu +# T H R E E P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1ThreePStatic] +X = 16 +Y = 57 +W = 45 +H = 57 +Z = 1 +Tex = AvatarFrame2 +Color = P1Dark Type = Colorized -Z = 0.97 +Alpha = 1 -[SongMenuTextMenu] -X = 288 -Y = 9 -Z = 0.97 -Color = ColorLight -Size = 36 -Text = MENU +[SingP1ThreePText] +#Text = +#X = 27 +#Y = 66 +#Font = 1 +#Size = 24 +#Color = White +#Align = 0 -[SongMenuButton1] -X = 280 -Y = 58 -Z = 0.97 -W = 220 -H = 25 -Tex = Rectangle -Color = ColorLight -DColor = ColorDark +[SingP1ThreePStatic2] +Tex = ScoreBG +X = 75 +Y = 61 +W = 100 +H = 36 +Color = P1Dark Type = Colorized -Texts = 1 -[SongMenuButton1Text1] -X = 6 -Y = 0 -Z = 0.97 +[SingP1ThreePTextScore] +Text = 00000 +X = 93 +Y = 63 +Font = 0 +Size = 30 Color = White -Size = 24 -Text = SONG_MENU_PLAY +Align = 0 -# shows up instead of Button 1 -# in some song menus -[SongMenuSelectSlide1] -TexSBG = Rectangle -Text = -TypeSBG = Colorized -ShowArrows = 1 -OneItemOnly = 1 -X = 280 -Y = 58 -W = 0 -H = 25 -Z = 0.97 -SkipX = 0 -SBGW = 220 -TextSize = 24 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = White +[SingP1ThreePSingBar] +X = 75 +Y = 95 +W = 100 +H = 8 -[SongMenuButton2] -X = 280 -Y = 85 -Z = 0.97 -W = 220 -H = 25 -Tex = Rectangle -Color = ColorLight -DColor = ColorDark -Type = Colorized -Texts = 1 +[SingP1ThreePAvatar] +X = 21 +Y = 63 +W = 35 +H = 45 +Z = 1 +Alpha = 1 -[SongMenuButton2Text1] -X = 6 -Y = 0 -Color = White -Size = 24 -Text = SONG_MENU_EDIT -Z = 0.97 +#Player Two +[SingP2MStatic] +X = 311 +Y = 57 +W = 45 +H = 57 +Tex = AvatarFrame2 +Color = P2Dark +Type = Colorized +Alpha = 1 -# shows up instead of Button 2 -# in some song menus -[SongMenuSelectSlide2] -TexSBG = Rectangle -Text = -TypeSBG = Colorized -ShowArrows = 1 -OneItemOnly = 1 -X = 280 -Y = 85 -W = 0 -H = 25 -Z = 0.97 -SkipX = 0 -SBGW = 220 -TextSize = 24 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = White +#[SingP2MText] +#Text = P2 +#X = 321 +#Y = 66 +#Font = 1 +#Size = 24 +#Color = White +#Align = 0 -[SongMenuButton3] -X = 280 -Y = 115 -Z = 0.97 -W = 220 -H = 25 -Tex = Rectangle -Color = ColorLight -DColor = ColorDark +[SingP2MStatic2] +Tex = ScoreBG +X = 370 +Y = 61 +W = 100 +H = 36 +Color = P2Dark Type = Colorized -Texts = 1 -[SongMenuButton3Text1] -X = 6 -Y = 0 -Color = White +[SingP2MTextScore] +Text = 00000 +X = 388 +Y = 63 Font = 0 -Size = 24 -Text = SONG_MENU_MODI +Size = 30 +Color = White Align = 0 -Z = 0.97 -# shows up instead of BUtton 3 -# in some song menus -[SongMenuSelectSlide3] -TexSBG = Rectangle -Text = -TypeSBG = Colorized -ShowArrows = 1 -OneItemOnly = 1 -X = 280 -Y = 115 -W = 0 -H = 25 -Z = 0.97 -SkipX = 0 -SBGW = 220 -TextSize = 24 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = White +[SingP2MSingBar] +X = 370 +Y = 95 +W = 100 +H = 8 -[SongMenuButton4] -X = 280 -Y = 145 -Z = 0.97 -W = 220 -H = 25 -Tex = Rectangle -Color = ColorLight -DColor = ColorDark +[SingP2MAvatar] +X = 316 +Y = 63 +W = 35 +H = 45 +Z = 1 +Alpha = 1 + +#Player Three +[SingP3RStatic] +X = 611 +Y = 57 +W = 45 +H = 57 +Tex = AvatarFrame2 +Color = P3Dark Type = Colorized -Texts = 1 +Alpha = 1 -[SongMenuButton4Text1] -X = 6 -Y = 0 -Color = White -Font = 0 -Size = 24 -Text = SONG_MENU_CANCEL -Align = 0 -Z = 0.97 +#[SingP3RText] +#Text = P3 +#X = 621 +#Y = 66 +#Font = 1 +#Size = 24 +#Color = White +#Align = 0 -[SongMenuButton5] -X = 280 -Y = 175 -Z = 0.97 -W = 220 -H = 25 -Tex = Rectangle -Color = ColorLight -DColor = ColorDark +[SingP3RStatic2] +Tex = ScoreBG +X = 670 +Y = 61 +W = 100 +H = 36 +Color = P3Dark Type = Colorized -Texts = 1 -[SongMenuButton5Text1] -X = 6 -Y = 0 -Color = White +[SingP3RTextScore] +Text = 00000 +X = 688 +Y = 63 Font = 0 -Size = 24 -Text = SONG_MENU_CANCEL +Size = 30 +Color = White Align = 0 -Z = 0.97 -[SongJumpto] +[SingP3SingBar] +X = 670 +Y = 95 +W = 100 +H = 8 -[SongJumptoBackground] -Type=Fade -ColR=0 -ColG=0 -ColB=0 -Alpha=0.3 +[SingP3RAvatar] +X = 616 +Y = 63 +W = 35 +H = 45 +Z = 1 +Alpha = 1 -[SongJumptoStatic1] -Tex = interface_dialog_backgroundtop2 -X = 250 -Y = 0 -W = 300 -H = 160 -Z = 0.965 +[SingSongNameStatic] +Tex = SongName +X = 10 +Y = 10 +W = 780 +H = 29 Color = White Type = Transparent -[SongJumptoStatic2] -X = 258 -Y = 15 -W = 24 -H = 24 -Color = White -Tex = icon_song_search -Type = Colorized -Z = 0.97 +[SingSongNameText] +Text = SongNameText +X = 400 +Y = 13 +Font = 0 +Size = 25 +Color = Black +Align = 1 -[SongJumptoText1] -X = 288 -Y = 9 -Z = 0.97 -Color = ColorLight -Size = 36 -Text = SONG_JUMPTO_TYPE_DESC -[SongJumptoSelectSlideType] -X = 255 -Y = 58 -Z = 0.97 -H = 30 -SBGW = 290 -SkipX = 0 -Size = 24 -oneItemOnly = 1 -showArrows = 1 +# FOUR P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1FourPStatic] +X = 20 +Y = 55 +W = 40 +H = 50 +Tex = AvatarFrame2 +Color = P1Dark +Type = Transparent +Alpha = 1 -#text -TColor = White -TDColor = White -#Select0r.Text.Color -STColor = White -STDColor = White +#[SingP1FourPText] +#Text = PLAYERNAME +#X = 25 +#Y = 122 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[SongJumptoButtonSearchText] -X = 255 -Y = 70 -Z = 0.97 -W = 290 -H = 50 -Size = 36 -Font = 1 -Align = 0 -Color = ColorLight +[SingP1FourPStatic2] +Tex = ScoreBG +X = 80 +Y = 61 +W = 100 +H = 36 +Color = P1Dark +Type = Colorized -[SongJumptoTextFound] -X = 270 -Y = 125 -Color = White +[SingP1FourPTextScore] +Text = 00000 +X = 98 +Y = 63 Font = 0 -Size = 20 -Text = SONG_JUMPTO_HELP +Size = 30 +Color = White Align = 0 -Z = 0.97 - -[StatMain] -Texts = 0 -Statics = 0 +[SingP1FourPSingBar] +X = 80 +Y = 95 +W = 100 +H = 8 -[StatMainBackground] -Tex = MainBG +[SingP1FourPAvatar] +X = 24 +Y = 59 +W = 32 +H = 42 +Z = 1 +Alpha = 1 -[StatMainButtonScores] -X = 589 -Y = 100 -W = 190 +#Player Two +[SingP2FourPStatic] +X = 220 +Y = 55 +W = 40 H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +Tex = AvatarFrame2 +Color = P2Dark Type = Transparent -Texts = 1 -Reflection = 0 +Alpha = 1 -[StatMainButtonScoresText1] -X = 95 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = STAT_DESC_SCORES -Color = White +#[SingP2FourPText] +#Text = PLAYERNAME +#X = 24 +#Y = 302 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[StatMainButtonSingers] -X = 589 -Y = 160 -W = 190 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Reflection = 0 +[SingP2FourPStatic2] +Tex = ScoreBG +X = 280 +Y = 61 +W = 100 +H = 36 +Color = P2Dark +Type = Colorized -[StatMainButtonSingersText1] -X = 95 -Y = 10 +[SingP2FourPTextScore] +Text = 00000 +X = 298 +Y = 63 Font = 0 Size = 30 -Align = 1 -Text = STAT_DESC_SINGERS Color = White +Align = 0 -[StatMainButtonSongs] -X = 589 -Y = 220 -W = 190 +[SingP2FourPSingBar] +X = 280 +Y = 95 +W = 100 +H = 8 + +[SingP2FourPAvatar] +X = 224 +Y = 59 +W = 32 +H = 42 +Z = 1 +Alpha = 1 + +#Player Three +[SingP3FourPStatic] +X = 420 +Y = 55 +W = 40 H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +Tex = AvatarFrame2 +Color = P3Dark Type = Transparent -Texts = 1 -Reflection = 0 +Alpha = 1 -[StatMainButtonSongsText1] -X = 95 -Y = 13 -Font = 0 -Size = 24 -Align = 1 -Text = STAT_DESC_SONGS -Color = White +#[SingP3FourPText] +#Text = PLAYERNAME +#X = 395 +#Y = 122 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[StatMainButtonBands] -X = 589 -Y = 280 -W = 190 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Reflection = 0 +[SingP3FourPStatic2] +Tex = ScoreBG +X = 480 +Y = 61 +W = 100 +H = 36 +Color = P3Dark +Type = Colorized -[StatMainButtonBandsText1] -X = 95 -Y = 13 +[SingP3FourPTextScore] +Text = 00000 +X = 498 +Y = 63 Font = 0 -Size = 24 -Align = 1 -Text = STAT_DESC_BANDS +Size = 30 Color = White +Align = 0 -[StatMainButtonExit] -X = 589 -Y = 340 -W = 190 +[SingP3FourPSingBar] +X = 480 +Y = 95 +W = 100 +H = 8 + +[SingP3FourPAvatar] +X = 424 +Y = 59 +W = 32 +H = 42 +Z = 1 +Alpha = 1 + +#Player Four +[SingP4FourPStatic] +X = 620 +Y = 55 +W = 40 H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +Tex = AvatarFrame2 +Color = P4Dark Type = Transparent -Texts = 1 -Reflection = 0 +Alpha = 1 -[StatMainButtonExitText1] -X = 95 -Y = 10 +#[SingP4FourPText] +#Text = PLAYERNAME +#X = 395 +#Y = 302 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 + +[SingP4FourPStatic2] +Tex = ScoreBG +X = 680 +Y = 61 +W = 100 +H = 36 +Color = P4Dark +Type = Colorized + +[SingP4FourPTextScore] +Text = 00000 +X = 698 +Y = 63 Font = 0 Size = 30 -Align = 1 -Text = SING_OPTIONS_EXIT -Color = White - -[StatMainTextOverview] -X = 45 -Y = 125 -W = 510 Color = White -Font = 0 -Size = 27 Align = 0 -Text = - -[StatMainStatic1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = StatIcon -Type = Colorized - -[StatMainStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 -[StatMainStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[SingP4FourPSingBar] +X = 680 +Y = 95 +W = 100 +H = 8 -[StatMainStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonNavi -Color = White -Type = Transparent +[SingP4FourPAvatar] +X = 624 +Y = 59 +W = 32 +H = 42 +Z = 1 +Alpha = 1 -[StatMainStatic5] -X = 388 -Y = 552 +# SIX P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1SixPStatic] +X = 20 +Y = 100 W = 32 -H = 23 -Tex = ButtonEsc -Color = White +H = 42 +Tex = AvatarFrame2 +Color = P1Dark Type = Transparent +Alpha = 1 -[StatMainStatic6] -X = 40 -Y = 100 -W = 520 -H = 20 -Tex = StatMainBG1 -Color = ColorLight -Type = Colorized +[SingP1SixPAvatar] +X = 23 +Y = 103 +W = 26 +H = 36 +Z = 1 +Alpha = 1 -[StatMainStatic7] -X = 40 -Y = 120 -W = 520 -H = 300 -Tex = StatMainBG2 -Color = ColorDark -Type = Colorized +#[SingP1SixPText] +#Text = PLAYERNAME +#X = 25 +#Y = 100 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[StatMainStatic8] -X = 40 -Y = 420 -W = 520 -H = 20 -Tex = StatMainBG3 -Color = ColorLight +[SingP1SixPStatic2] +Tex = ScoreBG +X = 20 +Y = 40 +W = 100 +H = 36 +Color = P1Dark Type = Colorized -[StatMainText1] -X = 70 -Y = 6 -Color = White -Font = 0 -Size = 60 -Text = STAT_MAIN -Align = 0 - -[StatMainText2] -X = 238 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = STAT_MAIN_WHEREAMI - -[StatMainText3] -X = 70 -Y = 53 -Color = White +[SingP1SixPTextScore] +Text = 00000 +X = 38 +Y = 42 Font = 0 Size = 30 +Color = White Align = 0 -Text = STAT_MAIN_DESC -[StatMainText4] -X = 294 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE +[SingP1SixPSingBar] +X = 20 +Y = 76 +W = 100 +H = 8 -[StatMainText5] -X = 418 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_ESC +#Player Two +[SingP2SixPStatic] +X = 20 +Y = 227 +W = 32 +H = 42 +Tex = AvatarFrame2 +Color = P2Dark +Type = Transparent +Alpha = 1 -[StatDetail] -Texts = 0 -Statics = 0 +[SingP2SixPAvatar] +X = 23 +Y = 230 +W = 26 +H = 36 +Z = 1 +Alpha = 1 -[StatDetailBackground] -Tex = MainBG +#[SingP2SixPText] +#Text = PLAYERNAME +#X = 25 +#Y = 227 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[StatDetailButtonNext] -X = 589 -Y = 100 -W = 190 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Reflection = 0 +[SingP2SixPStatic2] +Tex = ScoreBG +X = 150 +Y = 40 +W = 100 +H = 36 +Color = P2Dark +Type = Colorized -[StatDetailButtonNextText1] -X = 95 -Y = 10 +[SingP2SixPTextScore] +Text = 00000 +X = 168 +Y = 42 Font = 0 Size = 30 -Align = 1 -Text = STAT_NEXT Color = White +Align = 0 -[StatDetailButtonPrev] -X = 589 -Y = 160 -W = 190 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +[SingP2SixPSingBar] +X = 150 +Y = 75 +W = 100 +H = 8 + +#Player Three +[SingP3SixPStatic] +X = 20 +Y = 352 +W = 32 +H = 42 +Tex = AvatarFrame2 +Color = P3Dark Type = Transparent -Texts = 1 -Reflection = 0 +Alpha = 1 -[StatDetailButtonPrevText1] -X = 95 -Y = 10 +[SingP3SixPAvatar] +X = 23 +Y = 355 +W = 26 +H = 36 +Z = 1 +Alpha = 1 + +#[SingP3SixPText] +#Text = PLAYERNAME +#X = 25 +#Y = 352 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 + +[SingP3SixPStatic2] +Tex = ScoreBG +X = 280 +Y = 40 +W = 100 +H = 36 +Color = P3Dark +Type = Colorized + +[SingP3SixPTextScore] +Text = 00000 +X = 298 +Y = 42 Font = 0 Size = 30 -Align = 1 -Text = STAT_PREV Color = White +Align = 0 -[StatDetailButtonReverse] -X = 589 -Y = 220 -W = 190 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +[SingP3SixPSingBar] +X = 280 +Y = 76 +W = 100 +H = 8 + +#Player Four +[SingP4SixPStatic] +X = 390 +Y = 100 +W = 32 +H = 42 +Tex = AvatarFrame2 +Color = P4Dark Type = Transparent -Texts = 1 -Reflection = 0 +Alpha = 1 -[StatDetailButtonReverseText1] -X = 95 -Y = 10 +[SingP4SixPAvatar] +X = 393 +Y = 103 +W = 26 +H = 36 +Z = 1 +Alpha = 1 + +#[SingP4SixPText] +#Text = PLAYERNAME +#X = 395 +#Y = 100 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 + +[SingP4SixPStatic2] +Tex = ScoreBG +X = 410 +Y = 40 +W = 100 +H = 36 +Color = P4Dark +Type = Colorized + +[SingP4SixPTextScore] +Text = 00000 +X = 428 +Y = 42 Font = 0 Size = 30 -Align = 1 -Text = STAT_REVERSE Color = White +Align = 0 -[StatDetailButtonExit] -X = 589 -Y = 280 -W = 190 -H = 50 -Tex = Button -Color = ColorLight -DColor = ColorDark +[SingP4SixPSingBar] +X = 410 +Y = 76 +W = 100 +H = 8 + +#Player Five +[SingP5SixPStatic] +X = 390 +Y = 227 +W = 32 +H = 42 +Tex = AvatarFrame2 +Color = P5Dark Type = Transparent -Texts = 1 -Reflection = 0 +Alpha = 1 -[StatDetailButtonExitText1] -X = 95 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = SING_OPTIONS_EXIT -Color = White +[SingP5SixPAvatar] +X = 393 +Y = 230 +W = 26 +H = 36 +Z = 1 +Alpha = 1 -[StatDetailTextDescription] -X = 70 -Y = 53 -Color = White +#[SingP5SixPText] +#Text = PLAYERNAME +#X = 395 +#Y = 227 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 + +[SingP5SixPStatic2] +Tex = ScoreBG +X = 540 +Y = 40 +W = 100 +H = 36 +Color = P5Dark +Type = Colorized + +[SingP5SixPTextScore] +Text = 00000 +X = 558 +Y = 42 Font = 0 Size = 30 +Color = White Align = 0 -Text = -[StatDetailTextPage] -X = 546 -Y = 98 -Color = Black -Font = 0 -Size = 15 -Align = 2 -Text = +[SingP5SixPSingBar] +X = 540 +Y = 76 +W = 100 +H = 8 -[StatDetailTextList1] -X = 45 -Y = 122 -Color = White -Font = 0 -Size = 21 -Text = Stat1 +#Player Six +[SingP6SixPStatic] +X = 390 +Y = 352 +W = 32 +H = 42 +Tex = AvatarFrame2 +Color = P6Dark +Type = Transparent +Alpha = 1 -[StatDetailTextList2] -X = 45 -Y = 160 -Color = White -Font = 0 -Size = 21 -Text = Stat2 +[SingP6SixPAvatar] +X = 393 +Y = 355 +W = 26 +H = 36 +Z = 1 +Alpha = 1 -[StatDetailTextList3] -X = 45 -Y = 198 -Color = White -Font = 0 -Size = 21 -Text = +#[SingP6SixPText] +#Text = PLAYERNAME +#X = 395 +#Y = 352 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[StatDetailTextList4] -X = 45 -Y = 236 -Color = White -Font = 0 -Size = 21 -Text = +[SingP6SixPStatic2] +Tex = ScoreBG +X = 670 +Y = 40 +W = 100 +H = 36 +Color = P6Dark +Type = Colorized -[StatDetailTextList5] -X = 45 -Y = 274 -Color = White +[SingP6SixPTextScore] +Text = 00000 +X = 688 +Y = 42 Font = 0 -Size = 21 -Text = - -[StatDetailTextList6] -X = 45 -Y = 312 +Size = 30 Color = White -Font = 0 -Size = 21 -Text = +Align = 0 -[StatDetailTextList7] -X = 45 -Y = 350 -Color = White -Font = 0 -Size = 21 -Text = +[SingP6SixPSingBar] +X = 670 +Y = 76 +W = 100 +H = 8 -[StatDetailTextList8] -X = 45 -Y = 388 -Color = White -Font = 0 -Size = 21 -Text = +# FOUR DUET P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1DuetFourPStatic] +X = 20 +Y = 114 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P1Dark +Type = Transparent +Alpha = 1 -[StatDetailTextList9] -X = 45 -Y = 426 -Color = White -Font = 0 -Size = 21 -Text = +#[SingP1DuetFourPText] +#Text = PLAYERNAME +#X = 65 +#Y = 126 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[StatDetailTextList10] -X = 45 -Y = 464 -Color = White +[SingP1DuetFourPStatic2] +Tex = ScoreBG +X = 305 +Y = 117 +W = 80 +H = 25 + +[SingP1DuetFourPTextScore] +Text = 00000 +X = 320 +Y = 119 Font = 0 -Size = 21 -Text = +Size = 24 -[StatDetailStatic1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = StatIcon -Type = Colorized +[SingP1DuetFourPSingBar] +X = 305 +Y = 142 +W = 80 +H = 6 -[StatDetailStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[SingP1DuetFourPAvatar] +X = 23 +Y = 117 +W = 31 +H = 31 +Z = 1 +Alpha = 1 -[StatDetailStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 -Color = White +#Player Two +[SingP2DuetFourPStatic] +X = 20 +Y = 294 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P2Dark Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Alpha = 1 -[StatDetailStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonNavi -Color = White -Type = Transparent +#[SingP2DuetFourPText] +#Text = PLAYERNAME +#X = 64 +#Y = 306 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[StatDetailStatic5] -X = 388 -Y = 552 -W = 32 -H = 23 -Tex = ButtonEsc -Color = White -Type = Transparent +[SingP2DuetFourPStatic2] +Tex = ScoreBG +X = 305 +Y = 297 +W = 80 +H = 25 -[StatDetailStatic6] -X = 40 -Y = 100 -W = 520 -H = 24 -Tex = StatDetailBG1 -Color = ColorLight -Type = Colorized +[SingP2DuetFourPTextScore] +Text = 00000 +X = 320 +Y = 299 +Font = 0 +Size = 24 -[StatDetailStatic7] -X = 40 -Y = 124 -W = 520 -H = 376 -Tex = StatMainBG2 -Color = ColorDark -Type = Colorized +[SingP2DuetFourPSingBar] +X = 305 +Y = 322 +W = 80 +H = 6 -[StatDetailStatic8] -X = 40 -Y = 500 -W = 520 -H = 20 -Tex = StatMainBG3 -Color = ColorLight -Type = Colorized +[SingP2DuetFourPAvatar] +X = 23 +Y = 297 +W = 31 +H = 31 +Z = 1 +Alpha = 1 -[StatDetailText1] -X = 70 -Y = 6 -Color = White -Font = 0 -Size = 60 -Text = STAT_DETAIL -Align = 0 +#Player Three +[SingP3DuetFourPStatic] +X = 390 +Y = 114 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P3Dark +Type = Transparent +Alpha = 1 -[StatDetailText2] -X = 238 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = STAT_DETAIL_WHEREAMI +#[SingP3DuetFourPText] +#Text = PLAYERNAME +#X = 435 +#Y = 126 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[StatDetailText3] -X = 294 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE +[SingP3DuetFourPStatic2] +Tex = ScoreBG +X = 700 +Y = 117 +W = 80 +H = 25 -[StatDetailText4] -X = 418 -Y = 552 -Color = Black +[SingP3DuetFourPTextScore] +Text = 00000 +X = 715 +Y = 119 Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_ESC - -[CheckPopup] +Size = 24 -[CheckPopupBackground] -Type=Fade -ColR=0 -ColG=0 -ColB=0 -Alpha=0.4 +[SingP3DuetFourPSingBar] +X = 700 +Y = 142 +W = 80 +H = 6 -[CheckPopupStatic1] -Tex = interface_dialog_background -X = 200 -Y = 150 -W = 400 -H = 200 +[SingP3DuetFourPAvatar] +X = 393 +Y = 117 +W = 31 +H = 31 Z = 1 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 15 +Alpha = 1 -[CheckPopupText1] -X = 400 -Y = 160 -W = 400 -Color = ColorLight -Font = 0 -Size = 30 -Text = MSG_QUESTION_TITLE -Align = 1 -Z = 1 +#Player Four +[SingP4DuetFourPStatic] +X = 390 +Y = 294 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P4Dark +Type = Transparent +Alpha = 1 -[CheckPopupText] -X = 400 -Y = 210 -W = 280 -Color = White -Font = 0 -Size = 30 -Text = error text -Align = 1 -Z = 1 +#[SingP4DuetFourPText] +#Text = PLAYERNAME +#X = 435 +#Y = 306 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[CheckPopupButton1] -X = 285 -Y = 310 -W = 100 +[SingP4DuetFourPStatic2] +X = 700 +Y = 297 +W = 80 H = 25 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Z = 1 -[CheckPopupButton1Text1] -X = 50 -Y = 0 -Color = White +[SingP4DuetFourPTextScore] +X = 715 +Y = 299 Font = 0 Size = 24 -Text = YES -Align = 1 + +[SingP4DuetFourPSingBar] +X = 700 +Y = 322 +W = 80 +H = 6 + +[SingP4DuetFourPAvatar] +X = 393 +Y = 297 +W = 31 +H = 31 Z = 1 +Alpha = 1 -[CheckPopupButton2] -X = 415 -Y = 310 -W = 100 -H = 25 -Tex = Button -Color = ColorLight -DColor = ColorDark +# SIX DUET P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1DuetSixPStatic] +X = 20 +Y = 100 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P1Dark Type = Transparent -Texts = 1 -Z = 1 +Alpha = 1 -[CheckPopupButton2Text1] -X = 50 -Y = 0 -Color = White -Font = 0 -Size = 24 -Text = NO -Align = 1 +[SingP1DuetSixPAvatar] +X = 23 +Y = 103 +W = 31 +H = 31 Z = 1 +Alpha = 1 +#[SingP1DuetSixPText] +#Text = PLAYERNAME +#X = 25 +#Y = 100 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[ErrorPopup] +[SingP1DuetSixPStatic2] +Tex = ScoreBG +X = 305 +Y = 95 +W = 80 +H = 25 +Color = P1Dark +Type = Colorized -[ErrorPopupBackground] -Type=Fade -ColR=0 -ColG=0 -ColB=0 -Alpha=0.4 +[SingP1DuetSixPTextScore] +Text = 00000 +X = 320 +Y = 97 +Font = 0 +Size = 24 -[ErrorPopupStatic1] -Tex = interface_dialog_background -X = 200 -Y = 150 -W = 400 -H = 200 -Z = 0.98 -Color = White +[SingP1DuetSixPSingBar] +X = 305 +Y = 120 +W = 80 +H = 6 + +#Player Two +[SingP2DuetSixPStatic] +X = 20 +Y = 227 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P2Dark Type = Transparent -Reflection = 1 -ReflectionSpacing = 15 +Alpha = 1 -[ErrorPopupText1] -X = 400 -Y = 160 -W = 400 -Color = ColorLight -Font = 0 -Size = 30 -Text = MSG_ERROR_TITLE -Align = 1 +[SingP2DuetSixPAvatar] +X = 23 +Y = 230 +W = 31 +H = 31 Z = 1 +Alpha = 1 -[ErrorPopupText] -X = 400 -Y = 210 -W = 380 -Color = White -Font = 0 -Size = 30 -Text = error text -Align = 1 -Z = 1 +#[SingP2DuetSixPText] +#Text = PLAYERNAME +#X = 25 +#Y = 227 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[ErrorPopupButton1] -X = 350 -Y = 310 -W = 100 +[SingP2DuetSixPStatic2] +Tex = ScoreBG +X = 305 +Y = 222 +W = 80 H = 25 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Z = 1 +Color = P2Dark +Type = Colorized -[ErrorPopupButton1Text1] -X = 50 -Y = 0 -Color = White +[SingP2DuetSixPTextScore] +Text = 00000 +X = 320 +Y = 224 Font = 0 Size = 24 -Text = OK -Align = 1 -Z = 1 -[PausePopUpStatic] -Tex = Pause -X = 0 -Y = 0 -W = 800 -H = 600 -Z = 0.95 -Color = White -Type = Colorized +[SingP2DuetSixPSingBar] +X = 305 +Y = 247 +W = 80 +H = 6 -[SingLyricsUpperBar] -X = 80 -W = 640 -Y = 493 -H = 41 -;YOffSet (+/-) for the Sing-Indicator -IndicatorYOffset = 3 +#Player Three +[SingP3DuetSixPStatic] +X = 20 +Y = 352 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P3Dark +Type = Transparent +Alpha = 1 -[SingLyricsLowerBar] -X = 80 -W = 640 -Y = 535 -H = 41 +[SingP3DuetSixPAvatar] +X = 23 +Y = 355 +W = 31 +H = 31 +Z = 1 +Alpha = 1 -############################## -## NEW'S ## -############################## +#[SingP3DuetSixPText] +#Text = PLAYERNAME +#X = 25 +#Y = 352 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[InsertUserPopup] +[SingP3DuetSixPStatic2] +Tex = ScoreBG +X = 305 +Y = 347 +W = 80 +H = 25 +Color = P3Dark +Type = Colorized -[InsertUserPopupBackground] -Type=Fade -ColR=0 -ColG=0 -ColB=0 -Alpha=0.4 +[SingP3DuetSixPTextScore] +Text = 00000 +X = 320 +Y = 349 +Font = 0 +Size = 24 -[InsertUserPopupStatic1] -Tex = interface_dialog_background -X = 200 -Y = 150 -W = 400 -H = 220 -Z = 1 -Color = White +[SingP3DuetSixPSingBar] +X = 305 +Y = 372 +W = 80 +H = 6 + +#Player Four +[SingP4DuetSixPStatic] +X = 390 +Y = 100 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P4Dark Type = Transparent -Reflection = 1 -ReflectionSpacing = 15 +Alpha = 1 -[InsertUserPopupText1] -X = 400 -Y = 165 -W = 400 -Color = ColorLight -Font = 0 -Size = 30 -Align = 1 +[SingP4DuetSixPAvatar] +X = 393 +Y = 103 +W = 31 +H = 31 Z = 1 +Alpha = 1 -[InsertUserPopupText] -X = 400 -Y = 215 -W = 380 -Color = White -Font = 0 -Size = 24 -Align = 1 -Z = 1 +#[SingP4DuetSixPText] +#Text = PLAYERNAME +#X = 395 +#Y = 100 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[InsertUserPopupButtonUsername] -X = 380 -Y = 250 -W = 160 +[SingP4DuetSixPStatic2] +Tex = ScoreBG +X = 700 +Y = 95 +W = 80 H = 25 -Tex = Button -Color = GrayLight -DColor = GrayDark -Type = Transparent -Texts = 2 -Z = 1 +Color = P4Dark +Type = Colorized -[InsertUserPopupButtonUsernameText1] -X = 5 -Y = 0 -Color = Black +[SingP4DuetSixPTextScore] +Text = 00000 +X = 715 +Y = 97 Font = 0 Size = 24 -Align = 0 -Z = 1 -[InsertUserPopupButtonUsernameText2] -X = -120 -Y = 0 -Text = SING_OPTIONS_NETWORK_USERNAME -Color = White -Font = 0 -Size = 24 -Align = 0 -Z = 1 +[SingP4DuetSixPSingBar] +X = 700 +Y = 120 +W = 80 +H = 6 -[InsertUserPopupButtonPassword] -X = 380 -Y = 280 -W = 160 -H = 25 -Tex = Button -Color = GrayLight -DColor = GrayDark +#Player Five +[SingP5DuetSixPStatic] +X = 390 +Y = 227 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P5Dark Type = Transparent -Texts = 2 +Alpha = 1 + +[SingP5DuetSixPAvatar] +X = 393 +Y = 230 +W = 31 +H = 31 Z = 1 +Alpha = 1 -[InsertUserPopupButtonPasswordText1] -X = 5 -Y = 0 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Z = 1 +#[SingP5DuetSixPText] +#Text = PLAYERNAME +#X = 395 +#Y = 227 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 -[InsertUserPopupButtonPasswordText2] -X = -120 -Y = 0 -Text=SING_OPTIONS_NETWORK_PASSWORD -Color = White +[SingP5DuetSixPStatic2] +Tex = ScoreBG +X = 700 +Y = 222 +W = 80 +H = 25 +Color = P5Dark +Type = Colorized + +[SingP5DuetSixPTextScore] +Text = 00000 +X = 715 +Y = 224 Font = 0 Size = 24 -Align = 0 -Z = 1 -[InsertUserPopupButton1] -X = 285 -Y = 330 -W = 100 -H = 25 -Tex = Button -Color = ColorLight -DColor = ColorDark +[SingP5DuetSixPSingBar] +X = 700 +Y = 247 +W = 80 +H = 6 + +#Player Six +[SingP6DuetSixPStatic] +X = 390 +Y = 352 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P6Dark Type = Transparent -Texts = 1 -Z = 1 +Alpha = 1 -[InsertUserPopupButton1Text1] -X = 50 -Y = 0 -Color = White -Font = 0 -Size = 24 -Align = 1 +[SingP6DuetSixPAvatar] +X = 393 +Y = 355 +W = 31 +H = 31 Z = 1 +Alpha = 1 -[InsertUserPopupButton2] -X = 415 -Y = 330 -W = 100 +#[SingP6DuetSixPText] +#Text = PLAYERNAME +#X = 395 +#Y = 352 +#Font = 1 +#Size = 18 +#Color = White +#Align = 0 + +[SingP6DuetSixPStatic2] +Tex = ScoreBG +X = 700 +Y = 347 +W = 80 H = 25 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Z = 1 +Color = P6Dark +Type = Colorized -[InsertUserPopupButton2Text1] -X = 50 -Y = 0 -Color = White +[SingP6DuetSixPTextScore] +Text = 00000 +X = 715 +Y = 349 Font = 0 Size = 24 -Align = 1 -Z = 1 -############################ -# Send Score 1 Player # -############################ +[SingP6DuetSixPSingBar] +X = 700 +Y = 372 +W = 80 +H = 6 -[ScoreButtonSend1] -X = 200 -Y = 505 -W = 180 -H = 30 -Tex = ButtonSendScore -DColor = ColorLight -Color = ColorDark -Type = Transparent -Texts = 1 +################################## +########## Duet ########## +################################## -[ScoreButtonSend1Text1] -X = 90 -Y = 4 -Font = 0 -Size = 24 -Align = 1 -Color = White -Text = SCORE_SEND_DESC +[SingLyricsDuetP2UpperBar] +X = 80 +W = 640 +Y = 493 +H = 41 +;YOffSet (+/-) for the Sing-Indicator +IndicatorYOffset = 3 -############################ -# Send Score 2/4 Players # -############################ +[SingLyricsDuetP2LowerBar] +X = 80 +W = 640 +Y = 535 +H = 41 -[ScoreButtonSend2] -X = 310 -Y = 100 -W = 180 -H = 30 -Z = 1 -Tex = ButtonSendScore -DColor = ColorLight -Color = ColorDark -Type = Transparent -Texts = 1 +[SingLyricsDuetP1UpperBar] +X = 80 +W = 640 +Y = 5 +H = 41 +;YOffSet (+/-) for the Sing-Indicator +IndicatorYOffset = 3 -[ScoreButtonSend2Text1] -X = 90 -Y = 4 -Font = 0 -Size = 24 -Align = 1 +[SingLyricsDuetP1LowerBar] +X = 80 +W = 640 +Y = 49 +H = 41 + +[SingStaticDuet1] +Tex = LyricBar +X = 0 +Y = 0 +W = 800 +H = 88 Color = White -Text = SCORE_SEND_DESC +Type = Transparent -############################ -# Send Score 3/6 Players # -############################ +# T H R E E P L A Y E R D U E T M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingDuetP1ThreePStatic] +X = 12 +Y = 99 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P1Dark +Type = Transparent +Alpha = 1 -[ScoreButtonSend3] -X = 310 +[SingDuetP1ThreePText] +Text = PLAYERNAME +X = 58 +Y = 118 +Font = 1 +Size = 18 +Color = White +Align = 0 + +[SingDuetP1ThreePStatic2] +X = 710 Y = 100 -W = 180 -H = 30 -Z = 1 -Tex = ButtonSendScore -DColor = ColorLight -Color = ColorDark -Type = Transparent -Texts = 1 +W = 80 +H = 25 -[ScoreButtonSend3Text1] -X = 90 -Y = 4 +[SingDuetP1ThreePTextScore] +X = 725 +Y = 102 Font = 0 Size = 24 -Align = 1 -Color = White -Text = SCORE_SEND_DESC -################################ -## Send Score PopUp ## -################################ +[SingDuetP1ThreePSingBar] +X = 710 +Y = 125 +W = 80 +H = 6 -[SendScorePopup] +[SingDuetP1ThreePAvatar] +X = 15 +Y = 102 +W = 31 +H = 31 +Z = 1 +Alpha = 1 -[SendScorePopupBackground] -Type=Fade -ColR=0 -ColG=0 -ColB=0 -Alpha=0.4 - -[SendScorePopupStatic1] -Tex = interface_dialog_background2 -X = 200 -Y = 150 -W = 400 -H = 280 -Z = 1 -Color = White +#Player Two +[SingDuetP2MStatic] +X = 12 +Y = 224 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P2Dark Type = Transparent -Reflection = 1 -ReflectionSpacing = 15 +Alpha = 1 -[SendScorePopupText1] -X = 400 -Y = 157 -W = 400 -Color = ColorLight -Font = 0 -Size = 30 -Align = 1 -Z = 1 +[SingDuetP2MText] +Text = PLAYERNAME +X = 58 +Y = 243 +Font = 1 +Size = 18 +Color = White +Align = 0 -[SendScorePopupSelectSlide1] -Text = SCORE_SEND_PLAYER -TexSBG = Rectangle -TypeSBG = Colorized -ShowArrows = 1 -OneItemOnly = 1 -X = 220 -Y = 220 -W = 120 +[SingDuetP2MStatic2] +X = 710 +Y = 225 +W = 80 H = 25 -Z = 1 -SkipX = 10 -SBGW = 220 -TextSize = 24 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = White -[SendScorePopupSelectSlide2] -Text = SING_OPTIONS_NETWORK_WEBSITE -TexSBG = Rectangle -TypeSBG = Colorized -ShowArrows = 1 -OneItemOnly = 1 -X = 220 +[SingDuetP2MTextScore] +X = 725 +Y = 227 +Font = 0 +Size = 24 + +[SingDuetP2MSingBar] +X = 710 Y = 250 -W = 120 -H = 25 -Z = 1 -SkipX = 10 -SBGW = 220 -TextSize = 24 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = White +W = 80 +H = 6 -[SendScorePopupSelectSlide3] -Text = SING_OPTIONS_NETWORK_USERNAME -TexSBG = Rectangle -TypeSBG = Colorized -ShowArrows = 1 -OneItemOnly = 1 -X = 220 -Y = 280 -W = 120 -H = 25 +[SingDuetP2MAvatar] +X = 15 +Y = 227 +W = 31 +H = 31 Z = 1 -SkipX = 10 -SBGW = 220 -TextSize = 24 -Color = ColorLight -DColor = ColorDark -TColor = White -TDColor = White -SBGColor = ColorLight -SBGDColor = ColorDark -STColor = White -STDColor = White +Alpha = 1 -[SendScorePopupButtonUsername] -X = 380 -Y = 320 -W = 160 -H = 25 -Tex = Button -Color = GrayLight -DColor = GrayDark +#Player Three +[SingDuetP3RStatic] +X = 12 +Y = 349 +W = 37 +H = 37 +Tex = AvatarFrame2 +Color = P3Dark Type = Transparent -Texts = 2 -Z = 1 - -[SendScorePopupButtonUsernameText1] -X = 5 -Y = 0 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Z = 1 +Alpha = 1 -[SendScorePopupButtonUsernameText2] -X = -120 -Y = 0 -Text=SING_OPTIONS_NETWORK_USERNAME +[SingDuetP3RText] +Text = PLAYERNAME +X = 58 +Y = 368 +Font = 1 +Size = 18 Color = White -Font = 0 -Size = 24 Align = 0 -Z = 1 -[SendScorePopupButtonPassword] -X = 380 +[SingDuetP3RStatic2] +X = 710 Y = 350 -W = 160 +W = 80 H = 25 -Tex = Button -Color = GrayLight -DColor = GrayDark -Type = Transparent -Texts = 2 -Z = 1 -[SendScorePopupButtonPasswordText1] -X = 5 -Y = 0 -Color = Black +[SingDuetP3RTextScore] +X = 725 +Y = 352 Font = 0 Size = 24 -Align = 0 -Z = 1 -[SendScorePopupButtonPasswordText2] -X = -120 -Y = 0 -Text=SING_OPTIONS_NETWORK_PASSWORD -Color = White -Font = 0 -Size = 24 -Align = 0 -Z = 1 +[SingDuetP3RSingBar] +X = 710 +Y = 375 +W = 80 +H = 6 -[SendScorePopupButton1] -X = 295 -Y = 390 -W = 100 -H = 25 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 +[SingDuetP3RAvatar] +X = 15 +Y = 352 +W = 31 +H = 31 Z = 1 +Alpha = 1 -[SendScorePopupButton1Text1] -X = 50 -Y = 0 -Color = White -Font = 0 -Size = 24 -Align = 1 -Z = 1 +## Oscilloscope Position Screen ## -[SendScorePopupButton2] -X = 405 -Y = 390 +# O N E P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#PlayerOne +[SingP1Oscilloscope] +X = 80 +Y = 275 +H = 30 W = 100 -H = 25 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Z = 1 - -[SendScorePopupButton2Text1] -X = 50 -Y = 0 -Color = White -Font = 0 -Size = 24 -Align = 1 -Z = 1 -[ScoreDownloadPopup] +# T W O P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1TwoPOscilloscope] +X = 80 +Y = 95 +H = 30 +W = 100 -[ScoreDownloadPopupBackground] -Type=Fade -ColR=0 -ColG=0 -ColB=0 -Alpha=0.4 +#Player Two +[SingP2ROscilloscope] +X = 80 +Y = 275 +H = 30 +W = 100 -[ScoreDownloadPopupStatic1] -Tex = interface_dialog_background -X = 200 -Y = 150 -W = 400 -H = 200 -Z = 1 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 15 +# T H R E E P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1ThreePOscilloscope] +X = 15 +Y = 15 +H = 30 +W = 160 -[ScoreDownloadPopupText1] -X = 400 -Y = 160 -W = 400 -Color = ColorLight -Font = 0 -Size = 30 -Text = SCORE_DOWNLOAD_TITLE -Align = 1 -Z = 1 +#Player Two +[SingP2MOscilloscope] +X = 310 +Y = 15 +H = 30 +W = 160 -[ScoreDownloadPopupSongText] -X = 220 -Y = 210 -W = 280 -Color = White -Font = 0 -Size = 30 -Text = song progress -Align = 0 -Z = 1 +#Player Three +[SingP3ROscilloscope] +X = 610 +Y = 15 +H = 30 +W = 160 -[ScoreDownloadPopupWebText] -X = 580 -Y = 210 -W = 280 -Color = White -Font = 0 -Size = 30 -Text = web progress -Align = 2 -Z = 1 +# T H R E E P L A Y E R D U E T M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingDuetP1ThreePOscilloscope] +X = 56 +Y = 98 +H = 25 +W = 100 -[ScoreDownloadPopupButton1] -X = 350 -Y = 310 +#Player Two +[SingDuetP2MOscilloscope] +X = 56 +Y = 222 +H = 25 W = 100 + +#Player Three +[SingDuetP3ROscilloscope] +X = 56 +Y = 347 H = 25 -Tex = Button -Color = ColorLight -DColor = ColorDark -Type = Transparent -Texts = 1 -Z = 1 +W = 100 -[ScoreDownloadPopupButton1Text1] -X = 50 -Y = 0 -Color = White -Font = 0 -Size = 24 -Text = YES -Align = 1 -Z = 1 +## 4/6 Players One Screen ## -[ScoreDownloadPopupStatic2] -Tex = ProgressBar -X = 219 -Y = 248 -W = 362 -H = 20 -Z = 1 -Color = Gray -Type = Transparent +# FOUR P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1FourPOscilloscope] +X = 22 +Y = 25 +H = 30 +W = 157 -[ScoreDownloadPopupStatic3] -Tex = ProgressBar -X = 219 -Y = 273 -W = 362 -H = 20 -Z = 1 -Color = Gray -Type = Transparent +#Player Two +[SingP2FourPOscilloscope] +X = 222 +Y = 25 +H = 30 +W = 157 -[ScoreDownloadPopupProgressSong] -X = 220 -Y = 250 -W = 360 -H = 16 -Color = ColorDark +#Player Three +[SingP3FourPOscilloscope] +X = 422 +Y = 25 +H = 30 +W = 157 -[ScoreDownloadPopupProgressWeb] -X = 220 -Y = 275 -W = 360 -H = 16 -Color = ColorDark +#Player Four +[SingP4FourPOscilloscope] +X = 622 +Y = 25 +H = 30 +W = 157 -[PartyTournamentPlayer] -Texts = 5 +# SIX P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1SixPOscilloscope] +X = 20 +Y = 8 +H = 30 +W = 100 -[PartyTournamentPlayerBackground] -Tex = PartyBG +#Player Two +[SingP2SixPOscilloscope] +X = 150 +Y = 8 +H = 30 +W = 100 -[PartyTournamentPlayerStatic1] -X = 0 -Y = 545 -Z = 0.7 -W = 250 +#Player Three +[SingP3SixPOscilloscope] +X = 280 +Y = 8 H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +W = 100 -[PartyTournamentPlayerStatic2] -X = 250 -Y = 545 -Z = 0.7 -W = 550 +#Player Four +[SingP4SixPOscilloscope] +X = 410 +Y = 8 H = 30 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +W = 100 -[PartyTournamentPlayerStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon -Type = Colorized +#Player Five +[SingP5SixPOscilloscope] +X = 540 +Y = 8 +H = 30 +W = 100 -[PartyTournamentPlayerStatic4] -X = 260 -Y = 552 -Z = 0.75 -W = 24 -H = 23 -Tex = ButtonNavi -Color = White -Type = Transparent +#Player Six +[SingP6SixPOscilloscope] +X = 670 +Y = 8 +H = 30 +W = 100 -[PartyTournamentPlayerStatic5] -X = 388 -Y = 552 -Z = 0.75 -W = 32 -H = 23 -Tex = ButtonAZ -Color = White -Type = Transparent +# FOUR DUET P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1DuetFourPOscilloscope] +X = 60 +Y = 118 +H = 25 +W = 100 -[PartyTournamentPlayerStatic6] -X = 556 -Y = 552 -Z = 0.75 -W = 24 -H = 23 -Tex = ButtonEnter -Color = White -Type = Transparent +#Player Two +[SingP2DuetFourPOscilloscope] +X = 60 +Y = 298 +H = 25 +W = 100 -[PartyTournamentPlayerText1] -X = 70 +#Player Three +[SingP3DuetFourPOscilloscope] +X = 430 +Y = 118 +H = 25 +W = 100 + +#Player Four +[SingP4DuetFourPOscilloscope] +X = 430 +Y = 298 +H = 25 +W = 100 + +# SIX DUET P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # +#Player One +[SingP1DuetSixPOscilloscope] +X = 60 +Y = 107 +H = 25 +W = 100 + +#Player Two +[SingP2DuetSixPOscilloscope] +X = 60 +Y = 236 +H = 25 +W = 100 + +#Player Three +[SingP3DuetSixPOscilloscope] +X = 60 +Y = 362 +H = 25 +W = 100 + +#Player Four +[SingP4DuetSixPOscilloscope] +X = 430 +Y = 107 +H = 25 +W = 100 + +#Player Five +[SingP5DuetSixPOscilloscope] +X = 430 +Y = 236 +H = 25 +W = 100 + +#Player Six +[SingP6DuetSixPOscilloscope] +X = 430 +Y = 362 +H = 25 +W = 100 + +[Score] +Texts = 1 + +[ScoreBackground] +Tex = ScoreScreenBG + +[ScoreText1] +X = 50 Y = 6 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 +Color = White Font = 0 Size = 60 -Color = White -Text = PARTY_MODE_TOURNAMENT +Text = SONG_SCORE +Align = 0 -[PartyTournamentPlayerText2] -X = 65 -Y = 70 +[ScoreTextArtistTitle] +X = 50 +Y = 59 Color = White Font = 0 Size = 30 Align = 0 -Text = PARTY_MODE_TOURNAMENT_PLAYER_DESC +Text = ArtistTitle -[PartyTournamentPlayerText3] -X = 294 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE +[ScoreStatic1] +X = 323 +Y = 550 +W = 27 +H = 30 +Tex = ButtonEnter +Color = White +Type = Transparent +Reflection = 0 +ReflectionSpacing = 2 -[PartyTournamentPlayerText4] -X = 418 -Y = 552 -Color = Black +[ScoreText2] +X = 360 +Y = 553 +Color = White Font = 0 -Size = 21 +Size = 24 Align = 0 -Text = PARTY_PLAYER_ENTER_NAME +Text = SING_LEGEND_CONTINUE +Reflection = 0 +ReflectionSpacing = 13 +#end of main stuff -[PartyTournamentPlayerText5] -X = 586 -Y = 552 -Color = Black +# # # # # # # # # # # # # # # # # # One Player Score # # # # # # # # # # # # +[ScoreTextName1] +X = 197 +Y = 280 Font = 0 -Size = 21 +Size = 40 +Text = P1 +Font = 1 +Color = White Align = 0 -Text = SING_LEGEND_CONTINUE - -[PartyTournamentPlayerSelectPlayers] -Text = PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -X = 70 -Y = 130 -W = 250 -H = 35 -SkipX = 10 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark -[PartyTournamentPlayerPlayer1Name] -Tex = Button -X = 70 -Y = 210 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +# Rating +[ScoreStaticRatingPicture1] +X = 385 +Y = 140 +H = 80 +W = 75 -[PartyTournamentPlayerPlayer1NameText1] -X = 75 -Y = 10 +[ScoreTextScore1] +X = 422 +Y = 235 +W = 100 +Color = White Font = 0 -Size = 30 +Size = 27 +Text = Tone Deaf Align = 1 -Text = Player 1 -Color = White -[PartyTournamentPlayerPlayer2Name] -Tex = Button -X = 240 -Y = 210 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +# Note Score +[ScoreStaticBoxDark1] +Tex = ScoreBar_box_dark +X = 203 +Y = 327 +W = 16 +H = 20 +Color = P1Dark +Type = Colorized -[PartyTournamentPlayerPlayer2NameText1] -X = 75 -Y = 10 +[ScoreTextNotes1] +X = 227 +Y = 322 +Color = White Font = 0 Size = 30 -Align = 1 -Text = Player 2 -Color = White - -[PartyTournamentPlayerPlayer3Name] -Tex = Button -X = 410 -Y = 210 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +Text = SING_NOTES +Align = 0 -[PartyTournamentPlayerPlayer3NameText1] -X = 75 -Y = 10 +[ScoreTextNotesScore1] +X = 487 +Y = 322 +Color = White Font = 0 Size = 30 -Align = 1 -Text = Player 3 -Color = White +Align = 2 +Text = 0 -[PartyTournamentPlayerPlayer4Name] -Tex = Button -X = 580 -Y = 210 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 - -[PartyTournamentPlayerPlayer4NameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = Player 4 +# A simple line +[ScorePlayer1Static1] +Tex = ScoreLine +X = 200 +Y = 351 +W = 287 +H = 1 Color = White +Type = Colorized -[PartyTournamentPlayerPlayer5Name] -Tex = Button -X = 70 -Y = 290 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +# Line Bonus +[ScoreStaticBoxLight1] +Tex = ScoreBar_box_light +X = 203 +Y = 358 +W = 16 +H = 20 +Color = P1Light +Type = Colorized -[PartyTournamentPlayerPlayer5NameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = Player 5 +[ScoreTextLineBonus1] +X = 227 +Y = 352 Color = White - -[PartyTournamentPlayerPlayer6Name] -Tex = Button -X = 240 -Y = 290 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 - -[PartyTournamentPlayerPlayer6NameText1] -X = 75 -Y = 10 Font = 0 Size = 30 -Align = 1 -Text = Player 6 -Color = White - -[PartyTournamentPlayerPlayer7Name] -Tex = Button -X = 410 -Y = 290 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +Text = SING_PHRASE_BONUS +Align = 0 -[PartyTournamentPlayerPlayer7NameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = Player 7 +[ScoreTextLineBonusScore1] +X = 487 +Y = 352 Color = White - -[PartyTournamentPlayerPlayer8Name] -Tex = Button -X = 580 -Y = 290 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 - -[PartyTournamentPlayerPlayer8NameText1] -X = 75 -Y = 10 Font = 0 Size = 30 -Align = 1 -Text = Player 8 +Align = 2 +Text = 0 + +# A simple line +[ScorePlayer1Static2] +Tex = ScoreLine +X = 200 +Y = 382 +W = 287 +H = 1 Color = White +Type = Colorized -[PartyTournamentPlayerPlayer9Name] -Tex = Button -X = 70 -Y = 370 -Z = 0.6 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +# Golden Notes +[ScoreStaticBoxLightest1] +Tex = ScoreBar_box_lightest +X = 203 +Y = 390 +W = 16 +H = 20 +Color = P1Lightest +Type = Colorized -[PartyTournamentPlayerPlayer9NameText1] -X = 75 -Y = 10 +[ScoreTextGoldenNotes1] +X = 227 +Y = 383 +Color = White Font = 0 Size = 30 -Align = 1 -Text = Player 9 -Color = White - -[PartyTournamentPlayerPlayer10Name] -Tex = Button -X = 240 -Y = 370 -Z = 0.6 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +Text = SING_GOLDEN_NOTES +Align = 0 -[PartyTournamentPlayerPlayer10NameText1] -X = 75 -Y = 10 +[ScoreTextGoldenNotesScore1] +X = 487 +Y = 383 +Color = White Font = 0 Size = 30 -Align = 1 -Text = Player 10 -Color = White - -[PartyTournamentPlayerPlayer11Name] -Tex = Button -X = 410 -Y = 370 -Z = 0.6 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +Align = 2 +Text = 0 -[PartyTournamentPlayerPlayer11NameText1] -X = 75 -Y = 10 +[ScoreTextTotal1] +X = 225 +Y = 454 +Color = White Font = 0 Size = 30 -Align = 1 -Text = Player 11 -Color = White - -[PartyTournamentPlayerPlayer12Name] -Tex = Button -X = 580 -Y = 370 -Z = 0.6 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark +Text = SING_TOTAL +Align = 0 Reflection = 1 -ReflectionSpacing = 1 +ReflectionSpacing = 26 -[PartyTournamentPlayerPlayer12NameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = Player 12 +[ScoreTextTotalSCore1] +X = 487 +Y = 444 Color = White - -[PartyTournamentPlayerPlayer13Name] -Tex = Button -X = 70 -Y = 450 -Z = 0.6 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark +Font = 0 +Size = 42 +Align = 2 +Text = 0 Reflection = 1 -ReflectionSpacing = 1 +ReflectionSpacing = 24 -[PartyTournamentPlayerPlayer13NameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = Player 13 -Color = White +#ScoreBar +[ScoreStaticBackLevel1] +Tex = ScoreLevel +X = 503 +Y = 168 +W = 95 +H = 310 +Color = P1Lightest +Type = Colorized -[PartyTournamentPlayerPlayer14Name] -Tex = Button -X = 240 -Y = 450 -Z = 0.6 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 +[ScoreStaticBackLevelRound1] +Tex = ScoreLevelRound +X = 503 +Y = 138 +W = 95 +H = 8 +Color = P1Lightest +Type = Colorized -[PartyTournamentPlayerPlayer14NameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = Player 14 -Color = White +[ScoreStaticLevel1] +Tex = ScoreLevel +X = 503 +Y = 400 +W = 95 +H = 10 +Color = P1Dark +Type = Colorized -[PartyTournamentPlayerPlayer15Name] -Tex = Button -X = 410 -Y = 450 -Z = 0.6 -W = 150 -H = 50 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark +[ScoreStaticLevelRound1] +Tex = ScoreLevelRound +X = 503 +Y = 392 +W = 95 +H = 8 +Color = P1Dark +Type = Colorized + +[ScorePlayer1Static3] +Tex = ScoreEndCap +X = 499 +Y = 478 +W = 110 +H = 30 +z = 0.9 +Color = P1Dark +Type = Colorized Reflection = 1 -ReflectionSpacing = 1 +ReflectionSpacing = 0 -[PartyTournamentPlayerPlayer15NameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = Player 15 +[ScorePlayer1Static4] +Tex = ScoreGlassBox +X = 499 +Y = 148 +W = 113 +H = 331 +z = 0.89 Color = White - -[PartyTournamentPlayerPlayer16Name] -Tex = Button -X = 580 -Y = 450 -Z = 0.6 -W = 150 -H = 50 Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorDark -Reflection = 1 -ReflectionSpacing = 1 -[PartyTournamentPlayerPlayer16NameText1] -X = 75 -Y = 10 -Font = 0 -Size = 30 -Align = 1 -Text = Player 16 -Color = White +[ScorePlayer1Avatar] +X = 202 +Y = 170 +W = 72 +H = 99 +Z = 1 -[PartyTournamentOptions] -Texts = 4 +[ScorePlayer1Static5] +X = 191 +Y = 157 +W = 94 +H = 125 +Z = 0.9 +Tex = AvatarFrame2 +Color = P1Dark +Type = Colorized -[PartyTournamentOptionsBackground] -Tex = PartyBG +# # # # # # # # # # # # # # # # # # Two Player Score # # # # # # # # # # # # +# P L A Y E R O N E -[PartyTournamentOptionsStatic1] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[ScoreStaticRatingPicture2] +X = 180 +Y = 150 +H = 85 +W = 75 -[PartyTournamentOptionsStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[ScoreTextScore2] +X = 217 +Y = 235 +W = 100 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 27 +Text = Tone Deaf +Align = 1 -[PartyTournamentOptionsStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon +[ScoreStaticBoxDark2] +Tex = ScoreBar_box_dark +X = 50 +Y = 327 +W = 16 +H = 20 +Color = P1Dark Type = Colorized -[PartyTournamentOptionsStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonNavi +[ScoreTextNotes2] +X = 72 +Y = 324 Color = White -Type = Transparent +Font = 0 +Size = 24 +Text = SING_NOTES +Align = 0 -[PartyTournamentOptionsStatic5] -X = 388 -Y = 552 -W = 24 -H = 23 -Tex = ButtonEnter +[ScoreTextNotesScore2] +X = 282 +Y = 324 Color = White -Type = Transparent - -[PartyTournamentOptionsText1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 Font = 0 -Size = 60 -Color = White -Text = PARTY_MODE_TOURNAMENT +Size = 24 +Align = 2 +Text = 0000 -[PartyTournamentOptionsText2] -X = 70 -Y = 65 +[ScoreStaticBoxLight2] +Tex = ScoreBar_box_light +X = 50 +Y = 358 +W = 16 +H = 20 +Color = P1Lightest +Type = Colorized + +[ScoreTextLineBonus2] +X = 72 +Y = 355 Color = White Font = 0 -Size = 30 +Size = 24 +Text = SING_PHRASE_BONUS Align = 0 -Text = PARTY_MODE_TOURNAMENT_OPTIONS_DESC -[PartyTournamentOptionsText3] -X = 294 -Y = 552 -Color = Black +[ScoreTextLineBonusScore2] +X = 282 +Y = 355 +Color = White Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE +Size = 24 +Align = 2 +Text = 0000 -[PartyTournamentOptionsText4] -X = 418 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_CONTINUE +[ScoreStaticBoxLightest2] +Tex = ScoreBar_box_lightest +X = 50 +Y = 390 +W = 16 +H = 20 +Color = P1Lightest +Type = Colorized -[PartyTournamentOptionsSelectRoundsFinal] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_MODE_TOURNAMENT_ROUNDS_FINAL -X = 70 -Y = 110 -W = 230 -H = 40 -SkipX = 10 -Fields = 1 +[ScoreTextGoldenNotes2] +X = 72 +Y = 387 +Color = White +Font = 0 +Size = 24 +Text = SING_GOLDEN_NOTES +Align = 0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreTextGoldenNotesScore2] +X = 282 +Y = 387 +Color = White +Font = 0 +Size = 24 +Align = 2 +Text = 0000 -[PartyTournamentOptionsSelectRounds2Final] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL +[ScoreTextTotal2] X = 70 -Y = 165 -W = 230 -H = 40 -SkipX = 10 -Fields = 1 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +Y = 454 +Color = White +Font = 0 +Size = 30 +Text = SING_TOTAL +Reflection = 1 +ReflectionSpacing = 24 -[PartyTournamentOptionsSelectRounds4Final] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL -X = 70 -Y = 220 -W = 230 -H = 40 -SkipX = 10 -Fields = 1 +[ScoreTextTotalSCore2] +X = 283 +Y = 444 +Color = White +Font = 0 +Size = 42 +Align = 2 +Text = 00000 +Reflection = 1 +ReflectionSpacing = 24 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +# Lines +[ScorePlayer2Static1] +Tex = ScoreLine +X = 45 +Y = 351 +W = 237 +H = 1 +Type = Colorized +Color = White -[PartyTournamentOptionsSelectRounds8Final] -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -Text = PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL -X = 70 -Y = 275 -W = 230 -H = 40 -SkipX = 10 -Fields = 1 +[ScorePlayer2Static2] +Tex = ScoreLine +X = 45 +Y = 382 +W = 237 +H = 1 +Type = Colorized +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +#ScoreBar +[ScoreStaticBackLevel2] +Tex = ScoreLevel +X = 298 +Y = 168 +W = 95 +H = 310 +Color = P1Lightest +Type = Colorized +[ScoreStaticBackLevelRound2] +Tex = ScoreLevelRound +X = 298 +Y = 138 +W = 95 +H = 8 +Color = P1Lightest +Type = Colorized -[PartyTournamentRounds] -Texts = 3 +[ScoreStaticLevel2] +Tex = ScoreLevel +X = 298 +Y = 400 +W = 95 +H = 10 +Color = P1Dark +Type = Colorized -[PartyTournamentRoundsBackground] -Tex = PartyBG +[ScoreStaticLevelRound2] +Tex = ScoreLevelRound +X = 298 +Y = 392 +W = 95 +H = 8 +Color = P1Dark +Type = Colorized -[PartyTournamentRoundsStatic1] -X = 0 -Y = 545 -W = 250 +[ScorePlayer2Static3] +Tex = ScoreEndCap +X = 294 +Y = 478 +W = 110 H = 30 -Tex = Leiste1 -Color = ColorLight +z = 0.9 +Color = P1Dark Type = Colorized Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 0 -[PartyTournamentRoundsStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[ScorePlayer2Static4] +Tex = ScoreGlassBox +X = 294 +Y = 148 +W = 113 +H = 331 +z = 0.89 Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 + +[ScorePlayer2Avatar] +X = 50 +Y = 169 +W = 72 +H = 98 +Z = 1 -[PartyTournamentRoundsStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon +[ScorePlayer2Static5] +X = 39 +Y = 156 +W = 94 +H = 125 +Z = 0.9 +Tex = AvatarFrame2 +Color = P1Dark Type = Colorized -[PartyTournamentRoundsStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonEnter -Color = White -Type = Transparent +# P L A Y E R T W O -[PartyTournamentRoundsStatic5] -X = 310 -Y = 180 -W = 270 -H = 270 -Tex = PartyTrophy +[ScoreStaticRatingPicture3] +X = 545 +Y = 165 +H = 75 +W = 75 + +[ScoreTextScore3] +X = 583 +Y = 235 +W = 100 Color = White -Type = Transparent +Font = 0 +Size = 27 +Text = Tone Deaf +Align = 1 -[PartyTournamentRoundsStatic6] -X = 300 -Y = 450 -W = 200 -H = 80 -Tex = PartyWinner -Color = White -Type = Transparent -Texts = 1 - -[PartyTournamentRoundsText1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 -Color = White -Text = PARTY_MODE_TOURNAMENT +[ScoreStaticBoxDark3] +Tex = ScoreBar_box_dark +X = 735 +Y = 327 +W = 16 +H = 20 +Color = P2Dark +Type = Colorized -[PartyTournamentRoundsText2] -X = 70 -Y = 65 +[ScoreTextNotes3] +X = 728 +Y = 324 Color = White Font = 0 -Size = 30 -Align = 0 -Text = PARTY_MODE_TOURNAMENT_ROUNDS_DESC +Size = 24 +Text = SING_NOTES +Align = 2 -[PartyTournamentRoundsText3] -X = 294 -Y = 552 -Color = Black +[ScoreTextNotesScore3] +X = 518 +Y = 324 +Color = White Font = 0 -Size = 21 +Size = 24 Align = 0 -Text = SING_LEGEND_CONTINUE +Text = 0000 -[PartyTournamentRoundsTextNameBlock1Player1] -Tex = Button -X = 20 -Y = 130 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +[ScoreStaticBoxLight3] +Tex = ScoreBar_box_light +X = 735 +Y = 358 +W = 16 +H = 20 +Color = P2Lightest +Type = Colorized -[PartyTournamentRoundsTextNameBlock1Player1Text1] -X = 60 -Y = 6 -Font = 0 -Size = 20 -Align = 1 +[ScoreTextLineBonus3] +X = 728 +Y = 355 Color = White - -[PartyTournamentRoundsTextNameBlock1Player2] -Tex = Button -X = 20 -Y = 180 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 - -[PartyTournamentRoundsTextNameBlock1Player2Text1] -X = 60 -Y = 6 Font = 0 -Size = 20 -Align = 1 -Color = White - -[PartyTournamentRoundsTextNameBlock1Player3] -Tex = Button -X = 20 -Y = 230 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +Size = 24 +Text = SING_PHRASE_BONUS +Align = 2 -[PartyTournamentRoundsTextNameBlock1Player3Text1] -X = 60 -Y = 6 -Font = 0 -Size = 20 -Align = 1 +[ScoreTextLineBonusScore3] +X = 518 +Y = 355 Color = White +Font = 0 +Size = 24 +Align = 0 +Text = 0000 -[PartyTournamentRoundsTextNameBlock1Player4] -Tex = Button -X = 20 -Y = 280 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +[ScoreStaticBoxLightest3] +Tex = ScoreBar_box_lightest +X = 735 +Y = 390 +W = 16 +H = 20 +Color = P2Lightest +Type = Colorized -[PartyTournamentRoundsTextNameBlock1Player4Text1] -X = 60 -Y = 6 +[ScoreTextGoldenNotes3] +X = 728 +Y = 387 +Color = White Font = 0 -Size = 20 -Align = 1 +Size = 24 +Text = SING_GOLDEN_NOTES +Align = 2 + +[ScoreTextGoldenNotesScore3] +X = 518 +Y = 387 Color = White +Font = 0 +Size = 24 +Align = 0 +Text = 0000 -[PartyTournamentRoundsTextNameBlock1Player5] -Tex = Button -X = 20 -Y = 330 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest +[ScoreTextTotal3] +X = 730 +Y = 454 +Color = White +Font = 0 +Size = 30 +Text = SING_TOTAL +Align = 2 Reflection = 1 -ReflectionSpacing = 1 +ReflectionSpacing = 24 -[PartyTournamentRoundsTextNameBlock1Player5Text1] -X = 60 -Y = 6 -Font = 0 -Size = 20 -Align = 1 +[ScoreTextTotalScore3] +X = 517 +Y = 444 Color = White - -[PartyTournamentRoundsTextNameBlock1Player6] -Tex = Button -X = 20 -Y = 380 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest +Font = 0 +Size = 42 +Align = 0 +Text = 00000 Reflection = 1 -ReflectionSpacing = 1 +ReflectionSpacing = 24 -[PartyTournamentRoundsTextNameBlock1Player6Text1] -X = 60 -Y = 6 -Font = 0 -Size = 20 -Align = 1 +#Lines +[ScorePlayer3Static1] +Tex = ScoreLine +X = 518 +Y = 351 +W = 237 +H = 1 +Type = Colorized Color = White -[PartyTournamentRoundsTextNameBlock1Player7] -Tex = Button -X = 20 -Y = 430 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 - -[PartyTournamentRoundsTextNameBlock1Player7Text1] -X = 60 -Y = 6 -Font = 0 -Size = 20 -Align = 1 +[ScorePlayer3Static2] +Tex = ScoreLine +X = 518 +Y = 382 +W = 237 +H = 1 +Type = Colorized Color = White -[PartyTournamentRoundsTextNameBlock1Player8] -Tex = Button -X = 20 -Y = 480 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +#ScoreBar +[ScoreStaticBackLevel3] +Tex = ScoreLevel +X = 409 +Y = 168 +W = 95 +H = 310 +Color = P2Lightest +Type = Colorized -[PartyTournamentRoundsTextNameBlock1Player8Text1] -X = 60 -Y = 6 -Font = 0 -Size = 20 -Align = 1 -Color = White +[ScoreStaticBackLevelRound3] +Tex = ScoreLevelRound +X = 409 +Y = 138 +W = 95 +H = 8 +Color = P2Lightest +Type = Colorized -[PartyTournamentRoundsTextNameBlock2Player1] -Tex = Button -X = 660 -Y = 130 -Z = 0.6 -W = 120 +[ScoreStaticLevel3] +Tex = ScoreLevel +X = 409 +Y = 400 +W = 95 +H = 10 +Color = P2Dark +Type = Colorized + +[ScoreStaticLevelRound3] +Tex = ScoreLevelRound +X = 409 +Y = 392 +W = 95 +H = 8 +Color = P2Dark +Type = Colorized + +[ScorePlayer3Static3] +Tex = ScoreEndCap +X = 405 +Y = 478 +W = 110 H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest +z = 0.9 +Color = P2Dark +Type = Colorized Reflection = 1 -ReflectionSpacing = 1 +ReflectionSpacing = 0 -[PartyTournamentRoundsTextNameBlock2Player1Text1] -X = 60 -Y = 6 -Font = 0 -Size = 20 -Align = 1 +[ScorePlayer3Static4] +Tex = ScoreGlassBox +X = 405 +Y = 148 +W = 113 +H = 331 +z = 0.89 Color = White - -[PartyTournamentRoundsTextNameBlock2Player2] -Tex = Button -X = 660 -Y = 180 -Z = 0.6 -W = 120 -H = 30 Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 -[PartyTournamentRoundsTextNameBlock2Player2Text1] -X = 60 -Y = 6 -Font = 0 -Size = 20 -Align = 1 +[ScorePlayer3Avatar] +X = 673 +Y = 169 +W = 72 +H = 99 +Z = 1 + +[ScorePlayer3Static5] +X = 662 +Y = 156 +W = 94 +H = 125 +Z = +Tex = AvatarFrame2 +Color = P2Dark +Type = Colorized + +# # # # # # # # # # # # # # # # # # Three Player Score # # # # # # # # # # # # +# P L A Y E R O N E + +# Rating + +[ScoreTextName4] +X = 22 +Y = 135 +Font = 1 +Size = 38 +Align = 0 +Text = P3 Color = White -[PartyTournamentRoundsTextNameBlock2Player3] -Tex = Button -X = 660 -Y = 230 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +[ScoreStaticRatingPicture4] +X = 160 +Y = 265 +H = 75 +W = 75 +Z = 2 -[PartyTournamentRoundsTextNameBlock2Player3Text1] -X = 60 -Y = 6 +[ScoreTextScore4] +X = 197 +Y = 335 +W = 100 +Color = White Font = 0 -Size = 20 +Size = 27 +Text = Tone Deaf Align = 1 -Color = White -[PartyTournamentRoundsTextNameBlock2Player4] -Tex = Button -X = 660 -Y = 280 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +[ScoreTextNotes4] +X = 45 +Y = 180 +Font = 0 +Size = 26 +Align = 0 +Text = SING_NOTES +Color = White -[PartyTournamentRoundsTextNameBlock2Player4Text1] -X = 60 -Y = 6 +[ScoreTextNotesScore4] +X = 260 +Y = 180 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[PartyTournamentRoundsTextNameBlock2Player5] -Tex = Button -X = 660 -Y = 330 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +[ScoreTextLineBonus4] +X = 45 +Y = 205 +Font = 0 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS +Color = White -[PartyTournamentRoundsTextNameBlock2Player5Text1] -X = 60 -Y = 6 +[ScoreTextLineBonusScore4] +X = 260 +Y = 205 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[PartyTournamentRoundsTextNameBlock2Player6] -Tex = Button -X = 660 -Y = 380 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +[ScoreTextGoldenNotes4] +X = 45 +Y = 230 +Font = 0 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES +Color = White -[PartyTournamentRoundsTextNameBlock2Player6Text1] -X = 60 -Y = 6 +[ScoreTextGoldenNotesScore4] +X = 260 +Y = 230 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[PartyTournamentRoundsTextNameBlock2Player7] -Tex = Button -X = 660 -Y = 430 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 +[ScoreStaticBoxDark4] +Tex = ScoreBar_box_dark +X = 22 +Y = 185 +W = 16 +H = 20 +Color = P1Dark +Type = Colorized -[PartyTournamentRoundsTextNameBlock2Player7Text1] -X = 60 -Y = 6 +[ScoreStaticBoxLight4] +Tex = ScoreBar_box_light +X = 22 +Y = 210 +W = 16 +H = 20 +Color = P1Light +Type = Colorized + +[ScoreStaticBoxLightest4] +Tex = ScoreBar_box_lightest +X = 22 +Y = 235 +W = 16 +H = 20 +Color = P1Lightest +Type = Colorized + +[ScoreTextTotal4] +X = 74 +Y = 500 Font = 0 -Size = 20 +Size = 30 Align = 1 +Text = SING_TOTAL Color = White -[PartyTournamentRoundsTextNameBlock2Player8] -Tex = Button -X = 660 -Y = 480 -Z = 0.6 -W = 120 -H = 30 -Type = Transparent -Texts = 1 -Color = ColorLight -DColor = ColorLightest -Reflection = 1 -ReflectionSpacing = 1 - -[PartyTournamentRoundsTextNameBlock2Player8Text1] -X = 60 -Y = 6 +[ScoreTextTotalScore4] +X = 195 +Y = 495 Font = 0 -Size = 20 +Size = 42 Align = 1 +Text = 00000 Color = White -[PartyTournamentRoundsResult] -X = 6 -Y = 6 -Font = 0 -Size = 18 +#lines +[ScorePlayer4Static1] +X = 20 +Y = 180 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -[PartyTournamentRoundsWinner] -X = 400 -Y = 478 -Color = Bronze -Font = 2 -Size = 28 -Align = 1 +[ScorePlayer4Static2] +X = 20 +Y = 205 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[PartyTournamentRoundsNextPlayers] -X = 6 -Y = -8 -Font = 1 -Size = 20 +[ScorePlayer4Static3] +X = 20 +Y = 230 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White +[ScorePlayer4Static4] +X = 20 +Y = 255 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[PartyTournamentWin] -Texts = 3 +#ScoreBar +[ScoreStaticBackLevel4] +Tex = ScoreLevel +X = 24 +Y = 291 +W = 95 +H = 169 +Color = P4Lightest +Type = Colorized -[PartyTournamentWinBackground] -Tex = PartyBG +[ScoreStaticBackLevelRound4] +Tex = ScoreLevelRound +X = 24 +Y = 138 +W = 95 +H = 8 +Color = P4Lightest +Type = Colorized -[PartyTournamentWinStatic1] -X = 0 -Y = 545 -W = 250 +[ScoreStaticLevel4] +Tex = ScoreLevel +X = 24 +Y = 400 +W = 95 +H = 10 +Color = P4Dark +Type = Colorized + +[ScoreStaticLevelRound4] +Tex = ScoreLevelRound +X = 24 +Y = 392 +W = 95 +H = 8 +Color = P4Dark +Type = Colorized + +[ScorePlayer4Static5] +Tex = ScoreEndCap +X = 20 +Y = 450 +W = 110 H = 30 -Tex = Leiste1 -Color = ColorLight +Z = 0.9 +Color = P1Dark Type = Colorized Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 0 -[PartyTournamentWinStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[ScorePlayer4Static6] +Tex = ScoreGlassBox +X = 20 +Y = 270 +W = 113 +H = 180 +Z = 0.89 Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[PartyTournamentWinStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon +[ScorePlayer4Avatar] +X = 168 +Y = 391 +W = 58 +H = 84 +Z = 1 + +[ScorePlayer4Static7] +X = 159 +Y = 379 +W = 76 +H = 108 +Z = 0.9 +Tex = AvatarFrame2 +Color = P1Dark Type = Colorized -[PartyTournamentWinStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonEnter -Color = White -Type = Transparent +# P L A Y E R T W O -[PartyTournamentWinText1] -X = 70 -Y = 6 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 +# Rating + +[ScoreTextName5] +X = 282 +Y = 135 +Font = 1 +Size = 38 +Align = 0 +Text = P2 Color = White -Text = PARTY_MODE_TOURNAMENT -[PartyTournamentWinText2] -X = 70 -Y = 53 +[ScoreStaticRatingPicture5] +X = 420 +Y = 265 +H = 75 +W = 75 + +[ScoreTextScore5] +X = 457 +Y = 335 +W = 100 Color = White Font = 0 -Size = 30 -Align = 0 -Text = PARTY_MODE_TOURNAMENT_WIN_DESC +Size = 27 +Text = Tone Deaf +Align = 1 -[PartyTournamentWinText3] -X = 290 -Y = 552 -Color = Black +[ScoreTextNotes5] +X = 305 +Y = 180 Font = 0 -Size = 21 +Size = 26 Align = 0 -Text = SING_LEGEND_CONTINUE +Text = SING_NOTES +Color = White -[PartyTournamentWinTextScorePlayer1] -X = 620 +[ScoreTextNotesScore5] +X = 520 Y = 180 -Color = White Font = 0 -Size = 57 -Text = 3000 +Size = 26 Align = 2 +Text = 0000 +Color = White -[PartyTournamentWinTextScorePlayer2] -X = 620 -Y = 330 +[ScoreTextLineBonus5] +X = 305 +Y = 205 +Font = 0 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS Color = White + +[ScoreTextLineBonusScore5] +X = 520 +Y = 205 Font = 0 -Size = 57 -Text = 2000 +Size = 26 Align = 2 +Text = 0000 +Color = White -[PartyTournamentWinTextNamePlayer1] -X = 170 -Y = 180 +[ScoreTextGoldenNotes5] +X = 305 +Y = 230 Font = 0 -Size = 57 +Size = 26 Align = 0 -Text = Team 1 +Text = SING_GOLDEN_NOTES Color = White -[PartyTournamentWinTextNamePlayer2] -X = 170 -Y = 330 -Color = White +[ScoreTextGoldenNotesScore5] +X = 520 +Y = 230 Font = 0 -Size = 57 - -[PartyTournamentWinStaticBGPlayer1] -Tex = PartyTeamButton3 -X = 140 -Y = 170 -W = 520 -H = 78 -Type = Transparent -Color = P1Dark -Reflection = 1 -ReflectionSpacing = 2 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[PartyTournamentWinStaticBGPlayer2] -Tex = PartyTeamButton3 -X = 140 -Y = 320 -W = 520 -H = 78 -Type = Transparent +[ScoreStaticBoxDark5] +Tex = ScoreBar_box_dark +X = 282 +Y = 185 +W = 16 +H = 20 Color = P2Dark -Reflection = 1 -ReflectionSpacing = 2 +Type = Colorized -########################################## -## ## -## JUKEBOX MODE ## -## ## -########################################## +[ScoreStaticBoxLight5] +Tex = ScoreBar_box_light +X = 282 +Y = 210 +W = 16 +H = 20 +Color = P2Light +Type = Colorized + +[ScoreStaticBoxLightest5] +Tex = ScoreBar_box_lightest +X = 282 +Y = 235 +W = 16 +H = 20 +Color = P2Lightest +Type = Colorized -[JukeboxTimeBackground] -Tex = JukeboxTimeBar1 +[ScoreTextTotal5] X = 325 -Y = 460 -W = 315 -H = 25 +Y = 500 +Font = 0 +Size = 30 +Align = 1 +Text = SING_TOTAL Color = White -Type = Transparent - -[JukeboxTimeProgress] -X = 339 -Y = 468 -W = 248 -H = 8 -Color = ColorDark -[JukeboxTimeText] -X = 630 -Y = 466 -W = 35 -Font = 1 -Size = 14 +[ScoreTextTotalScore5] +X = 455 +Y = 495 +Font = 0 +Size = 42 +Align = 1 +Text = 00000 Color = White -Align = 2 - -################ NOT USED ################ -[JukeboxLyricsUpperBar] -X = 80 -W = 640 -Y = 490 -H = 54 -;YOffSet (+/-) for the Sing-Indicator -IndicatorYOffset = 3 - -[JukeboxLyricsLowerBar] -X = 80 -W = 640 -Y = 535 -H = 54 -############################################# -[JukeboxSongListBackground] -Tex = JukeboxSongListBackground -X = 150 -Y = 55 -W = 500 -H = 440 -Color = White +#lines +[ScorePlayer5Static1] +X = 280 +Y = 180 +W = 240 +H = 1 +Tex = ScoreLine Type = Colorized - -[JukeboxListText] -X = 160 -Y = 65 -W = 500 Color = White -Font = 1 -Size = 24 -Align = 0 -Z = 1 -Text=JUKEBOX_SONGLIST -[JukeboxCountText] -X = 636 -Y = 74 -W = 100 +[ScorePlayer5Static2] +X = 280 +Y = 205 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -Font = 1 -Size = 18 -Align = 2 -Z = 1 -[JukeboxSongDescription] -X = 160 -Y = 110 -W = 480 -H = 25 -Tex = JukeboxSongListBackground -Color = ColorDark -DColor = White +[ScorePlayer5Static3] +X = 280 +Y = 230 +W = 240 +H = 1 +Tex = ScoreLine Type = Colorized -Texts=2 +Color = White -[JukeboxSongDescriptionText1] -X = 10 -Y = 3 -W = 100 +[ScorePlayer5Static4] +X = 280 +Y = 255 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -Font = 0 -Size = 20 -Align = 0 -Z = 1 -[JukeboxSongDescriptionText2] -X = 470 -Y = 3 -W = 100 -Color = WhiteGray -Font = 0 -Size = 20 -Align = 2 -Z = 1 +#ScoreBar +[ScoreStaticBackLevel5] +Tex = ScoreLevel +X = 284 +Y = 291 +W = 95 +H = 169 +Color = P5Lightest +Type = Colorized + +[ScoreStaticBackLevelRound5] +Tex = ScoreLevelRound +X = 284 +Y = 138 +W = 95 +H = 8 +Color = P5Lightest +Type = Colorized -[JukeboxFind] -X = 360 -Y = 385 -W = 280 -H = 25 -Tex = JukeboxSongListBackground -Color = ColorDark -DColor = White +[ScoreStaticLevel5] +Tex = ScoreLevel +X = 284 +Y = 400 +W = 95 +H = 10 +Color = P5Dark Type = Colorized -Texts=2 -[JukeboxFindText1] -X = 10 -Y = 3 -W = 220 -Color = White -Font = 1 -Size = 19 -Align = 0 -Z = 1 +[ScoreStaticLevelRound5] +Tex = ScoreLevelRound +X = 284 +Y = 392 +W = 95 +H = 8 +Color = P5Dark +Type = Colorized -[JukeboxFindText2] -X = -80 -Y = 4 -W = 220 +[ScorePlayer5Static5] +Tex = ScoreEndCap +X = 280 +Y = 450 +W = 110 +H = 30 +Z = 0.9 +Color = P2Dark +Type = Colorized +Reflection = 1 +ReflectionSpacing = 0 + +[ScorePlayer5Static6] +Tex = ScoreGlassBox +X = 280 +Y = 270 +W = 113 +H = 180 +Z = 0.89 Color = White +Type = Transparent + +[ScorePlayer5Avatar] +X = 427 +Y = 391 +W = 58 +H = 84 +Z = 0.9 + +[ScorePlayer5Static7] +X = 418 +Y = 379 +W = 76 +H = 108 +Z = 0.9 +Tex = AvatarFrame2 +Color = P2Dark +Type = Colorized + +# P L A Y E R T H R E E +[ScoreTextName6] +X = 540 +Y = 135 Font = 1 -Size = 18 +Size = 38 Align = 0 -Z = 1 -Text = JUKEBOX_FIND +Text = P3 +Color = White -[JukeboxSort] -X = 360 -Y = 423 -W = 108 -H = 25 -Tex = JukeboxSongListBackground -Color = ColorDark -DColor = White -Type = Colorized -Texts=2 +# Rating +[ScoreStaticRatingPicture6] +X = 680 +Y = 265 +H = 75 +W = 75 -[JukeboxSortText1] -X = 54 -Y = 4 +[ScoreTextScore6] +X = 717 +Y = 335 W = 100 Color = White -Font = 1 -Size = 18 +Font = 0 +Size = 27 +Text = Tone Deaf Align = 1 -Z = 1 -Text = OPTION_VALUE_ARTIST -[JukeboxSortText2] -X = -80 -Y = 4 -W = 220 +[ScoreTextNotes6] +X = 565 +Y = 180 +Font = 0 +Size = 26 +Align = 0 +Text = SING_NOTES Color = White -Font = 1 -Size = 18 + +[ScoreTextNotesScore6] +X = 780 +Y = 180 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White + +[ScoreTextLineBonus6] +X = 565 +Y = 205 +Font = 0 +Size = 26 Align = 0 -Z = 1 -Text = JUKEBOX_SORT +Text = SING_PHRASE_BONUS +Color = White -[JukeboxRandom] -X = 471 -Y = 423 -W = 40 -H = 25 -Tex = JukeboxRandom -Color = ColorDark -DColor = White -Type = Colorized +[ScoreTextLineBonusScore6] +X = 780 +Y = 205 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[JukeboxRepeat] -X = 514 -Y = 423 -W = 40 -H = 25 -Tex = JukeboxRepeat -Color = ColorDark -DColor = White -Type = Colorized +[ScoreTextGoldenNotes6] +X = 565 +Y = 230 +Font = 0 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES +Color = White -[JukeboxLyric] -X = 557 -Y = 423 -W = 40 -H = 25 -Tex = JukeboxLyric -Color = ColorDark -DColor = White -Type = Colorized +[ScoreTextGoldenNotesScore6] +X = 780 +Y = 230 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[JukeboxOptions] -X = 600 -Y = 423 -W = 40 -H = 25 -Tex = JukeboxOptions -Color = ColorDark -DColor = White +[ScoreStaticBoxDark6] +Tex = ScoreBar_box_dark +X = 542 +Y = 185 +W = 16 +H = 20 +Color = P3Dark Type = Colorized -[JukeboxSongListClose] -X = 600 -Y = 55 -W = 40 -H = 15 -Tex = JukeboxClose -Color = ColorDark -DColor = White +[ScoreStaticBoxLight6] +Tex = ScoreBar_box_light +X = 542 +Y = 210 +W = 16 +H = 20 +Color = P3Light Type = Colorized -[JukeboxSongListFixPin] -X = 570 -Y = 55 -W = 25 -H = 15 -Tex = JukeboxFix -Color = ColorDark -DColor = White +[ScoreStaticBoxLightest6] +Tex = ScoreBar_box_lightest +X = 542 +Y = 235 +W = 16 +H = 20 +Color = P3Lightest Type = Colorized -[JukeboxSongCover] -X = 160 -Y = 385 -W = 110 -H = 100 - -[JukeboxStaticActualSong1] -X = 20 -Y = 20 -W = 104 -H = 94 -Tex = JukeboxCurrentSongBackground -Color = ColorDark -Type = Transparent +[ScoreTextTotal6] +X = 590 +Y = 500 +Font = 0 +Size = 30 +Align = 1 +Text = SING_TOTAL +Color = White -[JukeboxStaticActualSongCover] -X = 22 -Y = 22 -W = 100 -H = 90 +[ScoreTextTotalScore6] +X = 720 +Y = 495 +Font = 0 +Size = 42 +Align = 1 +Text = 00000 +Color = White -[JukeboxTextActualSongArtist] -X = 140 -Y = 38 +#lines +[ScorePlayer6Static1] +X = 540 +Y = 180 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -Font = 2 -Size = 26 -Align = 0 -Z = 1 -[JukeboxTextActualSongTitle] -X = 140 -Y = 65 -Color = ColorDark -Font = 2 -Size = 36 -Align = 0 -Z = 1 - -[JukeboxSongListUp] -X = 160 -Y = 95 -W = 480 -H = 15 -Tex = JukeboxSongListUp -Color = ColorDark -DColor = White -Type = Colorized - -[JukeboxSongListDown] -X = 160 -Y = 360 -W = 480 -H = 15 -Tex = JukeboxSongListDown -Color = ColorDark -DColor = White -Type = Colorized - -[JukeboxPlayPause] -X = 280 -Y = 460 -W = 40 -H = 25 -Tex = JukeboxSongMenuPlayPause -Color = ColorDark -DColor = White +[ScorePlayer6Static2] +X = 540 +Y = 205 +W = 240 +H = 1 +Tex = ScoreLine Type = Colorized - -[JukeboxSongMenuBackground] -Tex = JukeboxSongListBackground -X = 150 -Y = 0 -W = 500 -H = 35 Color = White -Type = Colorized -[JukeboxSongMenuTimeBackground] -Tex = JukeboxSongMenuTimeBar -X = 210 -Y = 5 -W = 250 -H = 25 +[ScorePlayer6Static3] +X = 540 +Y = 230 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -Type = Transparent - -[JukeboxSongMenuTimeProgress] -X = 217 -Y = 14 -W = 182 -H = 9 -Color = ColorDark -[JukeboxSongMenuTextTime] -X = 450 -Y = 11 -W = 35 -Font = 1 -Size = 15 +[ScorePlayer6Static4] +X = 540 +Y = 255 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -Align = 2 -[JukeboxSongMenuPlayPause] -X = 160 -Y = 5 -W = 40 -H = 25 -Tex = JukeboxSongMenuPlayPause -Color = ColorDark -DColor = White +#ScoreBar +[ScoreStaticBackLevel6] +Tex = ScoreLevel +X = 544 +Y = 291 +W = 95 +H = 169 +Color = P6Lightest Type = Colorized -[JukeboxSongMenuPrevious] -X = 464 -Y = 5 -W = 40 -H = 25 -Tex = JukeboxSongMenuPrevious -Color = ColorDark -DColor = White +[ScoreStaticBackLevelRound6] +Tex = ScoreLevelRound +X = 544 +Y = 138 +W = 95 +H = 8 +Color = P6Lightest Type = Colorized -[JukeboxSongMenuNext] -X = 507 -Y = 5 -W = 40 -H = 25 -Tex = JukeboxSongMenuNext -Color = ColorDark -DColor = White +[ScoreStaticLevel6] +Tex = ScoreLevel +X = 544 +Y = 400 +W = 95 +H = 10 +Color = P6Dark Type = Colorized -[JukeboxSongMenuOptions] -X = 557 -Y = 5 -W = 40 -H = 25 -Tex = JukeboxOptions -Color = ColorDark -DColor = White +[ScoreStaticLevelRound6] +Tex = ScoreLevelRound +X = 544 +Y = 392 +W = 95 +H = 8 +Color = P6Dark Type = Colorized -[JukeboxSongMenuPlaylist] -X = 600 -Y = 5 -W = 40 -H = 25 -Tex = JukeboxSongMenuPlaylist -Color = ColorDark -DColor = White +[ScorePlayer6Static5] +Tex = ScoreEndCap +X = 540 +Y = 450 +W = 110 +H = 30 +z = 0.9 +Color = P3Dark Type = Colorized +Reflection = 1 +ReflectionSpacing = 0 -[JukeboxSongOptionsBackground] -Tex = JukeboxSongOptionsBackground -X = 150 -Y = 55 -W = 500 -H = 440 +[ScorePlayer6Static6] +Tex = ScoreGlassBox +X = 540 +Y = 270 +W = 113 +H = 180 +Z = 0.89 Color = White -Type = Colorized - -[JukeboxSongOptionsClose] -X = 600 -Y = 55 -W = 40 -H = 15 -Tex = JukeboxClose -Color = ColorDark -DColor = White -Type = Colorized +Type = Transparent + +[ScorePlayer6Avatar] +X = 689 +Y = 391 +W = 58 +H = 84 +Z = 0.9 -[JukeboxSongOptionsDefault] -X = 160 -Y = 455 -W = 120 -H = 25 -Tex = JukeboxSongListBackground -Color = ColorDark -DColor = White +[ScorePlayer6Static7] +X = 680 +Y = 379 +W = 76 +H = 108 +Z = 0.9 +Tex = AvatarFrame2 +Color = P3Dark Type = Colorized -Texts = 1 -[JukeboxSongOptionsDefaultText1] -X = 60 -Y = 4 -W = 120 +################################################# +## ## +## Four Player Score One Screen ## +## ## +################################################# +# P L A Y E R O N E +[ScoreFourPTextName1] +X = 75 +Y = 140 Font = 1 -Size = 18 +Size = 32 +Align = 0 +Text = P1 Color = White -Align = 1 -Text = JUKEBOX_SONGOPTIONS_DEFAULT -[JukeboxSongOptionsSave] -X = 515 -Y = 455 -W = 120 -H = 25 -Tex = JukeboxSongListBackground -Color = ColorDark -DColor = White -Type = Colorized -Texts = 1 +# Rating +[ScoreFourPStaticRatingPicture1] +X = 315 +Y = 160 +H = 55 +W = 55 +Z = 100 -[JukeboxSongOptionsSaveText1] -X = 60 -Y = 4 -W = 120 -Font = 1 -Size = 18 +[ScoreFourPTextScore1] +X = 340 +Y = 220 +W = 100 Color = White +Font = 0 +Size = 24 +Text = Tone Deaf Align = 1 -Text = JUKEBOX_SONGOPTIONS_SAVE -[JukeboxSongOptionsTextSaved] -X = 500 -Y = 459 -W = 120 -Font = 1 -Size = 18 +[ScoreFourPTextNotes1] +X = 45 +Y = 180 +Font = 0 +Size = 26 +Align = 0 +Text = SING_NOTES Color = White -Align = 2 -Text = JUKEBOX_SONGOPTIONS_OPTIONSSAVED -[JukeboxSongOptionsVideoText] -X = 160 -Y = 65 -W = 500 +[ScoreFourPTextNotesScore1] +X = 260 +Y = 180 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 Color = White -Font = 1 -Size = 20 + +[ScoreFourPTextLineBonus1] +X = 45 +Y = 205 +Font = 0 +Size = 26 Align = 0 -Z = 1 -Text=JUKEBOX_SONGOPTIONS_VIDEO +Text = SING_PHRASE_BONUS +Color = White -[JukeboxSongOptionsLyricText] -X = 160 -Y = 198 -W = 500 +[ScoreFourPTextLineBonusScore1] +X = 260 +Y = 205 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 Color = White -Font = 1 -Size = 20 + +[ScoreFourPTextGoldenNotes1] +X = 45 +Y = 230 +Font = 0 +Size = 26 Align = 0 -Z = 1 -Text=JUKEBOX_SONGOPTIONS_LYRIC +Text = SING_GOLDEN_NOTES +Color = White -[JukeboxSongOptionsVideoAspectSlide] -TexSBG=JukeboxSongListBackground -Text=JUKEBOX_SONGOPTIONS_VIDEO_ASPECT -TypeSBG=Colorized -ShowArrows=1 -OneItemOnly=1 -X=180 -Y=100 -W=200 -H=20 -Z=0.97 -SkipX=0 -SBGW=220 -TextSize=18 +[ScoreFourPTextGoldenNotesScore1] +X = 260 +Y = 230 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -Color=ColorLight -DColor=ColorDark -TColor=White -TDColor=White +[ScoreFourPStaticBoxDark1] +Tex = ScoreBar_box_dark +X = 20 +Y = 185 +W = 22 +H = 20 +Color = P1Dark +Type = Colorized -SBGColor=ColorDark -SBGDColor=Black -STColor=White -STDColor=White +[ScoreFourPStaticBoxLight1] +Tex = ScoreBar_box_light +X = 20 +Y = 210 +W = 22 +H = 20 +Color = P1Light +Type = Colorized +[ScoreFourPStaticBoxLightest1] +Tex = ScoreBar_box_lightest +X = 20 +Y = 235 +W = 22 +H = 20 +Color = P1Lightest +Type = Colorized -[JukeboxSongOptionsVideoWidthSlide] -TexSBG=JukeboxSongListBackground -Text=JUKEBOX_SONGOPTIONS_VIDEO_WIDTH -TypeSBG=Colorized -ShowArrows=1 -OneItemOnly=1 -X=180 -Y=130 -W=200 -H=20 -Z=0.97 -SkipX=0 -SBGW=220 -TextSize=18 +[ScoreFourPTextTotal1] +X = 45 +Y = 280 +Font = 0 +Size = 30 +Align = 0 +Text = SING_TOTAL +Color = White -Color=ColorLight -DColor=ColorDark -TColor=White -TDColor=White +[ScoreFourPTextTotalScore1] +X = 260 +Y = 275 +Font = 0 +Size = 42 +Align = 2 +Text = 00000 +Color = White -SBGColor=ColorDark -SBGDColor=Black -STColor=White -STDColor=White +#lines +[ScoreFourPPlayer1Static1] +X = 20 +Y = 180 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[JukeboxSongOptionsVideoHeightSlide] -TexSBG=JukeboxSongListBackground -Text=JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT -TypeSBG=Colorized -ShowArrows=1 -OneItemOnly=1 -X=180 -Y=150 -Y=160 -W=200 -H=20 -Z=0.97 -SkipX=0 -SBGW=220 -TextSize=18 +[ScoreFourPPlayer1Static2] +X = 20 +Y = 205 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -Color=ColorLight -DColor=ColorDark -TColor=White -TDColor=White +[ScoreFourPPlayer1Static3] +X = 20 +Y = 230 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -SBGColor=ColorDark -SBGDColor=Black -STColor=White -STDColor=White +[ScoreFourPPlayer1Static4] +X = 20 +Y = 255 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[JukeboxSongOptionsLyricPositionSlide] -TexSBG=JukeboxSongListBackground -Text=JUKEBOX_SONGOPTIONS_LYRIC_POSITION -TypeSBG=Colorized -ShowArrows=1 -OneItemOnly=1 -X=180 -Y=233 -W=200 -H=20 -Z=0.97 -SkipX=0 -SBGW=220 -TextSize=18 +#ScoreBar +[ScoreFourPStaticBackLevel1] +Tex = ScoreLevel +X = 294 +Y = 155 +W = 95 +H = 125 +Color = P1Lightest +Type = Colorized + +[ScoreFourPStaticBackLevelRound1] +Tex = ScoreLevelRound +X = 294 +Y = 155 +W = 95 +H = 8 +Color = P1Lightest +Type = Colorized -Color=ColorLight -DColor=ColorDark -TColor=White -TDColor=White +[ScoreFourPStaticLevel1] +Tex = ScoreLevel +X = 294 +Y = 400 +W = 95 +H = 10 +Color = P1Dark +Type = Colorized -SBGColor=ColorDark -SBGDColor=Black -STColor=White -STDColor=White +[ScoreFourPStaticLevelRound1] +Tex = ScoreLevelRound +X = 294 +Y = 392 +W = 95 +H = 8 +Color = P1Dark +Type = Colorized -[JukeboxSongOptionsLyricAlphaSlide] -TexSBG=JukeboxSongListBackground -Text=JUKEBOX_SONGOPTIONS_LYRIC_ALPHA -TypeSBG=Colorized -ShowArrows=1 -OneItemOnly=1 -X=180 -Y=263 -W=200 -H=20 -Z=0.97 -SkipX=0 -SBGW=220 -TextSize=18 +[ScoreFourPPlayer1Static5] +Tex = ScoreEndCap +X = 290 +Y = 280 +W = 110 +H = 30 +Z = 0.9 +Color = P1Dark +Type = Colorized +Reflection = 1 +ReflectionSpacing = 0 -Color=ColorLight -DColor=ColorDark -TColor=White -TDColor=White +[ScoreFourPPlayer1Static6] +Tex = ScoreGlassBox +X = 290 +Y = 140 +W = 113 +H = 140 +Z = 0.89 +Color = White +Type = Transparent -SBGColor=ColorDark -SBGDColor=Black -STColor=White -STDColor=White -[JukeboxSongOptionsLyricLineSlide] -TexSBG=JukeboxSongListBackground -Text=JUKEBOX_SONGOPTIONS_LYRIC_LINE -TypeSBG=Colorized -ShowArrows=1 -OneItemOnly=1 -X=180 -Y=293 -W=200 -H=20 -Z=0.97 -SkipX=0 -SBGW=220 -TextSize=18 - -Color=ColorLight -DColor=ColorDark -TColor=White -TDColor=White - -SBGColor=ColorDark -SBGDColor=Black -STColor=White -STDColor=White - -[JukeboxSongOptionsLyricPropertySlide] -TexSBG=JukeboxSongListBackground -Text=JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY -TypeSBG=Colorized -ShowArrows=1 -OneItemOnly=1 -X=180 -Y=323 -W=200 -H=20 -Z=0.97 -SkipX=0 -SBGW=220 -TextSize=18 +[ScoreFourPPlayer1Avatar] +X = 24 +Y = 115 +W = 36 +H = 50 +Z = 1 -Color=ColorLight -DColor=ColorDark -TColor=White -TDColor=White +[ScoreFourPPlayer1Static7] +X = 20 +Y = 110 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 +Color = P1Dark +Type = Transparent -SBGColor=ColorDark -SBGDColor=Black -STColor=White -STDColor=White +# P L A Y E R T W O +[ScoreFourPTextName2] +X = 595 +Y = 140 +Font = 1 +Size = 32 +Align = 0 +Text = P2 +Color = White -[JukeboxSongOptionsLyricColorSlide] -TexSBG=JukeboxSongListBackground -Text=JUKEBOX_SONGOPTIONS_LYRIC_COLOR -TypeSBG=Colorized -ShowArrows=1 -OneItemOnly=1 -X=180 -Y=353 -W=200 -H=20 -Z=0.97 -SkipX=0 -SBGW=220 -TextSize=18 +# Rating +[ScoreFourPStaticRatingPicture2] +X = 435 +Y = 160 +H = 55 +W = 55 -Color=ColorLight -DColor=ColorDark -TColor=White -TDColor=White +[ScoreFourPTextScore2] +X = 460 +Y = 220 +W = 100 +Color = White +Font = 0 +Size = 24 +Text = Tone Deaf +Align = 1 -SBGColor=ColorDark -SBGDColor=Black -STColor=White -STDColor=White +[ScoreFourPTextNotes2] +X = 565 +Y = 180 +Font = 0 +Size = 26 +Align = 0 +Text = SING_NOTES +Color = White -[JukeboxSongOptionsLyricSelectR] -Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED -Tex= JukeboxSongListBackground -Type = Colorized -X = 270 -Y = 380 -W = 100 -H = 15 -SkipX = 10 -TextSize = 14 -SBGW=220 +[ScoreFourPTextNotesScore2] +X = 780 +Y = 180 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -Color=ColorDark -DColor=White -TColor=White -TDColor=White +[ScoreFourPTextLineBonus2] +X = 565 +Y = 205 +Font = 0 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS +Color = White -SBGColor=White -SBGDColor=White -STColor=White -STDColor=White +[ScoreFourPTextLineBonusScore2] +X = 780 +Y = 205 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[JukeboxSongOptionsLyricRed] -X = 380 -Y = 380 -W = 220 -H = 15 -Z = 1 -Alpha = 0.5 -Tex = Picker -Type = Transparent +[ScoreFourPTextGoldenNotes2] +X = 565 +Y = 230 +Font = 0 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES +Color = White -[JukeboxSongOptionsLyricPointerR] -X = 380 -Y = 378 -W = 1 -H = 18 -Z = 1 -Tex = Picker -Color = Black -Type = Transparent +[ScoreFourPTextGoldenNotesScore2] +X = 780 +Y = 230 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[JukeboxSongOptionsLyricSelectG] -Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN -Tex= JukeboxSongListBackground +[ScoreFourPStaticBoxDark2] +Tex = ScoreBar_box_dark +X = 540 +Y = 185 +W = 22 +H = 20 +Color = P2Dark Type = Colorized -X = 270 -Y = 400 -W = 100 -H = 15 -SkipX = 10 -TextSize = 14 -SBGW=220 -Color=ColorDark -DColor=White -TColor=White -TDColor=White +[ScoreFourPStaticBoxLight2] +Tex = ScoreBar_box_light +X = 540 +Y = 210 +W = 22 +H = 20 +Color = P2Light +Type = Colorized -SBGColor=White -SBGDColor=White -STColor=White -STDColor=White +[ScoreFourPStaticBoxLightest2] +Tex = ScoreBar_box_lightest +X = 540 +Y = 235 +W = 22 +H = 20 +Color = P2Lightest +Type = Colorized -[JukeboxSongOptionsLyricGreen] -X = 380 -Y = 400 -W = 220 -H = 15 -Z = 1 -Alpha = 0.5 -Tex = Picker -Type = Transparent +[ScoreFourPTextTotal2] +X = 565 +Y = 280 +Font = 0 +Size = 30 +Align = 0 +Text = SING_TOTAL +Color = White -[JukeboxSongOptionsLyricPointerG] -X = 380 -Y = 398 -W = 1 -H = 18 -Z = 1 -Tex = Picker -Color = Black -Type = Transparent +[ScoreFourPTextTotalScore2] +X = 780 +Y = 275 +Font = 0 +Size = 42 +Align = 2 +Text = 00000 +Color = White -[JukeboxSongOptionsLyricSelectB] -Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE -Tex= JukeboxSongListBackground +#lines +[ScoreFourPPlayer2Static1] +X = 540 +Y = 180 +W = 240 +H = 1 +Tex = ScoreLine Type = Colorized -X = 270 -Y = 420 -W = 100 -H = 15 -SkipX = 10 -TextSize = 14 -SBGW=220 +Color = White -Color=ColorDark -DColor=White -TColor=White -TDColor=White +[ScoreFourPPlayer2Static2] +X = 540 +Y = 205 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -SBGColor=White -SBGDColor=White -STColor=White -STDColor=White +[ScoreFourPPlayer2Static3] +X = 540 +Y = 230 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[JukeboxSongOptionsLyricBlue] -X = 380 -Y = 420 -W = 220 -H = 15 -Z = 1 -Alpha = 0.5 -Tex = Picker -Type = Transparent - -[JukeboxSongOptionsLyricPointerB] -X = 380 -Y = 418 -W = 1 -H = 18 -Z = 1 -Tex = Picker -Color = Black -Type = Transparent +[ScoreFourPPlayer2Static4] +X = 540 +Y = 255 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -############################# -# # -# Edit # -# # -############################# +#ScoreBar +[ScoreFourPStaticBackLevel2] +Tex = ScoreLevel +X = 414 +Y = 155 +W = 95 +H = 125 +Color = P2Lightest +Type = Colorized + +[ScoreFourPStaticBackLevelRound2] +Tex = ScoreLevelRound +X = 414 +Y = 155 +W = 95 +H = 8 +Color = P2Lightest +Type = Colorized -[EditSub] -[EditSubBackground] -Tex = EditSubBG +[ScoreFourPStaticLevel2] +Tex = ScoreLevel +X = 414 +Y = 400 +W = 95 +H = 10 +Color = P2Dark +Type = Colorized -[EditSubTitle] -X = 30 -Y = 60 -W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_TITLE -Tex = MainBar -Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 350 -Align = 0 +[ScoreFourPStaticLevelRound2] +Tex = ScoreLevelRound +X = 414 +Y = 392 +W = 95 +H = 8 +Color = P2Dark +Type = Colorized -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPPlayer2Static5] +Tex = ScoreEndCap +X = 410 +Y = 280 +W = 110 +H = 30 +Z = 0.9 +Color = P2Dark +Type = Colorized +Reflection = 1 +ReflectionSpacing = 0 -[EditSubArtist] -X = 30 -Y = 81 -W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_ARTIST -Tex = MainBar +[ScoreFourPPlayer2Static6] +Tex = ScoreGlassBox +X = 410 +Y = 140 +W = 113 +H = 140 +Z = 0.89 +Color = White Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 350 -Align = 0 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPPlayer2Avatar] +X = 544 +Y = 115 +W = 36 +H = 50 +Z = 1 -[EditSubMP3] -X = 30 -Y = 102 -W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_MP3 -Tex = MainBar +[ScoreFourPPlayer2Static7] +X = 540 +Y = 110 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 +Color = P2Dark Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 1 -OneItemOnly = 1 -SBGW = 350 + +# P L A Y E R T H R E E +[ScoreFourPTextName3] +X = 75 +Y = 360 +Font = 1 +Size = 32 Align = 0 +Text = P1 +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +# Rating +[ScoreFourPStaticRatingPicture3] +X = 315 +Y = 380 +H = 55 +W = 55 +Z = 100 -[EditSubSlideCover] -X = 30 -Y = 123 +[ScoreFourPTextScore3] +X = 340 +Y = 440 W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_COVER -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -ShowArrows = 1 -OneItemOnly = 1 -SBGW = 350 +Color = White +Font = 0 +Size = 24 +Text = Tone Deaf +Align = 1 + +[ScoreFourPTextNotes3] +X = 45 +Y = 400 +Font = 0 +Size = 26 Align = 0 +Text = SING_NOTES +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPTextNotesScore3] +X = 260 +Y = 400 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[EditSubSlideBG] -X = 30 -Y = 144 -W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_BACKGROUND -Tex = MainBar -Type = Transparent -TexSBG = SelectBG -TypeSBG = Transparent -ShowArrows = 1 -OneItemOnly = 1 -SBGW = 350 +[ScoreFourPTextLineBonus3] +X = 45 +Y = 425 +Font = 0 +Size = 26 Align = 0 +Text = SING_PHRASE_BONUS +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPTextLineBonusScore3] +X = 260 +Y = 425 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[EditSubBPM] -X = 30 -Y = 165 -W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_BPM -Tex = MainBar -Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 100 +[ScoreFourPTextGoldenNotes3] +X = 45 +Y = 450 +Font = 0 +Size = 26 Align = 0 +Text = SING_GOLDEN_NOTES +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPTextGoldenNotesScore3] +X = 260 +Y = 450 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[EditSubGAP] -X = 30 -Y = 186 -W = 100 +[ScoreFourPStaticBoxDark3] +Tex = ScoreBar_box_dark +X = 20 +Y = 405 +W = 22 H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_GAP -Tex = MainBar -Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 100 -Align = 0 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +Color = P3Dark +Type = Colorized -[EditSubStart] -X = 30 -Y = 207 -W = 100 +[ScoreFourPStaticBoxLight3] +Tex = ScoreBar_box_light +X = 20 +Y = 430 +W = 22 H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_START -Tex = MainBar -Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 100 -Align = 0 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +Color = P3Light +Type = Colorized -[EditSubDuration] -X = 30 -Y = 228 -W = 100 +[ScoreFourPStaticBoxLightest3] +Tex = ScoreBar_box_lightest +X = 20 +Y = 455 +W = 22 H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_DURATION -Tex = MainBar -Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 100 -Align = 0 - -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +Color = P3Lightest +Type = Colorized -[EditSubTone] -X = 30 -Y = 249 -W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_TONE -Tex = MainBar -Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 100 +[ScoreFourPTextTotal3] +X = 45 +Y = 500 +Font = 0 +Size = 30 Align = 0 +Text = SING_TOTAL +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPTextTotalScore3] +X = 260 +Y = 495 +Font = 0 +Size = 42 +Align = 2 +Text = 00000 +Color = White -[EditSubLyric] -X = 30 -Y = 270 -W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_LYRIC -Tex = MainBar -Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 350 -Align = 0 +#lines +[ScoreFourPPlayer3Static1] +X = 20 +Y = 400 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPPlayer3Static2] +X = 20 +Y = 425 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[EditSubVideoGap] -X = 510 -Y = 270 -W = 100 -H = 20 -SkipX = 10 -TextSize = 16 -Text = EDIT_VIDEOGAP -Tex = MainBar -Type = Transparent -TexSBG = MainBar -TypeSBG = Transparent -ShowArrows = 0 -SBGW = 100 -Align = 0 +[ScoreFourPPlayer3Static3] +X = 20 +Y = 450 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark - -[EditSubSelectVolAudio] -TexSBG = SelectBG -Text = EDIT_VOLUME_AUDIO -Type = Transparent -TypeSBG = Transparent -X = 580 -Y = 545 -W = 250 -H = 16 -TextSize = 14 -SkipX = -150 -ShowArrows = 1 -OneItemOnly = 1 -SBGW = 100 +[ScoreFourPPlayer3Static4] +X = 20 +Y = 475 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White +#ScoreBar +[ScoreFourPStaticBackLevel3] +Tex = ScoreLevel +X = 294 +Y = 382 +W = 95 +H = 118 +Color = P3Lightest +Type = Colorized -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPStaticBackLevelRound3] +Tex = ScoreLevelRound +X = 294 +Y = 375 +W = 95 +H = 10 +Color = P3Lightest +Type = Colorized -[EditSubSelectVolMidi] -TexSBG = SelectBG -Text = EDIT_VOLUME_MIDI -Type = Transparent -TypeSBG = Transparent -X = 580 -Y = 562 -W = 0 -H = 16 -TextSize = 14 -SkipX = 100 -ShowArrows = 1 -OneItemOnly = 1 -SBGW = 100 +[ScoreFourPStaticLevel3] +Tex = ScoreLevel +X = 294 +Y = 385 +W = 95 +H = 8 +Color = P3Dark +Type = Colorized -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPStaticLevelRound3] +Tex = ScoreLevelRound +X = 294 +Y = 385 +W = 95 +H = 8 +Color = P3Dark +Type = Colorized -[EditSubSelectVolClick] -TexSBG = SelectBG -Text = EDIT_VOLUME_CLICK +[ScoreFourPPlayer3Static5] +Tex = ScoreEndCap +X = 290 +Y = 500 +W = 110 +H = 30 +Z = 0.9 +Color = P3Dark +Type = Colorized +Reflection = 1 +ReflectionSpacing = 0 + +[ScoreFourPPlayer3Static6] +Tex = ScoreGlassBox +X = 290 +Y = 360 +W = 113 +H = 140 +Z = 0.89 +Color = White Type = Transparent -TypeSBG = Transparent -X = 580 -Y = 579 -W = 0 -H = 16 -TextSize = 14 -SkipX = 100 -ShowArrows = 1 -OneItemOnly = 1 -SBGW = 100 -DColor = ColorDark -Color = ColorLight -TColor = White -TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight -STColor = White -STDColor = GrayDark +[ScoreFourPPlayer3Avatar] +X = 24 +Y = 335 +W = 36 +H = 50 +Z = 1 -[EditSubBackgroundImage] -X = 510 -Y = 60 -W = 250 -H = 205 -Z = 0.95 -Color = Red -Tex = prevbackground +[ScoreFourPPlayer3Static7] +X = 20 +Y = 330 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 +Color = P3Dark Type = Transparent -Reflection = 0 -ReflectionSpacing = 22 -[EditSubButtonCurrentLine] -X = 20 -Y = 10 -Z = 0.97 -W = 110 -H = 20 -Size = 20 +# P L A Y E R F O U R +[ScoreFourPTextName4] +X = 595 +Y = 360 Font = 1 -Align = 1 -Color = ColorLight -DColor = ColorLight -Tex = Leiste1 -Type = Colorized -Texts = 1 - -[EditSubButtonCurrentLineText1] -X = 55 -Y = 2 +Size = 32 +Align = 0 +Text = P4 Color = White -Font = 1 -Size = 18 -Align = 1 -[EditSubButtonCurrentNote] -X = 140 -Y = 10 -Z = 0.97 -W = 110 -H = 20 -Size = 20 -Font = 1 -Align = 1 -Color = ColorLight -DColor = ColorLight -Tex = Leiste1 -Type = Colorized -Texts = 1 +# Rating +[ScoreFourPStaticRatingPicture4] +X = 435 +Y = 380 +H = 55 +W = 55 -[EditSubButtonCurrentNoteText1] -X = 55 -Y = 2 +[ScoreFourPTextScore4] +X = 460 +Y = 440 +W = 100 Color = White -Font = 1 -Size = 18 +Font = 0 +Size = 24 +Text = Tone Deaf Align = 1 -[EditSubBarStatic1] -Tex = PlayOnly -X = 350 -Y = 245 -W = 24 -H = 24 -Type = Transparent -Color = ColorLight -Reflection = 0 -ReflectionSpacing = 31 +[ScoreFourPTextNotes4] +X = 565 +Y = 400 +Font = 0 +Size = 26 +Align = 0 +Text = SING_NOTES +Color = White -[EditSubBarStatic2] -Tex = playwithnote -X = 376 -Y = 245 -W = 24 -H = 24 -Type = Transparent -Color = ColorLight -Reflection = 0 -ReflectionSpacing = 31 +[ScoreFourPTextNotesScore4] +X = 780 +Y = 400 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[EditSubBarStatic3] -Tex = playnote -X = 402 -Y = 245 -W = 24 -H = 24 -Type = Transparent -Color = ColorLight -Reflection = 0 -ReflectionSpacing = 31 - -[EditSubBarStatic4] -Tex = previousseq -X = 363 -Y = 219 -W = 24 -H = 24 -Type = Transparent -Color = ColorLight -Reflection = 0 -ReflectionSpacing = 31 +[ScoreFourPTextLineBonus4] +X = 565 +Y = 425 +Font = 0 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS +Color = White -[EditSubBarStatic5] -Tex = nextseq -X = 389 -Y = 219 -W = 24 -H = 24 -Type = Transparent -Color = ColorLight -Reflection = 0 -ReflectionSpacing = 31 +[ScoreFourPTextLineBonusScore4] +X = 780 +Y = 425 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[EditSubBarStatic6] -Tex = gold -X = 440 -Y = 219 -W = 24 -H = 24 -Type = Transparent -Color = ColorLight -Reflection = 0 -ReflectionSpacing = 31 +[ScoreFourPTextGoldenNotes4] +X = 565 +Y = 450 +Font = 0 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES +Color = White -[EditSubBarStatic7] -Tex = freestyle -X = 440 -Y = 245 -W = 24 -H = 24 -Type = Transparent -Color = ColorLight -Reflection = 0 -ReflectionSpacing = 31 +[ScoreFourPTextGoldenNotesScore4] +X = 780 +Y = 450 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[EditSubBarStatic8] -Tex = undo -X = 320 -Y = 219 -W = 24 -H = 24 -Type = Transparent -Color = ColorLight -Reflection = 0 -ReflectionSpacing = 31 +[ScoreFourPStaticBoxDark4] +Tex = ScoreBar_box_dark +X = 540 +Y = 405 +W = 22 +H = 20 +Color = P4Dark +Type = Colorized -################################## -########## Duet ########## -################################## +[ScoreFourPStaticBoxLight4] +Tex = ScoreBar_box_light +X = 540 +Y = 430 +W = 22 +H = 20 +Color = P4Light +Type = Colorized -[SingLyricsDuetP2UpperBar] -X = 80 -W = 640 -Y = 493 -H = 41 -;YOffSet (+/-) for the Sing-Indicator -IndicatorYOffset = 3 +[ScoreFourPStaticBoxLightest4] +Tex = ScoreBar_box_lightest +X = 540 +Y = 455 +W = 22 +H = 20 +Color = P4Lightest +Type = Colorized -[SingLyricsDuetP2LowerBar] -X = 80 -W = 640 -Y = 535 -H = 41 +[ScoreFourPTextTotal4] +X = 565 +Y = 500 +Font = 0 +Size = 30 +Align = 0 +Text = SING_TOTAL +Color = White -[SingLyricsDuetP1UpperBar] -X = 80 -W = 640 -Y = 7 -H = 41 -;YOffSet (+/-) for the Sing-Indicator -IndicatorYOffset = 3 +[ScoreFourPTextTotalScore4] +X = 780 +Y = 495 +Font = 0 +Size = 42 +Align = 2 +Text = 00000 +Color = White -[SingLyricsDuetP1LowerBar] -X = 80 -W = 640 -Y = 49 -H = 41 +#lines +[ScoreFourPPlayer4Static1] +X = 540 +Y = 400 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SingStaticDuet1] -Tex = LyricBarDuet -X = 10 -Y = 5 -W = 780 -H = 85 +[ScoreFourPPlayer4Static2] +X = 540 +Y = 425 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -Type = Transparent -# T H R E E P L A Y E R D U E T M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingDuetP1ThreePStatic] -X = 12 -Y = 99 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P1Dark -Type = Transparent -Alpha = 1 +[ScoreFourPPlayer4Static3] +X = 540 +Y = 450 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SingDuetP1ThreePText] -Text = PLAYERNAME -X = 58 -Y = 118 -Font = 1 -Size = 18 +[ScoreFourPPlayer4Static4] +X = 540 +Y = 475 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -Align = 0 -[SingDuetP1ThreePStatic2] -X = 710 -Y = 100 -W = 80 -H = 25 +#ScoreBar +[ScoreFourPStaticBackLevel4] +Tex = ScoreLevel +X = 414 +Y = 382 +W = 95 +H = 118 +Color = P4Lightest +Type = Colorized + +[ScoreFourPStaticBackLevelRound4] +Tex = ScoreLevelRound +X = 414 +Y = 375 +W = 95 +H = 8 +Color = P4Lightest +Type = Colorized -[SingDuetP1ThreePTextScore] -X = 725 -Y = 102 -Font = 0 -Size = 24 +[ScoreFourPStaticLevel4] +Tex = ScoreLevel +X = 414 +Y = 400 +W = 95 +H = 10 +Color = P4Dark +Type = Colorized -[SingDuetP1ThreePSingBar] -X = 710 -Y = 125 -W = 80 -H = 6 +[ScoreFourPStaticLevelRound4] +Tex = ScoreLevelRound +X = 414 +Y = 392 +W = 95 +H = 8 +Color = P4Dark +Type = Colorized -[SingDuetP1ThreePAvatar] -X = 15 -Y = 102 -W = 31 -H = 31 -Z = 1 -Alpha = 1 - -#Player Two -[SingDuetP2MStatic] -X = 12 -Y = 224 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P2Dark -Type = Transparent -Alpha = 1 +[ScoreFourPPlayer4Static5] +Tex = ScoreEndCap +X = 410 +Y = 500 +W = 110 +H = 30 +Z = 0.9 +Color = P4Dark +Type = Colorized +Reflection = 1 +ReflectionSpacing = 0 -[SingDuetP2MText] -Text = PLAYERNAME -X = 58 -Y = 243 -Font = 1 -Size = 18 +[ScoreFourPPlayer4Static6] +Tex = ScoreGlassBox +X = 410 +Y = 360 +W = 113 +H = 140 +Z = 0.89 Color = White -Align = 0 - -[SingDuetP2MStatic2] -X = 710 -Y = 225 -W = 80 -H = 25 - -[SingDuetP2MTextScore] -X = 725 -Y = 227 -Font = 0 -Size = 24 - -[SingDuetP2MSingBar] -X = 710 -Y = 250 -W = 80 -H = 6 +Type = Transparent -[SingDuetP2MAvatar] -X = 15 -Y = 227 -W = 31 -H = 31 +[ScoreFourPPlayer4Avatar] +X = 544 +Y = 335 +W = 36 +H = 50 Z = 1 -Alpha = 1 -#Player Three -[SingDuetP3RStatic] -X = 12 -Y = 349 -W = 37 -H = 37 +[ScoreFourPPlayer4Static7] +X = 540 +Y = 330 +W = 45 +H = 60 +Z = 0.9 Tex = AvatarFrame2 -Color = P3Dark +Color = P4Dark Type = Transparent -Alpha = 1 -[SingDuetP3RText] -Text = PLAYERNAME -X = 58 -Y = 368 +################################################# +## ## +## Six Player Score One Screen ## +## ## +################################################# +# P L A Y E R O N E +[ScoreSixPTextName1] +X = 75 +Y = 135 Font = 1 -Size = 18 -Color = White +Size = 32 Align = 0 +Text = P1 +Color = White -[SingDuetP3RStatic2] -X = 710 -Y = 350 -W = 80 -H = 25 - -[SingDuetP3RTextScore] -X = 725 -Y = 352 +[ScoreSixPTextNotes1] +X = 20 +Y = 180 Font = 0 -Size = 24 - -[SingDuetP3RSingBar] -X = 710 -Y = 375 -W = 80 -H = 6 - -[SingDuetP3RAvatar] -X = 15 -Y = 352 -W = 31 -H = 31 -Z = 1 -Alpha = 1 - -##################### -### screen song ### -##################### - -[SongRouletteStatic2PlayersDuetSingerP1] -X = 535 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger +Size = 26 +Align = 0 +Text = SING_NOTES +Color = White -[SongRouletteText2PlayersDuetSingerP1] -X = 612 -Y = 420 +[ScoreSixPTextNotesScore1] +X = 260 +Y = 180 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongRouletteStatic2PlayersDuetSingerP2] -X = 535 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 - -[SongRouletteText2PlayersDuetSingerP2] -X = 612 -Y = 450 +[ScoreSixPTextLineBonus1] +X = 20 +Y = 205 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS Color = White -[SongRouletteStatic3PlayersDuetSingerP1] -X = 535 -Y = 385 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger - -[SongRouletteText3PlayersDuetSingerP1] -X = 612 -Y = 390 +[ScoreSixPTextLineBonusScore1] +X = 260 +Y = 205 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongRouletteStatic3PlayersDuetSingerP2] -X = 535 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger3 -Reflection = 1 -ReflectionSpacing = 1 - -[SongRouletteText3PlayersDuetSingerP2] -X = 612 -Y = 420 +[ScoreSixPTextGoldenNotes1] +X = 20 +Y = 230 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES Color = White -[SongRouletteStatic3PlayersDuetSingerP3] -X = 535 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextGoldenNotesScore1] +X = 260 +Y = 230 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[SongRouletteText3PlayersDuetSingerP3] -X = 612 -Y = 450 +[ScoreSixPTextTotal1] +X = 20 +Y = 280 Font = 0 -Size = 20 -Align = 1 +Size = 30 +Align = 0 +Text = SING_TOTAL Color = White -[SongRouletteStatic4PlayersDuetSingerP3] -X = 545 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger +[ScoreSixPTextTotalScore1] +X = 260 +Y = 275 +Font = 0 +Size = 42 +Align = 2 +Text = 00000 +Color = White -[SongRouletteStatic4PlayersDuetSingerP4] -X = 545 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger2 +#lines +[ScoreSixPPlayer1Static1] +X = 20 +Y = 180 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongRouletteStatic6PlayersDuetSingerP4] -X = 545 -Y = 385 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger +[ScoreSixPPlayer1Static2] +X = 20 +Y = 205 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongRouletteStatic6PlayersDuetSingerP5] -X = 545 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P5Dark -Tex = SongDuetSinger3 +[ScoreSixPPlayer1Static3] +X = 20 +Y = 230 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongRouletteStatic6PlayersDuetSingerP6] -X = 545 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P6Dark -Tex = SongDuetSinger2 +[ScoreSixPPlayer1Static4] +X = 20 +Y = 255 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -##################### +[ScoreSixPPlayer1Avatar] +X = 24 +Y = 115 +W = 36 +H = 50 +Z = 1 -[SongCarouselStatic2PlayersDuetSingerP1] -X = 535 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent +[ScoreSixPPlayer1Static5] +X = 20 +Y = 110 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 Color = P1Dark -Tex = SongDuetSinger +Type = Transparent -[SongCarouselText2PlayersDuetSingerP1] -X = 612 -Y = 420 -Font = 0 -Size = 20 -Align = 1 + +# P L A Y E R T W O +[ScoreSixPTextName2] +X = 335 +Y = 135 +Font = 1 +Size = 32 +Align = 0 +Text = P2 Color = White -[SongCarouselStatic2PlayersDuetSingerP2] -X = 535 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextNotes2] +X = 280 +Y = 180 +Font = 0 +Size = 26 +Align = 0 +Text = SING_NOTES +Color = White -[SongCarouselText2PlayersDuetSingerP2] -X = 612 -Y = 450 +[ScoreSixPTextNotesScore2] +X = 520 +Y = 180 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongCarouselStatic3PlayersDuetSingerP1] -X = 535 -Y = 385 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger +[ScoreSixPTextLineBonus2] +X = 280 +Y = 205 +Font = 0 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS +Color = White -[SongCarouselText3PlayersDuetSingerP1] -X = 612 -Y = 390 +[ScoreSixPTextLineBonusScore2] +X = 520 +Y = 205 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongCarouselStatic3PlayersDuetSingerP2] -X = 535 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger3 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextGoldenNotes2] +X = 280 +Y = 230 +Font = 0 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES +Color = White -[SongCarouselText3PlayersDuetSingerP2] -X = 612 -Y = 420 +[ScoreSixPTextGoldenNotesScore2] +X = 520 +Y = 230 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongCarouselStatic3PlayersDuetSingerP3] -X = 535 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextTotal2] +X = 280 +Y = 280 +Font = 0 +Size = 30 +Align = 0 +Text = SING_TOTAL +Color = White -[SongCarouselText3PlayersDuetSingerP3] -X = 612 -Y = 450 +[ScoreSixPTextTotalScore2] +X = 520 +Y = 275 Font = 0 -Size = 20 -Align = 1 +Size = 42 +Align = 2 +Text = 00000 Color = White -[SongCarouselStatic4PlayersDuetSingerP3] -X = 545 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger +#lines +[ScoreSixPPlayer2Static1] +X = 280 +Y = 180 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongCarouselStatic4PlayersDuetSingerP4] -X = 545 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger2 +[ScoreSixPPlayer2Static2] +X = 280 +Y = 205 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongCarouselStatic6PlayersDuetSingerP4] -X = 545 -Y = 385 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger +[ScoreSixPPlayer2Static3] +X = 280 +Y = 230 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongCarouselStatic6PlayersDuetSingerP5] -X = 545 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P5Dark -Tex = SongDuetSinger3 +[ScoreSixPPlayer2Static4] +X = 280 +Y = 255 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongCarouselStatic6PlayersDuetSingerP6] -X = 545 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P6Dark -Tex = SongDuetSinger2 -################################## +[ScoreSixPPlayer2Avatar] +X = 284 +Y = 115 +W = 36 +H = 50 +Z = 1 -[SongSlotMachineStatic2PlayersDuetSingerP1] -X = 295 -Y = 435 -W = 154 -H = 30 -Z = 0.95 +[ScoreSixPPlayer2Static5] +X = 280 +Y = 110 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 +Color = P2Dark Type = Transparent -Color = P1Dark -Tex = SongDuetSinger -[SongSlotMachineText2PlayersDuetSingerP1] -X = 372 -Y = 440 -Font = 0 -Size = 20 -Align = 1 +# P L A Y E R T H R E E +[ScoreSixPTextName3] +X = 595 +Y = 135 +Font = 1 +Size = 32 +Align = 0 +Text = P2 Color = White -[SongSlotMachineStatic2PlayersDuetSingerP2] -X = 295 -Y = 465 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextNotes3] +X = 540 +Y = 180 +Font = 0 +Size = 26 +Align = 0 +Text = SING_NOTES +Color = White -[SongSlotMachineText2PlayersDuetSingerP2] -X = 372 -Y = 470 +[ScoreSixPTextNotesScore3] +X = 780 +Y = 180 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongSlotMachineStatic3PlayersDuetSingerP1] -X = 295 -Y = 425 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger +[ScoreSixPTextLineBonus3] +X = 540 +Y = 205 +Font = 0 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS +Color = White -[SongSlotMachineText3PlayersDuetSingerP1] -X = 372 -Y = 430 +[ScoreSixPTextLineBonusScore3] +X = 780 +Y = 205 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongSlotMachineStatic3PlayersDuetSingerP2] -X = 295 -Y = 455 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger3 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextGoldenNotes3] +X = 540 +Y = 230 +Font = 0 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES +Color = White -[SongSlotMachineText3PlayersDuetSingerP2] -X = 372 -Y = 460 +[ScoreSixPTextGoldenNotesScore3] +X = 780 +Y = 230 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongSlotMachineStatic3PlayersDuetSingerP3] -X = 295 -Y = 485 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextTotal3] +X = 540 +Y = 280 +Font = 0 +Size = 30 +Align = 0 +Text = SING_TOTAL +Color = White -[SongSlotMachineText3PlayersDuetSingerP3] -X = 372 -Y = 490 +[ScoreSixPTextTotalScore3] +X = 780 +Y = 275 Font = 0 -Size = 20 -Align = 1 +Size = 42 +Align = 2 +Text = 00000 Color = White -[SongSlotMachineStatic4PlayersDuetSingerP3] -X = 305 -Y = 435 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger +#lines +[ScoreSixPPlayer3Static1] +X = 540 +Y = 180 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongSlotMachineStatic4PlayersDuetSingerP4] -X = 305 -Y = 465 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger2 +[ScoreSixPPlayer3Static2] +X = 540 +Y = 205 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongSlotMachineStatic6PlayersDuetSingerP4] -X = 305 -Y = 425 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger +[ScoreSixPPlayer3Static3] +X = 540 +Y = 230 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongSlotMachineStatic6PlayersDuetSingerP5] -X = 305 -Y = 455 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P5Dark -Tex = SongDuetSinger3 +[ScoreSixPPlayer3Static4] +X = 540 +Y = 255 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongSlotMachineStatic6PlayersDuetSingerP6] -X = 305 -Y = 485 -W = 154 -H = 30 -Z = 0.95 +[ScoreSixPPlayer3Avatar] +X = 544 +Y = 115 +W = 36 +H = 50 +Z = 1 + +[ScoreSixPPlayer3Static5] +X = 540 +Y = 110 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 +Color = P3Dark Type = Transparent -Color = P6Dark -Tex = SongDuetSinger2 +# P L A Y E R F O U R +[ScoreSixPTextName4] +X = 75 +Y = 355 +Font = 1 +Size = 32 +Align = 0 +Text = P1 +Color = White -############################# +[ScoreSixPTextNotes4] +X = 20 +Y = 400 +Font = 0 +Size = 26 +Align = 0 +Text = SING_NOTES +Color = White -[SongSlideStatic2PlayersDuetSingerP1] -X = 535 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger +[ScoreSixPTextNotesScore4] +X = 260 +Y = 400 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[SongSlideText2PlayersDuetSingerP1] -X = 612 -Y = 420 +[ScoreSixPTextLineBonus4] +X = 20 +Y = 425 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS Color = White -[SongSlideStatic2PlayersDuetSingerP2] -X = 535 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextLineBonusScore4] +X = 260 +Y = 425 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[SongSlideText2PlayersDuetSingerP2] -X = 612 +[ScoreSixPTextGoldenNotes4] +X = 20 Y = 450 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES Color = White -[SongSlideStatic3PlayersDuetSingerP1] -X = 535 -Y = 385 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger - -[SongSlideText3PlayersDuetSingerP1] -X = 612 -Y = 390 +[ScoreSixPTextGoldenNotesScore4] +X = 260 +Y = 450 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongSlideStatic3PlayersDuetSingerP2] -X = 535 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger3 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextTotal4] +X = 20 +Y = 500 +Font = 0 +Size = 30 +Align = 0 +Text = SING_TOTAL +Color = White -[SongSlideText3PlayersDuetSingerP2] -X = 612 -Y = 420 +[ScoreSixPTextTotalScore4] +X = 260 +Y = 495 Font = 0 -Size = 20 -Align = 1 +Size = 42 +Align = 2 +Text = 00000 Color = White -[SongSlideStatic3PlayersDuetSingerP3] -X = 535 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +#lines +[ScoreSixPPlayer4Static1] +X = 20 +Y = 400 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongSlideText3PlayersDuetSingerP3] -X = 612 +[ScoreSixPPlayer4Static2] +X = 20 +Y = 425 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White + +[ScoreSixPPlayer4Static3] +X = 20 Y = 450 -Font = 0 -Size = 20 -Align = 1 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized Color = White -[SongSlideStatic4PlayersDuetSingerP3] -X = 545 -Y = 415 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger +[ScoreSixPPlayer4Static4] +X = 20 +Y = 475 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongSlideStatic4PlayersDuetSingerP4] -X = 545 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger2 +[ScoreSixPPlayer4Avatar] +X = 24 +Y = 337 +W = 36 +H = 50 +Z = 1 -[SongSlideStatic6PlayersDuetSingerP4] -X = 545 -Y = 385 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent +[ScoreSixPPlayer4Static5] +X = 20 +Y = 332 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 Color = P4Dark -Tex = SongDuetSinger - -[SongSlideStatic6PlayersDuetSingerP5] -X = 545 -Y = 415 -W = 154 -H = 30 -Z = 0.95 Type = Transparent -Color = P5Dark -Tex = SongDuetSinger3 -[SongSlideStatic6PlayersDuetSingerP6] -X = 545 -Y = 445 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P6Dark -Tex = SongDuetSinger2 - - -############################# - -[SongListStatic2PlayersDuetSingerP1] -X = 553 -Y = 240 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger +# P L A Y E R F I V E +[ScoreSixPTextName5] +X = 335 +Y = 355 +Font = 1 +Size = 32 +Align = 0 +Text = P5 +Color = White -[SongListText2PlayersDuetSingerP1] -X = 630 -Y = 245 +[ScoreSixPTextNotes5] +X = 280 +Y = 400 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_NOTES Color = White -[SongListStatic2PlayersDuetSingerP2] -X = 553 -Y = 270 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 - -[SongListText2PlayersDuetSingerP2] -X = 630 -Y = 275 +[ScoreSixPTextNotesScore5] +X = 520 +Y = 400 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 2 +Text = 0000 Color = White -[SongListStatic3PlayersDuetSingerP1] -X = 553 -Y = 235 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger - -[SongListText3PlayersDuetSingerP1] -X = 630 -Y = 240 +[ScoreSixPTextLineBonus5] +X = 280 +Y = 425 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS Color = White -[SongListStatic3PlayersDuetSingerP2] -X = 553 -Y = 265 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger3 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextLineBonusScore5] +X = 520 +Y = 425 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[SongListText3PlayersDuetSingerP2] -X = 630 -Y = 270 +[ScoreSixPTextGoldenNotes5] +X = 280 +Y = 450 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES Color = White -[SongListStatic3PlayersDuetSingerP3] -X = 553 -Y = 295 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextGoldenNotesScore5] +X = 520 +Y = 450 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[SongListText3PlayersDuetSingerP3] -X = 630 -Y = 300 +[ScoreSixPTextTotal5] +X = 280 +Y = 500 Font = 0 -Size = 20 -Align = 1 +Size = 30 +Align = 0 +Text = SING_TOTAL Color = White -[SongListStatic4PlayersDuetSingerP3] -X = 565 -Y = 240 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger +[ScoreSixPTextTotalScore5] +X = 520 +Y = 495 +Font = 0 +Size = 42 +Align = 2 +Text = 00000 +Color = White -[SongListStatic4PlayersDuetSingerP4] -X = 565 -Y = 270 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger2 +#lines +[ScoreSixPPlayer5Static1] +X = 280 +Y = 400 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongListStatic6PlayersDuetSingerP4] -X = 565 -Y = 235 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger +[ScoreSixPPlayer5Static2] +X = 280 +Y = 425 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongListStatic6PlayersDuetSingerP5] -X = 565 -Y = 265 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P5Dark -Tex = SongDuetSinger3 +[ScoreSixPPlayer5Static3] +X = 280 +Y = 450 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongListStatic6PlayersDuetSingerP6] -X = 565 -Y = 295 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P6Dark -Tex = SongDuetSinger2 +[ScoreSixPPlayer5Static4] +X = 280 +Y = 475 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -############################# +[ScoreSixPPlayer5Avatar] +X = 284 +Y = 337 +W = 36 +H = 50 +Z = 1 -[SongChessboardStatic2PlayersDuetSingerP1] -X = 310 -Y = 435 -W = 154 -H = 30 -Z = 0.95 +[ScoreSixPPlayer5Static5] +X = 280 +Y = 332 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 +Color = P5Dark Type = Transparent -Color = P1Dark -Tex = SongDuetSinger -[SongChessboardText2PlayersDuetSingerP1] -X = 387 -Y = 440 -Font = 0 -Size = 20 -Align = 1 +# P L A Y E R S I X +[ScoreSixPTextName6] +X = 595 +Y = 355 +Font = 1 +Size = 32 +Align = 0 +Text = P2 Color = White -[SongChessboardStatic2PlayersDuetSingerP2] -X = 310 -Y = 465 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 - -[SongChessboardText2PlayersDuetSingerP2] -X = 387 -Y = 470 +[ScoreSixPTextNotes6] +X = 540 +Y = 400 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_NOTES Color = White -[SongChessboardStatic3PlayersDuetSingerP1] -X = 310 -Y = 435 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P1Dark -Tex = SongDuetSinger +[ScoreSixPTextNotesScore6] +X = 780 +Y = 400 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[SongChessboardText3PlayersDuetSingerP1] -X = 387 -Y = 440 +[ScoreSixPTextLineBonus6] +X = 540 +Y = 425 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_PHRASE_BONUS Color = White -[SongChessboardStatic3PlayersDuetSingerP2] -X = 310 -Y = 465 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger3 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextLineBonusScore6] +X = 780 +Y = 425 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[SongChessboardText3PlayersDuetSingerP2] -X = 387 -Y = 470 +[ScoreSixPTextGoldenNotes6] +X = 540 +Y = 450 Font = 0 -Size = 20 -Align = 1 +Size = 26 +Align = 0 +Text = SING_GOLDEN_NOTES Color = White -[SongChessboardStatic3PlayersDuetSingerP3] -X = 310 -Y = 495 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +[ScoreSixPTextGoldenNotesScore6] +X = 780 +Y = 450 +Font = 0 +Size = 26 +Align = 2 +Text = 0000 +Color = White -[SongChessboardText3PlayersDuetSingerP3] -X = 387 +[ScoreSixPTextTotal6] +X = 540 Y = 500 Font = 0 -Size = 20 -Align = 1 +Size = 30 +Align = 0 +Text = SING_TOTAL Color = White -[SongChessboardStatic4PlayersDuetSingerP3] -X = 320 -Y = 435 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger +[ScoreSixPTextTotalScore6] +X = 780 +Y = 495 +Font = 0 +Size = 42 +Align = 2 +Text = 00000 +Color = White -[SongChessboardStatic4PlayersDuetSingerP4] -X = 320 -Y = 465 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger2 +#lines +[ScoreSixPPlayer6Static1] +X = 540 +Y = 400 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongChessboardStatic6PlayersDuetSingerP4] -X = 320 -Y = 435 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger +[ScoreSixPPlayer6Static2] +X = 540 +Y = 425 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongChessboardStatic6PlayersDuetSingerP5] -X = 320 -Y = 465 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P5Dark -Tex = SongDuetSinger3 +[ScoreSixPPlayer6Static3] +X = 540 +Y = 450 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White -[SongChessboardStatic6PlayersDuetSingerP6] -X = 320 -Y = 495 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent +[ScoreSixPPlayer6Static4] +X = 540 +Y = 475 +W = 240 +H = 1 +Tex = ScoreLine +Type = Colorized +Color = White + +[ScoreSixPPlayer6Avatar] +X = 544 +Y = 337 +W = 36 +H = 50 +Z = 1 + +[ScoreSixPPlayer6Static5] +X = 540 +Y = 332 +W = 45 +H = 60 +Z = 0.9 +Tex = AvatarFrame2 Color = P6Dark -Tex = SongDuetSinger2 +Type = Transparent -############################# +############################ +# Send Score 1 Player # +############################ -[SongMosaicStatic2PlayersDuetSingerP1] -X = 565 -Y = 435 -W = 154 +[ScoreButtonSend1] +X = 200 +Y = 505 +W = 180 H = 30 -Z = 0.95 +Tex = ButtonSendScore +DColor = ColorLight +Color = ColorDark Type = Transparent -Color = P1Dark -Tex = SongDuetSinger +Texts = 1 -[SongMosaicText2PlayersDuetSingerP1] -X = 642 -Y = 440 +[ScoreButtonSend1Text1] +X = 90 +Y = 4 Font = 0 -Size = 20 +Size = 24 Align = 1 Color = White +Text = SCORE_SEND_DESC -[SongMosaicStatic2PlayersDuetSingerP2] -X = 565 -Y = 465 -W = 154 +############################ +# Send Score 2/4 Players # +############################ + +[ScoreButtonSend2] +X = 310 +Y = 100 +W = 180 H = 30 -Z = 0.95 +Z = 1 +Tex = ButtonSendScore +DColor = ColorLight +Color = ColorDark Type = Transparent -Color = P2Dark -Tex = SongDuetSinger2 -Reflection = 1 -ReflectionSpacing = 1 +Texts = 1 -[SongMosaicText2PlayersDuetSingerP2] -X = 642 -Y = 470 -Font = 0 -Size = 20 +[ScoreButtonSend2Text1] +X = 90 +Y = 4 +Font = 0 +Size = 24 Align = 1 Color = White +Text = SCORE_SEND_DESC -[SongMosaicStatic3PlayersDuetSingerP1] -X = 565 -Y = 420 -W = 154 +############################ +# Send Score 3/6 Players # +############################ + +[ScoreButtonSend3] +X = 310 +Y = 100 +W = 180 H = 30 -Z = 0.95 +Z = 1 +Tex = ButtonSendScore +DColor = ColorLight +Color = ColorDark Type = Transparent -Color = P1Dark -Tex = SongDuetSinger +Texts = 1 -[SongMosaicText3PlayersDuetSingerP1] -X = 642 -Y = 425 +[ScoreButtonSend3Text1] +X = 90 +Y = 4 Font = 0 -Size = 20 +Size = 24 Align = 1 Color = White +Text = SCORE_SEND_DESC -[SongMosaicStatic3PlayersDuetSingerP2] -X = 565 -Y = 450 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P2Dark -Tex = SongDuetSinger3 -Reflection = 1 -ReflectionSpacing = 1 +################################ +## Send Score PopUp ## +################################ -[SongMosaicText3PlayersDuetSingerP2] -X = 642 -Y = 455 -Font = 0 -Size = 20 -Align = 1 -Color = White +[SendScorePopup] -[SongMosaicStatic3PlayersDuetSingerP3] -X = 565 -Y = 480 -W = 154 -H = 30 -Z = 0.95 +[SendScorePopupBackground] +Type=Fade +ColR=0 +ColG=0 +ColB=0 +Alpha=0.4 + +[SendScorePopupStatic1] +Tex = interface_dialog_background2 +X = 200 +Y = 150 +W = 400 +H = 280 +Z = 1 +Color = White Type = Transparent -Color = P3Dark -Tex = SongDuetSinger2 Reflection = 1 -ReflectionSpacing = 1 +ReflectionSpacing = 15 -[SongMosaicText3PlayersDuetSingerP3] -X = 642 -Y = 485 +[SendScorePopupText1] +X = 400 +Y = 157 +W = 400 +Color = ColorLight Font = 0 -Size = 20 +Size = 30 Align = 1 -Color = White - -[SongMosaicStatic4PlayersDuetSingerP3] -X = 575 -Y = 435 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P3Dark -Tex = SongDuetSinger +Z = 1 -[SongMosaicStatic4PlayersDuetSingerP4] -X = 575 -Y = 465 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger2 +[SendScorePopupSelectSlide1] +Text = SCORE_SEND_PLAYER +TexSBG = Rectangle +TypeSBG = Colorized +ShowArrows = 1 +OneItemOnly = 1 +X = 220 +Y = 220 +W = 120 +H = 25 +Z = 1 +SkipX = 10 +SBGW = 220 +TextSize = 24 +Color = ColorLight +DColor = ColorDark +TColor = White +TDColor = White +SBGColor = ColorLight +SBGDColor = ColorDark +STColor = White +STDColor = White -[SongMosaicStatic6PlayersDuetSingerP4] -X = 575 -Y = 420 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P4Dark -Tex = SongDuetSinger +[SendScorePopupSelectSlide2] +Text = SING_OPTIONS_NETWORK_WEBSITE +TexSBG = Rectangle +TypeSBG = Colorized +ShowArrows = 1 +OneItemOnly = 1 +X = 220 +Y = 250 +W = 120 +H = 25 +Z = 1 +SkipX = 10 +SBGW = 220 +TextSize = 24 +Color = ColorLight +DColor = ColorDark +TColor = White +TDColor = White +SBGColor = ColorLight +SBGDColor = ColorDark +STColor = White +STDColor = White -[SongMosaicStatic6PlayersDuetSingerP5] -X = 575 -Y = 450 -W = 154 -H = 30 -Z = 0.95 -Type = Transparent -Color = P5Dark -Tex = SongDuetSinger3 +[SendScorePopupSelectSlide3] +Text = SING_OPTIONS_NETWORK_USERNAME +TexSBG = Rectangle +TypeSBG = Colorized +ShowArrows = 1 +OneItemOnly = 1 +X = 220 +Y = 280 +W = 120 +H = 25 +Z = 1 +SkipX = 10 +SBGW = 220 +TextSize = 24 +Color = ColorLight +DColor = ColorDark +TColor = White +TDColor = White +SBGColor = ColorLight +SBGDColor = ColorDark +STColor = White +STDColor = White -[SongMosaicStatic6PlayersDuetSingerP6] -X = 575 -Y = 480 -W = 154 -H = 30 -Z = 0.95 +[SendScorePopupButtonUsername] +X = 380 +Y = 320 +W = 160 +H = 25 +Tex = Button +Color = GrayLight +DColor = GrayDark Type = Transparent -Color = P6Dark -Tex = SongDuetSinger2 +Texts = 2 +Z = 1 -############################# +[SendScorePopupButtonUsernameText1] +X = 5 +Y = 0 +Color = Black +Font = 0 +Size = 24 +Align = 0 +Z = 1 -############################# -## ## -## 4/6 Players One Screen ## -## ## -############################# +[SendScorePopupButtonUsernameText2] +X = -120 +Y = 0 +Text=SING_OPTIONS_NETWORK_USERNAME +Color = White +Font = 0 +Size = 24 +Align = 0 +Z = 1 -# FOUR P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1FourPStatic] -X = 20 -Y = 55 -W = 50 -H = 50 -Tex = AvatarFrame2 -Color = P1Dark +[SendScorePopupButtonPassword] +X = 380 +Y = 350 +W = 160 +H = 25 +Tex = Button +Color = GrayLight +DColor = GrayDark Type = Transparent -Alpha = 1 - -#[SingP1FourPText] -#Text = PLAYERNAME -#X = 25 -#Y = 122 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 - -[SingP1FourPStatic2] -Tex = ScoreBG -X = 80 -Y = 61 -W = 100 -H = 36 -Color = P1Dark -Type = Colorized +Texts = 2 +Z = 1 -[SingP1FourPTextScore] -Text = 00000 -X = 98 -Y = 63 +[SendScorePopupButtonPasswordText1] +X = 5 +Y = 0 +Color = Black Font = 0 -Size = 30 -Color = White +Size = 24 Align = 0 - -[SingP1FourPSingBar] -X = 80 -Y = 95 -W = 100 -H = 8 - -[SingP1FourPAvatar] -X = 24 -Y = 59 -W = 42 -H = 42 Z = 1 -Alpha = 1 - -#Player Two -[SingP2FourPStatic] -X = 220 -Y = 55 -W = 50 -H = 50 -Tex = AvatarFrame2 -Color = P2Dark -Type = Transparent -Alpha = 1 -#[SingP2FourPText] -#Text = PLAYERNAME -#X = 24 -#Y = 302 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[SendScorePopupButtonPasswordText2] +X = -120 +Y = 0 +Text=SING_OPTIONS_NETWORK_PASSWORD +Color = White +Font = 0 +Size = 24 +Align = 0 +Z = 1 -[SingP2FourPStatic2] -Tex = ScoreBG -X = 280 -Y = 61 +[SendScorePopupButton1] +X = 295 +Y = 390 W = 100 -H = 36 -Color = P2Dark -Type = Colorized +H = 25 +Tex = Button +Color = ColorLight +DColor = ColorDark +Type = Transparent +Texts = 1 +Z = 1 -[SingP2FourPTextScore] -Text = 00000 -X = 298 -Y = 63 -Font = 0 -Size = 30 +[SendScorePopupButton1Text1] +X = 50 +Y = 0 Color = White -Align = 0 +Font = 0 +Size = 24 +Align = 1 +Z = 1 -[SingP2FourPSingBar] -X = 280 -Y = 95 +[SendScorePopupButton2] +X = 405 +Y = 390 W = 100 -H = 8 +H = 25 +Tex = Button +Color = ColorLight +DColor = ColorDark +Type = Transparent +Texts = 1 +Z = 1 -[SingP2FourPAvatar] -X = 224 -Y = 59 -W = 42 -H = 42 +[SendScorePopupButton2Text1] +X = 50 +Y = 0 +Color = White +Font = 0 +Size = 24 +Align = 1 Z = 1 -Alpha = 1 -#Player Three -[SingP3FourPStatic] -X = 420 -Y = 55 -W = 50 -H = 50 -Tex = AvatarFrame2 -Color = P3Dark -Type = Transparent -Alpha = 1 +[ScoreDownloadPopup] -#[SingP3FourPText] -#Text = PLAYERNAME -#X = 395 -#Y = 122 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[ScoreDownloadPopupBackground] +Type=Fade +ColR=0 +ColG=0 +ColB=0 +Alpha=0.4 -[SingP3FourPStatic2] -Tex = ScoreBG -X = 480 -Y = 61 -W = 100 -H = 36 -Color = P3Dark -Type = Colorized +[ScoreDownloadPopupStatic1] +Tex = interface_dialog_background +X = 200 +Y = 150 +W = 400 +H = 200 +Z = 1 +Color = White +Type = Transparent +Reflection = 1 +ReflectionSpacing = 15 -[SingP3FourPTextScore] -Text = 00000 -X = 498 -Y = 63 +[ScoreDownloadPopupText1] +X = 400 +Y = 160 +W = 400 +Color = ColorLight Font = 0 Size = 30 +Text = SCORE_DOWNLOAD_TITLE +Align = 1 +Z = 1 + +[ScoreDownloadPopupSongText] +X = 220 +Y = 210 +W = 280 Color = White +Font = 0 +Size = 30 +Text = song progress Align = 0 +Z = 1 -[SingP3FourPSingBar] -X = 480 -Y = 95 +[ScoreDownloadPopupWebText] +X = 580 +Y = 210 +W = 280 +Color = White +Font = 0 +Size = 30 +Text = web progress +Align = 2 +Z = 1 + +[ScoreDownloadPopupButton1] +X = 350 +Y = 310 W = 100 -H = 8 +H = 25 +Tex = Button +Color = ColorLight +DColor = ColorDark +Type = Transparent +Texts = 1 +Z = 1 -[SingP3FourPAvatar] -X = 424 -Y = 59 -W = 42 -H = 42 +[ScoreDownloadPopupButton1Text1] +X = 50 +Y = 0 +Color = White +Font = 0 +Size = 24 +Text = YES +Align = 1 Z = 1 -Alpha = 1 -#Player Four -[SingP4FourPStatic] -X = 620 -Y = 55 -W = 50 -H = 50 -Tex = AvatarFrame2 -Color = P4Dark +[ScoreDownloadPopupStatic2] +Tex = ProgressBar +X = 219 +Y = 248 +W = 362 +H = 20 +Z = 1 +Color = Gray Type = Transparent -Alpha = 1 -#[SingP4FourPText] -#Text = PLAYERNAME -#X = 395 -#Y = 302 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 - -[SingP4FourPStatic2] -Tex = ScoreBG -X = 680 -Y = 61 -W = 100 -H = 36 -Color = P4Dark -Type = Colorized - -[SingP4FourPTextScore] -Text = 00000 -X = 698 -Y = 63 -Font = 0 -Size = 30 -Color = White -Align = 0 - -[SingP4FourPSingBar] -X = 680 -Y = 95 -W = 100 -H = 8 - -[SingP4FourPAvatar] -X = 624 -Y = 59 -W = 42 -H = 42 +[ScoreDownloadPopupStatic3] +Tex = ProgressBar +X = 219 +Y = 273 +W = 362 +H = 20 Z = 1 -Alpha = 1 - -# SIX P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1SixPStatic] -X = 20 -Y = 100 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P1Dark +Color = Gray Type = Transparent -Alpha = 1 -[SingP1SixPAvatar] -X = 23 -Y = 103 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +[ScoreDownloadPopupProgressSong] +X = 220 +Y = 250 +W = 360 +H = 16 +Color = ColorDark -#[SingP1SixPText] -#Text = PLAYERNAME -#X = 25 -#Y = 100 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[ScoreDownloadPopupProgressWeb] +X = 220 +Y = 275 +W = 360 +H = 16 +Color = ColorDark -[SingP1SixPStatic2] -Tex = ScoreBG -X = 20 -Y = 40 -W = 100 -H = 36 -Color = P1Dark -Type = Colorized +[Top5] +Texts = 1 -[SingP1SixPTextScore] -Text = 00000 -X = 38 -Y = 42 -Font = 0 -Size = 30 +[Top5Background] +Tex = Top5BG + +[Top5Text1] +X = 70 +Y = 6 Color = White +Font = 0 +Size = 60 Align = 0 +Text = SING_TOP_5_CHARTS -[SingP1SixPSingBar] -X = 20 -Y = 76 -W = 100 -H = 8 +[Top5TextArtistTitle] +X = 70 +Y = 59 +Color = White +Font = 0 +Size = 30 +Align = 0 +Text = artist - title -#Player Two -[SingP2SixPStatic] -X = 20 -Y = 227 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P2Dark -Type = Transparent -Alpha = 1 +[Top5Text4] +X = 70 +Y = 83 +Color = White +Font = 0 +Size = 30 +Align = 0 +Text = SING_OPTIONS_GAME_DIFFICULTY -[SingP2SixPAvatar] -X = 23 -Y = 230 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +[Top5TextLevel] +X = 270 +Y = 83 +Color = White +Font = 0 +Size = 30 +Align = 1 +Text = easy -#[SingP2SixPText] -#Text = PLAYERNAME -#X = 25 -#Y = 227 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[Top5Text5] +X = 560 +Y = 552 +Color = Black +Font = 0 +Size = 21 +Align = 0 +Text = SING_TOP_5_CHARTS_SWITCH_DIFFICULTY -[SingP2SixPStatic2] -Tex = ScoreBG +[Top5TextName1] X = 150 -Y = 40 -W = 100 -H = 36 -Color = P2Dark -Type = Colorized - -[SingP2SixPTextScore] -Text = 00000 -X = 168 -Y = 42 -Font = 0 -Size = 30 +Y = 190 Color = White +Font = 0 +Size = 42 Align = 0 +Text = 1. Player1 -[SingP2SixPSingBar] +[Top5TextName2] X = 150 -Y = 75 -W = 100 -H = 8 - -#Player Three -[SingP3SixPStatic] -X = 20 -Y = 352 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P3Dark -Type = Transparent -Alpha = 1 - -[SingP3SixPAvatar] -X = 23 -Y = 355 -W = 31 -H = 31 -Z = 1 -Alpha = 1 - -#[SingP3SixPText] -#Text = PLAYERNAME -#X = 25 -#Y = 352 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +Y = 240 +Color = White +Font = 0 +Size = 42 +Align = 0 +Text = 2. Player2 -[SingP3SixPStatic2] -Tex = ScoreBG -X = 280 -Y = 40 -W = 100 -H = 36 -Color = P3Dark -Type = Colorized +[Top5TextName3] +X = 150 +Y = 290 +Color = White +Font = 0 +Size = 42 +Align = 0 +Text = 3. Player3 -[SingP3SixPTextScore] -Text = 00000 -X = 298 -Y = 42 +[Top5TextName4] +X = 150 +Y = 340 +Color = White Font = 0 -Size = 30 +Size = 42 +Align = 0 +Text = 4. Player4 + +[Top5TextName5] +X = 150 +Y = 390 Color = White +Font = 0 +Size = 42 Align = 0 +Text = 5. Player5 -[SingP3SixPSingBar] -X = 280 -Y = 76 -W = 100 -H = 8 - -#Player Four -[SingP4SixPStatic] -X = 390 -Y = 100 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P4Dark -Type = Transparent -Alpha = 1 - -[SingP4SixPAvatar] -X = 393 -Y = 103 -W = 31 -H = 31 -Z = 1 -Alpha = 1 - -#[SingP4SixPText] -#Text = PLAYERNAME -#X = 395 -#Y = 100 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 - -[SingP4SixPStatic2] -Tex = ScoreBG -X = 410 -Y = 40 -W = 100 -H = 36 -Color = P4Dark -Type = Colorized +[Top5TextScore1] +X = 560 +Y = 190 +Color = White +Font = 0 +Size = 42 +Align = 2 +Text = 00000 -[SingP4SixPTextScore] +[Top5TextScore2] +X = 560 +Y = 240 +Color = White +Font = 0 +Size = 42 +Align = 2 Text = 00000 -X = 428 -Y = 42 + +[Top5TextScore3] +X = 560 +Y = 290 +Color = White Font = 0 -Size = 30 +Size = 42 +Align = 2 +Text = 00000 + +[Top5TextScore4] +X = 560 +Y = 340 Color = White -Align = 0 +Font = 0 +Size = 42 +Align = 2 +Text = 00000 -[SingP4SixPSingBar] -X = 410 -Y = 76 -W = 100 -H = 8 +[Top5TextScore5] +X = 560 +Y = 390 +Color = White +Font = 0 +Size = 42 +Align = 2 +Text = 00000 -#Player Five -[SingP5SixPStatic] -X = 390 -Y = 227 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P5Dark -Type = Transparent -Alpha = 1 -[SingP5SixPAvatar] -X = 393 -Y = 230 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +[Top5TextDate1] +X = 760 +Y = 190 +Color = White +Font = 0 +Size = 42 +Align = 2 +Text = 00000 -#[SingP5SixPText] -#Text = PLAYERNAME -#X = 395 -#Y = 227 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[Top5TextDate2] +X = 760 +Y = 240 +Color = White +Font = 0 +Size = 42 +Align = 2 +Text = 00000 -[SingP5SixPStatic2] -Tex = ScoreBG -X = 540 -Y = 40 -W = 100 -H = 36 -Color = P5Dark -Type = Colorized +[Top5TextDate3] +X = 760 +Y = 290 +Color = White +Font = 0 +Size = 42 +Align = 2 +Text = 00000 -[SingP5SixPTextScore] +[Top5TextDate4] +X = 760 +Y = 340 +Color = White +Font = 0 +Size = 42 +Align = 2 Text = 00000 -X = 558 -Y = 42 + +[Top5TextDate5] +X = 760 +Y = 390 +Color = White Font = 0 -Size = 30 +Size = 42 +Align = 2 +Text = 00000 + +[Top5TextNumber1] +X = 120 +Y = 193 Color = White -Align = 0 +Font = 1 +Size = 27 +Align = 1 +Text = 1 -[SingP5SixPSingBar] -X = 540 -Y = 76 -W = 100 -H = 8 +[Top5TextNumber2] +X = 120 +Y = 243 +Color = White +Font = 1 +Size = 27 +Align = 1 +Text = 2 -#Player Six -[SingP6SixPStatic] -X = 390 -Y = 352 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P6Dark -Type = Transparent -Alpha = 1 +[Top5TextNumber3] +X = 120 +Y = 293 +Color = White +Font = 1 +Size = 27 +Align = 1 +Text = 3 -[SingP6SixPAvatar] -X = 393 -Y = 355 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +[Top5TextNumber4] +X = 120 +Y = 343 +Color = White +Font = 1 +Size = 27 +Align = 1 +Text = 4 -#[SingP6SixPText] -#Text = PLAYERNAME -#X = 395 -#Y = 352 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[Top5TextNumber5] +X = 120 +Y = 393 +Color = White +Font = 1 +Size = 27 +Align = 1 +Text = 5 -[SingP6SixPStatic2] -Tex = ScoreBG -X = 670 -Y = 40 -W = 100 -H = 36 -Color = P6Dark +[Top5StaticNumber1] +Tex = PlayerNumberBox +X = 100 +Y = 186 +W = 40 +H = 40 +Color = ColorDark Type = Colorized -[SingP6SixPTextScore] -Text = 00000 -X = 688 -Y = 42 -Font = 0 -Size = 30 -Color = White -Align = 0 +[Top5StaticNumber2] +Tex = PlayerNumberBox +X = 100 +Y = 236 +W = 40 +H = 40 +Color = ColorDark +Type = Colorized -[SingP6SixPSingBar] -X = 670 -Y = 76 -W = 100 -H = 8 +[Top5StaticNumber3] +Tex = PlayerNumberBox +X = 100 +Y = 286 +W = 40 +H = 40 +Color = ColorDark +Type = Colorized -# FOUR DUET P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1DuetFourPStatic] -X = 20 -Y = 114 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P1Dark -Type = Transparent -Alpha = 1 +[Top5StaticNumber4] +Tex = PlayerNumberBox +X = 100 +Y = 336 +W = 40 +H = 40 +Color = ColorDark +Type = Colorized -#[SingP1DuetFourPText] -#Text = PLAYERNAME -#X = 65 -#Y = 126 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[Top5StaticNumber5] +Tex = PlayerNumberBox +X = 100 +Y = 386 +W = 40 +H = 40 +Color = ColorDark +Type = Colorized -[SingP1DuetFourPStatic2] -Tex = ScoreBG -X = 305 -Y = 117 -W = 80 -H = 25 +############################ +###### P A R T Y ####### +############################ -[SingP1DuetFourPTextScore] -Text = 00000 -X = 320 -Y = 119 -Font = 0 -Size = 24 +[PartyOptions] +Texts = 5 -[SingP1DuetFourPSingBar] -X = 305 -Y = 142 -W = 80 -H = 6 +[PartyOptionsBackground] +Tex = PartyBG -[SingP1DuetFourPAvatar] -X = 23 -Y = 117 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +[PartyOptionsText1] +X = 40 +Y = 20 +Font = 0 +Size = 60 +Color = White +Text = PARTY_MODE -#Player Two -[SingP2DuetFourPStatic] -X = 20 -Y = 294 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P2Dark +[PartyOptionsStatic1] +X = 370 +Y = 552 +Z = 0.75 +W = 20 +H = 23 +Tex = ButtonEnter +Color = White Type = Transparent -Alpha = 1 - -#[SingP2DuetFourPText] -#Text = PLAYERNAME -#X = 64 -#Y = 306 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 - -[SingP2DuetFourPStatic2] -Tex = ScoreBG -X = 305 -Y = 297 -W = 80 -H = 25 -[SingP2DuetFourPTextScore] -Text = 00000 -X = 320 -Y = 299 +[PartyOptionsText2] +X = 395 +Y = 552 +Color = White Font = 0 -Size = 24 - -[SingP2DuetFourPSingBar] -X = 305 -Y = 322 -W = 80 -H = 6 - -[SingP2DuetFourPAvatar] -X = 23 -Y = 297 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +Size = 21 +Align = 0 +Text = SING_LEGEND_CONTINUE -#Player Three -[SingP3DuetFourPStatic] -X = 390 -Y = 114 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P3Dark +[PartyOptionsSelectMode] +Tex = MainBar Type = Transparent -Alpha = 1 - -#[SingP3DuetFourPText] -#Text = PLAYERNAME -#X = 435 -#Y = 126 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_SELECT_MODE +X = 70 +Y = 110 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 -[SingP3DuetFourPStatic2] -Tex = ScoreBG -X = 700 -Y = 117 -W = 80 -H = 25 +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -[SingP3DuetFourPTextScore] -Text = 00000 -X = 715 -Y = 119 -Font = 0 -Size = 24 +[PartyOptionsSelectLevel] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_DIFFICULTY +X = 70 +Y = 165 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 -[SingP3DuetFourPSingBar] -X = 700 -Y = 142 -W = 80 -H = 6 +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -[SingP3DuetFourPAvatar] -X = 393 -Y = 117 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +#TexSBG = SelectBG +#W = 230 +#H = 40 +#SkipX = 10 -#Player Four -[SingP4DuetFourPStatic] -X = 390 -Y = 294 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P4Dark +[PartyOptionsSelectPlayList] +Tex = MainBar Type = Transparent -Alpha = 1 +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_PLAYLIST +X = 70 +Y = 220 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 -#[SingP4DuetFourPText] -#Text = PLAYERNAME -#X = 435 -#Y = 306 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 - -[SingP4DuetFourPStatic2] -X = 700 -Y = 297 -W = 80 -H = 25 - -[SingP4DuetFourPTextScore] -X = 715 -Y = 299 -Font = 0 -Size = 24 - -[SingP4DuetFourPSingBar] -X = 700 -Y = 322 -W = 80 -H = 6 - -[SingP4DuetFourPAvatar] -X = 393 -Y = 297 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -# SIX DUET P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1DuetSixPStatic] -X = 20 -Y = 100 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P1Dark +[PartyOptionsSelectPlayList2] +Tex = MainBar Type = Transparent -Alpha = 1 - -[SingP1DuetSixPAvatar] -X = 23 -Y = 103 -W = 31 -H = 31 -Z = 1 -Alpha = 1 - -#[SingP1DuetSixPText] -#Text = PLAYERNAME -#X = 25 -#Y = 100 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 - -[SingP1DuetSixPStatic2] -Tex = ScoreBG -X = 305 -Y = 95 -W = 80 -H = 25 -Color = P1Dark -Type = Colorized - -[SingP1DuetSixPTextScore] -Text = 00000 -X = 320 -Y = 97 -Font = 0 -Size = 24 +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_PLAYLIST +X = 70 +Y = 275 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 -[SingP1DuetSixPSingBar] -X = 305 -Y = 120 -W = 80 -H = 6 +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -#Player Two -[SingP2DuetSixPStatic] -X = 20 -Y = 227 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P2Dark +[PartyOptionsSelectRounds] +Tex = MainBar Type = Transparent -Alpha = 1 - -[SingP2DuetSixPAvatar] -X = 23 -Y = 230 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_ROUNDS +X = 70 +Y = 250 +W = 230 +H = 40 +SkipX = 10 +Fields = 7 -#[SingP2DuetSixPText] -#Text = PLAYERNAME -#X = 25 -#Y = 227 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -[SingP2DuetSixPStatic2] -Tex = ScoreBG -X = 305 -Y = 222 -W = 80 -H = 25 -Color = P2Dark -Type = Colorized +############################ +## P L A Y E R P A R T Y ## +############################ -[SingP2DuetSixPTextScore] -Text = 00000 -X = 320 -Y = 224 -Font = 0 -Size = 24 +[PartyPlayer] +Texts = 6 -[SingP2DuetSixPSingBar] -X = 305 -Y = 247 -W = 80 -H = 6 +[PartyPlayerBackground] +Tex = PartyBG -#Player Three -[SingP3DuetSixPStatic] -X = 20 -Y = 352 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P3Dark +[PartyPlayerStatic1] +X = 370 +Y = 552 +Z = 0.75 +W = 20 +H = 23 +Tex = ButtonEnter +Color = White Type = Transparent -Alpha = 1 - -[SingP3DuetSixPAvatar] -X = 23 -Y = 355 -W = 31 -H = 31 -Z = 1 -Alpha = 1 - -#[SingP3DuetSixPText] -#Text = PLAYERNAME -#X = 25 -#Y = 352 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 -[SingP3DuetSixPStatic2] -Tex = ScoreBG -X = 305 -Y = 347 -W = 80 -H = 25 -Color = P3Dark -Type = Colorized +[PartyPlayerText1] +X = 40 +Y = 20 +Font = 0 +Size = 60 +Color = White +Text = PARTY_MODE -[SingP3DuetSixPTextScore] -Text = 00000 -X = 320 -Y = 349 +[PartyPlayerText2] +X = 70 +Y = 552 +Color = White Font = 0 -Size = 24 +Size = 21 +Align = 0 +Text = PARTY_PLAYER_ENTER_NAME -[SingP3DuetSixPSingBar] -X = 305 -Y = 372 -W = 80 -H = 6 +[PartyPlayerText3] +X = 395 +Y = 552 +Color = White +Font = 0 +Size = 21 +Align = 0 +Text = SING_LEGEND_CONTINUE -#Player Four -[SingP4DuetSixPStatic] -X = 390 -Y = 100 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P4Dark +[PartyPlayerSelectTeams] +Tex = MainBar +TexSBG = SelectBG Type = Transparent -Alpha = 1 - -[SingP4DuetSixPAvatar] -X = 393 -Y = 103 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +TypeSBG = Transparent +Text = PARTY_TEAMS +X = 70 +Y = 110 +W = 230 +H = 40 +SkipX = 10 +Fields = 2 + +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark + +[PartyPlayerSelectPlayers1] +Tex = MainBar +TexSBG = PartyPlayerSelectBG +Type = Transparent +TypeSBG = Transparent +Text = PARTY_TEAMS_PLAYER1 +X = 310 +Y = 175 +W = 200 +SBGW = 190 +H = 40 +SkipX = 10 +Fields = 1 + +TColor = White +TDColor = White + +STColor = White +STDColor = GrayDark + +[PartyPlayerSelectPlayers2] +Tex = MainBar +TexSBG = PartyPlayerSelectBG +Type = Transparent +TypeSBG = Transparent +Text = PARTY_TEAMS_PLAYER2 +X = 310 +Y = 300 +W = 200 +SBGW = 190 +H = 40 +SkipX = 10 +Fields = 1 + +TColor = White +TDColor = White + +STColor = White +STDColor = GrayDark + +[PartyPlayerSelectPlayers3] +Tex = MainBar +Type = Transparent +TypeSBG = Transparent +TexSBG = PartyPlayerSelectBG +Text = PARTY_TEAMS_PLAYER3 +X = 310 +Y = 425 +W = 200 +SBGW = 190 +H = 40 +SkipX = 10 +Fields = 4 + +TColor = White +TDColor = White + +STColor = White +STDColor = GrayDark + +[PartyPlayerTeam1Name] +Tex = PartyTeamButton2 +X = 70 +Y = 175 +W = 230 +H = 40 +Type = Transparent +Color = P1Dark +DColor = P1Light +Texts = 1 + +[PartyPlayerTeam1NameText1] +X = 115 +Y = 4 +Font = 0 +Size = 32 +Align = 1 +Text = Team 1 +Color = White + +[PartyPlayerPlayer1Name] +Tex = Button +X = 70 +Y = 225 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P1Lightest +DColor = P1Light +Reflection = 1 +ReflectionSpacing = 1 -#[SingP4DuetSixPText] -#Text = PLAYERNAME -#X = 395 -#Y = 100 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[PartyPlayerPlayer1NameText1] +X = 77 +Y = 5 +Font = 0 +Size = 30 +Align = 1 +Text = Player 1 +Color = White -[SingP4DuetSixPStatic2] -Tex = ScoreBG -X = 700 -Y = 95 -W = 80 -H = 25 -Color = P4Dark -Type = Colorized +[PartyPlayerPlayer2Name] +Tex = Button +X = 232 +Y = 225 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P1Lightest +DColor = P1Light +Reflection = 1 +ReflectionSpacing = 1 -[SingP4DuetSixPTextScore] -Text = 00000 -X = 715 -Y = 97 +[PartyPlayerPlayer2NameText1] +X = 77 +Y = 5 Font = 0 -Size = 24 - -[SingP4DuetSixPSingBar] -X = 700 -Y = 120 -W = 80 -H = 6 +Size = 30 +Align = 1 +Text = Player 2 +Color = White -#Player Five -[SingP5DuetSixPStatic] -X = 390 -Y = 227 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P5Dark +[PartyPlayerPlayer3Name] +Tex = Button +X = 394 +Y = 225 +W = 154 +H = 40 Type = Transparent -Alpha = 1 - -[SingP5DuetSixPAvatar] -X = 393 -Y = 230 -W = 31 -H = 31 -Z = 1 -Alpha = 1 +Texts = 1 +Color = P1Lightest +DColor = P1Light +Reflection = 1 +ReflectionSpacing = 1 -#[SingP5DuetSixPText] -#Text = PLAYERNAME -#X = 395 -#Y = 227 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 +[PartyPlayerPlayer3NameText1] +X = 77 +Y = 5 +Font = 0 +Size = 30 +Align = 1 +Text = Player 3 +Color = White -[SingP5DuetSixPStatic2] -Tex = ScoreBG -X = 700 -Y = 222 -W = 80 -H = 25 -Color = P5Dark -Type = Colorized +[PartyPlayerPlayer4Name] +Tex = Button +X = 556 +Y = 225 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P1Lightest +DColor = P1Light +Reflection = 1 +ReflectionSpacing = 1 -[SingP5DuetSixPTextScore] -Text = 00000 -X = 715 -Y = 224 +[PartyPlayerPlayer4NameText1] +X = 77 +Y = 5 Font = 0 -Size = 24 +Size = 30 +Align = 1 +Text = Player 4 +Color = White -[SingP5DuetSixPSingBar] -X = 700 -Y = 247 -W = 80 -H = 6 +[PartyPlayerTeam2Name] +Tex = PartyTeamButton2 +X = 70 +Y = 300 +W = 230 +H = 40 +Type = Transparent +Texts = 1 +Color = P2Dark +DColor = P2Light -#Player Six -[SingP6DuetSixPStatic] -X = 390 -Y = 352 -W = 37 -H = 37 -Tex = AvatarFrame2 -Color = P6Dark -Type = Transparent -Alpha = 1 - -[SingP6DuetSixPAvatar] -X = 393 -Y = 355 -W = 31 -H = 31 -Z = 1 -Alpha = 1 - -#[SingP6DuetSixPText] -#Text = PLAYERNAME -#X = 395 -#Y = 352 -#Font = 1 -#Size = 18 -#Color = White -#Align = 0 - -[SingP6DuetSixPStatic2] -Tex = ScoreBG -X = 700 -Y = 347 -W = 80 -H = 25 -Color = P6Dark -Type = Colorized - -[SingP6DuetSixPTextScore] -Text = 00000 -X = 715 -Y = 349 +[PartyPlayerTeam2NameText1] +X = 115 +Y = 4 Font = 0 -Size = 24 - -[SingP6DuetSixPSingBar] -X = 700 -Y = 372 -W = 80 -H = 6 - -################################################# -## ## -## Four Player Score One Screen ## -## ## -################################################# -# P L A Y E R O N E -[ScoreFourPTextName1] -X = 90 -Y = 140 -Font = 1 Size = 32 -Align = 0 -Text = P1 +Align = 1 +Text = Team 2 Color = White -# Rating -[ScoreFourPStaticRatingPicture1] -X = 315 -Y = 160 -H = 55 -W = 55 -Z = 100 +[PartyPlayerPlayer5Name] +Tex = Button +X = 70 +Y = 350 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P2Lightest +DColor = P2Light +Reflection = 1 +ReflectionSpacing = 1 -[ScoreFourPTextScore1] -X = 340 -Y = 220 -W = 100 -Color = White +[PartyPlayerPlayer5NameText1] +X = 77 +Y = 5 Font = 0 -Size = 24 -Text = Tone Deaf +Size = 30 Align = 1 - -[ScoreFourPTextNotes1] -X = 45 -Y = 180 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES +Text = Player 5 Color = White -[ScoreFourPTextNotesScore1] -X = 260 -Y = 180 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[PartyPlayerPlayer6Name] +Tex = Button +X = 232 +Y = 350 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P2Lightest +DColor = P2Light +Reflection = 1 +ReflectionSpacing = 1 -[ScoreFourPTextLineBonus1] -X = 45 -Y = 205 +[PartyPlayerPlayer6NameText1] +X = 77 +Y = 5 Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS +Size = 30 +Align = 1 +Text = Player 6 Color = White -[ScoreFourPTextLineBonusScore1] -X = 260 -Y = 205 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[PartyPlayerPlayer7Name] +Tex = Button +X = 394 +Y = 350 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P2Lightest +DColor = P2Light +Reflection = 1 +ReflectionSpacing = 1 -[ScoreFourPTextGoldenNotes1] -X = 45 -Y = 230 +[PartyPlayerPlayer7NameText1] +X = 77 +Y = 5 Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES +Size = 30 +Align = 1 +Text = Player 7 Color = White -[ScoreFourPTextGoldenNotesScore1] -X = 260 -Y = 230 +[PartyPlayerPlayer8Name] +Tex = Button +X = 556 +Y = 350 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P2Lightest +DColor = P2Light +Reflection = 1 +ReflectionSpacing = 1 + +[PartyPlayerPlayer8NameText1] +X = 77 +Y = 5 Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 30 +Align = 1 +Text = Player 8 Color = White -[ScoreFourPStaticBoxDark1] -Tex = ScoreBar_box_dark -X = 20 -Y = 185 -W = 22 -H = 20 +[PartyPlayerTeam3Name] +Tex = PartyTeamButton2 +X = 70 +Y = 425 +W = 230 +H = 40 +Type = Transparent +Texts = 1 Color = P1Dark -Type = Colorized +DColor = P1Light -[ScoreFourPStaticBoxLight1] -Tex = ScoreBar_box_light -X = 20 -Y = 210 -W = 22 -H = 20 -Color = P1Light -Type = Colorized +[PartyPlayerTeam3NameText1] +X = 115 +Y = 4 +Font = 0 +Size = 32 +Align = 1 +Text = Team 3 +Color = White -[ScoreFourPStaticBoxLightest1] -Tex = ScoreBar_box_lightest -X = 20 -Y = 235 -W = 22 -H = 20 -Color = P1Lightest -Type = Colorized +[PartyPlayerPlayer9Name] +Tex = Button +X = 70 +Y = 475 +Z = 0.6 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P3Lightest +DColor = P3Light +Reflection = 1 +ReflectionSpacing = 1 -[ScoreFourPTextTotal1] -X = 60 -Y = 280 +[PartyPlayerPlayer9NameText1] +X = 75 +Y = 5 Font = 0 Size = 30 -Align = 0 -Text = SING_TOTAL +Align = 1 +Text = Player 9 Color = White -[ScoreFourPTextTotalScore1] -X = 260 -Y = 275 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -Color = White - -#lines -[ScoreFourPPlayer1Static1] -X = 20 -Y = 180 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreFourPPlayer1Static2] -X = 20 -Y = 205 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreFourPPlayer1Static3] -X = 20 -Y = 230 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreFourPPlayer1Static4] -X = 20 -Y = 255 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -#ScoreBar -[ScoreFourPStaticBackLevel1] -Tex = ScoreLevel -X = 294 -Y = 155 -W = 95 -H = 125 -Color = P1Lightest -Type = Colorized - -[ScoreFourPStaticBackLevelRound1] -Tex = ScoreLevelRound -X = 294 -Y = 155 -W = 95 -H = 8 -Color = P1Lightest -Type = Colorized - -[ScoreFourPStaticLevel1] -Tex = ScoreLevel -X = 294 -Y = 400 -W = 95 -H = 10 -Color = P1Dark -Type = Colorized - -[ScoreFourPStaticLevelRound1] -Tex = ScoreLevelRound -X = 294 -Y = 392 -W = 95 -H = 8 -Color = P1Dark -Type = Colorized - -[ScoreFourPPlayer1Static5] -Tex = ScoreEndCap -X = 290 -Y = 280 -W = 110 -H = 30 -Z = 0.9 -Color = P1Dark -Type = Colorized +[PartyPlayerPlayer10Name] +Tex = Button +X = 232 +Y = 475 +Z = 0.6 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P3Lightest +DColor = P3Light Reflection = 1 -ReflectionSpacing = 0 +ReflectionSpacing = 1 -[ScoreFourPPlayer1Static6] -Tex = ScoreGlassBox -X = 290 -Y = 140 -W = 113 -H = 140 -Z = 0.89 +[PartyPlayerPlayer10NameText1] +X = 77 +Y = 5 +Font = 0 +Size = 30 +Align = 1 +Text = Player 10 Color = White -Type = Transparent -[ScoreFourPPlayer1Static7] -Tex = P -X = 20 -Y = 280 -W = 30 -H = 30 -Type = Colorized -Color = P1Dark -Z = 0.9 +[PartyPlayerPlayer11Name] +Tex = Button +X = 394 +Y = 475 +Z = 0.6 +W = 154 +H = 40 +Type = Transparent +Texts = 1 +Color = P3Lightest +DColor = P3Light Reflection = 1 -ReflectionSpacing = 4 +ReflectionSpacing = 1 -[ScoreFourPPlayer1Text1] -Text = P1 -X = 26 -Y = 285 -Size = 20 -Font = 1 -Type = Colorized +[PartyPlayerPlayer11NameText1] +X = 77 +Y = 5 +Font = 0 +Size = 30 +Align = 1 +Text = Player 11 Color = White -Z = 1 -Reflection = 1 -ReflectionSpacing = 16 - -[ScoreFourPPlayer1Avatar] -X = 24 -Y = 115 -W = 51 -H = 50 -Z = 1 -[ScoreFourPPlayer1Static8] -X = 20 -Y = 110 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P1Dark +[PartyPlayerPlayer12Name] +Tex = Button +X = 556 +Y = 475 +Z = 0.6 +W = 154 +H = 40 Type = Transparent +Texts = 1 +Color = P3Lightest +DColor = P3Light +Reflection = 1 +ReflectionSpacing = 1 -# P L A Y E R T W O -[ScoreFourPTextName2] -X = 610 -Y = 140 -Font = 1 -Size = 32 -Align = 0 -Text = P2 +[PartyPlayerPlayer12NameText1] +X = 77 +Y = 5 +Font = 0 +Size = 30 +Align = 1 +Text = Player 12 Color = White -# Rating -[ScoreFourPStaticRatingPicture2] -X = 435 -Y = 160 -H = 55 -W = 55 +############################ +## R O U N D P A R T Y ## +############################ -[ScoreFourPTextScore2] -X = 460 -Y = 220 -W = 100 -Color = White -Font = 0 -Size = 24 -Text = Tone Deaf -Align = 1 +[PartyRoundsBackground] +Tex = PartyBG -[ScoreFourPTextNotes2] -X = 565 -Y = 180 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES +[PartyRoundsStatic1] +X = 388 +Y = 552 +W = 20 +H = 23 +Tex = ButtonEnter Color = White +Type = Transparent -[ScoreFourPTextNotesScore2] -X = 780 -Y = 180 +[PartyRoundsText1] +X = 40 +Y = 20 Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 60 Color = White +Text = PARTY_MODE -[ScoreFourPTextLineBonus2] -X = 565 -Y = 205 -Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS +[PartyRoundsText2] +X = 418 +Y = 552 Color = White - -[ScoreFourPTextLineBonusScore2] -X = 780 -Y = 205 Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +Size = 21 +Align = 0 +Text = PARTY_ROUNDS_LEGEND_CONTINUE -[ScoreFourPTextGoldenNotes2] -X = 565 -Y = 230 -Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES -Color = White +[PartyRoundsSelectRoundCount] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_ROUNDCOUNT +X = 70 +Y = 100 +W = 230 +H = 40 +SkipX = 10 +Fields = 7 -[ScoreFourPTextGoldenNotesScore2] -X = 780 -Y = 230 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -[ScoreFourPStaticBoxDark2] -Tex = ScoreBar_box_dark -X = 540 -Y = 185 -W = 22 -H = 20 -Color = P2Dark -Type = Colorized +[PartyRoundsSelectRound1] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_SELECTMODE1 +X = 70 +Y = 155 +W = 230 +H = 40 +SkipX = 10 +Fields = 7 -[ScoreFourPStaticBoxLight2] -Tex = ScoreBar_box_light -X = 540 +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark + +[PartyRoundsSelectRound2] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_SELECTMODE2 +X = 70 Y = 210 -W = 22 -H = 20 -Color = P2Light -Type = Colorized +W = 230 +H = 40 +SkipX = 10 +Fields = 7 -[ScoreFourPStaticBoxLightest2] -Tex = ScoreBar_box_lightest -X = 540 -Y = 235 -W = 22 -H = 20 -Color = P2Lightest -Type = Colorized +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -[ScoreFourPTextTotal2] -X = 580 -Y = 280 -Font = 0 -Size = 30 -Align = 0 -Text = SING_TOTAL -Color = White +[PartyRoundsSelectRound3] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_SELECTMODE3 +X = 70 +Y = 265 +W = 230 +H = 40 +SkipX = 10 +Fields = 7 -[ScoreFourPTextTotalScore2] -X = 780 -Y = 275 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -Color = White +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -#lines -[ScoreFourPPlayer2Static1] -X = 540 -Y = 180 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[PartyRoundsSelectRound4] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_SELECTMODE4 +X = 70 +Y = 320 +W = 230 +H = 40 +SkipX = 10 +Fields = 7 -[ScoreFourPPlayer2Static2] -X = 540 -Y = 205 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -[ScoreFourPPlayer2Static3] -X = 540 -Y = 230 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[PartyRoundsSelectRound5] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_SELECTMODE5 +X = 70 +Y = 375 +W = 230 +H = 40 +SkipX = 10 +Fields = 7 -[ScoreFourPPlayer2Static4] -X = 540 -Y = 255 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -#ScoreBar -[ScoreFourPStaticBackLevel2] -Tex = ScoreLevel -X = 414 -Y = 155 -W = 95 -H = 125 -Color = P2Lightest -Type = Colorized +[PartyRoundsSelectRound6] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_SELECTMODE6 +X = 70 +Y = 430 +W = 230 +H = 40 +SkipX = 10 +Fields = 7 + +DColor = +Color = +TColor = White +TDColor = White -[ScoreFourPStaticBackLevelRound2] -Tex = ScoreLevelRound -X = 414 -Y = 155 -W = 95 -H = 8 -Color = P2Lightest -Type = Colorized +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -[ScoreFourPStaticLevel2] -Tex = ScoreLevel -X = 414 -Y = 400 -W = 95 -H = 10 -Color = P2Dark -Type = Colorized +[PartyRoundsSelectRound7] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_SELECTMODE7 +X = 70 +Y = 485 +W = 230 +H = 40 +SkipX = 10 +Fields = 7 -[ScoreFourPStaticLevelRound2] -Tex = ScoreLevelRound -X = 414 -Y = 392 -W = 95 -H = 8 -Color = P2Dark -Type = Colorized +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark -[ScoreFourPPlayer2Static5] -Tex = ScoreEndCap -X = 410 -Y = 280 -W = 110 -H = 30 -Z = 0.9 -Color = P2Dark -Type = Colorized -Reflection = 1 -ReflectionSpacing = 0 - -[ScoreFourPPlayer2Static6] -Tex = ScoreGlassBox -X = 410 -Y = 140 -W = 113 -H = 140 -Z = 0.89 -Color = White -Type = Transparent - -[ScoreFourPPlayer2Static7] -Tex = P -X = 540 -Y = 280 -W = 30 -H = 30 -Type = Colorized -Color = P2Dark -Z = 0.9 -Reflection = 1 -ReflectionSpacing = 4 - -[ScoreFourPPlayer2Text1] -Text = P2 -X = 546 -Y = 285 -Size = 20 -Font = 1 -Type = Colorized -Color = White -Z = 1 -Reflection = 1 -ReflectionSpacing = 16 - -[ScoreFourPPlayer2Avatar] -X = 544 -Y = 115 -W = 51 -H = 50 -Z = 1 +############################ +## S U M A R Y P A R T Y ## +############################ +[PartyNewRound] +Texts = 4 -[ScoreFourPPlayer2Static8] -X = 540 -Y = 110 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P2Dark -Type = Transparent +[PartyNewRoundBackground] +Tex = MainBG -# P L A Y E R T H R E E -[ScoreFourPTextName3] -X = 90 -Y = 360 -Font = 1 -Size = 32 -Align = 0 -Text = P1 +[PartyNewRoundText1] +X = 50 +Y = 10 +Font = 0 +Size = 60 Color = White +Text = PARTY_MODE -# Rating -[ScoreFourPStaticRatingPicture3] -X = 315 -Y = 380 -H = 55 -W = 55 -Z = 100 - -[ScoreFourPTextScore3] -X = 340 -Y = 440 -W = 100 +[PartyNewRoundText2] +X = 400 +Y = 552 Color = White Font = 0 -Size = 24 -Text = Tone Deaf +Size = 21 Align = 1 +Text = PARTY_ROUND_LEGEND_CONTINUE -[ScoreFourPTextNotes3] -X = 45 -Y = 400 +[PartyNewRoundText3] +X = 460 +Y = 100 +Color = White Font = 0 -Size = 26 +Size = 30 +Text = PARTY_ROUND Align = 0 -Text = SING_NOTES -Color = White -[ScoreFourPTextNotesScore3] -X = 260 -Y = 400 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 +[PartyNewRoundText4] +X = 600 +Y = 100 Color = White - -[ScoreFourPTextLineBonus3] -X = 45 -Y = 425 Font = 0 -Size = 26 +Size = 30 +Text = PARTY_ROUND_WINNER Align = 0 -Text = SING_PHRASE_BONUS -Color = White -[ScoreFourPTextLineBonusScore3] -X = 260 -Y = 425 +[PartyNewRoundText5] +X = 448 +Y = 350 +Color = White Font = 0 -Size = 26 +Size = 54 +Text = PARTY_ROUND Align = 2 -Text = 0000 -Color = White -[ScoreFourPTextGoldenNotes3] -X = 45 -Y = 450 +[PartyNewRoundTextTeam1Players] +X = 30 +Y = 137 +Color = White Font = 0 -Size = 26 +Size = 21 Align = 0 -Text = SING_GOLDEN_NOTES -Color = White +Text = Dummytext, Player2, Player3, Player4 -[ScoreFourPTextGoldenNotesScore3] -X = 260 -Y = 450 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 +[PartyNewRoundTextTeam2Players] +X = 30 +Y = 218 Color = White - -[ScoreFourPStaticBoxDark3] -Tex = ScoreBar_box_dark -X = 20 -Y = 405 -W = 22 -H = 20 -Color = P3Dark -Type = Colorized - -[ScoreFourPStaticBoxLight3] -Tex = ScoreBar_box_light -X = 20 -Y = 430 -W = 22 -H = 20 -Color = P3Light -Type = Colorized - -[ScoreFourPStaticBoxLightest3] -Tex = ScoreBar_box_lightest -X = 20 -Y = 455 -W = 22 -H = 20 -Color = P3Lightest -Type = Colorized - -[ScoreFourPTextTotal3] -X = 60 -Y = 500 Font = 0 -Size = 30 +Size = 21 Align = 0 -Text = SING_TOTAL +Text = Dummytext, Player2, Player3, Player4 + +[PartyNewRoundTextTeam3Players] +X = 30 +Y = 299 Color = White +Font = 0 +Size = 21 +Align = 0 +Text = Dummytext, Player2, Player3, Player4 -[ScoreFourPTextTotalScore3] +[PartyNewRoundStatic4] +Tex = PartyRoundBG1 +X = 450 +Y = 103 +W = 330 +H = 24 +Color = ColorDark +Type = Colorized + +[PartyNewRoundStatic5] X = 260 -Y = 495 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 +Y = 552 +W = 24 +H = 23 +Tex = ButtonEnter Color = White +Type = Transparent -#lines -[ScoreFourPPlayer3Static1] -X = 20 -Y = 400 -W = 240 -H = 1 -Tex = ScoreLine +[PartyNewRoundStatic6] +Tex = PartyRoundBG3 +X = 250 +Y = 350 +W = 300 +H = 50 +Color = ColorLight Type = Colorized -Color = White -[ScoreFourPPlayer3Static2] -X = 20 -Y = 425 -W = 240 -H = 1 -Tex = ScoreLine +[PartyNewRoundStatic7] +Tex = PartyRoundBG4 +X = 50 +Y = 495 +W = 700 +H = 30 +Color = ColorLight Type = Colorized -Color = White -[ScoreFourPPlayer3Static3] +[PartyNewRoundStaticTeam1] +Tex = PartyTeamButton1 X = 20 -Y = 450 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +Y = 110 +W = 400 +H = 50 +Color = P1Dark +Type = Transparent +Reflection = 0 -[ScoreFourPPlayer3Static4] +[PartyNewRoundStaticTeam2] +Tex = PartyTeamButton1 X = 20 -Y = 475 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -#ScoreBar -[ScoreFourPStaticBackLevel3] -Tex = ScoreLevel -X = 294 -Y = 382 -W = 95 -H = 118 -Color = P3Lightest -Type = Colorized - -[ScoreFourPStaticBackLevelRound3] -Tex = ScoreLevelRound -X = 294 -Y = 375 -W = 95 -H = 10 -Color = P3Lightest -Type = Colorized - -[ScoreFourPStaticLevel3] -Tex = ScoreLevel -X = 294 -Y = 385 -W = 95 -H = 8 -Color = P3Dark -Type = Colorized - -[ScoreFourPStaticLevelRound3] -Tex = ScoreLevelRound -X = 294 -Y = 385 -W = 95 -H = 8 -Color = P3Dark -Type = Colorized - -[ScoreFourPPlayer3Static5] -Tex = ScoreEndCap -X = 290 -Y = 500 -W = 110 -H = 30 -Z = 0.9 -Color = P3Dark -Type = Colorized -Reflection = 1 -ReflectionSpacing = 0 - -[ScoreFourPPlayer3Static6] -Tex = ScoreGlassBox -X = 290 -Y = 360 -W = 113 -H = 140 -Z = 0.89 -Color = White +Y = 191 +W = 400 +H = 50 +Color = P2Dark Type = Transparent +Reflection = 0 -[ScoreFourPPlayer3Static7] -Tex = P +[PartyNewRoundStaticTeam3] +Tex = PartyTeamButton1 X = 20 -Y = 500 -W = 30 -H = 30 -Type = Colorized +Y = 272 +W = 400 +H = 50 Color = P3Dark -Z = 0.9 -Reflection = 1 -ReflectionSpacing = 4 +Type = Transparent +Reflection = 0 -[ScoreFourPPlayer3Text1] -Text = P3 -X = 26 -Y = 505 -Size = 20 -Font = 1 -Type = Colorized -Color = White -Z = 1 +[PartyNewRoundStaticNextPlayer1] +Tex = PartyPlayerButton +X = 155 +Y = 415 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = P1Dark Reflection = 1 -ReflectionSpacing = 16 +ReflectionSpacing = 2 -[ScoreFourPPlayer3Avatar] -X = 24 -Y = 335 -W = 51 +[PartyNewRoundStaticNextPlayer2] +Tex = PartyPlayerButton +X = 325 +Y = 415 +W = 150 H = 50 -Z = 1 +Type = Transparent +Texts = 1 +Color = P2Dark +Reflection = 1 +ReflectionSpacing = 2 -[ScoreFourPPlayer3Static8] -X = 20 -Y = 330 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P3Dark +[PartyNewRoundStaticNextPlayer3] +Tex = PartyPlayerButton +X = 495 +Y = 415 +W = 150 +H = 50 Type = Transparent +Texts = 1 +Color = P3Dark +Reflection = 1 +ReflectionSpacing = 2 -# P L A Y E R F O U R -[ScoreFourPTextName4] -X = 610 -Y = 360 -Font = 1 -Size = 32 -Align = 0 -Text = P4 +[PartyNewRoundTextRound1] +X = 460 +Y = 133 Color = White +Font = 0 +Size = 24 +Text = Round 1 +Align = 0 -# Rating -[ScoreFourPStaticRatingPicture4] -X = 435 -Y = 380 -H = 55 -W = 55 - -[ScoreFourPTextScore4] +[PartyNewRoundTextRound2] X = 460 -Y = 440 -W = 100 +Y = 162 Color = White Font = 0 Size = 24 -Text = Tone Deaf -Align = 1 +Text = Round 2 +Align = 0 -[ScoreFourPTextNotes4] -X = 565 -Y = 400 +[PartyNewRoundTextRound3] +X = 460 +Y = 191 +Color = White Font = 0 -Size = 26 +Size = 24 +Text = Round 3 Align = 0 -Text = SING_NOTES -Color = White -[ScoreFourPTextNotesScore4] -X = 780 -Y = 400 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 +[PartyNewRoundTextRound4] +X = 460 +Y = 220 Color = White - -[ScoreFourPTextLineBonus4] -X = 565 -Y = 425 Font = 0 -Size = 26 +Size = 24 +Text = Round 4 Align = 0 -Text = SING_PHRASE_BONUS -Color = White -[ScoreFourPTextLineBonusScore4] -X = 780 -Y = 425 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 +[PartyNewRoundTextRound5] +X = 460 +Y = 249 Color = White - -[ScoreFourPTextGoldenNotes4] -X = 565 -Y = 450 Font = 0 -Size = 26 +Size = 24 +Text = Round 5 Align = 0 -Text = SING_GOLDEN_NOTES + +[PartyNewRoundTextRound6] +X = 460 +Y = 278 Color = White +Font = 0 +Size = 24 +Text = Round 6 +Align = 0 -[ScoreFourPTextGoldenNotesScore4] -X = 780 -Y = 450 +[PartyNewRoundTextRound7] +X = 460 +Y = 307 +Color = White Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 24 +Text = Round 7 +Align = 0 + +[PartyNewRoundTextWinner1] +X = 600 +Y = 133 Color = White +Font = 0 +Size = 24 +Text = Winner 1 +Align = 0 -[ScoreFourPStaticBoxDark4] -Tex = ScoreBar_box_dark -X = 540 -Y = 405 -W = 22 -H = 20 -Color = P4Dark -Type = Colorized - -[ScoreFourPStaticBoxLight4] -Tex = ScoreBar_box_light -X = 540 -Y = 430 -W = 22 -H = 20 -Color = P4Light -Type = Colorized - -[ScoreFourPStaticBoxLightest4] -Tex = ScoreBar_box_lightest -X = 540 -Y = 455 -W = 22 -H = 20 -Color = P4Lightest -Type = Colorized - -[ScoreFourPTextTotal4] -X = 580 -Y = 500 +[PartyNewRoundTextWinner2] +X = 600 +Y = 162 +Color = White Font = 0 -Size = 30 +Size = 24 +Text = Winner 2 Align = 0 -Text = SING_TOTAL + +[PartyNewRoundTextWinner3] +X = 600 +Y = 191 Color = White +Font = 0 +Size = 24 +Text = Winner 3 +Align = 0 -[ScoreFourPTextTotalScore4] -X = 780 -Y = 495 +[PartyNewRoundTextWinner4] +X = 600 +Y = 220 +Color = White Font = 0 -Size = 42 -Align = 2 -Text = 00000 +Size = 24 +Text = Winner 4 +Align = 0 + +[PartyNewRoundTextWinner5] +X = 600 +Y = 249 Color = White +Font = 0 +Size = 24 +Text = Winner 5 +Align = 0 -#lines -[ScoreFourPPlayer4Static1] -X = 540 -Y = 400 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyNewRoundTextWinner6] +X = 600 +Y = 278 Color = White +Font = 0 +Size = 24 +Text = Winner 6 +Align = 0 -[ScoreFourPPlayer4Static2] -X = 540 -Y = 425 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyNewRoundTextWinner7] +X = 600 +Y = 307 Color = White +Font = 0 +Size = 24 +Text = Winner 7 +Align = 0 -[ScoreFourPPlayer4Static3] -X = 540 -Y = 450 -W = 240 -H = 1 -Tex = ScoreLine +[PartyNewRoundStaticRound1] +Tex = PartyRoundBG2 +X = 450 +Y = 135 +W = 330 +H = 20 +Color = ColorLightest Type = Colorized -Color = White -[ScoreFourPPlayer4Static4] -X = 540 -Y = 475 -W = 240 -H = 1 -Tex = ScoreLine +[PartyNewRoundStaticRound2] +Tex = PartyRoundBG2 +X = 450 +Y = 164 +W = 330 +H = 20 +Color = ColorLightest Type = Colorized -Color = White -#ScoreBar -[ScoreFourPStaticBackLevel4] -Tex = ScoreLevel -X = 414 -Y = 382 -W = 95 -H = 118 -Color = P4Lightest +[PartyNewRoundStaticRound3] +Tex = PartyRoundBG2 +X = 450 +Y = 193 +W = 330 +H = 20 +Color = ColorLightest Type = Colorized - -[ScoreFourPStaticBackLevelRound4] -Tex = ScoreLevelRound -X = 414 -Y = 375 -W = 95 -H = 8 -Color = P4Lightest + +[PartyNewRoundStaticRound4] +Tex = PartyRoundBG2 +X = 450 +Y = 222 +W = 330 +H = 20 +Color = ColorLightest Type = Colorized -[ScoreFourPStaticLevel4] -Tex = ScoreLevel -X = 414 -Y = 400 -W = 95 -H = 10 -Color = P4Dark +[PartyNewRoundStaticRound5] +Tex = PartyRoundBG2 +X = 450 +Y = 251 +W = 330 +H = 20 +Color = ColorLightest Type = Colorized -[ScoreFourPStaticLevelRound4] -Tex = ScoreLevelRound -X = 414 -Y = 392 -W = 95 -H = 8 -Color = P4Dark +[PartyNewRoundStaticRound6] +Tex = PartyRoundBG2 +X = 450 +Y = 280 +W = 330 +H = 20 +Color = ColorLightest Type = Colorized -[ScoreFourPPlayer4Static5] -Tex = ScoreEndCap -X = 410 -Y = 500 -W = 110 -H = 30 -Z = 0.9 -Color = P4Dark +[PartyNewRoundStaticRound7] +Tex = PartyRoundBG2 +X = 450 +Y = 309 +W = 330 +H = 20 +Color = ColorLightest Type = Colorized -Reflection = 1 -ReflectionSpacing = 0 -[ScoreFourPPlayer4Static6] -Tex = ScoreGlassBox -X = 410 -Y = 360 -W = 113 -H = 140 -Z = 0.89 +[PartyNewRoundTextNextRound] +X = 400 +Y = 495 Color = White -Type = Transparent - -[ScoreFourPPlayer4Static7] -Tex = P -X = 540 -Y = 500 -W = 30 -H = 30 -Type = Colorized -Color = P4Dark -Z = 0.9 -Reflection = 1 -ReflectionSpacing = 4 +Font = 0 +Size = 30 +Text = Next Round +Align = 1 -[ScoreFourPPlayer4Text1] -Text = P4 -X = 546 -Y = 505 -Size = 20 -Font = 1 -Type = Colorized +[PartyNewRoundTextNextRoundNo] +X = 457 +Y = 350 Color = White -Z = 1 -Reflection = 1 -ReflectionSpacing = 16 +Font = 0 +Size = 54 +Text = 99 +Align = 0 -[ScoreFourPPlayer4Avatar] -X = 544 -Y = 335 -W = 51 -H = 50 -Z = 1 - -[ScoreFourPPlayer4Static8] -X = 540 -Y = 330 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P4Dark -Type = Transparent +[PartyNewRoundTextScoreTeam1] +X = 390 +Y = 110 +Color = White +Font = 0 +Size = 51 +Text = 3000 +Align = 1 +[PartyNewRoundTextScoreTeam2] +X = 390 +Y = 191 +Color = White +Font = 0 +Size = 51 +Text = 2000 +Align = 1 -################################################# -## ## -## Six Player Score One Screen ## -## ## -################################################# -# P L A Y E R O N E -[ScoreSixPTextName1] -X = 90 -Y = 135 -Font = 1 -Size = 32 -Align = 0 -Text = P1 +[PartyNewRoundTextScoreTeam3] +X = 390 +Y = 272 Color = White +Font = 0 +Size = 51 +Text = 1000 +Align = 1 -[ScoreSixPTextNotes1] -X = 20 -Y = 180 +[PartyNewRoundTextNameTeam1] +X = 30 +Y = 108 +Color = White Font = 0 -Size = 26 +Size = 36 +Text = Team 1 Align = 0 -Text = SING_NOTES -Color = White -[ScoreSixPTextNotesScore1] -X = 260 -Y = 180 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 +[PartyNewRoundTextNameTeam2] +X = 30 +Y = 189 Color = White - -[ScoreSixPTextLineBonus1] -X = 20 -Y = 205 Font = 0 -Size = 26 +Size = 36 +Text = Team 2 Align = 0 -Text = SING_PHRASE_BONUS -Color = White -[ScoreSixPTextLineBonusScore1] -X = 260 -Y = 205 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 +[PartyNewRoundTextNameTeam3] +X = 30 +Y = 270 Color = White - -[ScoreSixPTextGoldenNotes1] -X = 20 -Y = 230 Font = 0 -Size = 26 +Size = 36 +Text = Team 3 Align = 0 -Text = SING_GOLDEN_NOTES -Color = White -[ScoreSixPTextGoldenNotesScore1] -X = 260 -Y = 230 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 +[PartyNewRoundTextNextPlayer1] +X = 230 +Y = 425 Color = White - -[ScoreSixPTextTotal1] -X = 60 -Y = 280 Font = 0 Size = 30 -Align = 0 -Text = SING_TOTAL -Color = White +Text = Player 1 +Align = 1 -[ScoreSixPTextTotalScore1] -X = 260 -Y = 275 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 +[PartyNewRoundTextNextPlayer2] +X = 400 +Y = 425 Color = White +Font = 0 +Size = 30 +Text = Player 2 +Align = 1 -#lines -[ScoreSixPPlayer1Static1] -X = 20 -Y = 180 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyNewRoundTextNextPlayer3] +X = 570 +Y = 425 Color = White +Font = 0 +Size = 30 +Text = Player 3 +Align = 1 -[ScoreSixPPlayer1Static2] -X = 20 -Y = 205 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White -[ScoreSixPPlayer1Static3] -X = 20 -Y = 230 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[PartyScore] +Texts = 5 -[ScoreSixPPlayer1Static4] -X = 20 -Y = 255 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[PartyScoreBackground] +Tex = PartyBG -[ScoreSixPPlayer1Static5] -Tex = P -X = 20 -Y = 280 -W = 30 +[PartyScoreDecoTextures] +ChangeTextures = 1 + +FirstTexture = PartyScoreDeco +FirstTyp = Colorized +FirstColor = Gold + +SecondTexture = PartyScoreDeco +SecondTyp = Colorized +SecondColor = Silver + +ThirdTexture = PartyScoreDeco +ThirdTyp = Colorized +ThirdColor = Bronze + +[PartyScoreStatic1] +X = 0 +Y = 545 +W = 250 H = 30 +Tex = Leiste1 +Color = ColorLight Type = Colorized -Color = P1Dark -Z = 0.9 Reflection = 1 -ReflectionSpacing = 4 +ReflectionSpacing = 2 -[ScoreSixPPlayer1Text1] -Text = P1 -X = 26 -Y = 285 -Size = 20 -Font = 1 -Type = Colorized +[PartyScoreStatic2] +X = 250 +Y = 545 +W = 550 +H = 30 +Tex = Leiste2 Color = White -Z = 1 +Type = Transparent Reflection = 1 -ReflectionSpacing = 16 +ReflectionSpacing = 2 -[ScoreSixPPlayer1Avatar] -X = 24 -Y = 115 -W = 51 -H = 50 -Z = 1 +[PartyScoreStatic3] +X = 40 +Y = 22 +W = 27 +H = 27 +Color = White +Tex = PartyIcon +Type = Colorized -[ScoreSixPPlayer1Static6] -X = 20 -Y = 110 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P1Dark +[PartyScoreStatic4] +X = 260 +Y = 552 +W = 24 +H = 23 +Tex = ButtonEnter +Color = White Type = Transparent -# P L A Y E R T W O -[ScoreSixPTextName2] -X = 350 -Y = 135 -Font = 1 -Size = 32 -Align = 0 -Text = P2 +[PartyScoreText1] +X = 70 +Y = 6 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 +Font = 0 +Size = 60 Color = White +Text = PARTY_MODE -[ScoreSixPTextNotes2] -X = 280 -Y = 180 +[PartyScoreText2] +X = 70 +Y = 53 +Color = White Font = 0 -Size = 26 +Size = 30 Align = 0 -Text = SING_NOTES -Color = White +Text = PARTY_SCORE_DESC -[ScoreSixPTextNotesScore2] -X = 520 -Y = 180 +[PartyScoreText3] +X = 238 +Y = 552 +Color = Black Font = 0 -Size = 26 +Size = 21 Align = 2 -Text = 0000 -Color = White +Text = PARTY_SCORE_WHEREAMI -[ScoreSixPTextLineBonus2] -X = 280 -Y = 205 +[PartyScoreText4] +X = 290 +Y = 552 +Color = Black Font = 0 -Size = 26 +Size = 21 Align = 0 -Text = SING_PHRASE_BONUS -Color = White +Text = PARTY_LEGEND_CONTINUE -[ScoreSixPTextLineBonusScore2] -X = 520 -Y = 205 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[PartyScoreStatic5] +Tex = PartyScoreBG1 +X = 50 +Y = 100 +W = 700 +H = 80 +Color = ColorDark +Type = Colorized -[ScoreSixPTextGoldenNotes2] -X = 280 -Y = 230 +[PartyScoreStatic6] +Tex = PartyScoreBG2 +X = 50 +Y = 495 +W = 700 +H = 20 +Color = ColorLight +Type = Colorized + +[PartyScoreText5] +X = 400 +Y = 136 +Color = White Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES +Size = 45 +Text = PARTY_SCORE_WINS2 +Align = 1 + +[PartyScoreTextWinner] +X = 400 +Y = 98 Color = White +Font = 0 +Size = 54 +Text = The Winner is... +Align = 1 -[ScoreSixPTextGoldenNotesScore2] -X = 520 -Y = 230 +[PartyScoreTextScoreTeam1] +X = 568 +Y = 198 +Color = White Font = 0 -Size = 26 +Size = 36 +Text = 3000 Align = 2 -Text = 0000 -Color = White -[ScoreSixPTextTotal2] -X = 320 -Y = 280 -Font = 0 -Size = 30 -Align = 0 -Text = SING_TOTAL +[PartyScoreTextScoreTeam2] +X = 568 +Y = 298 Color = White +Font = 0 +Size = 36 +Text = 2000 +Align = 2 -[ScoreSixPTextTotalScore2] -X = 520 -Y = 275 +[PartyScoreTextScoreTeam3] +X = 568 +Y = 398 +Color = White Font = 0 -Size = 42 +Size = 36 +Text = 1000 Align = 2 -Text = 00000 + +[PartyScoreTextNameTeam1] +X = 188 +Y = 198 +Font = 0 +Size = 36 +Align = 0 +Text = Team 1 Color = White -#lines -[ScoreSixPPlayer2Static1] -X = 280 -Y = 180 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyScoreTextNameTeam2] +X = 188 +Y = 298 Color = White +Font = 0 +Size = 36 +Text = Team 2 +Align = 0 -[ScoreSixPPlayer2Static2] -X = 280 -Y = 205 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyScoreTextNameTeam3] +X = 188 +Y = 398 Color = White +Font = 0 +Size = 36 +Text = Team 3 +Align = 0 -[ScoreSixPPlayer2Static3] -X = 280 +[PartyScoreStaticTeam1] +X = 188 Y = 230 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +W = 380 +H = 16 +Z = 1 +Tex = PartyTeamPoints +Color = P1Dark +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -[ScoreSixPPlayer2Static4] -X = 280 -Y = 255 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[PartyScoreStaticTeam1BG] +Tex = PartyTeamButton2 +X = 178 +Y = 200 +W = 400 +H = 50 +Type = Transparent +Color = P1Dark +DColor = P1Light +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPPlayer2Static5] -Tex = P -X = 280 -Y = 280 -W = 30 -H = 30 -Type = Colorized -Color = P2Dark -Z = 0.9 +[PartyScoreStaticTeam1Deco] +Tex = PartyScoreDeco +X = 563 +Y = 191 +W = 64 +H = 64 +Type = Transparent +Color = Gold Reflection = 1 -ReflectionSpacing = 4 +ReflectionSpacing = -5 -[ScoreSixPPlayer2Text1] -Text = P2 -X = 286 -Y = 285 -Size = 20 -Font = 1 -Type = Colorized -Color = White +[PartyScoreStaticTeam2] +X = 188 +Y = 330 +W = 380 +H = 15 Z = 1 +Tex = PartyTeamPoints +Color = P2Dark +Type = Transparent Reflection = 1 -ReflectionSpacing = 16 +ReflectionSpacing = 12 -[ScoreSixPPlayer2Avatar] -X = 284 -Y = 115 -W = 51 +[PartyScoreStaticTeam2BG] +Tex = PartyTeamButton2 +X = 178 +Y = 300 +W = 400 H = 50 -Z = 1 - -[ScoreSixPPlayer2Static6] -X = 280 -Y = 110 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P2Dark Type = Transparent +Color = P2Dark +DColor = P2Light +Reflection = 1 +ReflectionSpacing = 2 -# P L A Y E R T H R E E -[ScoreSixPTextName3] -X = 610 -Y = 135 -Font = 1 -Size = 32 -Align = 0 -Text = P2 -Color = White +[PartyScoreStaticTeam2Deco] +Tex = PartyScoreDeco +X = 563 +Y = 291 +W = 64 +H = 64 +Type = Transparent +Color = Gold +Reflection = 1 +ReflectionSpacing = -5 -[ScoreSixPTextNotes3] -X = 540 -Y = 180 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES +[PartyScoreStaticTeam3] +X = 188 +Y = 430 +W = 380 +H = 15 +Z = 1 +Tex = PartyTeamPoints +Color = P3Dark +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 + +[PartyScoreStaticTeam3BG] +Tex = PartyTeamButton2 +X = 178 +Y = 400 +W = 400 +H = 50 +Type = Transparent +Color = P3Dark +DColor = P3Light +Reflection = 1 +ReflectionSpacing = 2 + +[PartyScoreStaticTeam3Deco] +Tex = PartyScoreDeco +X = 563 +Y = 391 +W = 64 +H = 64 +Type = Transparent +Color = Gold +Reflection = 1 +ReflectionSpacing = -5 + +[PartyWin] +Texts = 4 + +[PartyWinBackground] +Tex = PartyBG + +[PartyWinStatic1] +X = 0 +Y = 545 +W = 250 +H = 30 +Tex = Leiste1 +Color = ColorLight +Type = Colorized +Reflection = 1 +ReflectionSpacing = 2 + +[PartyWinStatic2] +X = 250 +Y = 545 +W = 550 +H = 30 +Tex = Leiste2 Color = White +Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPTextNotesScore3] -X = 780 -Y = 180 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 +[PartyWinStatic3] +X = 40 +Y = 22 +W = 27 +H = 27 Color = White +Tex = PartyIcon +Type = Colorized -[ScoreSixPTextLineBonus3] -X = 540 -Y = 205 -Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS +[PartyWinStatic4] +X = 260 +Y = 552 +W = 24 +H = 23 +Tex = ButtonEnter Color = White +Type = Transparent -[ScoreSixPTextLineBonusScore3] -X = 780 -Y = 205 +[PartyWinText1] +X = 70 +Y = 6 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 Font = 0 -Size = 26 -Align = 2 -Text = 0000 +Size = 60 Color = White +Text = PARTY_MODE -[ScoreSixPTextGoldenNotes3] -X = 540 -Y = 230 +[PartyWinText2] +X = 70 +Y = 53 +Color = White Font = 0 -Size = 26 +Size = 30 Align = 0 -Text = SING_GOLDEN_NOTES -Color = White +Text = PARTY_WIN_DESC -[ScoreSixPTextGoldenNotesScore3] -X = 780 -Y = 230 +[PartyWinText3] +X = 238 +Y = 552 +Color = Black Font = 0 -Size = 26 +Size = 21 Align = 2 -Text = 0000 -Color = White +Text = PARTY_WIN_WHEREAMI -[ScoreSixPTextTotal3] -X = 580 -Y = 280 +[PartyWinText4] +X = 290 +Y = 552 +Color = Black Font = 0 -Size = 30 +Size = 21 Align = 0 -Text = SING_TOTAL -Color = White +Text = PARTY_WIN_LEGEND_CONTINUE -[ScoreSixPTextTotalScore3] -X = 780 -Y = 275 +#[PartyWinTextWinner] +#X = 150 +#Y = 120 +#Color = White +#Font = 1 +#Size = 42 +#Text = The Winner is... +#Align = 0 + +[PartyWinTextScoreTeam1] +X = 699 +Y = 183 +Color = White Font = 0 -Size = 42 +Size = 57 +Text = 3000 Align = 2 -Text = 00000 -Color = White -#lines -[ScoreSixPPlayer3Static1] -X = 540 -Y = 180 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyWinTextScoreTeam2] +X = 669 +Y = 298 Color = White +Font = 0 +Size = 36 +Text = 2000 +Align = 2 -[ScoreSixPPlayer3Static2] -X = 540 -Y = 205 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyWinTextScoreTeam3] +X = 649 +Y = 398 Color = White +Font = 0 +Size = 27 +Text = 1000 +Align = 2 -[ScoreSixPPlayer3Static3] -X = 540 -Y = 230 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyWinTextNameTeam1] +X = 169 +Y = 183 +Font = 0 +Size = 57 +Align = 0 +Text = Team 1 Color = White -[ScoreSixPPlayer3Static4] -X = 540 -Y = 255 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized +[PartyWinTextNameTeam2] +X = 289 +Y = 298 Color = White +Font = 0 +Size = 36 +Text = Team 2 +Align = 0 -[ScoreSixPPlayer3Static5] -Tex = P -X = 540 -Y = 280 -W = 30 -H = 30 -Type = Colorized -Color = P3Dark -Z = 0.9 -Reflection = 1 -ReflectionSpacing = 4 - -[ScoreSixPPlayer3Text1] -Text = P3 -X = 546 -Y = 285 -Size = 20 -Font = 1 -Type = Colorized +[PartyWinTextNameTeam3] +X = 369 +Y = 398 Color = White -Z = 1 -Reflection = 1 -ReflectionSpacing = 16 +Font = 0 +Size = 27 +Text = Team 3 +Align = 0 -[ScoreSixPPlayer3Avatar] -X = 544 -Y = 115 -W = 51 -H = 50 +[PartyWinStaticTeam1] +X = 169 +Y = 230 +W = 530 +H = 16 Z = 1 +Tex = PartyTeamPoints +Color = TeamColor +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -[ScoreSixPPlayer3Static6] -X = 540 -Y = 110 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P3Dark +[PartyWinStaticTeam1BG] +Tex = PartyTeamButton3 +X = 159 +Y = 185 +W = 550 +H = 65 Type = Transparent +Color = TeamColor +Reflection = 1 +ReflectionSpacing = 2 -# P L A Y E R F O U R -[ScoreSixPTextName4] -X = 90 -Y = 355 -Font = 1 -Size = 32 -Align = 0 -Text = P1 -Color = White - -[ScoreSixPTextNotes4] -X = 20 -Y = 400 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES -Color = White - -[ScoreSixPTextNotesScore4] -X = 260 -Y = 400 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White - -[ScoreSixPTextLineBonus4] -X = 20 -Y = 425 -Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS -Color = White - -[ScoreSixPTextLineBonusScore4] -X = 260 -Y = 425 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[PartyWinStaticTeam1Rank1] +X = 169 +Y = 230 +W = 530 +H = 16 +Z = 1 +Tex = PartyTeamPoints +Color = P1Dark +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -[ScoreSixPTextGoldenNotes4] -X = 20 -Y = 450 -Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES -Color = White +[PartyWinStaticTeam1BGRank1] +Tex = PartyTeamButton3 +X = 159 +Y = 185 +W = 550 +H = 65 +Type = Transparent +Color = P1Dark +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPTextGoldenNotesScore4] -X = 260 -Y = 450 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[PartyWinStaticTeam1Rank2] +X = 289 +Y = 330 +W = 380 +H = 15 +Z = 1 +Tex = PartyTeamPoints +Color = P1Dark +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -[ScoreSixPTextTotal4] -X = 60 -Y = 500 -Font = 0 -Size = 30 -Align = 0 -Text = SING_TOTAL -Color = White +[PartyWinStaticTeam1BGRank2] +Tex = PartyTeamButton3 +X = 279 +Y = 300 +W = 400 +H = 50 +Type = Transparent +Color = P1Dark +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPTextTotalScore4] -X = 260 -Y = 495 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -Color = White +[PartyWinStaticTeam1Rank3] +X = 369 +Y = 420 +W = 280 +H = 15 +Z = 1 +Tex = PartyTeamPoints +Color = P1Dark +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -#lines -[ScoreSixPPlayer4Static1] -X = 20 +[PartyWinStaticTeam1BGRank3] +Tex = PartyTeamButton3 +X = 359 Y = 400 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreSixPPlayer4Static2] -X = 20 -Y = 425 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreSixPPlayer4Static3] -X = 20 -Y = 450 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +W = 300 +H = 40 +Type = Transparent +Color = P1Dark +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPPlayer4Static4] -X = 20 -Y = 475 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White -[ScoreSixPPlayer4Static5] -Tex = P -X = 20 -Y = 500 -W = 30 -H = 30 -Type = Colorized -Color = P4Dark -Z = 0.9 +[PartyWinStaticTeam1Deco] +Tex = PartyWinDeco1 +X = 91 +Y = 176 +W = 79 +H = 79 +Type = Transparent +Color = Gold Reflection = 1 -ReflectionSpacing = 4 +ReflectionSpacing = 3 -[ScoreSixPPlayer4Text1] -Text = P4 -X = 26 -Y = 505 -Size = 20 -Font = 1 -Type = Colorized -Color = White +[PartyWinStaticTeam2] +X = 289 +Y = 330 +W = 380 +H = 15 Z = 1 +Tex = PartyTeamPoints +Color = TeamColor +Type = Transparent Reflection = 1 -ReflectionSpacing = 16 +ReflectionSpacing = 12 -[ScoreSixPPlayer4Avatar] -X = 24 -Y = 337 -W = 51 +[PartyWinStaticTeam2BG] +Tex = PartyTeamButton4 +X = 279 +Y = 300 +W = 400 H = 50 -Z = 1 +Type = Transparent +Color = TeamColor +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPPlayer4Static6] -X = 20 -Y = 332 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P4Dark +[PartyWinStaticTeam2Rank1] +X = 169 +Y = 230 +W = 530 +H = 16 +Z = 1 +Tex = PartyTeamButton3 +Color = P2Dark Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -# P L A Y E R F I V E -[ScoreSixPTextName5] -X = 350 -Y = 355 -Font = 1 -Size = 32 -Align = 0 -Text = P5 -Color = White - -[ScoreSixPTextNotes5] -X = 280 -Y = 400 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES -Color = White - -[ScoreSixPTextNotesScore5] -X = 520 -Y = 400 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[PartyWinStaticTeam2BGRank1] +Tex = PartyTeamButton4 +X = 159 +Y = 185 +W = 550 +H = 65 +Type = Transparent +Color = P2Dark +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPTextLineBonus5] -X = 280 -Y = 425 -Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS -Color = White +[PartyWinStaticTeam2Rank2] +X = 289 +Y = 330 +W = 380 +H = 15 +Z = 1 +Tex = PartyTeamPoints +Color = P2Dark +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -[ScoreSixPTextLineBonusScore5] -X = 520 -Y = 425 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[PartyWinStaticTeam2BGRank2] +Tex = PartyTeamButton4 +X = 279 +Y = 300 +W = 400 +H = 50 +Type = Transparent +Color = P2Dark +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPTextGoldenNotes5] -X = 280 -Y = 450 -Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES -Color = White +[PartyWinStaticTeam2Rank3] +X = 369 +Y = 420 +W = 280 +H = 15 +Z = 1 +Tex = PartyTeamPoints +Color = TeamColor +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -[ScoreSixPTextGoldenNotesScore5] -X = 520 -Y = 450 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White +[PartyWinStaticTeam2BGRank3] +Tex = PartyTeamButton4 +X = 359 +Y = 400 +W = 300 +H = 40 +Type = Transparent +Color = TeamColor +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPTextTotal5] -X = 320 -Y = 500 -Font = 0 -Size = 30 -Align = 0 -Text = SING_TOTAL -Color = White +[PartyWinStaticTeam2Deco] +Tex = PartyWinDeco2 +X = 226 +Y = 291 +W = 64 +H = 64 +Type = Transparent +Color = Silver +Reflection = 1 +ReflectionSpacing = 3 -[ScoreSixPTextTotalScore5] -X = 520 -Y = 495 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -Color = White +[PartyWinStaticTeam3] +X = 369 +Y = 420 +W = 280 +H = 15 +Z = 1 +Tex = PartyTeamPoints +Color = TeamColor +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -#lines -[ScoreSixPPlayer5Static1] -X = 280 +[PartyWinStaticTeam3BG] +Tex = PartyTeamButton5 +X = 359 Y = 400 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreSixPPlayer5Static2] -X = 280 -Y = 425 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreSixPPlayer5Static3] -X = 280 -Y = 450 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +W = 300 +H = 40 +Type = Transparent +Color = TeamColor +Reflection = 1 +ReflectionSpacing = 2 -[ScoreSixPPlayer5Static4] -X = 280 -Y = 475 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White +[PartyWinStaticTeam3Rank1] +X = 169 +Y = 230 +W = 530 +H = 16 +Z = 1 +Tex = PartyTeamPoints +Color = P3Dark +Type = Transparent +Reflection = 1 +ReflectionSpacing = 12 -[ScoreSixPPlayer5Static5] -Tex = P -X = 280 -Y = 500 -W = 30 -H = 30 -Type = Colorized -Color = P5Dark -Z = 0.9 +[PartyWinStaticTeam3BGRank1] +Tex = PartyTeamButton3 +X = 159 +Y = 185 +W = 550 +H = 65 +Type = Transparent +Color = P3Dark Reflection = 1 -ReflectionSpacing = 4 +ReflectionSpacing = 2 -[ScoreSixPPlayer5Text1] -Text = P5 -X = 286 -Y = 505 -Size = 20 -Font = 1 -Type = Colorized -Color = White +[PartyWinStaticTeam3Rank2] +X = 289 +Y = 330 +W = 380 +H = 15 Z = 1 +Tex = PartyTeamPoints +Color = P3Dark +Type = Transparent Reflection = 1 -ReflectionSpacing = 16 +ReflectionSpacing = 12 -[ScoreSixPPlayer5Avatar] -X = 284 -Y = 337 -W = 51 +[PartyWinStaticTeam3BGRank2] +Tex = PartyTeamButton5 +X = 279 +Y = 300 +W = 400 H = 50 -Z = 1 - -[ScoreSixPPlayer5Static6] -X = 280 -Y = 332 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P5Dark Type = Transparent +Color = P3Dark +Reflection = 1 +ReflectionSpacing = 2 -# P L A Y E R S I X -[ScoreSixPTextName6] -X = 610 -Y = 355 -Font = 1 -Size = 32 -Align = 0 -Text = P2 -Color = White - -[ScoreSixPTextNotes6] -X = 540 -Y = 400 -Font = 0 -Size = 26 -Align = 0 -Text = SING_NOTES -Color = White - -[ScoreSixPTextNotesScore6] -X = 780 -Y = 400 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White - -[ScoreSixPTextLineBonus6] -X = 540 -Y = 425 -Font = 0 -Size = 26 -Align = 0 -Text = SING_PHRASE_BONUS -Color = White - -[ScoreSixPTextLineBonusScore6] -X = 780 -Y = 425 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White - -[ScoreSixPTextGoldenNotes6] -X = 540 -Y = 450 -Font = 0 -Size = 26 -Align = 0 -Text = SING_GOLDEN_NOTES -Color = White - -[ScoreSixPTextGoldenNotesScore6] -X = 780 -Y = 450 -Font = 0 -Size = 26 -Align = 2 -Text = 0000 -Color = White - -[ScoreSixPTextTotal6] -X = 580 -Y = 500 -Font = 0 -Size = 30 -Align = 0 -Text = SING_TOTAL -Color = White - -[ScoreSixPTextTotalScore6] -X = 780 -Y = 495 -Font = 0 -Size = 42 -Align = 2 -Text = 00000 -Color = White - -#lines -[ScoreSixPPlayer6Static1] -X = 540 -Y = 400 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreSixPPlayer6Static2] -X = 540 -Y = 425 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreSixPPlayer6Static3] -X = 540 -Y = 450 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreSixPPlayer6Static4] -X = 540 -Y = 475 -W = 240 -H = 1 -Tex = ScoreLine -Type = Colorized -Color = White - -[ScoreSixPPlayer6Static5] -Tex = P -X = 540 -Y = 500 -W = 30 -H = 30 -Type = Colorized -Color = P6Dark -Z = 0.9 -Reflection = 1 -ReflectionSpacing = 4 - -[ScoreSixPPlayer6Text1] -Text = P6 -X = 546 -Y = 505 -Size = 20 -Font = 1 -Type = Colorized -Color = White +[PartyWinStaticTeam3Rank3] +X = 369 +Y = 420 +W = 280 +H = 15 Z = 1 +Tex = PartyTeamPoints +Color = P3Dark +Type = Transparent Reflection = 1 -ReflectionSpacing = 16 - -[ScoreSixPPlayer6Avatar] -X = 544 -Y = 337 -W = 51 -H = 50 -Z = 1 +ReflectionSpacing = 12 -[ScoreSixPPlayer6Static6] -X = 540 -Y = 332 -W = 60 -H = 60 -Z = 0.9 -Tex = AvatarFrame2 -Color = P6Dark +[PartyWinStaticTeam3BGRank3] +Tex = PartyTeamButton5 +X = 359 +Y = 400 +W = 300 +H = 40 Type = Transparent +Color = P3Dark +Reflection = 1 +ReflectionSpacing = 2 -######################################################################################## -##### ##### -##### Roulette ##### -##### ##### -######################################################################################## - -[SongRoulette] - -[SongRouletteBackground] -Tex = SongBG +[PartyWinStaticTeam3Deco] +Tex = PartyWinDeco3 +X = 316 +Y = 391 +W = 54 +H = 54 +Type = Transparent +Color = Bronze +Reflection = 1 +ReflectionSpacing = 3 -[SongRouletteStaticNonParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = SongCD -Type = Colorized +[PartyTournamentPlayer] +Texts = 5 -[SongRouletteTextCat] -X = 72 -Y = 58 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = SING_SONG_SELECTION_DESC +[PartyTournamentPlayerBackground] +Tex = PartyBG -[SongRouletteStatic1] +[PartyTournamentPlayerStatic1] X = 0 Y = 545 +Z = 0.7 W = 250 H = 30 -Z = 0.4 Tex = Leiste1 Color = ColorLight Type = Colorized Reflection = 1 ReflectionSpacing = 2 -[SongRouletteStatic2] +[PartyTournamentPlayerStatic2] X = 250 Y = 545 +Z = 0.7 W = 550 H = 30 -Z = 0.951 Tex = Leiste2 Color = White Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[SongRouletteCover] -X = 300 -Y = 120 -W = 200 -H = 200 -Reflections = 1 - -[SongRouletteEqualizer] -Visible = 1 -Direction = 1 +[PartyTournamentPlayerStatic3] +X = 40 +Y = 22 +W = 27 +H = 27 Color = White -Alpha = 1 -X = 265 -Y = 476 -PieceW = 4 -PieceH = 4 -Space = 1 -Bands = 5 -Length = 15 -Reflection = 1 -ReflectionSpacing = 2 +Tex = PartyIcon +Type = Colorized -[SongRouletteMedleyIcon] -X = 335 -Y = 445 +[PartyTournamentPlayerStatic4] +X = 260 +Y = 552 +Z = 0.75 W = 24 -H = 24 -Z = 0.95 +H = 23 +Tex = ButtonNavi Color = White -Tex = icon_song_medley Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 -[SongRouletteCalculatedMedleyIcon] -X = 335 -Y = 445 -W = 24 -H = 24 -Z = 0.95 -Color = White -Tex = icon_song_calcmedley -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 - -[SongRouletteVideoIcon] -X = 310 -Y = 445 -W = 24 -H = 24 -Z = 0.95 +[PartyTournamentPlayerStatic5] +X = 388 +Y = 552 +Z = 0.75 +W = 32 +H = 23 +Tex = ButtonAZ Color = White -Tex = icon_song_video Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 -[SongRouletteDuetIcon] -X = 335 -Y = 445 +[PartyTournamentPlayerStatic6] +X = 556 +Y = 552 +Z = 0.75 W = 24 -H = 24 -Z = 0.95 +H = 23 +Tex = ButtonEnter Color = White -Tex = icon_song_duet Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 - -[SongRouletteStatic3] -X = 278 -Y = 120 -W = 244 -H = 200 -Z = 0.95 -Color = ColorLight -Tex = SongSelection1 -Type = Colorized - -[SongRouletteStatic4] -X = 300 -Y = 320 -W = 200 -H = 160 -Z = 0.95 -Color = ColorLight -Tex = SongSelection2 -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[SongRouletteTextArtist] -X = 400 -Y = 328 -W = 190 -Color = White -Font = 1 -Size = 24 -Align = 1 -Text = -[SongRouletteTextTitle] -X = 400 -Y = 394 -W = 190 -Color = White +[PartyTournamentPlayerText1] +X = 70 +Y = 6 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 Font = 0 -Size = 24 -Align = 1 -Text = - -[SongRouletteTextNumber] -X = 492 -Y = 457 -Z = 0.95 +Size = 60 Color = White -Size = 18 -Align = 2 -Reflection = 1 -ReflectionSpacing = 21 +Text = PARTY_MODE_TOURNAMENT -[SongRouletteTextYear] -X = 400 -Y = 447 -Z = 0.95 +[PartyTournamentPlayerText2] +X = 65 +Y = 70 Color = White -Size = 20 -Align = 1 - -######################################## -#### SCREEN SONGS SCORES ##### -######################################## - -[SongRouletteTextScore] -X = 530 -Y = 420 -Color = ColorLight Font = 0 -Size = 24 +Size = 30 Align = 0 +Text = PARTY_MODE_TOURNAMENT_PLAYER_DESC -[SongRouletteTextMaxScore] -X = 530 -Y = 450 -Color = White +[PartyTournamentPlayerText3] +X = 294 +Y = 552 +Color = Black Font = 0 -Size = 22 +Size = 21 Align = 0 -Text =SONG_SCORE_MAX +Text = SING_LEGEND_NAVIGATE -[SongRouletteTextMediaScore] -X = 530 -Y = 490 -Color = White +[PartyTournamentPlayerText4] +X = 418 +Y = 552 +Color = Black Font = 0 -Size = 22 +Size = 21 Align = 0 -Text =SONG_SCORE_MEDIA - -[SongRouletteTextMaxScore2] -X = 670 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 2 - -[SongRouletteTextMediaScore2] -X = 670 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 2 - -[SongRouletteTextScoreUser] -X = 670 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 2 +Text = PARTY_PLAYER_ENTER_NAME -[SongRouletteTextMaxScoreLocal] -X = 680 -Y = 450 -Color = White +[PartyTournamentPlayerText5] +X = 586 +Y = 552 +Color = Black Font = 0 -Size = 22 +Size = 21 Align = 0 +Text = SING_LEGEND_CONTINUE -[SongRouletteTextMediaScoreLocal] -X = 680 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 0 +[PartyTournamentPlayerSelectPlayers] +Text = PARTY_MODE_TOURNAMENT_NUMBER_PLAYERS +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 130 +W = 250 +H = 35 +SkipX = 10 -[SongRouletteTextScoreUserLocal] -X = 680 -Y = 468 +DColor = ColorDark Color = ColorLight -Font = 0 -Size = 20 -Align = 0 - -#Variable statics and texts for song-screen in sing- and partymode -# There can be an unlimited Number of Statics and Texts, As long -# as the numbers are in order. -# Statics that are shown in PartyMode Only are Named_ -# SongStaticParty[No] -# Texts that are shown in PartyMode Only are Named_ -# SongTextParty[No] -# Statics that are shown in Normal Mode Only are Named_ -# SongStaticNonParty[No] -# Texts that are shown in Normal Mode Only are Named_ -# SongTextNonParty[No] -#Here are the ones for singmode +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[SongRouletteTextNonParty1] +[PartyTournamentPlayerPlayer1Name] +Tex = Button X = 70 -Y = 6 -Color = White -Font = 0 -Size = 60 -Text = SING_SONG_SELECTION -Align = 0 - -# NAVBAR ######################### -# Jump to a letter with [ALT] + [A..Z] -[SongRouletteStaticNonParty2] -X = 260 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAlt -Color = White +Y = 210 +W = 150 +H = 50 Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 1 -[SongRouletteTextNonParty2] -X = 292 -Y = 548 -Z = 0.952 -Color = Black +[PartyTournamentPlayerPlayer1NameText1] +X = 75 +Y = 10 Font = 0 -Size = 24 -Align = 0 -Text = + -Reflection = 1 -ReflectionSpacing = 13 - -[SongRouletteStaticNonParty3] -X = 300 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAZ +Size = 30 +Align = 1 +Text = Player 1 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[SongRouletteTextNonParty3] -X = 340 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_GOTO +[PartyTournamentPlayerPlayer2Name] +Tex = Button +X = 240 +Y = 210 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark Reflection = 1 -ReflectionSpacing = 13 +ReflectionSpacing = 1 -# Menu opens with [M] -[SongRouletteStaticNonParty4] -X = 425 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonM +[PartyTournamentPlayerPlayer2NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 2 Color = White + +[PartyTournamentPlayerPlayer3Name] +Tex = Button +X = 410 +Y = 210 +W = 150 +H = 50 Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 1 -[SongRouletteTextNonParty4] -X = 465 -Y = 548 -Z = 0.952 -Color = Black +[PartyTournamentPlayerPlayer3NameText1] +X = 75 +Y = 10 Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_MENU -Reflection = 1 -ReflectionSpacing = 13 - -# The so famous search, shown with [J] -[SongRouletteStaticNonParty5] -X = 515 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonJ +Size = 30 +Align = 1 +Text = Player 3 Color = White + +[PartyTournamentPlayerPlayer4Name] +Tex = Button +X = 580 +Y = 210 +W = 150 +H = 50 Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 1 -[SongRouletteTextNonParty5] -X = 555 -Y = 548 -Z = 0.952 -Color = Black +[PartyTournamentPlayerPlayer4NameText1] +X = 75 +Y = 10 Font = 0 -Size = 24 -Align = 0 -Text = SONG_JUMPTO_DESC -Reflection = 1 -ReflectionSpacing = 13 - -# [P]laylist -[SongRouletteStaticNonParty6] -X = 680 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonP +Size = 30 +Align = 1 +Text = Player 4 Color = White + +[PartyTournamentPlayerPlayer5Name] +Tex = Button +X = 70 +Y = 290 +W = 150 +H = 50 Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 1 -[SongRouletteTextNonParty6] -X = 720 -Y = 548 -Z = 0.952 -Color = Black +[PartyTournamentPlayerPlayer5NameText1] +X = 75 +Y = 10 Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_PLAYLIST -Reflection = 1 -ReflectionSpacing = 13 - -#and these are the ones for partymode -[SongRouletteStaticParty1] -X = 40 -Y = 22 -W = 27 -H = 27 +Size = 30 +Align = 1 +Text = Player 5 Color = White -Tex = PartyIcon -Type = Colorized -# NAVBAR for party -# enter a number -[SongRouletteStaticParty2] -X = 260 -Y = 545 -Z = 0.952 -W = 32 -H = 30 -Tex = Button13 -Color = White +[PartyTournamentPlayerPlayer6Name] +Tex = Button +X = 240 +Y = 290 +W = 150 +H = 50 Type = Transparent - -[SongRouletteTextParty3] -X = 300 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_MENU_NAME_PARTY_JOKER +Texts = 1 +Color = ColorLight +DColor = ColorDark Reflection = 1 -ReflectionSpacing = 13 +ReflectionSpacing = 1 -# menu -[SongRouletteStaticParty3] -X = 400 -Y = 552 -Z = 0.952 -W = 24 -H = 23 -Tex = ButtonM +[PartyTournamentPlayerPlayer6NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 6 Color = White -Type = Transparent -[SongRouletteTextParty4] -X = 426 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_MENU +[PartyTournamentPlayerPlayer7Name] +Tex = Button +X = 410 +Y = 290 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark Reflection = 1 -ReflectionSpacing = 13 +ReflectionSpacing = 1 -[SongRouletteStaticParty4] -X = 540 -Y = 552 -Z = 0.952 -W = 24 -H = 24 -Tex = ButtonEnter +[PartyTournamentPlayerPlayer7NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 7 Color = White + +[PartyTournamentPlayerPlayer8Name] +Tex = Button +X = 580 +Y = 290 +W = 150 +H = 50 Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 -[SongRouletteTextParty5] -X = 570 -Y = 548 -Color = Black +[PartyTournamentPlayerPlayer8NameText1] +X = 75 +Y = 10 Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_LEGEND_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 +Size = 30 +Align = 1 +Text = Player 8 +Color = White -#Texts for Party Mode -[SongRouletteTextParty1] +[PartyTournamentPlayerPlayer9Name] +Tex = Button X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 +Y = 370 +Z = 0.6 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 + +[PartyTournamentPlayerPlayer9NameText1] +X = 75 +Y = 10 Font = 0 -Size = 60 +Size = 30 +Align = 1 +Text = Player 9 Color = White -Text = PARTY_MODE -[SongRouletteTextParty2] -X = 238 -Y = 548 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_SONG_WHEREAMI -#variable statics end +[PartyTournamentPlayerPlayer10Name] +Tex = Button +X = 240 +Y = 370 +Z = 0.6 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 -# Jokers, 5 for each team, only shown in party Mode -[SongRouletteStaticTeam1Joker1] -Tex = Joker -X = 505 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer10NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 10 +Color = White -[SongRouletteStaticTeam1Joker2] -Tex = Joker -X = 555 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer11Name] +Tex = Button +X = 410 +Y = 370 +Z = 0.6 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 -[SongRouletteStaticTeam1Joker3] -Tex = Joker -X = 605 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer11NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 11 +Color = White -[SongRouletteStaticTeam1Joker4] -Tex = Joker -X = 655 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer12Name] +Tex = Button +X = 580 +Y = 370 +Z = 0.6 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 -[SongRouletteStaticTeam1Joker5] -Tex = Joker -X = 705 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer12NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 12 +Color = White -[SongRouletteStaticTeam2Joker1] -Tex = Joker -X = 505 +[PartyTournamentPlayerPlayer13Name] +Tex = Button +X = 70 Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Z = 0.6 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 -[SongRouletteStaticTeam2Joker2] -Tex = Joker -X = 555 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer13NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 13 +Color = White -[SongRouletteStaticTeam2Joker3] -Tex = Joker -X = 605 +[PartyTournamentPlayerPlayer14Name] +Tex = Button +X = 240 Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Z = 0.6 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 -[SongRouletteStaticTeam2Joker4] -Tex = Joker -X = 655 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer14NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 14 +Color = White -[SongRouletteStaticTeam2Joker5] -Tex = Joker -X = 705 +[PartyTournamentPlayerPlayer15Name] +Tex = Button +X = 410 Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Z = 0.6 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 -[SongRouletteStaticTeam3Joker1] -Tex = Joker -X = 505 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer15NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 15 +Color = White -[SongRouletteStaticTeam3Joker2] -Tex = Joker -X = 555 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer16Name] +Tex = Button +X = 580 +Y = 450 +Z = 0.6 +W = 150 +H = 50 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorDark +Reflection = 1 +ReflectionSpacing = 1 -[SongRouletteStaticTeam3Joker3] -Tex = Joker -X = 605 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentPlayerPlayer16NameText1] +X = 75 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = Player 16 +Color = White -[SongRouletteStaticTeam3Joker4] -Tex = Joker -X = 655 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentOptions] +Texts = 4 -[SongRouletteStaticTeam3Joker5] -Tex = Joker -X = 705 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[PartyTournamentOptionsBackground] +Tex = PartyBG -[SongRouletteTextPartyTime] -X = 750 -Y = 450 -Color = White -DColor = Red -Font = 1 -Size = 70 -Align = 2 +[PartyTournamentOptionsStatic1] +X = 0 +Y = 545 +W = 250 +H = 30 +Tex = Leiste1 +Color = ColorLight +Type = Colorized +Reflection = 1 +ReflectionSpacing = 2 -[SongRouletteInfoMessageBG] -Tex = SongMessage +[PartyTournamentOptionsStatic2] X = 250 -Y = 90 -W = 300 -H = 25 -Z = 0.98 -Color = ColorDark +Y = 545 +W = 550 +H = 30 +Tex = Leiste2 +Color = White Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -[SongRouletteInfoMessageText] -X = 400 -Y = 94 +[PartyTournamentOptionsStatic3] +X = 40 +Y = 22 +W = 27 +H = 27 Color = White -Font = 1 -Size = 20 -Align = 1 +Tex = PartyIcon +Type = Colorized -############################# -## ## -## Medley Playlist ## -## ## -############################# +[PartyTournamentOptionsStatic4] +X = 260 +Y = 552 +W = 24 +H = 23 +Tex = ButtonNavi +Color = White +Type = Transparent -[SongRouletteTextMedleyNumber1] -X=25 -Y=375 -Color=White -Font=1 -Size=20 -Align=1 +[PartyTournamentOptionsStatic5] +X = 388 +Y = 552 +W = 24 +H = 23 +Tex = ButtonEnter +Color = White +Type = Transparent -[SongRouletteTextMedleyArtist1] -X=50 -Y=366 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[PartyTournamentOptionsText1] +X = 70 +Y = 5 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 +Font = 0 +Size = 60 +Color = White +Text = PARTY_MODE_TOURNAMENT -[SongRouletteTextMedleyTitle1] -X=50 -Y=383 -Color=White -Font=0 -Size=20 -Align=0 +[PartyTournamentOptionsText2] +X = 70 +Y = 65 +Color = White +Font = 0 +Size = 30 +Align = 0 +Text = PARTY_MODE_TOURNAMENT_OPTIONS_DESC -[SongRouletteTextMedleyNumber2] -X=25 -Y=420 -Color=White -Font=1 -Size=20 -Align=1 +[PartyTournamentOptionsText3] +X = 294 +Y = 552 +Color = Black +Font = 0 +Size = 21 +Align = 0 +Text = SING_LEGEND_NAVIGATE -[SongRouletteTextMedleyArtist2] -X=50 -Y=411 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[PartyTournamentOptionsText4] +X = 418 +Y = 552 +Color = Black +Font = 0 +Size = 21 +Align = 0 +Text = SING_LEGEND_CONTINUE -[SongRouletteTextMedleyTitle2] -X=50 -Y=428 -Color=White -Font=0 -Size=20 -Align=0 - -[SongRouletteTextMedleyNumber3] -X=25 -Y=465 -Color=White -Font=1 -Size=20 -Align=1 - -[SongRouletteTextMedleyArtist3] -X=50 -Y=454 -Color=ColorDark -Font=0 -Size=20 -Align=0 - -[SongRouletteTextMedleyTitle3] -X=50 -Y=471 -Color=White -Font=0 -Size=20 -Align=0 - -[SongRouletteTextMedleyNumber4] -X=25 -Y=510 -Color=White -Font=1 -Size=20 -Align=1 - -[SongRouletteTextMedleyArtist4] -X=50 -Y=501 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[PartyTournamentOptionsSelectRoundsFinal] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_MODE_TOURNAMENT_ROUNDS_FINAL +X = 70 +Y = 110 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 -[SongRouletteTextMedleyTitle4] -X=50 -Y=518 -Color=White -Font=0 -Size=20 -Align=0 +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[SongRouletteStaticMedley1] -Tex = PlayerNumberBox -X = 10 -Y = 370 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[PartyTournamentOptionsSelectRounds2Final] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_MODE_TOURNAMENT_ROUNDS_2FINAL +X = 70 +Y = 165 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 -[SongRouletteStaticMedley2] -Tex = PlayerNumberBox -X = 10 -Y = 415 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[SongRouletteStaticMedley3] -Tex = PlayerNumberBox -X = 10 -Y = 460 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[PartyTournamentOptionsSelectRounds4Final] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_MODE_TOURNAMENT_ROUNDS_4FINAL +X = 70 +Y = 220 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 -[SongRouletteStaticMedley4] -Tex = PlayerNumberBox -X = 10 -Y = 505 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -######################################################################################## -##### ##### -##### Chessboard ##### -##### ##### -######################################################################################## +[PartyTournamentOptionsSelectRounds8Final] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = PARTY_MODE_TOURNAMENT_ROUNDS_8FINAL +X = 70 +Y = 275 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 -[SongChessboard] +DColor = ColorDark +Color = ColorLight +TColor = White +TDColor = White + +SBGDColor = ColorDark +SBGColor = ColorLight +STColor = White +STDColor = GrayDark -[SongChessboardBackground] -Tex = SongBG -[SongChessboardStaticNonParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = SongCD -Type = Colorized +[PartyTournamentRounds] +Texts = 3 -[SongChessboardTextCat] -X = 72 -Y = 58 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = SING_SONG_SELECTION_DESC +[PartyTournamentRoundsBackground] +Tex = PartyBG -[SongChessboardStatic1] +[PartyTournamentRoundsStatic1] X = 0 Y = 545 W = 250 H = 30 -Z = 0.4 Tex = Leiste1 Color = ColorLight Type = Colorized Reflection = 1 ReflectionSpacing = 2 -[SongChessboardStatic2] +[PartyTournamentRoundsStatic2] X = 250 Y = 545 W = 550 H = 30 -Z = 0.951 Tex = Leiste2 Color = White Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[SongChessboardCover] -X = 270 -Y = 100 -W = 100 -H = 100 -SelectX = 25 -SelectY = 120 -SelectW = 200 -SelectH = 200 -ZoomThumbW = 120 -ZoomThumbH = 120 -ZoomThumbStyle = 0 -Rows = 3 -Cols = 5 -Padding = 2 -Reflections = 0 -Tex = PlayerNumberBox - -[SongChessboardEqualizer] -Visible = 1 -Direction = 1 +[PartyTournamentRoundsStatic3] +X = 40 +Y = 22 +W = 27 +H = 27 Color = White -Alpha = 1 -X = 235 -Y = 476 -PieceW = 4 -PieceH = 4 -Space = 1 -Bands = 5 -Length = 15 -Reflection = 1 -ReflectionSpacing = 2 +Tex = PartyIcon +Type = Colorized -[SongChessboardMedleyIcon] -X = 60 -Y = 445 +[PartyTournamentRoundsStatic4] +X = 260 +Y = 552 W = 24 -H = 24 -Z = 0.95 +H = 23 +Tex = ButtonEnter Color = White -Tex = icon_song_medley Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 -[SongChessboardCalculatedMedleyIcon] -X = 60 -Y = 445 -W = 24 -H = 24 -Z = 0.95 +[PartyTournamentRoundsStatic5] +X = 310 +Y = 180 +W = 270 +H = 270 +Tex = PartyTrophy Color = White -Tex = icon_song_calcmedley Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 -[SongChessboardVideoIcon] -X = 35 -Y = 445 -W = 24 -H = 24 -Z = 0.95 +[PartyTournamentRoundsStatic6] +X = 300 +Y = 450 +W = 200 +H = 80 +Tex = PartyWinner Color = White -Tex = icon_song_video -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 - -[SongChessboardDuetIcon] -X = 60 -Y = 445 -W = 24 -H = 24 -Z = 0.95 -Color = White -Tex = icon_song_duet Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 - -[SongChessboardStatic3] -X = 25 -Y = 320 -W = 200 -H = 160 -Z = 0.95 -Color = ColorLight -Tex = SongSelection2 -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[SongChessboardTextArtist] -X = 125 -Y = 328 -W = 190 -Color = White -Font = 1 -Size = 24 -Align = 1 -Text = +Texts = 1 -[SongChessboardTextTitle] -X = 125 -Y = 394 -W = 190 -Color = White +[PartyTournamentRoundsText1] +X = 70 +Y = 5 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 Font = 0 -Size = 24 -Align = 1 -Text = - -[SongChessboardTextNumber] -X = 217 -Y = 457 -Z = 0.95 +Size = 60 Color = White -Size = 18 -Align = 2 -Reflection = 1 -ReflectionSpacing = 21 +Text = PARTY_MODE_TOURNAMENT -[SongChessboardTextYear] -X = 125 -Y = 447 -Z = 0.95 +[PartyTournamentRoundsText2] +X = 70 +Y = 65 Color = White -Size = 20 -Align = 1 - -######################################## -#### SCREEN SONGS SCORES ##### -######################################## - -[SongChessboardTextScore] -X = 270 -Y = 435 -Color = ColorLight Font = 0 -Size = 24 +Size = 30 Align = 0 +Text = PARTY_MODE_TOURNAMENT_ROUNDS_DESC -[SongChessboardTextMaxScore] -X = 270 -Y = 465 -Color = White +[PartyTournamentRoundsText3] +X = 294 +Y = 552 +Color = Black Font = 0 -Size = 22 +Size = 21 Align = 0 -Text =SONG_SCORE_MAX +Text = SING_LEGEND_CONTINUE -[SongChessboardTextMediaScore] -X = 270 -Y = 505 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MEDIA +[PartyTournamentRoundsTextNameBlock1Player1] +Tex = Button +X = 20 +Y = 130 +Z = 0.6 +W = 120 +H = 30 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongChessboardTextMaxScore2] -X = 410 -Y = 465 -Color = White +[PartyTournamentRoundsTextNameBlock1Player1Text1] +X = 60 +Y = 6 Font = 0 -Size = 22 -Align = 2 - -[SongChessboardTextMediaScore2] -X = 410 -Y = 505 +Size = 20 +Align = 1 Color = White -Font = 0 -Size = 22 -Align = 2 -[SongChessboardTextScoreUser] -X = 410 -Y = 483 +[PartyTournamentRoundsTextNameBlock1Player2] +Tex = Button +X = 20 +Y = 180 +Z = 0.6 +W = 120 +H = 30 +Type = Transparent +Texts = 1 Color = ColorLight -Font = 0 -Size = 20 -Align = 2 +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongChessboardTextMaxScoreLocal] -X = 420 -Y = 465 -Color = White +[PartyTournamentRoundsTextNameBlock1Player2Text1] +X = 60 +Y = 6 Font = 0 -Size = 22 -Align = 0 - -[SongChessboardTextMediaScoreLocal] -X = 420 -Y = 505 +Size = 20 +Align = 1 Color = White -Font = 0 -Size = 22 -Align = 0 -[SongChessboardTextScoreUserLocal] -X = 420 -Y = 483 +[PartyTournamentRoundsTextNameBlock1Player3] +Tex = Button +X = 20 +Y = 230 +Z = 0.6 +W = 120 +H = 30 +Type = Transparent +Texts = 1 Color = ColorLight -Font = 0 -Size = 20 -Align = 0 - -#Variable statics and texts for song-screen in sing- and partymode -# There can be an unlimited Number of Statics and Texts, As long -# as the numbers are in order. -# Statics that are shown in PartyMode Only are Named_ -# SongStaticParty[No] -# Texts that are shown in PartyMode Only are Named_ -# SongTextParty[No] -# Statics that are shown in Normal Mode Only are Named_ -# SongStaticNonParty[No] -# Texts that are shown in Normal Mode Only are Named_ -# SongTextNonParty[No] -#Here are the ones for singmode +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongChessboardTextNonParty1] -X = 70 +[PartyTournamentRoundsTextNameBlock1Player3Text1] +X = 60 Y = 6 -Color = White Font = 0 -Size = 60 -Text = SING_SONG_SELECTION -Align = 0 +Size = 20 +Align = 1 +Color = White -# NAVBAR ######################### -# Jump to a letter with [ALT] + [A..Z] -[SongChessboardStaticNonParty2] -X = 260 -Y = 545 -W = 32 +[PartyTournamentRoundsTextNameBlock1Player4] +Tex = Button +X = 20 +Y = 280 +Z = 0.6 +W = 120 H = 30 -Z = 0.952 -Tex = ButtonAlt -Color = White Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 1 -[SongChessboardTextNonParty2] -X = 292 -Y = 548 -Z = 0.952 -Color = Black +[PartyTournamentRoundsTextNameBlock1Player4Text1] +X = 60 +Y = 6 Font = 0 -Size = 24 -Align = 0 -Text = + -Reflection = 1 -ReflectionSpacing = 13 +Size = 20 +Align = 1 +Color = White -[SongChessboardStaticNonParty3] -X = 300 -Y = 545 -W = 32 +[PartyTournamentRoundsTextNameBlock1Player5] +Tex = Button +X = 20 +Y = 330 +Z = 0.6 +W = 120 H = 30 -Z = 0.952 -Tex = ButtonAZ -Color = White Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 1 -[SongChessboardTextNonParty3] -X = 340 -Y = 548 -Z = 0.952 -Color = Black +[PartyTournamentRoundsTextNameBlock1Player5Text1] +X = 60 +Y = 6 Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_GOTO -Reflection = 1 -ReflectionSpacing = 13 - -# Menu opens with [M] -[SongChessboardStaticNonParty4] -X = 425 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonM +Size = 20 +Align = 1 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongChessboardTextNonParty4] -X = 465 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_MENU -Reflection = 1 -ReflectionSpacing = 13 -# The so famous search, shown with [J] -[SongChessboardStaticNonParty5] -X = 515 -Y = 545 -W = 32 +[PartyTournamentRoundsTextNameBlock1Player6] +Tex = Button +X = 20 +Y = 380 +Z = 0.6 +W = 120 H = 30 -Z = 0.952 -Tex = ButtonJ -Color = White Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 1 -[SongChessboardTextNonParty5] -X = 555 -Y = 548 -Z = 0.952 -Color = Black +[PartyTournamentRoundsTextNameBlock1Player6Text1] +X = 60 +Y = 6 Font = 0 -Size = 24 -Align = 0 -Text = SONG_JUMPTO_DESC -Reflection = 1 -ReflectionSpacing = 13 +Size = 20 +Align = 1 +Color = White -# [P]laylist -[SongChessboardStaticNonParty6] -X = 680 -Y = 545 -W = 32 +[PartyTournamentRoundsTextNameBlock1Player7] +Tex = Button +X = 20 +Y = 430 +Z = 0.6 +W = 120 H = 30 -Z = 0.952 -Tex = ButtonP -Color = White Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest Reflection = 1 -ReflectionSpacing = 2 +ReflectionSpacing = 1 -[SongChessboardTextNonParty6] -X = 720 -Y = 548 -Z = 0.952 -Color = Black +[PartyTournamentRoundsTextNameBlock1Player7Text1] +X = 60 +Y = 6 Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_PLAYLIST -Reflection = 1 -ReflectionSpacing = 13 - -#and these are the ones for partymode -[SongChessboardStaticParty1] -X = 40 -Y = 22 -W = 27 -H = 27 +Size = 20 +Align = 1 Color = White -Tex = PartyIcon -Type = Colorized -# NAVBAR for party -# enter a number -[SongChessboardStaticParty2] -X = 260 -Y = 545 -Z = 0.952 -W = 32 +[PartyTournamentRoundsTextNameBlock1Player8] +Tex = Button +X = 20 +Y = 480 +Z = 0.6 +W = 120 H = 30 -Tex = Button13 -Color = White -Type = Transparent - -[SongChessboardTextParty3] -X = 300 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_MENU_NAME_PARTY_JOKER -Reflection = 1 -ReflectionSpacing = 13 - -# menu -[SongChessboardStaticParty3] -X = 400 -Y = 552 -Z = 0.952 -W = 24 -H = 23 -Tex = ButtonM -Color = White -Type = Transparent - -[SongChessboardTextParty4] -X = 426 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_MENU -Reflection = 1 -ReflectionSpacing = 13 - -[SongChessboardStaticParty4] -X = 540 -Y = 552 -Z = 0.952 -W = 24 -H = 24 -Tex = ButtonEnter -Color = White Type = Transparent - -[SongChessboardTextParty5] -X = 570 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_LEGEND_CONTINUE +Texts = 1 +Color = ColorLight +DColor = ColorLightest Reflection = 1 -ReflectionSpacing = 13 +ReflectionSpacing = 1 -#Texts for Party Mode -[SongChessboardTextParty1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 +[PartyTournamentRoundsTextNameBlock1Player8Text1] +X = 60 +Y = 6 Font = 0 -Size = 60 +Size = 20 +Align = 1 Color = White -Text = PARTY_MODE - -[SongChessboardTextParty2] -X = 238 -Y = 548 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_SONG_WHEREAMI -#variable statics end - -# Jokers, 5 for each team, only shown in party Mode -[SongChessboardStaticTeam1Joker1] -Tex = Joker -X = 505 -Y = 420 -W = 30 -H = 30 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam1Joker2] -Tex = Joker -X = 555 -Y = 420 -W = 30 -H = 30 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 -[SongChessboardStaticTeam1Joker3] -Tex = Joker -X = 605 -Y = 420 -W = 30 +[PartyTournamentRoundsTextNameBlock2Player1] +Tex = Button +X = 660 +Y = 130 +Z = 0.6 +W = 120 H = 30 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam1Joker4] -Tex = Joker -X = 655 -Y = 420 -W = 30 -H = 30 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam1Joker5] -Tex = Joker -X = 705 -Y = 420 -W = 30 -H = 30 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam2Joker1] -Tex = Joker -X = 505 -Y = 460 -W = 30 -H = 30 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam2Joker2] -Tex = Joker -X = 555 -Y = 460 -W = 30 -H = 30 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam2Joker3] -Tex = Joker -X = 605 -Y = 460 -W = 30 -H = 30 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam2Joker4] -Tex = Joker -X = 655 -Y = 460 -W = 30 -H = 30 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam2Joker5] -Tex = Joker -X = 705 -Y = 460 -W = 30 -H = 30 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam3Joker1] -Tex = Joker -X = 505 -Y = 500 -W = 30 -H = 30 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam3Joker2] -Tex = Joker -X = 555 -Y = 500 -W = 30 -H = 30 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam3Joker3] -Tex = Joker -X = 605 -Y = 500 -W = 30 -H = 30 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam3Joker4] -Tex = Joker -X = 655 -Y = 500 -W = 30 -H = 30 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardStaticTeam3Joker5] -Tex = Joker -X = 705 -Y = 500 -W = 30 -H = 30 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongChessboardTextPartyTime] -X = 750 -Y = 450 -Color = White -DColor = Red -Font = 1 -Size = 70 -Align = 2 - -[SongChessboardInfoMessageBG] -Tex = SongMessage -X = 250 -Y = 90 -W = 300 -H = 25 -Z = 0.98 -Color = ColorDark -Type = Transparent - -[SongChessboardInfoMessageText] -X = 400 -Y = 94 -Color = White -Font = 1 -Size = 20 -Align = 1 - -############################# -## ## -## Medley Playlist ## -## ## -############################# - -[SongChessboardTextMedleyMax] -N = 3 - -[SongChessboardTextMedleyNumber1] -X=530 -Y=420 -Color=White -Font=1 -Size=20 -Align=1 - -[SongChessboardTextMedleyArtist1] -X=555 -Y=411 -Color=ColorDark -Font=0 -Size=20 -Align=0 - -[SongChessboardTextMedleyTitle1] -X=555 -Y=428 -Color=White -Font=0 -Size=20 -Align=0 - -[SongChessboardTextMedleyNumber2] -X=530 -Y=465 -Color=White -Font=1 -Size=20 -Align=1 - -[SongChessboardTextMedleyArtist2] -X=555 -Y=456 -Color=ColorDark -Font=0 -Size=20 -Align=0 - -[SongChessboardTextMedleyTitle2] -X=555 -Y=473 -Color=White -Font=0 -Size=20 -Align=0 - -[SongChessboardTextMedleyNumber3] -X=530 -Y=510 -Color=White -Font=1 -Size=20 -Align=1 - -[SongChessboardTextMedleyArtist3] -X=555 -Y=501 -Color=ColorDark -Font=0 -Size=20 -Align=0 - -[SongChessboardTextMedleyTitle3] -X=555 -Y=518 -Color=White -Font=0 -Size=20 -Align=0 - -[SongChessboardStaticMedley1] -Tex = PlayerNumberBox -X = 515 -Y = 415 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized - -[SongChessboardStaticMedley2] -Tex = PlayerNumberBox -X = 515 -Y = 460 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized - -[SongChessboardStaticMedley3] -Tex = PlayerNumberBox -X = 515 -Y = 505 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized - -######################################################################################## -##### ##### -##### Carousel ##### -##### ##### -######################################################################################## - -[SongCarousel] - -[SongCarouselBackground] -Tex = SongBG - -[SongCarouselStaticNonParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = SongCD -Type = Colorized - -[SongCarouselTextCat] -X = 72 -Y = 58 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = SING_SONG_SELECTION_DESC - -[SongCarouselStatic1] -X = 0 -Y = 545 -W = 250 -H = 30 -Z = 0.4 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Z = 0.951 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselCover] -X = 300 -Y = 120 -W = 200 -H = 200 -Padding = 60 -Reflections = 1 - -[SongCarouselEqualizer] -Visible = 1 -Direction = 1 -Color = White -Alpha = 1 -X = 265 -Y = 476 -PieceW = 4 -PieceH = 4 -Space = 1 -Bands = 5 -Length = 15 -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselMedleyIcon] -X = 335 -Y = 445 -W = 24 -H = 24 -Z = 0.95 -Color = White -Tex = icon_song_medley -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 - -[SongCarouselCalculatedMedleyIcon] -X = 335 -Y = 445 -W = 24 -H = 24 -Z = 0.95 -Color = White -Tex = icon_song_calcmedley -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 - -[SongCarouselVideoIcon] -X = 310 -Y = 445 -W = 24 -H = 24 -Z = 0.95 -Color = White -Tex = icon_song_video -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 - -[SongCarouselDuetIcon] -X = 335 -Y = 445 -W = 24 -H = 24 -Z = 0.95 -Color = White -Tex = icon_song_duet -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 - -[SongCarouselStatic3] -X = 278 -Y = 120 -W = 244 -H = 200 -Z = 0.95 -Color = ColorLight -Tex = SongSelection1 -Type = Colorized - -[SongCarouselStatic4] -X = 300 -Y = 320 -W = 200 -H = 160 -Z = 0.95 -Color = ColorLight -Tex = SongSelection2 -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselTextArtist] -X = 400 -Y = 328 -W = 190 -Color = White -Font = 1 -Size = 24 -Align = 1 -Text = - -[SongCarouselTextTitle] -X = 400 -Y = 394 -W = 190 -Color = White -Font = 0 -Size = 24 -Align = 1 -Text = - -[SongCarouselTextNumber] -X = 492 -Y = 457 -Z = 0.95 -Color = White -Size = 18 -Align = 2 -Reflection = 1 -ReflectionSpacing = 21 - -[SongCarouselTextYear] -X = 400 -Y = 447 -Z = 0.95 -Color = White -Size = 20 -Align = 1 - -######################################## -#### SCREEN SONGS SCORES ##### -######################################## - -[SongCarouselTextScore] -X = 530 -Y = 420 -Color = ColorLight -Font = 0 -Size = 24 -Align = 0 - -[SongCarouselTextMaxScore] -X = 530 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MAX - -[SongCarouselTextMediaScore] -X = 530 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MEDIA - -[SongCarouselTextMaxScore2] -X = 670 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 2 - -[SongCarouselTextMediaScore2] -X = 670 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 2 - -[SongCarouselTextScoreUser] -X = 670 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 2 - -[SongCarouselTextMaxScoreLocal] -X = 680 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 0 - -[SongCarouselTextMediaScoreLocal] -X = 680 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 0 - -[SongCarouselTextScoreUserLocal] -X = 680 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 0 - -#Variable statics and texts for song-screen in sing- and partymode -# There can be an unlimited Number of Statics and Texts, As long -# as the numbers are in order. -# Statics that are shown in PartyMode Only are Named_ -# SongStaticParty[No] -# Texts that are shown in PartyMode Only are Named_ -# SongTextParty[No] -# Statics that are shown in Normal Mode Only are Named_ -# SongStaticNonParty[No] -# Texts that are shown in Normal Mode Only are Named_ -# SongTextNonParty[No] -#Here are the ones for singmode - -[SongCarouselTextNonParty1] -X = 70 -Y = 6 -Color = White -Font = 0 -Size = 60 -Text = SING_SONG_SELECTION -Align = 0 - -# NAVBAR ######################### -# Jump to a letter with [ALT] + [A..Z] -[SongCarouselStaticNonParty2] -X = 260 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAlt -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselTextNonParty2] -X = 292 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = + -Reflection = 1 -ReflectionSpacing = 13 - -[SongCarouselStaticNonParty3] -X = 300 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAZ -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselTextNonParty3] -X = 340 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_GOTO -Reflection = 1 -ReflectionSpacing = 13 - -# Menu opens with [M] -[SongCarouselStaticNonParty4] -X = 425 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonM -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselTextNonParty4] -X = 465 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_MENU -Reflection = 1 -ReflectionSpacing = 13 - -# The so famous search, shown with [J] -[SongCarouselStaticNonParty5] -X = 515 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonJ -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselTextNonParty5] -X = 555 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_JUMPTO_DESC -Reflection = 1 -ReflectionSpacing = 13 - -# [P]laylist -[SongCarouselStaticNonParty6] -X = 680 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonP -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongCarouselTextNonParty6] -X = 720 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_PLAYLIST -Reflection = 1 -ReflectionSpacing = 13 - -#and these are the ones for partymode -[SongCarouselStaticParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon -Type = Colorized - -# NAVBAR for party -# enter a number -[SongCarouselStaticParty2] -X = 260 -Y = 545 -Z = 0.952 -W = 32 -H = 30 -Tex = Button13 -Color = White -Type = Transparent - -[SongCarouselTextParty3] -X = 300 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_MENU_NAME_PARTY_JOKER -Reflection = 1 -ReflectionSpacing = 13 - -# menu -[SongCarouselStaticParty3] -X = 400 -Y = 552 -Z = 0.952 -W = 24 -H = 23 -Tex = ButtonM -Color = White -Type = Transparent - -[SongCarouselTextParty4] -X = 426 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_MENU -Reflection = 1 -ReflectionSpacing = 13 - -[SongCarouselStaticParty4] -X = 540 -Y = 552 -Z = 0.952 -W = 24 -H = 24 -Tex = ButtonEnter -Color = White -Type = Transparent - -[SongCarouselTextParty5] -X = 570 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_LEGEND_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 - -#Texts for Party Mode -[SongCarouselTextParty1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 -Color = White -Text = PARTY_MODE - -[SongCarouselTextParty2] -X = 238 -Y = 548 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_SONG_WHEREAMI -#variable statics end - -# Jokers, 5 for each team, only shown in party Mode -[SongCarouselStaticTeam1Joker1] -Tex = Joker -X = 505 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam1Joker2] -Tex = Joker -X = 555 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam1Joker3] -Tex = Joker -X = 605 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam1Joker4] -Tex = Joker -X = 655 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam1Joker5] -Tex = Joker -X = 705 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam2Joker1] -Tex = Joker -X = 505 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam2Joker2] -Tex = Joker -X = 555 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam2Joker3] -Tex = Joker -X = 605 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam2Joker4] -Tex = Joker -X = 655 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam2Joker5] -Tex = Joker -X = 705 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam3Joker1] -Tex = Joker -X = 505 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam3Joker2] -Tex = Joker -X = 555 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam3Joker3] -Tex = Joker -X = 605 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam3Joker4] -Tex = Joker -X = 655 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselStaticTeam3Joker5] -Tex = Joker -X = 705 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongCarouselTextPartyTime] -X = 750 -Y = 450 -Color = White -DColor = Red -Font = 1 -Size = 70 -Align = 2 - -[SongCarouselInfoMessageBG] -Tex = SongMessage -X = 250 -Y = 90 -W = 300 -H = 25 -Z = 0.98 -Color = ColorDark -Type = Transparent - -[SongCarouselInfoMessageText] -X = 400 -Y = 94 -Color = White -Font = 1 -Size = 20 -Align = 1 - -############################# -## ## -## Medley Playlist ## -## ## -############################# - -[SongCarouselTextMedleyNumber1] -X=25 -Y=375 -Color=White -Font=1 -Size=20 -Align=1 - -[SongCarouselTextMedleyArtist1] -X=50 -Y=366 -Color=ColorDark -Font=0 -Size=20 -Align=0 - -[SongCarouselTextMedleyTitle1] -X=50 -Y=383 -Color=White -Font=0 -Size=20 -Align=0 - -[SongCarouselTextMedleyNumber2] -X=25 -Y=420 -Color=White -Font=1 -Size=20 -Align=1 - -[SongCarouselTextMedleyArtist2] -X=50 -Y=411 -Color=ColorDark -Font=0 -Size=20 -Align=0 - -[SongCarouselTextMedleyTitle2] -X=50 -Y=428 -Color=White -Font=0 -Size=20 -Align=0 - -[SongCarouselTextMedleyNumber3] -X=25 -Y=465 -Color=White -Font=1 -Size=20 -Align=1 - -[SongCarouselTextMedleyArtist3] -X=50 -Y=454 -Color=ColorDark -Font=0 -Size=20 -Align=0 - -[SongCarouselTextMedleyTitle3] -X=50 -Y=471 -Color=White -Font=0 -Size=20 -Align=0 - -[SongCarouselTextMedleyNumber4] -X=25 -Y=510 -Color=White -Font=1 -Size=20 -Align=1 - -[SongCarouselTextMedleyArtist4] -X=50 -Y=501 -Color=ColorDark -Font=0 -Size=20 -Align=0 - -[SongCarouselTextMedleyTitle4] -X=50 -Y=518 -Color=White -Font=0 -Size=20 -Align=0 - -[SongCarouselStaticMedley1] -Tex = PlayerNumberBox -X = 10 -Y = 370 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized - -[SongCarouselStaticMedley2] -Tex = PlayerNumberBox -X = 10 -Y = 415 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized - -[SongCarouselStaticMedley3] -Tex = PlayerNumberBox -X = 10 -Y = 460 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized - -[SongCarouselStaticMedley4] -Tex = PlayerNumberBox -X = 10 -Y = 505 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized - -######################################################################################## -##### ##### -##### SlotMachine ##### -##### ##### -######################################################################################## - -[SongSlotMachine] - -[SongSlotMachineBackground] -Tex = SongBG - -[SongSlotMachineStaticNonParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = SongCD -Type = Colorized - -[SongSlotMachineTextCat] -X = 72 -Y = 58 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = SING_SONG_SELECTION_DESC - -[SongSlotMachineStatic1] -X = 0 -Y = 545 -W = 250 -H = 30 -Z = 0.4 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[SongSlotMachineStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Z = 0.951 -Tex = Leiste2 -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongSlotMachineCover] -X = 60 -Y = 190 -W = 325 -H = 200 - -[SongSlotMachineEqualizer] -Visible = 1 -Direction = 1 -Color = White -Alpha = 1 -X = 580 -Y = 380 -PieceW = 3 -PieceH = 3 -Space = 1 -Bands = 30 -Length = 15 - -[SongSlotMachineMedleyIcon] -X = 315 -Y = 350 -W = 32 -H = 30 -Z = 0.95 -Color = White -Tex = icon_song_medley -Type = Transparent - -[SongSlotMachineCalculatedMedleyIcon] -X = 315 -Y = 350 -W = 32 -H = 30 -Z = 0.95 -Color = White -Tex = icon_song_calcmedley -Type = Transparent - -[SongSlotMachineVideoIcon] -X = 280 -Y = 350 -W = 32 -H = 30 -Z = 0.95 -Color = White -Tex = icon_song_video -Type = Transparent - -[SongSlotMachineDuetIcon] -X = 315 -Y = 350 -W = 32 -H = 30 -Z = 0.95 -Color = White -Tex = icon_song_duet -Type = Transparent - -[SongSlotMachineStatic3] -X = 260 -Y = 190 -W = 460 -H = 200 -Z = 0.95 -Color = ColorLight -Tex = SongSelection3 -Type = Colorized - -[SongSlotMachineTextArtist] -X = 280 -Y = 210 -W = 420 -Color = White -Font = 1 -Size = 40 -Align = 0 -Text = - -[SongSlotMachineTextTitle] -X = 280 -Y = 280 -W = 420 -Color = White -Font = 0 -Size = 36 -Align = 0 -Text = - -[SongSlotMachineTextNumber] -X = 705 -Y = 200 -Z = 0.95 -Color = White -Size = 22 -Align = 2 - -[SongSlotMachineTextYear] -X = 460 -Y = 350 -Z = 0.95 -Color = White -Size = 28 -Align = 1 - -######################################## -#### SCREEN SONGS SCORES ##### -######################################## - -[SongSlotMachineTextScore] -X = 290 -Y = 420 -Color = ColorLight -Font = 0 -Size = 24 -Align = 0 - -[SongSlotMachineTextMaxScore] -X = 290 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MAX - -[SongSlotMachineTextMediaScore] -X = 290 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MEDIA - -[SongSlotMachineTextMaxScore2] -X = 430 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 2 - -[SongSlotMachineTextMediaScore2] -X = 430 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 2 - -[SongSlotMachineTextScoreUser] -X = 430 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 2 - -[SongSlotMachineTextMaxScoreLocal] -X = 440 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 0 - -[SongSlotMachineTextMediaScoreLocal] -X = 440 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 0 - -[SongSlotMachineTextScoreUserLocal] -X = 440 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 0 - -#Variable statics and texts for song-screen in sing- and partymode -# There can be an unlimited Number of Statics and Texts, As long -# as the numbers are in order. -# Statics that are shown in PartyMode Only are Named_ -# SongStaticParty[No] -# Texts that are shown in PartyMode Only are Named_ -# SongTextParty[No] -# Statics that are shown in Normal Mode Only are Named_ -# SongStaticNonParty[No] -# Texts that are shown in Normal Mode Only are Named_ -# SongTextNonParty[No] -#Here are the ones for singmode - -[SongSlotMachineTextNonParty1] -X = 70 -Y = 6 -Color = White -Font = 0 -Size = 60 -Text = SING_SONG_SELECTION -Align = 0 - -# NAVBAR ######################### -# Jump to a letter with [ALT] + [A..Z] -[SongSlotMachineStaticNonParty2] -X = 260 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAlt -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongSlotMachineTextNonParty2] -X = 292 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = + -Reflection = 1 -ReflectionSpacing = 13 - -[SongSlotMachineStaticNonParty3] -X = 300 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAZ -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongSlotMachineTextNonParty3] -X = 340 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_GOTO -Reflection = 1 -ReflectionSpacing = 13 - -# Menu opens with [M] -[SongSlotMachineStaticNonParty4] -X = 425 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonM -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongSlotMachineTextNonParty4] -X = 465 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_MENU -Reflection = 1 -ReflectionSpacing = 13 - -# The so famous search, shown with [J] -[SongSlotMachineStaticNonParty5] -X = 515 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonJ -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongSlotMachineTextNonParty5] -X = 555 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_JUMPTO_DESC -Reflection = 1 -ReflectionSpacing = 13 - -# [P]laylist -[SongSlotMachineStaticNonParty6] -X = 680 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonP -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongSlotMachineTextNonParty6] -X = 720 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_PLAYLIST -Reflection = 1 -ReflectionSpacing = 13 - -#and these are the ones for partymode -[SongSlotMachineStaticParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon -Type = Colorized - -# NAVBAR for party -# enter a number -[SongSlotMachineStaticParty2] -X = 260 -Y = 545 -Z = 0.952 -W = 32 -H = 30 -Tex = Button13 -Color = White -Type = Transparent - -[SongSlotMachineTextParty3] -X = 300 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_MENU_NAME_PARTY_JOKER -Reflection = 1 -ReflectionSpacing = 13 - -# menu -[SongSlotMachineStaticParty3] -X = 400 -Y = 552 -Z = 0.952 -W = 24 -H = 23 -Tex = ButtonM -Color = White -Type = Transparent - -[SongSlotMachineTextParty4] -X = 426 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_MENU -Reflection = 1 -ReflectionSpacing = 13 - -[SongSlotMachineStaticParty4] -X = 540 -Y = 552 -Z = 0.952 -W = 24 -H = 24 -Tex = ButtonEnter -Color = White Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongSlotMachineTextParty5] -X = 570 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_LEGEND_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 - -#Texts for Party Mode -[SongSlotMachineTextParty1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 -Color = White -Text = PARTY_MODE - -[SongSlotMachineTextParty2] -X = 238 -Y = 548 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_SONG_WHEREAMI -#variable statics end - -# Jokers, 5 for each team, only shown in party Mode -[SongSlotMachineStaticTeam1Joker1] -Tex = Joker -X = 505 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam1Joker2] -Tex = Joker -X = 555 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam1Joker3] -Tex = Joker -X = 605 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam1Joker4] -Tex = Joker -X = 655 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam1Joker5] -Tex = Joker -X = 705 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam2Joker1] -Tex = Joker -X = 505 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam2Joker2] -Tex = Joker -X = 555 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam2Joker3] -Tex = Joker -X = 605 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam2Joker4] -Tex = Joker -X = 655 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam2Joker5] -Tex = Joker -X = 705 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam3Joker1] -Tex = Joker -X = 505 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam3Joker2] -Tex = Joker -X = 555 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam3Joker3] -Tex = Joker -X = 605 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam3Joker4] -Tex = Joker -X = 655 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineStaticTeam3Joker5] -Tex = Joker -X = 705 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongSlotMachineTextPartyTime] -X = 750 -Y = 450 +[PartyTournamentRoundsTextNameBlock2Player1Text1] +X = 60 +Y = 6 +Font = 0 +Size = 20 +Align = 1 Color = White -DColor = Red -Font = 1 -Size = 70 -Align = 2 -[SongSlotMachineInfoMessageBG] -Tex = SongMessage -X = 250 -Y = 90 -W = 300 -H = 25 -Z = 0.98 -Color = ColorDark +[PartyTournamentRoundsTextNameBlock2Player2] +Tex = Button +X = 660 +Y = 180 +Z = 0.6 +W = 120 +H = 30 Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongSlotMachineInfoMessageText] -X = 400 -Y = 94 -Color = White -Font = 1 +[PartyTournamentRoundsTextNameBlock2Player2Text1] +X = 60 +Y = 6 +Font = 0 Size = 20 Align = 1 +Color = White -############################# -## ## -## Medley Playlist ## -## ## -############################# +[PartyTournamentRoundsTextNameBlock2Player3] +Tex = Button +X = 660 +Y = 230 +Z = 0.6 +W = 120 +H = 30 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongSlotMachineTextMedleyNumber1] -X=565 -Y=415 -Color=White -Font=1 -Size=20 -Align=1 +[PartyTournamentRoundsTextNameBlock2Player3Text1] +X = 60 +Y = 6 +Font = 0 +Size = 20 +Align = 1 +Color = White -[SongSlotMachineTextMedleyArtist1] -X=590 -Y=406 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[PartyTournamentRoundsTextNameBlock2Player4] +Tex = Button +X = 660 +Y = 280 +Z = 0.6 +W = 120 +H = 30 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongSlotMachineTextMedleyTitle1] -X=590 -Y=423 -Color=White -Font=0 -Size=20 -Align=0 +[PartyTournamentRoundsTextNameBlock2Player4Text1] +X = 60 +Y = 6 +Font = 0 +Size = 20 +Align = 1 +Color = White -[SongSlotMachineTextMedleyNumber2] -X=565 -Y=460 -Color=White -Font=1 -Size=20 -Align=1 +[PartyTournamentRoundsTextNameBlock2Player5] +Tex = Button +X = 660 +Y = 330 +Z = 0.6 +W = 120 +H = 30 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongSlotMachineTextMedleyArtist2] -X=590 -Y=451 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[PartyTournamentRoundsTextNameBlock2Player5Text1] +X = 60 +Y = 6 +Font = 0 +Size = 20 +Align = 1 +Color = White -[SongSlotMachineTextMedleyTitle2] -X=590 -Y=468 -Color=White -Font=0 -Size=20 -Align=0 +[PartyTournamentRoundsTextNameBlock2Player6] +Tex = Button +X = 660 +Y = 380 +Z = 0.6 +W = 120 +H = 30 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongSlotMachineTextMedleyNumber3] -X=565 -Y=505 -Color=White -Font=1 -Size=20 -Align=1 +[PartyTournamentRoundsTextNameBlock2Player6Text1] +X = 60 +Y = 6 +Font = 0 +Size = 20 +Align = 1 +Color = White -[SongSlotMachineTextMedleyArtist3] -X=590 -Y=494 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[PartyTournamentRoundsTextNameBlock2Player7] +Tex = Button +X = 660 +Y = 430 +Z = 0.6 +W = 120 +H = 30 +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongSlotMachineTextMedleyTitle3] -X=590 -Y=511 -Color=White -Font=0 -Size=20 -Align=0 +[PartyTournamentRoundsTextNameBlock2Player7Text1] +X = 60 +Y = 6 +Font = 0 +Size = 20 +Align = 1 +Color = White -[SongSlotMachineStaticMedley1] -Tex = PlayerNumberBox -X = 550 -Y = 410 -W = 30 +[PartyTournamentRoundsTextNameBlock2Player8] +Tex = Button +X = 660 +Y = 480 +Z = 0.6 +W = 120 H = 30 -Color = ColorDark -Type = Colorized +Type = Transparent +Texts = 1 +Color = ColorLight +DColor = ColorLightest +Reflection = 1 +ReflectionSpacing = 1 -[SongSlotMachineStaticMedley2] -Tex = PlayerNumberBox -X = 550 -Y = 455 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[PartyTournamentRoundsTextNameBlock2Player8Text1] +X = 60 +Y = 6 +Font = 0 +Size = 20 +Align = 1 +Color = White -[SongSlotMachineStaticMedley3] -Tex = PlayerNumberBox -X = 550 -Y = 500 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[PartyTournamentRoundsResult] +X = 6 +Y = 6 +Font = 0 +Size = 18 +Color = White -######################################################################################## -##### ##### -##### Slide ##### -##### ##### -######################################################################################## +[PartyTournamentRoundsWinner] +X = 400 +Y = 478 +Color = Bronze +Font = 2 +Size = 28 +Align = 1 -[SongSlide] +[PartyTournamentRoundsNextPlayers] +X = 6 +Y = -8 +Font = 1 +Size = 20 +Color = White -[SongSlideBackground] -Tex = SongBG -[SongSlideStaticNonParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = SongCD -Type = Colorized +[PartyTournamentWin] +Texts = 3 -[SongSlideTextCat] -X = 72 -Y = 58 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = SING_SONG_SELECTION_DESC +[PartyTournamentWinBackground] +Tex = PartyBG -[SongSlideStatic1] +[PartyTournamentWinStatic1] X = 0 Y = 545 W = 250 H = 30 -Z = 0.4 Tex = Leiste1 Color = ColorLight Type = Colorized Reflection = 1 ReflectionSpacing = 2 -[SongSlideStatic2] +[PartyTournamentWinStatic2] X = 250 Y = 545 W = 550 H = 30 -Z = 0.951 Tex = Leiste2 Color = White Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[SongSlideCover] -X = 300 -Y = 120 -W = 200 -H = 200 -Padding = 120 -Reflections = 1 -ReflectionSpacing = 10 +[PartyTournamentWinStatic3] +X = 40 +Y = 22 +W = 27 +H = 27 +Color = White +Tex = PartyIcon +Type = Colorized -[SongSlideEqualizer] -Visible = 1 -Direction = 1 +[PartyTournamentWinStatic4] +X = 260 +Y = 552 +W = 24 +H = 23 +Tex = ButtonEnter Color = White -Alpha = 1 -X = 265 -Y = 476 -PieceW = 4 -PieceH = 4 -Space = 1 -Bands = 5 -Length = 15 +Type = Transparent + +[PartyTournamentWinText1] +X = 70 +Y = 6 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 +Font = 0 +Size = 60 +Color = White +Text = PARTY_MODE_TOURNAMENT + +[PartyTournamentWinText2] +X = 70 +Y = 53 +Color = White +Font = 0 +Size = 30 +Align = 0 +Text = PARTY_MODE_TOURNAMENT_WIN_DESC + +[PartyTournamentWinText3] +X = 290 +Y = 552 +Color = Black +Font = 0 +Size = 21 +Align = 0 +Text = SING_LEGEND_CONTINUE + +[PartyTournamentWinTextScorePlayer1] +X = 620 +Y = 180 +Color = White +Font = 0 +Size = 57 +Text = 3000 +Align = 2 + +[PartyTournamentWinTextScorePlayer2] +X = 620 +Y = 330 +Color = White +Font = 0 +Size = 57 +Text = 2000 +Align = 2 + +[PartyTournamentWinTextNamePlayer1] +X = 170 +Y = 180 +Font = 0 +Size = 57 +Align = 0 +Text = Team 1 +Color = White + +[PartyTournamentWinTextNamePlayer2] +X = 170 +Y = 330 +Color = White +Font = 0 +Size = 57 + +[PartyTournamentWinStaticBGPlayer1] +Tex = PartyTeamButton3 +X = 140 +Y = 170 +W = 520 +H = 78 +Type = Transparent +Color = P1Dark Reflection = 1 ReflectionSpacing = 2 -[SongSlideMedleyIcon] -X = 335 -Y = 445 +[PartyTournamentWinStaticBGPlayer2] +Tex = PartyTeamButton3 +X = 140 +Y = 320 +W = 520 +H = 78 +Type = Transparent +Color = P2Dark +Reflection = 1 +ReflectionSpacing = 2 + + +########################################## +## ## +## JUKEBOX MODE ## +## ## +########################################## + +[JukeboxPlaylist] +Texts = 5 + +[JukeboxPlaylistBackground] +Tex = PartyBG + +[JukeboxPlaylistStatic1] +X = 388 +Y = 552 W = 24 -H = 24 -Z = 1 +H = 23 +Tex = ButtonEnter Color = White -Tex = icon_song_medley Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 -[SongSlideCalculatedMedleyIcon] -X = 335 -Y = 445 -W = 24 -H = 24 -Z = 1 +[JukeboxPlaylistText1] +X = 70 +Y = 25 +ColR = 0.7 +ColG = 0.7 +ColB = 0.7 +Font = 0 +Size = 60 +Color = White +Text = JUKEBOX_MODE + +[JukeboxPlaylistText2] +X = 418 +Y = 552 +Color = White +Font = 0 +Size = 21 +Align = 0 +Text = SING_LEGEND_CONTINUE + +[JukeboxPlaylistSelectPlayList] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = JUKEBOX_OPTIONS_PLAYLIST_MODE +X = 70 +Y = 110 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 + +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark + +[JukeboxPlaylistSelectPlayList2] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = JUKEBOX_OPTIONS_PLAYLIST +X = 70 +Y = 165 +W = 230 +H = 40 +SkipX = 10 +Fields = 1 + +DColor = +Color = +TColor = White +TDColor = White + +SBGDColor = GrayLight +SBGColor = ColorDark +STColor = White +STDColor = GrayDark + +#---------------------------- + +#[JukeboxTimeBackground] +#Tex = JukeboxTimeBar1 +#X = 325 +#Y = 460 +#W = 315 +#H = 25 +#Color = White +#Type = Transparent + +#[JukeboxTimeProgress] +#X = 339 +#Y = 468 +#W = 248 +#H = 8 +#Color = White +#Type = Colorized + +#[JukeboxTimeText] +#X = 630 +#Y = 466 +#W = 35 +#Font = 1 +#Size = 14 +#Color = White +#Align = 2 + +################ NOT USED ################ +[JukeboxLyricsUpperBar] +X = 80 +W = 640 +Y = 490 +H = 54 +;YOffSet (+/-) for the Sing-Indicator +IndicatorYOffset = 3 + +[JukeboxLyricsLowerBar] +X = 80 +W = 640 +Y = 535 +H = 54 +############################################# + +[JukeboxSongListBackground] +Tex = JukeboxSongListBackground +X = 100 +Y = 55 +W = 600 +H = 440 Color = White -Tex = icon_song_calcmedley -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 +Type = Colorized -[SongSlideVideoIcon] -X = 310 -Y = 445 -W = 24 -H = 24 -Z = 1 +[JukeboxListText] +X = 120 +Y = 65 +W = 500 Color = White -Tex = icon_song_video -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 +Font = 1 +Size = 24 +Align = 0 +Z = 1 +Text=JUKEBOX_SONGLIST -[SongSlideDuetIcon] -X = 335 -Y = 445 -W = 24 -H = 24 +[JukeboxCountText] +X = 680 +Y = 385 +W = 100 +Color = White +Font = 1 +Size = 15 +Align = 2 Z = 1 + +[JukeboxSongDescription] +X = 120 +Y = 110 +W = 560 +H = 25 +Tex = JukeboxSongListBackground +Color = ColorDark +DColor = White +Type = Colorized +Texts=2 + +[JukeboxSongDescriptionText1] +X = 10 +Y = 3 +W = 100 Color = White -Tex = icon_song_duet -Type = Transparent -Reflection = 1 -ReflectionSpacing = 22 +Font = 0 +Size = 18 +Align = 0 +Z = 1 -[SongSlideStatic3] -X = 278 -Y = 120 -W = 244 -H = 200 +[JukeboxSongDescriptionText2] +X = 550 +Y = 3 +W = 100 +Color = WhiteGray +Font = 0 +Size = 18 +Align = 2 Z = 1 -Color = ColorLight -Tex = SongSelection1 + +[JukeboxFind] +X = 310 +Y = 385 +W = 300 +H = 25 +Tex = JukeboxField +Color = ColorDark +DColor = White Type = Colorized +Texts=2 -[SongSlideStatic4] -X = 300 -Y = 320 +[JukeboxFindText1] +X = 10 +Y = 3 W = 200 -H = 160 +Color = White +Font = 1 +Size = 19 +Align = 0 Z = 1 -Color = ColorLight -Tex = SongSelection2 -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 -[SongSlideTextArtist] -X = 400 -Y = 328 -W = 190 +[JukeboxFindText2] +X = -80 +Y = 4 +W = 240 Color = White Font = 1 -Size = 24 -Align = 1 -Text = +Size = 18 +Align = 0 +Z = 1 +Text = JUKEBOX_FIND -[SongSlideTextTitle] -X = 400 -Y = 394 -W = 190 +[JukeboxSort] +X = 310 +Y = 423 +W = 108 +H = 25 +Tex = JukeboxField +Color = ColorDark +DColor = White +Type = Colorized +Texts=2 + +[JukeboxSortText1] +X = 54 +Y = 4 +W = 100 Color = White -Font = 0 -Size = 24 +Font = 1 +Size = 18 Align = 1 -Text = +Z = 1 +Text = OPTION_VALUE_ARTIST -[SongSlideTextNumber] -X = 492 -Y = 457 -Z = 0.95 +[JukeboxSortText2] +X = -80 +Y = 4 +W = 200 Color = White +Font = 1 Size = 18 -Align = 2 -Reflection = 1 -ReflectionSpacing = 21 +Align = 0 +Z = 1 +Text = JUKEBOX_SORT -[SongSlideTextYear] -X = 400 -Y = 447 -Z = 0.95 -Color = White -Size = 20 -Align = 1 +[JukeboxRandom] +X = 450 +Y = 423 +W = 25 +H = 31 +Tex = JukeboxRandom +Color = ColorDark +DColor = White +Type = Colorized + +[JukeboxRepeat] +X = 494 +Y = 423 +W = 25 +H = 31 +Tex = JukeboxRepeat +Color = ColorDark +DColor = White +Type = Colorized -######################################## -#### SCREEN SONGS SCORES ##### -######################################## +[JukeboxLyric] +X = 533 +Y = 423 +W = 25 +H = 31 +Tex = JukeboxLyric +Color = ColorDark +DColor = White +Type = Colorized -[SongSlideTextScore] -X = 530 -Y = 420 -Color = ColorLight -Font = 0 -Size = 24 -Align = 0 +[JukeboxOptions] +X = 572 +Y = 423 +W = 25 +H = 31 +Tex = JukeboxOptions +Color = ColorDark +DColor = White +Type = Colorized -[SongSlideTextMaxScore] -X = 530 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MAX +[JukeboxSongListClose] +X = 640 +Y = 55 +W = 40 +H = 15 +Tex = JukeboxClose +Color = Red +DColor = +Type = Colorized -[SongSlideTextMediaScore] -X = 530 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MEDIA +[JukeboxSongListFixPin] +X = 613 +Y = 55 +W = 25 +H = 15 +Tex = JukeboxFix +Color = ColorDark +DColor = White +Type = Colorized -[SongSlideTextMaxScore2] -X = 670 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 2 +[JukeboxSongCover] +X = 120 +Y = 385 +W = 75 +H = 100 -[SongSlideTextMediaScore2] -X = 670 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 2 +[JukeboxStaticActualSong1] +X = 20 +Y = 25 +W = 84 +H = 104 +Tex = JukeboxCurrentSongBackground +Color = ColorDark +Type = Transparent -[SongSlideTextScoreUser] -X = 670 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 2 +[JukeboxStaticActualSongCover] +X = 22 +Y = 27 +W = 80 +H = 100 -[SongSlideTextMaxScoreLocal] -X = 680 -Y = 450 +[JukeboxTextActualSongArtist] +X = 130 +Y = 43 Color = White -Font = 0 -Size = 22 +Font = 2 +Size = 26 Align = 0 +Z = 1 -[SongSlideTextMediaScoreLocal] -X = 680 -Y = 490 -Color = White -Font = 0 -Size = 22 +[JukeboxTextActualSongTitle] +X = 130 +Y = 70 +Color = ColorDark +Font = 2 +Size = 36 Align = 0 +Z = 1 -[SongSlideTextScoreUserLocal] -X = 680 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 0 +[JukeboxSongListUp] +X = 120 +Y = 95 +W = 560 +H = 15 +Tex = JukeboxSongListUp +Color = ColorDark +DColor = White +Type = Colorized -#Variable statics and texts for song-screen in sing- and partymode -# There can be an unlimited Number of Statics and Texts, As long -# as the numbers are in order. -# Statics that are shown in PartyMode Only are Named_ -# SongStaticParty[No] -# Texts that are shown in PartyMode Only are Named_ -# SongTextParty[No] -# Statics that are shown in Normal Mode Only are Named_ -# SongStaticNonParty[No] -# Texts that are shown in Normal Mode Only are Named_ -# SongTextNonParty[No] -#Here are the ones for singmode +[JukeboxSongListDown] +X = 120 +Y = 360 +W = 560 +H = 15 +Tex = JukeboxSongListDown +Color = ColorDark +DColor = White +Type = Colorized -[SongSlideTextNonParty1] -X = 70 -Y = 6 -Color = White -Font = 0 -Size = 60 -Text = SING_SONG_SELECTION -Align = 0 +#[JukeboxPlayPause] +#X = 280 +#Y = 460 +#W = 40 +#H = 25 +#Tex = JukeboxSongMenuPlayPause +#Color = ColorDark +#DColor = White +#Type = Colorized -# NAVBAR ######################### -# Jump to a letter with [ALT] + [A..Z] -[SongSlideStaticNonParty2] -X = 260 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAlt -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[JukeboxSongMenuBackground] +Tex = JukeboxSongbartopBackground +X = 155 +Y = 0 +W = 500 +H = 50 +Color = ColorDark +Type = Colorized -[SongSlideTextNonParty2] -X = 292 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = + -Reflection = 1 -ReflectionSpacing = 13 +[JukeboxSongMenuTimeBackground] +Tex = JukeboxSongMenuTimeBar +X = 222 +Y = 10 +W = 215 +H = 16 +Color = ColorDark +Type = Colorized -[SongSlideStaticNonParty3] -X = 300 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAZ -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[JukeboxSongMenuTimeProgress] +X = 227 +Y = 13 +W = 205 +H = 9 +Color = ColorDark +Type = Colorized -[SongSlideTextNonParty3] -X = 340 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_GOTO -Reflection = 1 -ReflectionSpacing = 13 +[JukeboxSongMenuTextTime] +X = 485 +Y = 11 +W = 35 +Font = 1 +Size = 15 +Color = White +Align = 2 -# Menu opens with [M] -[SongSlideStaticNonParty4] -X = 425 -Y = 545 -W = 32 +[JukeboxSongMenuPlayPause] +X = 180 +Y = 3 +W = 35 H = 30 -Z = 0.952 -Tex = ButtonM -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Tex = JukeboxSongMenuPlayPause +Color = ColorDark +DColor = White +Type = Colorized -[SongSlideTextNonParty4] -X = 465 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_MENU -Reflection = 1 -ReflectionSpacing = 13 +[JukeboxSongMenuPrevious] +X = 500 +Y = 4 +W = 26 +H = 26 +Tex = JukeboxSongMenuPrevious +Color = ColorDark +DColor = White +Type = Colorized -# The so famous search, shown with [J] -[SongSlideStaticNonParty5] -X = 515 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonJ -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[JukeboxSongMenuNext] +X = 530 +Y = 4 +W = 26 +H = 26 +Tex = JukeboxSongMenuNext +Color = ColorDark +DColor = White +Type = Colorized -[SongSlideTextNonParty5] -X = 555 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_JUMPTO_DESC -Reflection = 1 -ReflectionSpacing = 13 +[JukeboxSongMenuOptions] +X = 566 +Y = 3 +W = 22 +H = 28 +Tex = JukeboxOptions +Color = ColorDark +DColor = White +Type = Colorized + +[JukeboxSongMenuPlaylist] +X = 600 +Y = 3 +W = 24 +H = 29 +Tex = JukeboxSongMenuPlaylist +Color = ColorDark +DColor = White +Type = Colorized + +[JukeboxSongOptionsBackground] +Tex = JukeboxSongOptionsBackground +X = 150 +Y = 55 +W = 500 +H = 440 +Color = ColorDark +Type = Colorized -# [P]laylist -[SongSlideStaticNonParty6] -X = 680 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonP -Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +[JukeboxSongOptionsClose] +X = 595 +Y = 55 +W = 40 +H = 15 +Tex = JukeboxClose +Color = Red +DColor = +Type = Colorized -[SongSlideTextNonParty6] -X = 720 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_PLAYLIST -Reflection = 1 -ReflectionSpacing = 13 +[JukeboxSongOptionsDefault] +X = 160 +Y = 455 +W = 120 +H = 25 +Tex = JukeboxButton +Color = ColorDark +DColor = +Type = Colorized +Texts = 1 -#and these are the ones for partymode -[SongSlideStaticParty1] -X = 40 -Y = 22 -W = 27 -H = 27 +[JukeboxSongOptionsDefaultText1] +X = 60 +Y = 4 +W = 120 +Font = 1 +Size = 18 Color = White -Tex = PartyIcon +Align = 1 +Text = JUKEBOX_SONGOPTIONS_DEFAULT + +[JukeboxSongOptionsSave] +X = 515 +Y = 455 +W = 120 +H = 25 +Tex = JukeboxButton +Color = ColorDark +DColor = Type = Colorized +Texts = 1 -# NAVBAR for party -# enter a number -[SongSlideStaticParty2] -X = 260 -Y = 545 -Z = 0.952 -W = 32 -H = 30 -Tex = Button13 +[JukeboxSongOptionsSaveText1] +X = 60 +Y = 4 +W = 120 +Font = 1 +Size = 18 Color = White -Type = Transparent - -[SongSlideTextParty3] -X = 300 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_MENU_NAME_PARTY_JOKER -Reflection = 1 -ReflectionSpacing = 13 +Align = 1 +Text = JUKEBOX_SONGOPTIONS_SAVE -# menu -[SongSlideStaticParty3] -X = 400 -Y = 552 -Z = 0.952 -W = 24 -H = 23 -Tex = ButtonM +[JukeboxSongOptionsTextSaved] +X = 500 +Y = 459 +W = 120 +Font = 1 +Size = 18 Color = White -Type = Transparent +Align = 2 +Text = JUKEBOX_SONGOPTIONS_OPTIONSSAVED -[SongSlideTextParty4] -X = 426 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 +[JukeboxSongOptionsVideoText] +X = 160 +Y = 65 +W = 500 +Color = White +Font = 1 +Size = 20 Align = 0 -Text = PARTY_SONG_MENU -Reflection = 1 -ReflectionSpacing = 13 +Z = 1 +Text=JUKEBOX_SONGOPTIONS_VIDEO -[SongSlideStaticParty4] -X = 540 -Y = 552 -Z = 0.952 -W = 24 -H = 24 -Tex = ButtonEnter +[JukeboxSongOptionsLyricText] +X = 160 +Y = 198 +W = 500 Color = White -Type = Transparent - -[SongSlideTextParty5] -X = 570 -Y = 548 -Color = Black -Font = 0 -Size = 24 +Font = 1 +Size = 20 Align = 0 -Text = PARTY_SONG_LEGEND_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 +Z = 1 +Text=JUKEBOX_SONGOPTIONS_LYRIC -#Texts for Party Mode -[SongSlideTextParty1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 -Color = White -Text = PARTY_MODE +[JukeboxSongOptionsVideoAspectSlide] +TexSBG=JukeboxSelect +Text=JUKEBOX_SONGOPTIONS_VIDEO_ASPECT +TypeSBG=Colorized +ShowArrows=1 +OneItemOnly=1 +X=180 +Y=100 +W=200 +H=20 +Z=0.97 +SkipX=0 +SBGW=220 +TextSize=18 -[SongSlideTextParty2] -X = 238 -Y = 548 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_SONG_WHEREAMI -#variable statics end +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -# Jokers, 5 for each team, only shown in party Mode -[SongSlideStaticTeam1Joker1] -Tex = Joker -X = 505 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 -[SongSlideStaticTeam1Joker2] -Tex = Joker -X = 555 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[JukeboxSongOptionsVideoWidthSlide] +TexSBG=JukeboxSelect +Text=JUKEBOX_SONGOPTIONS_VIDEO_WIDTH +TypeSBG=Colorized +ShowArrows=1 +OneItemOnly=1 +X=180 +Y=130 +W=200 +H=20 +Z=0.97 +SkipX=0 +SBGW=220 +TextSize=18 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[JukeboxSongOptionsVideoHeightSlide] +TexSBG=JukeboxSelect +Text=JUKEBOX_SONGOPTIONS_VIDEO_HEIGHT +TypeSBG=Colorized +ShowArrows=1 +OneItemOnly=1 +X=180 +Y=150 +Y=160 +W=200 +H=20 +Z=0.97 +SkipX=0 +SBGW=220 +TextSize=18 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[JukeboxSongOptionsLyricPositionSlide] +TexSBG=JukeboxSelect +Text=JUKEBOX_SONGOPTIONS_LYRIC_POSITION +TypeSBG=Colorized +ShowArrows=1 +OneItemOnly=1 +X=180 +Y=233 +W=200 +H=20 +Z=0.97 +SkipX=0 +SBGW=220 +TextSize=18 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongSlideStaticTeam1Joker3] -Tex = Joker -X = 605 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[JukeboxSongOptionsLyricAlphaSlide] +TexSBG=JukeboxSelect +Text=JUKEBOX_SONGOPTIONS_LYRIC_ALPHA +TypeSBG=Colorized +ShowArrows=1 +OneItemOnly=1 +X=180 +Y=263 +W=200 +H=20 +Z=0.97 +SkipX=0 +SBGW=220 +TextSize=18 -[SongSlideStaticTeam1Joker4] -Tex = Joker -X = 655 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongSlideStaticTeam1Joker5] -Tex = Joker -X = 705 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[JukeboxSongOptionsLyricLineSlide] +TexSBG=JukeboxSelect +Text=JUKEBOX_SONGOPTIONS_LYRIC_LINE +TypeSBG=Colorized +ShowArrows=1 +OneItemOnly=1 +X=180 +Y=293 +W=200 +H=20 +Z=0.97 +SkipX=0 +SBGW=220 +TextSize=18 -[SongSlideStaticTeam2Joker1] -Tex = Joker -X = 505 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongSlideStaticTeam2Joker2] -Tex = Joker -X = 555 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[JukeboxSongOptionsLyricPropertySlide] +TexSBG=JukeboxSelect +Text=JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY +TypeSBG=Colorized +ShowArrows=1 +OneItemOnly=1 +X=180 +Y=323 +W=200 +H=20 +Z=0.97 +SkipX=0 +SBGW=220 +TextSize=18 -[SongSlideStaticTeam2Joker3] -Tex = Joker -X = 605 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongSlideStaticTeam2Joker4] -Tex = Joker -X = 655 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[JukeboxSongOptionsLyricColorSlide] +TexSBG=JukeboxSelect +Text=JUKEBOX_SONGOPTIONS_LYRIC_COLOR +TypeSBG=Colorized +ShowArrows=1 +OneItemOnly=1 +X=180 +Y=353 +W=200 +H=20 +Z=0.97 +SkipX=0 +SBGW=220 +TextSize=18 -[SongSlideStaticTeam2Joker5] -Tex = Joker -X = 705 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongSlideStaticTeam3Joker1] -Tex = Joker -X = 505 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark +[JukeboxSongOptionsLyricSelectR] +Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED +#Tex= JukeboxButton Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +X = 310 +Y = 380 +W = 100 +H = 15 +SkipX = -30 +TextSize = 14 +SBGW=220 -[SongSlideStaticTeam3Joker2] -Tex = Joker -X = 555 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongSlideStaticTeam3Joker3] -Tex = Joker -X = 605 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[JukeboxSongOptionsLyricRed] +X = 380 +Y = 380 +W = 220 +H = 15 +Z = 1 +Alpha = 0.5 +Tex = Picker +Type = Transparent + +[JukeboxSongOptionsLyricPointerR] +X = 380 +Y = 378 +W = 1 +H = 18 +Z = 1 +Tex = Picker +Color = Black +Type = Transparent -[SongSlideStaticTeam3Joker4] -Tex = Joker -X = 655 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark +[JukeboxSongOptionsLyricSelectG] +Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN +#Tex= JukeboxButton Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +X = 310 +Y = 400 +W = 100 +H = 15 +SkipX = -30 +TextSize = 14 +SBGW=220 -[SongSlideStaticTeam3Joker5] -Tex = Joker -X = 705 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[JukeboxSongOptionsLyricGreen] +X = 380 +Y = 400 +W = 220 +H = 15 +Z = 1 +Alpha = 0.5 +Tex = Picker +Type = Transparent + +[JukeboxSongOptionsLyricPointerG] +X = 380 +Y = 398 +W = 1 +H = 18 +Z = 1 +Tex = Picker +Color = Black +Type = Transparent + +[JukeboxSongOptionsLyricSelectB] +Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE +#Tex= JukeboxButton Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +X = 310 +Y = 420 +W = 100 +H = 15 +SkipX = -30 +TextSize = 14 +SBGW=220 -[SongSlideTextPartyTime] -X = 750 -Y = 450 -Color = White -DColor = Red -Font = 1 -Size = 70 -Align = 2 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongSlideInfoMessageBG] -Tex = SongMessage -X = 250 -Y = 90 -W = 300 -H = 25 -Z = 0.98 -Color = ColorDark +[JukeboxSongOptionsLyricBlue] +X = 380 +Y = 420 +W = 220 +H = 15 +Z = 1 +Alpha = 0.5 +Tex = Picker Type = Transparent -[SongSlideInfoMessageText] -X = 400 -Y = 94 -Color = White -Font = 1 -Size = 20 -Align = 1 +[JukeboxSongOptionsLyricPointerB] +X = 380 +Y = 418 +W = 1 +H = 18 +Z = 1 +Tex = Picker +Color = Black +Type = Transparent -############################# -## ## -## Medley Playlist ## -## ## -############################# -[SongSlideTextMedleyNumber1] -X=25 -Y=375 -Color=White -Font=1 -Size=20 -Align=1 +################################ +### S T A T S S C R E E N ### +################################ -[SongSlideTextMedleyArtist1] -X=50 -Y=366 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[StatMain] +Texts = 0 +Statics = 0 -[SongSlideTextMedleyTitle1] -X=50 -Y=383 -Color=White -Font=0 -Size=20 -Align=0 +[StatMainBackground] +Tex = MainBG -[SongSlideTextMedleyNumber2] -X=25 -Y=420 -Color=White -Font=1 -Size=20 -Align=1 +[StatMainButtonScores] +X = 589 +Y = 100 +W = 190 +H = 50 +Tex = Button +Color = ColorDark +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 -[SongSlideTextMedleyArtist2] -X=50 -Y=411 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[StatMainButtonScoresText1] +X = 95 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = STAT_DESC_SCORES +Color = White -[SongSlideTextMedleyTitle2] -X=50 -Y=428 -Color=White -Font=0 -Size=20 -Align=0 +[StatMainButtonSingers] +X = 589 +Y = 160 +W = 190 +H = 50 +Tex = Button +Color = ColorDark +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 -[SongSlideTextMedleyNumber3] -X=25 -Y=465 -Color=White -Font=1 -Size=20 -Align=1 +[StatMainButtonSingersText1] +X = 95 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = STAT_DESC_SINGERS +Color = White -[SongSlideTextMedleyArtist3] -X=50 -Y=454 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[StatMainButtonSongs] +X = 589 +Y = 220 +W = 190 +H = 50 +Tex = Button +Color = ColorDark +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 -[SongSlideTextMedleyTitle3] -X=50 -Y=471 -Color=White -Font=0 -Size=20 -Align=0 +[StatMainButtonSongsText1] +X = 95 +Y = 13 +Font = 0 +Size = 24 +Align = 1 +Text = STAT_DESC_SONGS +Color = White + +[StatMainButtonBands] +X = 589 +Y = 280 +W = 190 +H = 50 +Tex = Button +Color = ColorDark +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 + +[StatMainButtonBandsText1] +X = 95 +Y = 13 +Font = 0 +Size = 24 +Align = 1 +Text = STAT_DESC_BANDS +Color = White -[SongSlideTextMedleyNumber4] -X=25 -Y=510 -Color=White -Font=1 -Size=20 -Align=1 +[StatMainButtonExit] +X = 589 +Y = 340 +W = 190 +H = 50 +Tex = Button +Color = ColorDark +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 -[SongSlideTextMedleyArtist4] -X=50 -Y=501 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[StatMainButtonExitText1] +X = 95 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = SING_OPTIONS_EXIT +Color = White -[SongSlideTextMedleyTitle4] -X=50 -Y=518 -Color=White -Font=0 -Size=20 -Align=0 +[StatMainTextOverview] +X = 45 +Y = 125 +W = 510 +Color = White +Font = 0 +Size = 27 +Align = 0 +Text = -[SongSlideStaticMedley1] -Tex = PlayerNumberBox -X = 10 -Y = 370 -W = 30 -H = 30 -Z = 1 -Color = ColorDark +[StatMainStatic1] +X = 40 +Y = 100 +W = 520 +H = 20 +Tex = StatMainBG1 +Color = ColorLight Type = Colorized -[SongSlideStaticMedley2] -Tex = PlayerNumberBox -X = 10 -Y = 415 -W = 30 -H = 30 -Z = 1 +[StatMainStatic2] +X = 40 +Y = 120 +W = 520 +H = 300 +Tex = StatMainBG2 Color = ColorDark Type = Colorized -[SongSlideStaticMedley3] -Tex = PlayerNumberBox -X = 10 -Y = 460 -W = 30 -H = 30 -Z = 1 -Color = ColorDark +[StatMainStatic3] +X = 40 +Y = 420 +W = 520 +H = 20 +Tex = StatMainBG3 +Color = ColorLight Type = Colorized -[SongSlideStaticMedley4] -Tex = PlayerNumberBox -X = 10 -Y = 505 -W = 30 -H = 30 -Z = 1 +[StatMainText1] +X = 70 +Y = 6 +Color = White +Font = 0 +Size = 60 +Text = STAT_MAIN +Align = 0 + +[StatDetail] +Texts = 0 +Statics = 0 + +[StatDetailBackground] +Tex = MainBG + +[StatDetailButtonNext] +X = 589 +Y = 100 +W = 190 +H = 50 +Tex = Button Color = ColorDark -Type = Colorized +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 -######################################################################################## -##### ##### -##### List ##### -##### ##### -######################################################################################## +[StatDetailButtonNextText1] +X = 95 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = STAT_NEXT +Color = White -[SongList] +[StatDetailButtonPrev] +X = 589 +Y = 160 +W = 190 +H = 50 +Tex = Button +Color = ColorDark +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 -[SongListBackground] -Tex = SongBG +[StatDetailButtonPrevText1] +X = 95 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = STAT_PREV +Color = White -[SongListStaticNonParty1] -X = 40 -Y = 22 -W = 27 -H = 27 +[StatDetailButtonReverse] +X = 589 +Y = 220 +W = 190 +H = 50 +Tex = Button +Color = ColorDark +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 + +[StatDetailButtonReverseText1] +X = 95 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = STAT_REVERSE Color = White -Tex = SongCD -Type = Colorized -[SongListTextCat] -X = 72 -Y = 58 +[StatDetailButtonExit] +X = 589 +Y = 280 +W = 190 +H = 50 +Tex = Button +Color = ColorDark +DColor = GrayDark +Type = Transparent +Texts = 1 +Reflection = 0 + +[StatDetailButtonExitText1] +X = 95 +Y = 10 +Font = 0 +Size = 30 +Align = 1 +Text = SING_OPTIONS_EXIT +Color = White + +[StatDetailTextDescription] +X = 70 +Y = 53 Color = White Font = 0 Size = 30 Align = 0 -Text = SING_SONG_SELECTION_DESC +Text = -[SongListStatic1] -X = 0 -Y = 545 -W = 250 -H = 30 -Z = 0.4 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[StatDetailTextPage] +X = 546 +Y = 98 +Color = Black +Font = 0 +Size = 15 +Align = 2 +Text = -[SongListStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Z = 0.951 -Tex = Leiste2 +[StatDetailTextList1] +X = 45 +Y = 122 Color = White -Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongListSelectSong] -X = 40 -Y = 110 -W = 460 -H = 80 -Z = 0.50 -Rows = 5 -Padding = 2 -DColor = GrayLightest -Color = ColorLight -Tex = SongSelection5 -DTex = SongSelection4 -Type = Colorized -Reflection = 0 -ReflectionSpacing = 0 +Font = 0 +Size = 21 +Text = Stat1 -[SongListCover] -X = 44 -Y = 115 -W = 75 -H = 70 -Z = 0.95 -SelectX = 525 -SelectY = 340 -SelectW = 215 -SelectH = 190 -SelectReflection = 0 -SelectReflectionSpacing = 0 -Padding = 12 -Reflections = 0 -Rows = 5 +[StatDetailTextList2] +X = 45 +Y = 160 +Color = White +Font = 0 +Size = 21 +Text = Stat2 -[SongListEqualizer] -Visible = 1 -Direction = 1 +[StatDetailTextList3] +X = 45 +Y = 198 Color = White -Alpha = 1 -X = 750 -Y = 525 -PieceW = 4 -PieceH = 4 -Space = 1 -Bands = 7 -Length = 15 -Reflection = 0 -ReflectionSpacing = 0 +Font = 0 +Size = 21 +Text = -[SongListMedleyIcon] -X = 470 -Y = 142 -W = 22 -H = 22 -Z = 1 +[StatDetailTextList4] +X = 45 +Y = 236 Color = White -Tex = icon_song_medley -Type = Transparent -Reflection = 0 +Font = 0 +Size = 21 +Text = -[SongListCalculatedMedleyIcon] -X = 470 -Y = 142 -W = 22 -H = 22 -Z = 1 +[StatDetailTextList5] +X = 45 +Y = 274 Color = White -Tex = icon_song_calcmedley -Type = Transparent -Reflection = 0 +Font = 0 +Size = 21 +Text = -[SongListVideoIcon] -X = 470 -Y = 116 -W = 22 -H = 22 -Z = 1 +[StatDetailTextList6] +X = 45 +Y = 312 Color = White -Tex = icon_song_video -Type = Transparent -Reflection = 0 +Font = 0 +Size = 21 +Text = -[SongListDuetIcon] -X = 470 -Y = 142 -W = 22 -H = 22 -Z = 1 +[StatDetailTextList7] +X = 45 +Y = 350 Color = White -Tex = icon_song_duet -Type = Transparent -Reflection = 0 +Font = 0 +Size = 21 +Text = -[SongListTextArtist] -X = 130 -Y = 120 -W = 440 +[StatDetailTextList8] +X = 45 +Y = 388 Color = White -Font = 1 -Size = 28 -Align = 0 +Font = 0 +Size = 21 Text = -[SongListTextTitle] -X = 130 -Y = 150 -W = 330 +[StatDetailTextList9] +X = 45 +Y = 426 Color = White Font = 0 -Size = 26 -Align = 0 +Size = 21 Text = -[SongListTextNumber] -X = 280 -Y = 518 -Z = 0.95 +[StatDetailTextList10] +X = 45 +Y = 464 Color = White -Size = 20 -Align = 1 -Reflection = 1 -ReflectionSpacing = 2 +Font = 0 +Size = 21 +Text = -[SongListTextYear] -X = 490 -Y = 168 -Z = 0.95 +[StatDetailStatic1] +X = 40 +Y = 22 +W = 27 +H = 27 Color = White -Size = 18 -Align = 2 +Tex = StatIcon +Type = Colorized -######################################## -#### SCREEN SONGS SCORES ##### -######################################## +[StatDetailStatic1] +X = 40 +Y = 100 +W = 520 +H = 24 +Tex = StatDetailBG1 +Color = ColorLight +Type = Colorized -[SongListTextScore] -X = 525 -Y = 235 +[StatDetailStatic2] +X = 40 +Y = 124 +W = 520 +H = 376 +Tex = StatMainBG2 +Color = ColorDark +Type = Colorized + +[StatDetailStatic3] +X = 40 +Y = 500 +W = 520 +H = 20 +Tex = StatMainBG3 Color = ColorLight -Font = 0 -Size = 24 -Align = 0 +Type = Colorized -[SongListTextMaxScore] -X = 525 -Y = 265 +[StatDetailText1] +X = 70 +Y = 6 Color = White Font = 0 -Size = 22 +Size = 60 +Text = STAT_DETAIL Align = 0 -Text =SONG_SCORE_MAX -[SongListTextMediaScore] -X = 525 -Y = 305 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MEDIA -[SongListTextMaxScore2] -X = 665 -Y = 265 +[Options] +Texts = 6 +Fade = 2 + +[OptionsBackground] +Tex = OptionsBG + +[OptionsText1] +X = 25 +Y = 25 Color = White Font = 0 -Size = 22 -Align = 2 +Size = 54 +Text = SING_OPTIONS +Align = 0 -[SongListTextMediaScore2] -X = 665 -Y = 305 +[OptionsButtonGame] +X = 105 +Y = 120 +W = 85 +H = 80 +Tex = Optionsbuttongame Color = White -Font = 0 -Size = 22 -Align = 2 +DColor = White +Type = Transparent +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 70 +FadeTex = ButtonFade +FadeTexPos = 0 -[SongListTextScoreUser] -X = 665 -Y = 283 -Color = ColorLight +[OptionsButtonGameText1] +X = 45 +Y = 80 Font = 0 -Size = 20 -Align = 2 +Size = 26 +Align = 1 +Text = SING_OPTIONS_GAME +Color = White -[SongListTextMaxScoreLocal] -X = 675 -Y = 265 +[OptionsButtonGraphics] +X = 250 +Y = 120 +W = 105 +H = 85 +Tex = Optionsbuttongraphics Color = White +DColor = White +Type = Transparent +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 75 +FadeTex = ButtonFade +FadeTexPos = 0 + +[OptionsButtonGraphicsText1] +X = 55 +Y = 80 Font = 0 -Size = 22 -Align = 0 +Size = 26 +Align = 1 +Text = SING_OPTIONS_GRAPHICS +Color = White -[SongListTextMediaScoreLocal] -X = 675 -Y = 305 +[OptionsButtonSound] +X = 432 +Y = 120 +W = 60 +H = 70 +Tex = Optionsbuttonsound Color = White -Font = 0 -Size = 22 -Align = 0 +DColor = White +Type = Transparent +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 60 +FadeTex = ButtonFade +FadeTexPos = 0 -[SongListTextScoreUserLocal] -X = 675 -Y = 283 -Color = ColorLight +[OptionsButtonSoundText1] +X = 30 +Y = 80 Font = 0 -Size = 20 -Align = 0 - -#Variable statics and texts for song-screen in sing- and partymode -# There can be an unlimited Number of Statics and Texts, As long -# as the numbers are in order. -# Statics that are shown in PartyMode Only are Named_ -# SongStaticParty[No] -# Texts that are shown in PartyMode Only are Named_ -# SongTextParty[No] -# Statics that are shown in Normal Mode Only are Named_ -# SongStaticNonParty[No] -# Texts that are shown in Normal Mode Only are Named_ -# SongTextNonParty[No] -#Here are the ones for singmode - -[SongListTextNonParty1] -X = 70 -Y = 6 +Size = 26 +Align = 1 +Text = SING_OPTIONS_SOUND Color = White -Font = 0 -Size = 60 -Text = SING_SONG_SELECTION -Align = 0 -# NAVBAR ######################### -# Jump to a letter with [ALT] + [A..Z] -[SongListStaticNonParty2] -X = 260 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAlt +[OptionsButtonLyrics] +X = 580 +Y = 120 +W = 70 +H = 75 +Tex = Optionsbuttonlyrics Color = White +DColor = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Align = 0 +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 65 +FadeTex = ButtonFade +FadeTexPos = 0 -[SongListTextNonParty2] -X = 292 -Y = 548 -Z = 0.952 -Color = Black +[OptionsButtonLyricsText1] +X = 35 +Y = 80 Font = 0 -Size = 24 -Align = 0 -Text = + -Reflection = 1 -ReflectionSpacing = 13 +Size = 26 +Align = 1 +Text = SING_OPTIONS_LYRICS +Color = White -[SongListStaticNonParty3] -X = 300 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAZ +[OptionsButtonThemes] +X = 105 +Y = 270 +W = 95 +H = 85 +Tex = Optionsbuttondesign Color = White +DColor = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Align = 0 +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 75 +FadeTex = ButtonFade +FadeTexPos = 0 -[SongListTextNonParty3] -X = 340 -Y = 548 -Z = 0.952 -Color = Black +[OptionsButtonThemesText1] +X = 40 +Y = 80 Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_GOTO -Reflection = 1 -ReflectionSpacing = 13 +Size = 26 +Align = 1 +Text = SING_OPTIONS_THEMES +Color = White -# Menu opens with [M] -[SongListStaticNonParty4] -X = 425 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonM +[OptionsButtonRecord] +X = 260 +Y = 270 +W = 85 +H = 75 +Tex = Optionsbuttonrecord Color = White +DColor = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Align = 0 +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 65 +FadeTex = ButtonFade +FadeTexPos = 0 -[SongListTextNonParty4] -X = 465 -Y = 548 -Z = 0.952 -Color = Black +[OptionsButtonRecordText1] +X = 45 +Y = 80 Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_MENU -Reflection = 1 -ReflectionSpacing = 13 +Size = 26 +Align = 1 +Text = SING_OPTIONS_RECORD +Color = White +Texts = 1 -# The so famous search, shown with [J] -[SongListStaticNonParty5] -X = 515 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonJ +[OptionsButtonAdvanced] +X = 428 +Y = 270 +W = 67 +H = 77 +Tex = Optionsbuttonadvanced Color = White +DColor = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +Align = 0 +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 67 +FadeTex = ButtonFade +FadeTexPos = 0 -[SongListTextNonParty5] -X = 555 -Y = 548 -Z = 0.952 -Color = Black +[OptionsButtonAdvancedText1] +X = 36 +Y = 80 Font = 0 -Size = 24 -Align = 0 -Text = SONG_JUMPTO_DESC -Reflection = 1 -ReflectionSpacing = 13 +Size = 26 +Align = 1 +Text = SING_OPTIONS_ADVANCED +Color = White +Texts = 1 -# [P]laylist -[SongListStaticNonParty6] -X = 680 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonP +[OptionsButtonNetwork] +X = 585 +Y = 270 +W = 65 +H = 77 +Tex = Optionsbuttonnetwork Color = White +DColor = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 - -[SongListTextNonParty6] -X = 720 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 Align = 0 -Text = SING_SONG_SELECTION_PLAYLIST -Reflection = 1 -ReflectionSpacing = 13 +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 67 +FadeTex = ButtonFade +FadeTexPos = 0 -#and these are the ones for partymode -[SongListStaticParty1] -X = 40 -Y = 22 -W = 27 -H = 27 +[OptionsButtonNetworkText1] +X = 31 +Y = 80 +Font = 0 +Size = 26 +Align = 1 +Text = SING_OPTIONS_NETWORK Color = White -Tex = PartyIcon -Type = Colorized +Texts = 1 -# NAVBAR for party -# enter a number -[SongListStaticParty2] -X = 260 -Y = 545 -Z = 0.952 -W = 32 -H = 30 -Tex = Button13 +[OptionsButtonWebcam] +X = 105 +Y = 425 +W = 85 +H = 80 +Tex = Optionsbuttonwebcam Color = White +DColor = White Type = Transparent +Align = 0 +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 70 +FadeTex = ButtonFade +FadeTexPos = 0 -[SongListTextParty3] -X = 300 -Y = 548 -Z = 0.952 -Color = Black +[OptionsButtonWebcamText1] +X = 38 +Y = 80 Font = 0 -Size = 24 -Align = 0 -Text = SONG_MENU_NAME_PARTY_JOKER -Reflection = 1 -ReflectionSpacing = 13 +Size = 26 +Align = 1 +Text = SING_OPTIONS_WEBCAM +Color = White +Texts = 1 -# menu -[SongListStaticParty3] -X = 400 -Y = 552 -Z = 0.952 -W = 24 -H = 23 -Tex = ButtonM +[OptionsButtonJukebox] +X = 270 +Y = 425 +W = 65 +H = 75 +Tex = Optionsbuttonjukebox Color = White +DColor = White Type = Transparent +Align = 0 +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 65 +FadeTex = ButtonFade +FadeTexPos = 0 -[SongListTextParty4] -X = 426 -Y = 548 -Z = 0.952 -Color = Black +[OptionsButtonJukeboxText1] +X = 35 +Y = 80 Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_MENU -Reflection = 1 -ReflectionSpacing = 13 +Size = 26 +Align = 1 +Text = SING_OPTIONS_JUKEBOX +Color = White -[SongListStaticParty4] -X = 540 -Y = 552 -Z = 0.952 -W = 24 -H = 24 -Tex = ButtonEnter +[OptionsButtonExit] +X = 415 +Y = 425 +W = 80 +H = 80 +Tex = Optionsbuttonback Color = White +DColor = White Type = Transparent - -[SongListTextParty5] -X = 570 -Y = 548 -Color = Black -Font = 0 -Size = 24 Align = 0 -Text = PARTY_SONG_LEGEND_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 +Texts = 1 +Fade = 1 +FadeText = 1 +SelectH = 70 +FadeTex = ButtonFade +FadeTexPos = 0 -#Texts for Party Mode -[SongListTextParty1] -X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 +[OptionsButtonExitText1] +X = 50 +Y = 80 Font = 0 -Size = 60 +Size = 26 +Align = 1 +Text = SING_OPTIONS_EXIT Color = White -Text = PARTY_MODE - -[SongListTextParty2] -X = 238 -Y = 548 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_SONG_WHEREAMI -#variable statics end - -# Jokers, 5 for each team, only shown in party Mode -[SongListStaticTeam1Joker1] -Tex = Joker -X = 505 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongListStaticTeam1Joker2] -Tex = Joker -X = 555 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongListStaticTeam1Joker3] -Tex = Joker -X = 605 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongListStaticTeam1Joker4] -Tex = Joker -X = 655 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 -[SongListStaticTeam1Joker5] -Tex = Joker -X = 705 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsGame] +Texts = 5 -[SongListStaticTeam2Joker1] -Tex = Joker -X = 505 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsGameBackground] +Tex = OptionsBG -[SongListStaticTeam2Joker2] -Tex = Joker -X = 555 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsGameStatic1] +X = 30 +Y = 25 +W = 75 +H = 70 +Color = White +Tex = Optionsbuttongame +Type = Transparent -[SongListStaticTeam2Joker3] -Tex = Joker -X = 605 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsGameText1] +X = 125 +Y = 35 +Color = White +Size = 45 +Text = SING_OPTIONS_GAME -[SongListStaticTeam2Joker4] -Tex = Joker -X = 655 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +#[OptionsGameText2] +#X = 50 +#Y = 28 +#Color = ColorLightest +#Size = 30 +#Text = SING_OPTIONS_GAME_DESC -[SongListStaticTeam2Joker5] -Tex = Joker -X = 705 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +#[OptionsGameText3] +#X = 70 +#Y = 85 +#Color = White +#Size = 30 +#Text = SING_OPTIONS_GAME_WHEREAMI -[SongListStaticTeam3Joker1] -Tex = Joker -X = 505 -Y = 500 -W = 40 +[OptionsGameSelectSlideLanguage] +Text = SING_OPTIONS_GAME_LANGUAGE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 130 +W = 250 H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +SkipX = 10 -[SongListStaticTeam3Joker2] -Tex = Joker -X = 555 -Y = 500 -W = 40 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsGameSelectSongMenu] +Text = SING_OPTIONS_GAME_SONGMENU +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 180 +W = 250 H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +SkipX = 10 -[SongListStaticTeam3Joker3] -Tex = Joker -X = 605 -Y = 500 -W = 40 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsGameSelectTabs] +Text = SING_OPTIONS_GAME_TABS +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 230 +W = 250 H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +SkipX = 10 -[SongListStaticTeam3Joker4] -Tex = Joker -X = 655 -Y = 500 -W = 40 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsGameSelectSlideSorting] +Text = SING_OPTIONS_GAME_SORTING +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 280 +W = 250 H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +SkipX = 10 -[SongListStaticTeam3Joker5] -Tex = Joker -X = 705 -Y = 500 -W = 40 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsGameSelectShowScores] +Text = SING_OPTIONS_GAME_SHOWSCORES +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 330 +W = 250 H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +SkipX = 10 -[SongListTextPartyTime] -X = 750 -Y = 450 -Color = White -DColor = Red -Font = 1 -Size = 70 -Align = 2 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongListInfoMessageBG] -Tex = SongMessage -X = 250 -Y = 90 -W = 300 -H = 25 -Z = 0.98 -Color = ColorDark +[OptionsGameSelectDebug] +Text = SING_OPTIONS_GAME_DEBUG +Tex = MainBar Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 380 +W = 250 +H = 40 +SkipX = 10 -[SongListInfoMessageText] -X = 400 -Y = 94 -Color = White -Font = 1 -Size = 20 -Align = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -############################# -## ## -## Medley Playlist ## -## ## -############################# +[OptionsGameButtonExit] +X = 70 +Y = 440 +W = 250 +H = 40 +Tex = Button +Color = ColorDark +DColor = Gray +Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -[SongListTextMedleyMax] -N = 3 +[OptionsGraphics] +Texts = 5 -[SongListTextMedleyNumber1] -X=540 -Y=100 -Color=White -Font=1 -Size=20 -Align=1 +[OptionsGraphicsBackground] +Tex = OptionsBG -[SongListTextMedleyArtist1] -X=565 -Y=91 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[OptionsGraphicsStatic1] +X = 20 +Y = 20 +W = 90 +H = 75 +Color = White +Tex = Optionsbuttongraphics +Type = Transparent -[SongListTextMedleyTitle1] -X=565 -Y=108 -Color=White -Font=0 -Size=20 -Align=0 +[OptionsGraphicsText1] +X = 120 +Y = 35 +Color = White +Size = 45 +Text = SING_OPTIONS_GRAPHICS -[SongListTextMedleyNumber2] -X=540 -Y=145 -Color=White -Font=1 -Size=20 -Align=1 +#[OptionsGraphicsText2] +#X = 65 +#Y = 55 +#Color = ColorLightest +#Size = 30 +#Text = SING_OPTIONS_GRAPHICS_DESC -[SongListTextMedleyArtist2] -X=565 -Y=136 -Color=ColorDark -Font=0 -Size=20 -Align=0 +#[OptionsGraphicsText3] +#X = 70 +#Y = 85 +#Color = White +#Size = 30 +#Text = SING_OPTIONS_GRAPHICS_WHEREAMI -[SongListTextMedleyTitle2] -X=565 -Y=153 -Color=White -Font=0 -Size=20 -Align=0 +[OptionsGraphicsSelectFullscreen] +Text = SING_OPTIONS_GRAPHICS_FULLSCREEN +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 130 +W = 250 +H = 40 +SkipX = 10 -[SongListTextMedleyNumber3] -X=540 -Y=190 -Color=White -Font=1 -Size=20 -Align=1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongListTextMedleyArtist3] -X=565 -Y=181 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[OptionsGraphicsSelectSlideResolution] +Text = SING_OPTIONS_GRAPHICS_RESOLUTION +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 180 +W = 250 +H = 40 +SkipX = 10 -[SongListTextMedleyTitle3] -X=565 -Y=198 -Color=White -Font=0 -Size=20 -Align=0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongListStaticMedley1] -Tex = PlayerNumberBox -X = 525 -Y = 95 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[OptionsGraphicsSelectDepth] +Text = SING_OPTIONS_GRAPHICS_DEPTH +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 230 +W = 250 +H = 40 +SkipX = 10 -[SongListStaticMedley2] -Tex = PlayerNumberBox -X = 525 -Y = 140 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongListStaticMedley3] -Tex = PlayerNumberBox -X = 525 -Y = 185 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[OptionsGraphicsSelectVisualizer] +Text = SING_OPTIONS_GRAPHICS_VISUALIZER +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 280 +W = 250 +H = 40 +SkipX = 10 -######################################################################################## -##### ##### -##### Mosaic ##### -##### ##### -######################################################################################## +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaic] +[OptionsGraphicsSelectOscilloscope] +Text = SING_OPTIONS_GRAPHICS_OSCILLOSCOPE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 330 +W = 250 +H = 40 +SkipX = 10 -[SongMosaicBackground] -Tex = SongBG +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStaticNonParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = SongCD -Type = Colorized +[OptionsGraphicsSelectMovieSize] +Text = SING_OPTIONS_GRAPHICS_MOVIE_SIZE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 380 +W = 250 +H = 40 +SkipX = 10 -[SongMosaicTextCat] -X = 72 -Y = 58 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = SING_SONG_SELECTION_DESC +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStatic1] -X = 0 -Y = 545 +[OptionsGraphicsButtonExit] +X = 70 +Y = 440 W = 250 -H = 30 -Z = 0.4 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 - -[SongMosaicStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Z = 0.951 -Tex = Leiste2 -Color = White +H = 40 +Tex = Button +Color = ColorDark +DColor = Gray Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[SongMosaicCover] -X = 70 -Y = 110 -W = 135 -H = 135 -SelectX = 215 -SelectY = 110 -SelectW = 305 -SelectH = 305 -ZoomThumbW = 140 -ZoomThumbH = 140 -ZoomThumbStyle = 0 -Rows = 3 -Cols = 1 -Padding = 4 -Reflections = 0 +[OptionsSound] +Texts = 5 -[SongMosaicEqualizer] -Visible = 1 -Direction = 1 -Color = White -Alpha = 1 -X = 40 -Y = 516 -PieceW = 5 -PieceH = 5 -Space = 1 -Bands = 4 -Length = 18 -Reflection = 1 -ReflectionSpacing = 2 +[OptionsSoundBackground] +Tex = OptionsBG -[SongMosaicMedleyIcon] -X = 462 -Y = 492 -W = 24 -H = 24 -Z = 1 +[OptionsSoundStatic1] +X = 30 +Y = 30 +W = 50 +H = 60 Color = White -Tex = icon_song_medley +Tex = Optionsbuttonsound Type = Transparent -Reflection = 0 -ReflectionSpacing = 0 -[SongMosaicCalculatedMedleyIcon] -X = 462 -Y = 492 -W = 24 -H = 24 -Z = 1 +[OptionsSoundText1] +X = 110 +Y = 35 Color = White -Tex = icon_song_calcmedley +Size = 45 +Text = SING_OPTIONS_SOUND + + +[OptionsSoundSelectVoicePassthrough] +Tex = MainBar Type = Transparent -Reflection = 0 -ReflectionSpacing = 0 +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_VOICEPASSTHROUGH +X = 70 +Y = 130 +W = 250 +H = 35 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsSoundSelectBackgroundMusic] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_BACKGROUNDMUSIC +X = 70 +Y = 170 +W = 250 +H = 35 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicVideoIcon] -X = 490 -Y = 492 -W = 24 -H = 24 -Z = 1 -Color = White -Tex = icon_song_video +[OptionsSoundSelectClickAssist] +Tex = MainBar Type = Transparent -Reflection = 0 -ReflectionSpacing = 0 +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_CLICK_ASSIST +X = 70 +Y = 210 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicDuetIcon] -X = 462 -Y = 492 -W = 24 -H = 24 -Z = 1 -Color = White -Tex = icon_song_duet +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsSoundSelectBeatClick] +Tex = MainBar Type = Transparent -Reflection = 0 -ReflectionSpacing = 0 +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_BEAT_CLICK +X = 70 +Y = 250 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicStatic3] -X = 215 -Y = 415 -W = 305 -H = 107 -Z = 0.9 -Color = ColorLight -Tex = JukeboxSongListBackground -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextArtist] -X = 223 -Y = 425 -W = 300 -Color = White -Font = 1 -Size = 28 -Align = 0 -Text = +[OptionsSoundSelectSlideMusicAutoGain] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_MUSICAUTOGAIN +X = 70 +Y = 290 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextTitle] -X = 223 -Y = 475 -W = 300 -Color = White -Font = 0 -Size = 24 -Align = 0 -Text = +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextNumber] -X = 140 -Y = 526 -Z = 0.95 -Color = White -Size = 18 -Align = 1 -Reflection = 0 -ReflectionSpacing = 0 +[OptionsSoundSelectSlidePreviewVolume] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_PREVIEWVOLUME +X = 70 +Y = 330 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextYear] -X = 455 -Y = 500 -Z = 1 -Color = White -Size = 18 -Align = 2 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -######################################## -#### SCREEN SONGS SCORES ##### -######################################## +[OptionsSoundSelectSlidePreviewFADING] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_PREVIEWFADING +X = 70 +Y = 370 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextScore] -X = 530 -Y = 420 -Color = ColorLight -Font = 0 -Size = 24 -Align = 0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextMaxScore] -X = 530 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text =SONG_SCORE_MAX +[OptionsSoundButtonExit] +X = 70 +Y = 410 +W = 250 +H = 35 +Tex = Button +Color = ColorDark +DColor = Gray +Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -[SongMosaicTextMediaScore] -X = 530 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 0 -Text = SONG_SCORE_MEDIA +[OptionsLyrics] +Texts = 1 -[SongMosaicTextMaxScore2] -X = 670 -Y = 450 -Color = White -Font = 0 -Size = 22 -Align = 2 +[OptionsLyricsBackground] +Tex = OptionsBG -[SongMosaicTextMediaScore2] -X = 670 -Y = 490 +[OptionsLyricsStatic1] +X = 30 +Y = 30 +W = 60 +H = 65 Color = White -Font = 0 -Size = 22 -Align = 2 - -[SongMosaicTextScoreUser] -X = 670 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 2 +Tex = Optionsbuttonlyrics +Type = Transparent -[SongMosaicTextMaxScoreLocal] -X = 680 -Y = 450 +[OptionsLyricsText1] +X = 100 +Y = 35 Color = White -Font = 0 -Size = 22 -Align = 0 +Size = 45 +Text = SING_OPTIONS_LYRICS -[SongMosaicTextMediaScoreLocal] -X = 680 -Y = 490 -Color = White -Font = 0 -Size = 22 -Align = 0 +[OptionsLyricsText5] +X = 440 +Y = 548 +Z = 0.5 +Color = Black +Size = 24 +Text = SING_LEGEND_ESC +Reflection = 1 +ReflectionSpacing = 20 -[SongMosaicTextScoreUserLocal] -X = 680 -Y = 468 -Color = ColorLight -Font = 0 -Size = 20 -Align = 0 +[OptionsLyricsSelectLyricsFont] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_LYRICS_FONT +X = 70 +Y = 130 +W = 250 +H = 40 +SkipX = 10 -#Variable statics and texts for song-screen in sing- and partymode -# There can be an unlimited Number of Statics and Texts, As long -# as the numbers are in order. -# Statics that are shown in PartyMode Only are Named_ -# SongStaticParty[No] -# Texts that are shown in PartyMode Only are Named_ -# SongTextParty[No] -# Statics that are shown in Normal Mode Only are Named_ -# SongStaticNonParty[No] -# Texts that are shown in Normal Mode Only are Named_ -# SongTextNonParty[No] -#Here are the ones for singmode +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsLyricsSelectLyricsEffect] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_LYRICS_EFFECT +X = 70 +Y = 180 +W = 250 +H = 40 +SkipX = 10 -[SongMosaicTextNonParty1] +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsLyricsSelectNoteLines] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_LYRICS_NOTELINES X = 70 -Y = 6 -Color = White -Font = 0 -Size = 60 -Text = SING_SONG_SELECTION -Align = 0 +Y = 230 +W = 250 +H = 40 +SkipX = 10 -# NAVBAR ######################### -# Jump to a letter with [ALT] + [A..Z] -[SongMosaicStaticNonParty2] -X = 260 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAlt -Color = White +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsLyricsButtonExit] +X = 70 +Y = 290 +W = 250 +H = 40 +Tex = Button +Color = ColorDark +DColor = Gray Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[SongMosaicTextNonParty2] -X = 292 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = + -Reflection = 1 -ReflectionSpacing = 13 +[OptionsThemes] +Texts = 5 -[SongMosaicStaticNonParty3] -X = 300 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonAZ +[OptionsThemesBackground] +Tex = OptionsBG + +[OptionsThemesStatic1] +X = 30 +Y = 30 +W = 85 +H = 75 Color = White +Tex = Optionsbuttondesign Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[SongMosaicTextNonParty3] -X = 340 +[OptionsThemesText1] +X = 120 +Y = 40 +Color = White +Size = 45 +Text = SING_OPTIONS_THEMES + +[OptionsThemesText5] +X = 440 Y = 548 -Z = 0.952 +Z = 0.5 Color = Black -Font = 0 Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_GOTO Reflection = 1 -ReflectionSpacing = 13 +ReflectionSpacing = 20 +Text = SING_LEGEND_ESC -# Menu opens with [M] -[SongMosaicStaticNonParty4] -X = 425 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonM -Color = White +[OptionsThemesSelectTheme] +Text = SING_OPTIONS_THEMES_THEME +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 130 +W = 250 +H = 40 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsThemesSelectSkin] +Text = SING_OPTIONS_THEMES_SKIN +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 180 +W = 250 +H = 40 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsThemesSelectColor] +Text = SING_OPTIONS_THEMES_COLOR +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 230 +W = 250 +H = 40 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsThemesButtonExit] +X = 70 +Y = 290 +W = 250 +H = 40 +Tex = Button +Color = ColorDark +DColor = Gray Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[SongMosaicTextNonParty4] -X = 465 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_MENU -Reflection = 1 -ReflectionSpacing = 13 +[OptionsRecord] +Texts = 5 -# The so famous search, shown with [J] -[SongMosaicStaticNonParty5] -X = 515 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonJ +[OptionsRecordBackground] +Tex = OptionsBG + +[OptionsRecordStatic1] +X = 30 +Y = 30 +W = 70 +H = 65 +Color = White +Tex = Optionsbuttonrecord +Type = Transparent + +[OptionsRecordText1] +X = 110 +Y = 40 Color = White +Size = 45 +Text = SING_OPTIONS_RECORD + +[OptionsRecordSelectSlideCard] +Text = SING_OPTIONS_RECORD_CARD +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 130 +W = 250 +H = 40 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsRecordSelectSlideInput] +Text = SING_OPTIONS_RECORD_INPUT +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 180 +W = 250 +H = 40 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsRecordSelectSlideChannel] +Text = SING_OPTIONS_RECORD_CHANNEL +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 230 +W = 250 +H = 40 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsRecordSelectThreshold] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_THRESHOLD +X = 70 +Y = 367 +W = 250 +H = 40 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsRecordSelectMicBoost] +Tex = MainBar Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_SOUND_MIC_BOOST +X = 70 +Y = 417 +W = 250 +H = 40 +SkipX = 10 -[SongMosaicTextNonParty5] -X = 555 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_JUMPTO_DESC -Reflection = 1 -ReflectionSpacing = 13 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -# [P]laylist -[SongMosaicStaticNonParty6] -X = 680 -Y = 545 -W = 32 -H = 30 -Z = 0.952 -Tex = ButtonP -Color = White +[OptionsRecordButtonExit] +X = 70 +Y = 470 +W = 250 +H = 40 +Tex = Button +Color = ColorDark +DColor = Gray Type = Transparent Reflection = 1 ReflectionSpacing = 2 -[SongMosaicTextNonParty6] -X = 720 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SING_SONG_SELECTION_PLAYLIST -Reflection = 1 -ReflectionSpacing = 13 +[OptionsAdvanced] +Texts = 5 -#and these are the ones for partymode -[SongMosaicStaticParty1] -X = 40 -Y = 22 -W = 27 -H = 27 -Color = White -Tex = PartyIcon -Type = Colorized +[OptionsAdvancedBackground] +Tex = OptionsBG -# NAVBAR for party -# enter a number -[SongMosaicStaticParty2] -X = 260 -Y = 545 -Z = 0.952 -W = 32 -H = 30 -Tex = Button13 +[OptionsAdvancedStatic1] +X = 30 +Y = 30 +W = 57 +H = 67 Color = White +Tex = Optionsbuttonadvanced Type = Transparent -[SongMosaicTextParty3] -X = 300 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = SONG_MENU_NAME_PARTY_JOKER -Reflection = 1 -ReflectionSpacing = 13 - -# menu -[SongMosaicStaticParty3] -X = 400 -Y = 552 -Z = 0.952 -W = 24 -H = 23 -Tex = ButtonM +[OptionsAdvancedText1] +X = 100 +Y = 40 Color = White -Type = Transparent +Size = 45 +Text = SING_OPTIONS_ADVANCED -[SongMosaicTextParty4] -X = 426 -Y = 548 -Z = 0.952 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_MENU -Reflection = 1 -ReflectionSpacing = 13 +#########unused at the moment######### +#[OptionsAdvancedSelectLoadAnimation] +#Text = SING_OPTIONS_ADVANCED_LOADANIMATION +#Tex = MainBar +#TexSBG = SelectBG +#X = 40 +#Y = 85 +#W = 230 +#H = 70 +#SkipX = 10 -[SongMosaicStaticParty4] -X = 540 -Y = 552 -Z = 0.952 -W = 24 -H = 24 -Tex = ButtonEnter -Color = White -Type = Transparent +#Color = ColorDark +#DColor = ColorLight +#TColor = White +#TDColor = White -[SongMosaicTextParty5] -X = 570 -Y = 548 -Color = Black -Font = 0 -Size = 24 -Align = 0 -Text = PARTY_SONG_LEGEND_CONTINUE -Reflection = 1 -ReflectionSpacing = 13 +#SBGColor = ColorDark +#SBGDColor = ColorLight +#STColor = White +#STDColor = GrayDark -#Texts for Party Mode -[SongMosaicTextParty1] +[OptionsAdvancedSelectScreenFade] +Text = SING_OPTIONS_ADVANCED_SCREENFADE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 -Color = White -Text = PARTY_MODE - -[SongMosaicTextParty2] -X = 238 -Y = 548 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = PARTY_SONG_WHEREAMI -#variable statics end - -# Jokers, 5 for each team, only shown in party Mode -[SongMosaicStaticTeam1Joker1] -Tex = Joker -X = 505 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 - -[SongMosaicStaticTeam1Joker2] -Tex = Joker -X = 555 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Y = 130 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicStaticTeam1Joker3] -Tex = Joker -X = 605 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStaticTeam1Joker4] -Tex = Joker -X = 655 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsAdvancedSelectEffectSing] +Text = SING_OPTIONS_ADVANCED_EFFECTSING +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 175 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicStaticTeam1Joker5] -Tex = Joker -X = 705 -Y = 400 -W = 40 -H = 40 -Z = 0.98 -Color = P1Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStaticTeam2Joker1] -Tex = Joker -X = 505 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsAdvancedSelectJoypad] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_ADVANCED_JOYPAD_SUPPORT +X = 70 +Y = 220 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicStaticTeam2Joker2] -Tex = Joker -X = 555 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStaticTeam2Joker3] -Tex = Joker -X = 605 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsAdvancedSelectSlideOnSongClick] +Text = SING_OPTIONS_ADVANCED_ONSONGCLICK +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 265 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicStaticTeam2Joker4] -Tex = Joker -X = 655 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStaticTeam2Joker5] -Tex = Joker -X = 705 -Y = 450 -W = 40 -H = 40 -Z = 0.98 -Color = P2Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsAdvancedSelectAskbeforeDel] +Text = SING_OPTIONS_ADVANCED_ASKBEFOREDEL +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 310 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicStaticTeam3Joker1] -Tex = Joker -X = 505 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStaticTeam3Joker2] -Tex = Joker -X = 555 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsAdvancedSelectPartyPopup] +Text = SING_OPTIONS_ADVANCED_PARTYPOPUP +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 355 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicStaticTeam3Joker3] -Tex = Joker -X = 605 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStaticTeam3Joker4] -Tex = Joker -X = 655 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +[OptionsAdvancedSelectSingScores] +Text = SING_OPTIONS_ADVANCED_SINGSCORES +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 400 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicStaticTeam3Joker5] -Tex = Joker -X = 705 -Y = 500 -W = 40 -H = 40 -Z = 0.98 -Color = P3Dark -Type = Colorized -TexX1 = 0 -TexY1 = 0 -TexX2 = 1 -TexY2 = 1 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextPartyTime] -X = 750 -Y = 450 -Color = White -DColor = Red -Font = 1 -Size = 70 -Align = 2 +[OptionsAdvancedSelectTopScores] +Text = SING_OPTIONS_ADVANCED_TOPSCORES +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 445 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicInfoMessageBG] -Tex = SongMessage -X = 250 -Y = 90 -W = 300 -H = 25 -Z = 0.98 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsAdvancedButtonExit] +X = 70 +Y = 490 +W = 250 +H = 40 +Tex = Button Color = ColorDark +DColor = Gray Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -[SongMosaicInfoMessageText] -X = 400 -Y = 94 -Color = White -Font = 1 -Size = 20 -Align = 1 +[OptionsNetwork] +Texts = 5 -############################# -## ## -## Medley Playlist ## -## ## -############################# +[OptionsNetworkBackground] +Tex = OptionsBG -[SongMosaicTextMedleyMax] -N = 7 +[OptionsNetworkStatic1] +X = 30 +Y = 30 +W = 55 +H = 67 +Color = White +Tex = Optionsbuttonnetwork +Type = Transparent -[SongMosaicTextMedleyNumber1] -X=545 -Y=116 -Color=White -Font=1 -Size=20 -Align=1 +[OptionsNetworkText1] +X = 100 +Y = 40 +Color = White +Size = 45 +Text = SING_OPTIONS_NETWORK -[SongMosaicTextMedleyNumber2] -X=545 -Y=161 -Color=White -Font=1 -Size=20 -Align=1 +[OptionsNetworkStatic5] +X = 400 +Y = 545 +W = 32 +H = 30 +Tex = ButtonIns +Color = White +Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -[SongMosaicTextMedleyNumber3] -X=545 -Y=206 -Color=White -Font=1 -Size=20 -Align=1 +[OptionsNetworkText5] +X = 440 +Y = 548 +Z = 0.5 +Color = Black +Size = 24 +Reflection = 1 +ReflectionSpacing = 20 +Text = SING_OPTIONS_NETWORK_LEGEND_INSERT -[SongMosaicTextMedleyNumber4] -X=545 -Y=251 -Color=White -Font=1 -Size=20 -Align=1 +[OptionsNetworkStatic6] +X = 530 +Y = 545 +W = 32 +H = 30 +Tex = ButtonDel +Color = White +Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -[SongMosaicTextMedleyNumber5] -X=545 -Y=296 -Color=White -Font=1 -Size=20 -Align=1 +[OptionsNetworkText6] +X = 570 +Y = 548 +Z = 0.5 +Color = Black +Size = 24 +Reflection = 1 +ReflectionSpacing = 20 +Text = SING_OPTIONS_NETWORK_LEGEND_DELETE -[SongMosaicTextMedleyNumber6] -X=545 -Y=341 -Color=White -Font=1 -Size=20 -Align=1 +[OptionsNetworkTextInsertUser] +X = 400 +Y = 270 +W = 600 +Z = 1 +Align = 1 +Color = White +Size = 32 -[SongMosaicTextMedleyNumber7] -X=545 -Y=386 -Color=White -Font=1 -Size=20 -Align=1 +[OptionsNetworkSelectWebsite] +Text = SING_OPTIONS_NETWORK_WEBSITE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 130 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextMedleyArtist1] -X=570 -Y=107 -Color=ColorDark -Font=0 -Size=20 -Align=0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextMedleyArtist2] -X=570 -Y=152 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[OptionsNetworkSelectUsername] +Text = SING_OPTIONS_NETWORK_USERNAME +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 175 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextMedleyArtist3] -X=570 -Y=197 -Color=ColorDark -Font=0 -Size=20 -Align=0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextMedleyArtist4] -X=570 -Y=242 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[OptionsNetworkSelectSendSaveName] +Text = SING_OPTIONS_NETWORK_SEND_SAVE_PLAYER_NAME +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 220 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextMedleyArtist5] -X=570 -Y=287 -Color=ColorDark -Font=0 -Size=20 -Align=0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextMedleyArtist6] -X=570 -Y=332 -Color=ColorDark -Font=0 -Size=20 -Align=0 +[OptionsNetworkSelectAutoMode] +Text = SING_OPTIONS_NETWORK_AUTO_MODE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 265 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextMedleyArtist7] -X=570 -Y=377 -Color=ColorDark -Font=0 -Size=20 -Align=0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextMedleyTitle1] -X=570 -Y=123 -Color=White -Font=0 -Size=20 -Align=0 +[OptionsNetworkSelectAutoPlayer] +Text = SING_OPTIONS_NETWORK_AUTO_PLAYER +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 310 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextMedleyTitle2] -X=570 -Y=168 -Color=White -Font=0 -Size=20 -Align=0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextMedleyTitle3] -X=570 -Y=213 -Color=White -Font=0 -Size=20 -Align=0 +[OptionsNetworkSelectAutoScoreEasy] +Text = SING_OPTIONS_NETWORK_AUTO_SCORE_EASY +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 355 +W = 250 +H = 35 +SkipX = 10 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextMedleyTitle4] -X=570 -Y=257 -Color=White -Font=0 -Size=20 -Align=0 +[OptionsNetworkSelectAutoScoreMedium] +Text = SING_OPTIONS_NETWORK_AUTO_SCORE_MEDIUM +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 400 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextMedleyTitle5] -X=570 -Y=302 -Color=White -Font=0 -Size=20 -Align=0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicTextMedleyTitle6] -X=570 -Y=347 -Color=White -Font=0 -Size=20 -Align=0 +[OptionsNetworkSelectAutoScoreHard] +Text = SING_OPTIONS_NETWORK_AUTO_SCORE_HARD +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 445 +W = 250 +H = 35 +SkipX = 10 -[SongMosaicTextMedleyTitle7] -X=570 -Y=392 -Color=White -Font=0 -Size=20 -Align=0 +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[SongMosaicStaticMedley1] -Tex = PlayerNumberBox -X = 530 -Y = 110 -W = 30 -H = 30 +[OptionsNetworkButtonInsert] +X = 550 +Y = 490 +W = 180 +H = 40 +Tex = MainBar Color = ColorDark -Type = Colorized +DColor = Gray +Type = Transparent +Texts = 1 -[SongMosaicStaticMedley2] -Tex = PlayerNumberBox -X = 530 -Y = 155 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[OptionsNetworkButtonInsertText1] +X = 90 +Y = 5 +Align = 1 +Color = White +Size = 30 +Text = SING_OPTIONS_NETWORK_LEGEND_INSERT -[SongMosaicStaticMedley3] -Tex = PlayerNumberBox -X = 530 -Y = 200 -W = 30 -H = 30 +[OptionsNetworkButtonExit] +X = 70 +Y = 490 +W = 250 +H = 40 +Tex = Button Color = ColorDark -Type = Colorized +DColor = Gray +Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -[SongMosaicStaticMedley4] -Tex = PlayerNumberBox -X = 530 -Y = 245 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[OptionsWebcam] +Texts = 5 -[SongMosaicStaticMedley5] -Tex = PlayerNumberBox -X = 530 -Y = 290 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[OptionsWebcamBackground] +Tex = OptionsBG -[SongMosaicStaticMedley6] -Tex = PlayerNumberBox -X = 530 -Y = 335 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[OptionsWebcamStatic1] +X = 30 +Y = 30 +W = 75 +H = 70 +Color = White +Tex = Optionsbuttonwebcam +Type = Transparent -[SongMosaicStaticMedley7] -Tex = PlayerNumberBox -X = 530 -Y = 380 -W = 30 -H = 30 -Color = ColorDark -Type = Colorized +[OptionsWebcamStatic2] +X = 70 +Y = 450 +W = 250 +H = 35 +Tex = MainBar +Color = +DColor = +Type = Transparent +[OptionsWebcamText1] +X = 115 +Y = 40 +Color = White +Size = 45 +Text = SING_OPTIONS_WEBCAM -## Oscilloscope Position Screen ## +[OptionsWebcamText2] +X = 90 +Y = 450 +Color = White +Size = 28 +Text = SING_OPTIONS_WEBCAM_PREVIEW +[OptionsWebcamSelectWebcam] +Text = SING_OPTIONS_WEBCAM_ID +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 130 +W = 250 +H = 35 +SkipX = 10 -# O N E P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#PlayerOne -[SingP1Oscilloscope] -X = 80 -Y = 275 -H = 30 -W = 100 +DColor = +Color = +TColor = White +TDColor = White + +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -# T W O P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1TwoPOscilloscope] -X = 80 -Y = 95 -H = 30 -W = 100 +[OptionsWebcamSelectResolution] +Text = SING_OPTIONS_WEBCAM_RESOLUTION +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 170 +W = 250 +H = 35 +SkipX = 10 -#Player Two -[SingP2ROscilloscope] -X = 80 -Y = 275 -H = 30 -W = 100 +DColor = +Color = +TColor = White +TDColor = White + +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -# T H R E E P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1ThreePOscilloscope] -X = 15 -Y = 15 -H = 30 -W = 160 +[OptionsWebcamSelectFPS] +Text = SING_OPTIONS_WEBCAM_FPS +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 210 +W = 250 +H = 35 +SkipX = 10 -#Player Two -[SingP2MOscilloscope] -X = 310 -Y = 15 -H = 30 -W = 160 +DColor = +Color = +TColor = White +TDColor = White + +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsWebcamSelectFlip] +Text = SING_OPTIONS_WEBCAM_FLIP +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 250 +W = 250 +H = 35 +SkipX = 10 + +DColor = +Color = +TColor = White +TDColor = White + +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -#Player Three -[SingP3ROscilloscope] -X = 610 -Y = 15 -H = 30 -W = 160 +[OptionsWebcamSelectBrightness] +Text = SING_OPTIONS_WEBCAM_BRIGHTNESS +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 290 +W = 250 +H = 35 +SkipX = 10 -# T H R E E P L A Y E R D U E T M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingDuetP1ThreePOscilloscope] -X = 56 -Y = 98 -H = 25 -W = 100 +DColor = +Color = +TColor = White +TDColor = White + +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -#Player Two -[SingDuetP2MOscilloscope] -X = 56 -Y = 222 -H = 25 -W = 100 +[OptionsWebcamSelectSaturation] +Text = SING_OPTIONS_WEBCAM_SATURATION +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 330 +W = 250 +H = 35 +SkipX = 10 -#Player Three -[SingDuetP3ROscilloscope] -X = 56 -Y = 347 -H = 25 -W = 100 +DColor = +Color = +TColor = White +TDColor = White + +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -## 4/6 Players One Screen ## +[OptionsWebcamSelectHue] +Text = SING_OPTIONS_WEBCAM_HUE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 370 +W = 250 +H = 35 +SkipX = 10 -# FOUR P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1FourPOscilloscope] -X = 22 -Y = 25 -H = 30 -W = 157 +DColor = +Color = +TColor = White +TDColor = White + +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -#Player Two -[SingP2FourPOscilloscope] -X = 222 -Y = 25 -H = 30 -W = 157 +[OptionsWebcamSelectEffect] +Text = SING_OPTIONS_WEBCAM_EFFECT +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 410 +W = 250 +H = 35 +SkipX = 10 -#Player Three -[SingP3FourPOscilloscope] -X = 422 -Y = 25 -H = 30 -W = 157 +DColor = +Color = +TColor = White +TDColor = White + +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -#Player Four -[SingP4FourPOscilloscope] -X = 622 -Y = 25 -H = 30 -W = 157 +[OptionsWebcamButtonPreVisualization] +X = 330 +Y = 450 +W = 400 +H = 35 +Tex = MainBar +Color = ColorDark +DColor = Gray +Type = Transparent +Texts = 1 -# SIX P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1SixPOscilloscope] -X = 20 -Y = 8 -H = 30 -W = 100 +[OptionsWebcamButtonPreVisualizationText1] +X = 200 +Y = 5 +Align = 1 +Color = White +Size = 30 +Text = SING_OPTIONS_WEBCAM_ENABLE_PREVIEW -#Player Two -[SingP2SixPOscilloscope] -X = 150 -Y = 8 -H = 30 -W = 100 +[OptionsWebcamButtonExit] +X = 70 +Y = 500 +W = 250 +H = 35 +Tex = Button +Color = ColorDark +DColor = Gray +Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 -#Player Three -[SingP3SixPOscilloscope] -X = 280 -Y = 8 -H = 30 -W = 100 +# This is part of option network +[InsertUserPopup] -#Player Four -[SingP4SixPOscilloscope] -X = 410 -Y = 8 -H = 30 -W = 100 +[InsertUserPopupBackground] +Type=Fade +ColR=0 +ColG=0 +ColB=0 +Alpha=0.4 -#Player Five -[SingP5SixPOscilloscope] -X = 540 -Y = 8 -H = 30 -W = 100 +[InsertUserPopupStatic1] +Tex = interface_dialog_background +X = 200 +Y = 150 +W = 400 +H = 220 +Z = 1 +Color = White +Type = Transparent +Reflection = 1 +ReflectionSpacing = 15 -#Player Six -[SingP6SixPOscilloscope] -X = 670 -Y = 8 -H = 30 -W = 100 +[InsertUserPopupText1] +X = 400 +Y = 165 +W = 400 +Color = ColorLight +Font = 0 +Size = 30 +Align = 1 +Z = 1 -# FOUR DUET P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1DuetFourPOscilloscope] -X = 60 -Y = 118 -H = 25 -W = 100 +[InsertUserPopupText] +X = 400 +Y = 215 +W = 380 +Color = White +Font = 0 +Size = 24 +Align = 1 +Z = 1 -#Player Two -[SingP2DuetFourPOscilloscope] -X = 60 -Y = 298 +[InsertUserPopupButtonUsername] +X = 380 +Y = 250 +W = 160 H = 25 -W = 100 +Tex = Button +Color = GrayLight +DColor = GrayDark +Type = Transparent +Texts = 2 +Z = 1 + +[InsertUserPopupButtonUsernameText1] +X = 5 +Y = 0 +Color = Black +Font = 0 +Size = 24 +Align = 0 +Z = 1 + +[InsertUserPopupButtonUsernameText2] +X = -120 +Y = 0 +Text = SING_OPTIONS_NETWORK_USERNAME +Color = White +Font = 0 +Size = 24 +Align = 0 +Z = 1 -#Player Three -[SingP3DuetFourPOscilloscope] -X = 430 -Y = 118 +[InsertUserPopupButtonPassword] +X = 380 +Y = 280 +W = 160 H = 25 -W = 100 +Tex = Button +Color = GrayLight +DColor = GrayDark +Type = Transparent +Texts = 2 +Z = 1 -#Player Four -[SingP4DuetFourPOscilloscope] -X = 430 -Y = 298 -H = 25 -W = 100 +[InsertUserPopupButtonPasswordText1] +X = 5 +Y = 0 +Color = Black +Font = 0 +Size = 24 +Align = 0 +Z = 1 -# SIX DUET P L A Y E R M O D E # # # # # # # # # # # # # # # # # # # # -#Player One -[SingP1DuetSixPOscilloscope] -X = 60 -Y = 107 -H = 25 -W = 100 +[InsertUserPopupButtonPasswordText2] +X = -120 +Y = 0 +Text=SING_OPTIONS_NETWORK_PASSWORD +Color = White +Font = 0 +Size = 24 +Align = 0 +Z = 1 -#Player Two -[SingP2DuetSixPOscilloscope] -X = 60 -Y = 236 -H = 25 +[InsertUserPopupButton1] +X = 285 +Y = 330 W = 100 - -#Player Three -[SingP3DuetSixPOscilloscope] -X = 60 -Y = 362 H = 25 -W = 100 +Tex = Button +Color = ColorLight +DColor = ColorDark +Type = Transparent +Texts = 1 +Z = 1 -#Player Four -[SingP4DuetSixPOscilloscope] -X = 430 -Y = 107 -H = 25 -W = 100 +[InsertUserPopupButton1Text1] +X = 50 +Y = 0 +Color = White +Font = 0 +Size = 24 +Align = 1 +Z = 1 -#Player Five -[SingP5DuetSixPOscilloscope] -X = 430 -Y = 236 -H = 25 +[InsertUserPopupButton2] +X = 415 +Y = 330 W = 100 - -#Player Six -[SingP6DuetSixPOscilloscope] -X = 430 -Y = 362 H = 25 -W = 100 +Tex = Button +Color = ColorLight +DColor = ColorDark +Type = Transparent +Texts = 1 +Z = 1 -[JukeboxPlaylist] -Texts = 5 +[InsertUserPopupButton2Text1] +X = 50 +Y = 0 +Color = White +Font = 0 +Size = 24 +Align = 1 +Z = 1 -[JukeboxPlaylistBackground] -Tex = PartyBG +[OptionsJukebox] +Texts = 5 -[JukeboxPlaylistStatic1] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +[OptionsJukeboxBackground] +Tex=OptionsBG -[JukeboxPlaylistStatic2] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[OptionsJukeboxStatic1] +X = 30 +Y = 30 +W = 55 +H = 65 Color = White +Tex = Optionsbuttonjukebox Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[JukeboxPlaylistStatic3] -X = 40 -Y = 22 -W = 27 -H = 27 +[OptionsJukeboxText1] +X = 100 +Y = 40 Color = White -Tex = PartyIcon -Type = Colorized +Size = 45 +Text = SING_OPTIONS_JUKEBOX -[JukeboxPlaylistStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonNavi -Color = White +[OptionsJukeboxSelectLyricsFont] +Tex = MainBar Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_LYRICS_FONT +X = 70 +Y = 130 +W = 250 +H = 40 +SkipX = 10 -[JukeboxPlaylistStatic5] -X = 388 -Y = 552 -W = 24 -H = 23 -Tex = ButtonEnter -Color = White -Type = Transparent +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[JukeboxPlaylistText1] +[OptionsJukeboxSelectLyricsEffect] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = SING_OPTIONS_LYRICS_EFFECT X = 70 -Y = 5 -ColR = 0.7 -ColG = 0.7 -ColB = 0.7 -Font = 0 -Size = 60 -Color = White -Text = JUKEBOX_MODE +Y = 180 +W = 250 +H = 40 +SkipX = 10 -[JukeboxPlaylistText2] +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsJukeboxSelectLyricsAlpha] +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +Text = JUKEBOX_SONGOPTIONS_LYRIC_ALPHA X = 70 -Y = 65 -Color = White -Font = 0 -Size = 30 -Align = 0 -Text = JUKEBOX_OPTIONS_DESC +Y = 230 +W = 250 +H = 40 +SkipX = 10 -[JukeboxPlaylistText3] -X = 238 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 2 -Text = JUKEBOX_OPTIONS_WHEREAMI +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[JukeboxPlaylistText4] -X = 294 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE +[OptionsJukeboxSelectLine] +Text = JUKEBOX_SONGOPTIONS_LYRIC_LINE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 70 +Y = 280 +W = 250 +H = 40 +SkipX = 10 -[JukeboxPlaylistText5] -X = 418 -Y = 552 -Color = Black -Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_CONTINUE +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark -[JukeboxPlaylistSelectPlayList] +[OptionsJukeboxSelectProperty] +Text = JUKEBOX_SONGOPTIONS_LYRIC_PROPERTY Tex = MainBar Type = Transparent TexSBG = SelectBG TypeSBG = Transparent -Text = JUKEBOX_OPTIONS_PLAYLIST_MODE X = 70 -Y = 110 -W = 230 +Y = 330 +W = 250 H = 40 SkipX = 10 -Fields = 1 -DColor = ColorDark -Color = ColorLight +Color = +DColor = TColor = White TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight +SBGColor = ColorDark +SBGDColor = Gray STColor = White STDColor = GrayDark -[JukeboxPlaylistSelectPlayList2] +[OptionsJukeboxSelectColor] +Text = JUKEBOX_SONGOPTIONS_LYRIC_COLOR Tex = MainBar Type = Transparent TexSBG = SelectBG TypeSBG = Transparent -Text = JUKEBOX_OPTIONS_PLAYLIST X = 70 -Y = 165 -W = 230 +Y = 380 +W = 250 H = 40 SkipX = 10 -Fields = 1 -DColor = ColorDark -Color = ColorLight +Color = +DColor = TColor = White TDColor = White - -SBGDColor = ColorDark -SBGColor = ColorLight +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsJukeboxSelectR] +Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_RED +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 220 +Y = 425 +W = 100 +H = 15 +SkipX = 10 +TextSize = 16 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsJukeboxSelectG] +Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_GREEN +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Plain +X = 220 +Y = 445 +W = 100 +H = 15 +Z = 0.8 +SkipX = 10 +TextSize = 16 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray +STColor = White +STDColor = GrayDark + +[OptionsJukeboxSelectB] +Text = JUKEBOX_SONGOPTIONS_LYRIC_RGB_BLUE +Tex = MainBar +Type = Transparent +TexSBG = SelectBG +TypeSBG = Transparent +X = 220 +Y = 465 +W = 100 +H = 15 +SkipX = 10 +TextSize = 16 + +Color = +DColor = +TColor = White +TDColor = White +SBGColor = ColorDark +SBGDColor = Gray STColor = White STDColor = GrayDark +[OptionsJukeboxRed] +X = 360 +Y = 428 +W = 340 +H = 10 +Z = 1 +Tex = Picker +Type = Transparent + +[OptionsJukeboxGreen] +X = 360 +Y = 448 +W = 340 +H = 10 +Z = 1 +Tex = Picker +Type = Transparent + +[OptionsJukeboxBlue] +X = 360 +Y = 468 +W = 340 +H = 10 +Z = 1 +Tex = Picker +Type = Transparent + +[OptionsJukeboxPointerR] +X = 360 +Y = 427 +W = 1 +H = 12 +Z = 1 +Tex = Picker +Color = Black +Type = Transparent + +[OptionsJukeboxPointerG] +X = 360 +Y = 447 +W = 1 +H = 12 +Z = 1 +Tex = Picker +Color = Black +Type = Transparent + +[OptionsJukeboxPointerB] +X = 360 +Y = 468 +W = 1 +H = 12 +Z = 1 +Tex = Picker +Color = Black +Type = Transparent + +[OptionsJukeboxColor] +X = 70 +Y = 425 +W = 145 +H = 55 +Z = 1 +Tex = Picker +Type = Transparent + +[OptionsJukeboxUpperBar] +X = 340 +Y = 500 +W = 400 +H = 40 + +[OptionsJukeboxLowerBar] +X = 340 +Y = 535 +W = 400 +H = 40 + +[OptionsJukeboxButtonExit] +X = 70 +Y = 485 +W = 250 +H = 40 +Tex = Button +Color = ColorDark +DColor = Gray +Type = Transparent +Reflection = 1 +ReflectionSpacing = 2 [AboutMain] -Texts = 0 -Statics = 0 +Texts = 3 +Statics = 1 [AboutMainBackground] Tex = MainBG [AboutMainButtonCredits] -X = 589 -Y = 415 -W = 190 +X = 500 +Y = 440 +W = 110 +H = 40 +Tex = LogoDeluxe +DColor = +Color = +Type = Transparent +Texts = 1 +Reflection = 0 + +[AboutMainButtonCreditsText1] +X = 55 +Y = -40 +Font = 0 +Size = 25 +Align = 1 +Text = ABOUT_USDX_CREDITS +Color = White + +[AboutMainButtonExit] +X = 660 +Y = 530 +W = 130 H = 50 Tex = Button -DColor = ColorDark -Color = ColorLight +DColor = Gray +Color = ColorDark Type = Transparent Texts = 1 Reflection = 0 -[AboutMainButtonCreditsText1] -X = 95 +[AboutMainButtonExitText1] +X = 65 Y = 10 Font = 0 Size = 30 Align = 1 -Text = ABOUT_USDX_CREDITS +Text = SING_OPTIONS_EXIT +Color = White + +[AboutMainButtonDevelopers] +X = 80 +Y = 430 +W = 140 +H = 70 +Tex = LogoWeb +DColor = +Color = White +Type = Transparent +Texts = 1 +Reflection = 0 + +[AboutMainButtonDevelopersText1] +X = 70 +Y = -35 +Font = 0 +Size = 25 +Align = 1 +Text = ABOUT_USDX_DEVELOPEDBY +Color = White + +[AboutMainTextOverview] +X = 45 +Y = 125 +W = 600 +Color = White +Font = 0 +Size = 24 +Align = 0 +Text = + +[AboutMainStatic1] +X = 25 +Y = 70 +W = 630 +H = 450 +Tex=helperbg +Color = ColorDark +Type = Colorized + +[AboutMainText1] +X = 70 +Y = 6 +Color = White +Font = 0 +Size = 60 +Text = ABOUT_MAIN +Align = 0 + +[AboutMainText2] +X = 70 +Y = 53 +Color = White +Font = 0 +Size = 30 +Align = 0 +Text = ABOUT_MAIN_DESC + +[AboutMainText3] +X = 415 +Y = 90 Color = White +Font = 0 +Size = 20 +Align = 0 +Text = US_VERSION +Reflection = 0 +ReflectionSpacing = 13 -[AboutMainButtonExit] -X = 589 -Y = 480 -W = 190 +[Developers] +Texts = 1 +Statics = 2 + +[DevelopersBackground] +Tex = MainBG + +[DevelopersButtonExit] +X = 660 +Y = 530 +W = 130 H = 50 Tex = Button -DColor = ColorDark -Color = ColorLight +DColor = Gray +Color = ColorDark Type = Transparent Texts = 1 Reflection = 0 -[AboutMainButtonExitText1] -X = 95 +[DevelopersButtonExitText1] +X = 65 Y = 10 Font = 0 Size = 30 @@ -24042,134 +21422,204 @@ Align = 1 Text = SING_OPTIONS_EXIT Color = White -[AboutMainTextOverview] -X = 45 +[DevelopersTextOverview] +X = 105 Y = 125 -W = 510 +W = 400 Color = White +DColor= Font = 0 Size = 24 Align = 0 Text = -[AboutMainStatic1] -X = 40 -Y = 22 -W = 27 -H = 27 +[DevelopersStatic1] +X = 45 +Y = 70 +W = 630 +H = 450 +Tex=Dhelperbg Color = White -Tex = MainIcon -Type = Colorized - -[AboutMainStatic2] -X = 0 -Y = 545 -W = 250 -H = 30 -Tex = Leiste1 -Color = ColorLight -Type = Colorized -Reflection = 1 -ReflectionSpacing = 2 +Type = Transparent -[AboutMainStatic3] -X = 250 -Y = 545 -W = 550 -H = 30 -Tex = Leiste2 +[DevelopersStatic2] +X = 300 +Y = 460 +W = 160 +H = 80 +Tex = LogoWeb Color = White Type = Transparent -Reflection = 1 -ReflectionSpacing = 2 -[AboutMainStatic4] -X = 260 -Y = 552 -W = 24 -H = 23 -Tex = ButtonNavi +[DevelopersText1] +X = 70 +Y = 15 Color = White -Type = Transparent +Font = 0 +Size = 60 +Text = DEVELOPERS_TITLE +Align = 0 -[AboutMainStatic5] -X = 388 -Y = 552 -W = 32 -H = 23 -Tex = ButtonEsc +[CheckPopup] + +[CheckPopupBackground] +Type=Fade +ColR=0 +ColG=0 +ColB=0 +Alpha=0.4 + +[CheckPopupStatic1] +Tex = interface_dialog_background +X = 200 +Y = 150 +W = 400 +H = 200 +Z = 1 Color = White Type = Transparent +Reflection = 1 +ReflectionSpacing = 15 -[AboutMainStatic6] -X = 40 -Y = 100 -W = 520 -H = 20 -Tex = StatMainBG1 +[CheckPopupText1] +X = 400 +Y = 160 +W = 400 Color = ColorLight -Type = Colorized +Font = 0 +Size = 30 +Text = MSG_QUESTION_TITLE +Align = 1 +Z = 1 -[AboutMainStatic7] -X = 40 -Y = 120 -W = 520 -H = 370 -Tex = StatMainBG2 -Color = ColorDark -Type = Colorized +[CheckPopupText] +X = 400 +Y = 210 +W = 280 +Color = White +Font = 0 +Size = 30 +Text = error text +Align = 1 +Z = 1 -[AboutMainStatic8] -X = 40 -Y = 490 -W = 520 -H = 20 -Tex = StatMainBG3 +[CheckPopupButton1] +X = 285 +Y = 310 +W = 100 +H = 25 +Tex = Button Color = ColorLight -Type = Colorized +DColor = ColorDark +Type = Transparent +Texts = 1 +Z = 1 -[AboutMainText1] -X = 70 -Y = 6 +[CheckPopupButton1Text1] +X = 50 +Y = 0 Color = White Font = 0 -Size = 60 -Text = ABOUT_MAIN -Align = 0 +Size = 24 +Text = YES +Align = 1 +Z = 1 -[AboutMainText2] -X = 238 -Y = 552 -Color = Black +[CheckPopupButton2] +X = 415 +Y = 310 +W = 100 +H = 25 +Tex = Button +Color = ColorLight +DColor = ColorDark +Type = Transparent +Texts = 1 +Z = 1 + +[CheckPopupButton2Text1] +X = 50 +Y = 0 +Color = White Font = 0 -Size = 21 -Align = 2 -Text = ABOUT_MAIN_WHEREAMI +Size = 24 +Text = NO +Align = 1 +Z = 1 -[AboutMainText3] -X = 70 -Y = 53 + +[ErrorPopup] + +[ErrorPopupBackground] +Type=Fade +ColR=0 +ColG=0 +ColB=0 +Alpha=0.4 + +[ErrorPopupStatic1] +Tex = interface_dialog_background +X = 200 +Y = 150 +W = 400 +H = 200 +Z = 0.98 Color = White +Type = Transparent +Reflection = 1 +ReflectionSpacing = 15 + +[ErrorPopupText1] +X = 400 +Y = 160 +W = 400 +Color = ColorLight Font = 0 Size = 30 -Align = 0 -Text = ABOUT_MAIN_DESC +Text = MSG_ERROR_TITLE +Align = 1 +Z = 1 -[AboutMainText4] -X = 294 -Y = 552 -Color = Black +[ErrorPopupText] +X = 400 +Y = 210 +W = 380 +Color = White Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_NAVIGATE +Size = 30 +Text = error text +Align = 1 +Z = 1 -[AboutMainText5] -X = 418 -Y = 552 -Color = Black +[ErrorPopupButton1] +X = 350 +Y = 310 +W = 100 +H = 25 +Tex = Button +Color = ColorLight +DColor = ColorDark +Type = Transparent +Texts = 1 +Z = 1 + +[ErrorPopupButton1Text1] +X = 50 +Y = 0 +Color = White Font = 0 -Size = 21 -Align = 0 -Text = SING_LEGEND_ESC +Size = 24 +Text = OK +Align = 1 +Z = 1 + +[PausePopUpStatic] +Tex = Pause +X = 0 +Y = 0 +W = 800 +H = 600 +Z = 0.95 +Color = ColorLight +Type = Colorized diff --git a/game/themes/Fantasy/Lines.ini b/game/themes/Fantasy/Lines.ini new file mode 100644 index 00000000..1fffef20 --- /dev/null +++ b/game/themes/Fantasy/Lines.ini @@ -0,0 +1,373 @@ + +################################### +# theme developed by Daniel20 # +# for http:\\ultrastar-es.org # +# visit us to get songs, plugins, # +# themes and more... # +# # +# *some icons belongs to # +# http://www.iconfinder.com/ # +# under Creative Common license # +################################### + +#Video credits to: AA VFX https://www.youtube.com/watch?v=53pUo71jr8w + +############### +[Skin] +Theme=Fantasy +Name= Lines +Color=Pink + +[Textures] +/** + * Interface + */ +interface_selectbg_search = [interface]selectbg_search.png +interface_dialog_background = [interface]dialog_background.png +interface_dialog_background2 = [interface]dialog_background2.png +interface_dialog_backgroundtop = [interface]dialog_backgroundtop.png +interface_dialog_backgroundtop2 = [interface]dialog_backgroundtop2.png + +Cursor = [interface]cursor.png +Cursor_Pressed = [interface]cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = [icon]song_menu.png +icon_song_search = [icon]song_search.png +icon_song_video = [icon]song_video.png +icon_song_medley = [icon]song_medley.png +icon_song_calcmedley = [icon]song_calcmedley.png +icon_song_duet = [icon]song_duet.png + +loadicon = [load]logo.png +loadbaricon = [load]bar.png + +# # # M A I N # # # +ButtonSolo = [main]buttonsolo.png +ButtonAbout = [main]buttonabout.png +ButtonParty = [main]buttonparty.png +ButtonStats = [main]buttonstats.png +ButtonJukebox = [main]buttonjukebox.png +ButtonOption = [main]buttonoption.png +ButtonExit = [main]buttonexit.png +Button2 = [main]button2.png +Button = [main]button.png +ButtonF = [main]buttonf.jpg +MainBar = [main]mainBar.png +SelectBG = [main]selectbg.png + +Select_ArrowLeft = [interface]select_arrow_left.png +Select_ArrowRight = [interface]select_arrow_right.png + +#Backgrounds +LoadingBG = [bg-load]basic.jpg +TitleBG = [bg-main]lines.webm +MainBG = [bg-main]lines.webm +SongBG = [bg-main]lines.webm +ScoreScreenBG = [bg-main]lines.webm +Top5BG = [bg-main]lines.webm +OptionsBG = [bg-main]lines.webm +EditBG = [bg-main]lines.webm +EditSubBG = [bg-main]lines.webm +PartyBG = [bg-main]lines.webm + +#Icons on screen +SongCD = [icon]cd.png +MainIcon = [main]buttonsolo.png +MainSearch = [icon]search.png +IconOption = [main]buttonoption.png +IconEdit = [main]buttonedit.png +IconSongMenu = [icon]songmenu.png +ScoreIcon = [icon]score.png +PartyIcon = [main]buttonparty.png +StatIcon = [main]buttonstats.png +VideoIcon = [icon]video.png + +IconError = [icon]error.png +IconQuestion = [icon]question.png + + +# # # S O N G S E L E C E T # # # +SongSelection1up = [main]songSelection1up.png +SongSelection1dn = [main]songSelection1dn.png +SongSelection1 = [main]songSelection1.png +SongSelection2 = [main]songSelection2.png +SongSelection3 = [main]songSelection3.png +SongSelection4 = [main]songSelection4.png +SongSelection5 = [main]songSelection5.png +SongCover = [main]songCover.jpg +SongMessage = [song]message.png +SongDuetSinger = [song]duetsinger.png +SongDuetSinger2 = [song]duetsinger2.png +SongDuetSinger3 = [song]duetsinger3.png + +# # # S I N G # # # +#the bar where the lyrics reside +LyricBar = [sing]textBar.png +LyricBarDuet = [sing]textBarDuet.png + +#this one slides in, to tell you that singing starts immediately +LyricHelpBar = [sing]lyricsHelpBar.png + +#the bar behind the timestuff +TimeBar1 = [sing]timeBarBG.png + +#the time progress bar (not skinned in this theme :P ) +TimeBar = [sing]timeBar.jpg + +#linebonus, the thing that pop ups at the score +LineBonusBack = [sing]lineBonusPopUp.png + +#Singbar (the thing beneath the scores) +SingBarBack = [sing]singBarBack.png +SingBarBar = [sing]singBarBar.png +SingBarFront = [sing]singBarFront.png + +#Background for scores +ScoreBG = [sing]scoreBg.png + +#Background for the P1, P2 and so on +P = [sing]p.png + +#Pointer for lyrics +Ball = [sing]LyricsBall.png + +#song name for medley mode +SongName = [sing]SongName.png + + +# # # S C O R E / T O P 5 # # # +ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png +ScoreLevel = [score]level.png +ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +ButtonSendScore = [score]buttonsendscore.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + +ScoreEndCap = [score]endcap.png +ScoreLine = [score]line.png +PlayerNumberBox = [main]playerNumberBox.png + +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +# these icons are part of the tango icon set +# licensed under Creative Commons Attribution Share-Alike license +# http://tango.freedesktop.org +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png +Rating_7 = [score]rating_7.png +# # # O P T I O N S # # # +Optionsbuttongame = [Options]buttongame.png +Optionsbuttongraphics = [Options]buttongraphics.png +Optionsbuttonsound = [Options]buttonsound.png +Optionsbuttonlyrics = [Options]buttonlyrics.png +Optionsbuttondesign = [Options]buttondesign.png +Optionsbuttonrecord = [Options]buttonduet.png +Optionsbuttonadvanced = [Options]buttonadvanced.png +Optionsbuttonnetwork = [Options]buttonnetwork.png +Optionsbuttonwebcam = [Options]buttonwebcam.png +Optionsbuttonjukebox = [Options]buttonjukebox.png +Optionsbuttonback = [Options]buttonback.png + +# # # M A I N P A R T Y # # # +ClassicButton =[MainParty]ClassicButton.png +ClassicFreeButton =[MainParty]ClassicFreeButton.png +ChallengeButton =[MainParty]ChallengeButton.png +TournamentButton =[tournament]trophy.png + + + +# # # P A R T Y # # # +Joker =[party]Joker.png +PartyPlayerButton =[party]playerButton.png +PartyTeamButton1 =[party]roundTeamButton.png +PartyTeamButton2 =[party]playerTeamButton.png +PartyTeamButton3 =[party]winTeamButton1.png +PartyTeamButton4 =[party]winTeamButton2.png +PartyTeamButton5 =[party]winTeamButton3.png +PartyRoundBG1 =[party]roundBG1.png +PartyRoundBG2 =[party]roundBG2.png +PartyRoundBG3 =[party]roundBG3.png +PartyRoundBG4 =[party]roundBG4.png +HDL_Pointer =[party]pointer.png +PartyTeamPoints =[party]teamPoints.png +PartyScoreDeco =[party]scoreDecoration.png +PartyScoreBG1 =[party]scoreBG1.png +PartyScoreBG2 =[party]scoreBG2.png +PartyWinDeco1 =[party]winDecoration.png +PartyWinDeco2 =[party]winDecoration.png +PartyWinDeco3 =[party]winDecoration.png +PartyPlayerSelectBG = [party]playerselectbg.png +PartyTrophy =[tournament]trophy.png +PartyWinner =[tournament]winner.png + +# # # S T A T S # # # +StatMainBG1 = [stat]mainBG1.png +StatMainBG2 = [stat]mainBG2.png +StatMainBG3 = [stat]mainBG3.png +StatDetailBG1 = [stat]detailBG1.png + + +# # # N A V I # # # +ButtonP = [button]p.png +ButtonM = [button]m.png +ButtonJ = [button]j.png +ButtonC = [button]c.png +ButtonAlt = [button]alt.png +ButtonAZ = [button]az.png +ButtonEnter = [button]enter.png +ButtonNavi = [button]navi.png +ButtonEsc = [button]esc.png +Button13 = [button]13.png +ButtonIns = [button]ins.png +ButtonDel = [button]del.png + +JumpToBG = [menu]jumpToBg.png +SongMenuBG = [menu]songMenuBg.png +SongMenuSelectBG = [menu]songMenuSelectBg.png +PopUpBG = [menu]popUpBG.png + + +# # # N O T E S # # # +# sung notes - colorized with playercolors +GrayLeft = [sing]notesLeft.png +GrayMid = [sing]notesMid.png +GrayRight = [sing]notesRight.png +# unsung notes - colorized with playercolors +NotePlainLeft = [sing]notesPlainLeft.png +NotePlainMid = [sing]notesPlainMid.png +NotePlainRight = [sing]notesPlainRight.png +# the glow around unsung/sung notes - colorized with playercolors +NoteBGLeft = [sing]notesBgLeft.png +NoteBGMid = [sing]notesBgMid.png +NoteBGRight = [sing]notesBgRight.png +Pause = [sing]pause.png + + +# # # E F F E C T S # # # +NoteStar = [effect]goldenNoteStar.png +NotePerfectStar = [effect]perfectNoteStar.png + + +# # # dirty helpers # # # +Rectangle = [helper]rectangle.png +ButtonFade = [helper]buttonFade.png +BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png + + +# # # DOWNLOAD SCORE # # # +ProgressBar = [sing]timeBar.jpg + +# # # J U K E B O X # # # +JukeboxTimeBar1 = [jukebox]timeBarBG.png +JukeboxTimeBar = [jukebox]timeBar.jpg +JukeboxSong = [jukebox]song.png +JukeboxSongBackground = [jukebox]title.png +JukeboxSongListBackground = [jukebox]songlist.png +JukeboxSongbartopBackground= [jukebox]bartop.png +JukeboxSongOptionsBackground = [jukebox]songoptions.png +JukeboxLyric = [jukebox]lyric.png +JukeboxRandom = [jukebox]random.png +JukeboxRepeat = [jukebox]repeat.png +JukeboxCurrentSongBackground = [jukebox]currentsong.png +JukeboxSongListUp = [jukebox]songlistup.png +JukeboxSongListDown = [jukebox]songlistdown.png +JukeboxOptions = [jukebox]options.png +JukeboxClose = [jukebox]close.png +JukeboxFix = [jukebox]pin.png +JukeboxSongMenuTimeBar = [jukebox]timeBarSongMenuBG.png +JukeboxSongMenuPlayPause = [jukebox]songmenuplaypause.png +JukeboxSongMenuNext = [jukebox]songmenunext.png +JukeboxSongMenuPrevious = [jukebox]songmenuprevious.png +JukeboxSongMenuPlaylist = [jukebox]songmenuplaylist.png +JukeboxField = [jukebox]fieldbg.png +JukeboxButton = [jukebox]mainBar.png +JukeboxSelect = [jukebox]selectbg.png + +# # # E D I T # # # +PlayOnly = [editsub]play.png +playwithnote = [editsub]play-with-note.png +playnote = [editsub]play-note.png +nextseq = [editsub]next-seq.png +previousseq = [editsub]previous-seq.png +undo = [editsub]undo.png +gold = [editsub]gold.png +freestyle = [editsub]freestyle.png + +# # # COLOR PICKER # # # +PickerBG = [color]pickerbg.png +Picker = [color]picker.jpg +Hue = [color]hue.png +HueBar = [color]hue-bar.png +WhiteFade = [color]white-fade.png +BlackFade = [color]black-fade.png +Pointer = [color]pointer.png + +# # # N A M E # # # +AvatarFrame = [name]frame.png +CurrentPlayer = [name]player.png +SelectFrame = [name]select.png +AvatarFrame2 = [score]frame.png + +# # # NO AVATARS # # # +NoAvatar_P1 = [name]noavatarP1.png +NoAvatar_P2 = [name]noavatarP2.png +NoAvatar_P3 = [name]noavatarP3.png +NoAvatar_P4 = [name]noavatarP4.png +NoAvatar_P5 = [name]noavatarP5.png +NoAvatar_P6 = [name]noavatarP6.png +NoAvatar_P7 = [name]noavatarP1.png +NoAvatar_P8 = [name]noavatarP2.png +NoAvatar_P9 = [name]noavatarP3.png +NoAvatar_P10 = [name]noavatarP4.png +NoAvatar_P11 = [name]noavatarP5.png +NoAvatar_P12 = [name]noavatarP6.png + +# # # A B O U T # # # +LogoWeb = [About]logo_web.png +LogoDeluxe = [About]logo_deluxe.png +helperbg = [About]helperbg.png + +# # # D E V E L O P E R S # # # +Dhelperbg = [Developers]helperbg.png \ No newline at end of file diff --git a/game/themes/Fantasy/Love.ini b/game/themes/Fantasy/Love.ini new file mode 100644 index 00000000..9e815303 --- /dev/null +++ b/game/themes/Fantasy/Love.ini @@ -0,0 +1,373 @@ + +################################### +# theme developed by Daniel20 # +# for http:\\ultrastar-es.org # +# visit us to get songs, plugins, # +# themes and more... # +# # +# *some icons belongs to # +# http://www.iconfinder.com/ # +# under Creative Common license # +################################### + +#Video credits to: AA VFX https://www.youtube.com/watch?v=biPycuqGBRc + +############### +[Skin] +Theme=Fantasy +Name= Love +Color=Pink + +[Textures] +/** + * Interface + */ +interface_selectbg_search = [interface]selectbg_search.png +interface_dialog_background = [interface]dialog_background.png +interface_dialog_background2 = [interface]dialog_background2.png +interface_dialog_backgroundtop = [interface]dialog_backgroundtop.png +interface_dialog_backgroundtop2 = [interface]dialog_backgroundtop2.png + +Cursor = [interface]cursor.png +Cursor_Pressed = [interface]cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = [icon]song_menu.png +icon_song_search = [icon]song_search.png +icon_song_video = [icon]song_video.png +icon_song_medley = [icon]song_medley.png +icon_song_calcmedley = [icon]song_calcmedley.png +icon_song_duet = [icon]song_duet.png + +loadicon = [load]logo.png +loadbaricon = [load]bar.png + +# # # M A I N # # # +ButtonSolo = [main]buttonsolo.png +ButtonAbout = [main]buttonabout.png +ButtonParty = [main]buttonparty.png +ButtonStats = [main]buttonstats.png +ButtonJukebox = [main]buttonjukebox.png +ButtonOption = [main]buttonoption.png +ButtonExit = [main]buttonexit.png +Button2 = [main]button2.png +Button = [main]button.png +ButtonF = [main]buttonf.jpg +MainBar = [main]mainBar.png +SelectBG = [main]selectbg.png + +Select_ArrowLeft = [interface]select_arrow_left.png +Select_ArrowRight = [interface]select_arrow_right.png + +#Backgrounds +LoadingBG = [bg-load]basic.jpg +TitleBG = [bg-main]love.webm +MainBG = [bg-main]love.webm +SongBG = [bg-main]love.webm +ScoreScreenBG = [bg-main]love.webm +Top5BG = [bg-main]love.webm +OptionsBG = [bg-main]love.webm +EditBG = [bg-main]love.webm +EditSubBG = [bg-main]love.webm +PartyBG = [bg-main]love.webm + +#Icons on screen +SongCD = [icon]cd.png +MainIcon = [main]buttonsolo.png +MainSearch = [icon]search.png +IconOption = [main]buttonoption.png +IconEdit = [main]buttonedit.png +IconSongMenu = [icon]songmenu.png +ScoreIcon = [icon]score.png +PartyIcon = [main]buttonparty.png +StatIcon = [main]buttonstats.png +VideoIcon = [icon]video.png + +IconError = [icon]error.png +IconQuestion = [icon]question.png + + +# # # S O N G S E L E C E T # # # +SongSelection1up = [main]songSelection1up.png +SongSelection1dn = [main]songSelection1dn.png +SongSelection1 = [main]songSelection1.png +SongSelection2 = [main]songSelection2.png +SongSelection3 = [main]songSelection3.png +SongSelection4 = [main]songSelection4.png +SongSelection5 = [main]songSelection5.png +SongCover = [main]songCover.jpg +SongMessage = [song]message.png +SongDuetSinger = [song]duetsinger.png +SongDuetSinger2 = [song]duetsinger2.png +SongDuetSinger3 = [song]duetsinger3.png + +# # # S I N G # # # +#the bar where the lyrics reside +LyricBar = [sing]textBar.png +LyricBarDuet = [sing]textBarDuet.png + +#this one slides in, to tell you that singing starts immediately +LyricHelpBar = [sing]lyricsHelpBar.png + +#the bar behind the timestuff +TimeBar1 = [sing]timeBarBG.png + +#the time progress bar (not skinned in this theme :P ) +TimeBar = [sing]timeBar.jpg + +#linebonus, the thing that pop ups at the score +LineBonusBack = [sing]lineBonusPopUp.png + +#Singbar (the thing beneath the scores) +SingBarBack = [sing]singBarBack.png +SingBarBar = [sing]singBarBar.png +SingBarFront = [sing]singBarFront.png + +#Background for scores +ScoreBG = [sing]scoreBg.png + +#Background for the P1, P2 and so on +P = [sing]p.png + +#Pointer for lyrics +Ball = [sing]LyricsBall.png + +#song name for medley mode +SongName = [sing]SongName.png + + +# # # S C O R E / T O P 5 # # # +ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png +ScoreLevel = [score]level.png +ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +ButtonSendScore = [score]buttonsendscore.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + +ScoreEndCap = [score]endcap.png +ScoreLine = [score]line.png +PlayerNumberBox = [main]playerNumberBox.png + +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +# these icons are part of the tango icon set +# licensed under Creative Commons Attribution Share-Alike license +# http://tango.freedesktop.org +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png +Rating_7 = [score]rating_7.png +# # # O P T I O N S # # # +Optionsbuttongame = [Options]buttongame.png +Optionsbuttongraphics = [Options]buttongraphics.png +Optionsbuttonsound = [Options]buttonsound.png +Optionsbuttonlyrics = [Options]buttonlyrics.png +Optionsbuttondesign = [Options]buttondesign.png +Optionsbuttonrecord = [Options]buttonduet.png +Optionsbuttonadvanced = [Options]buttonadvanced.png +Optionsbuttonnetwork = [Options]buttonnetwork.png +Optionsbuttonwebcam = [Options]buttonwebcam.png +Optionsbuttonjukebox = [Options]buttonjukebox.png +Optionsbuttonback = [Options]buttonback.png + +# # # M A I N P A R T Y # # # +ClassicButton =[MainParty]ClassicButton.png +ClassicFreeButton =[MainParty]ClassicFreeButton.png +ChallengeButton =[MainParty]ChallengeButton.png +TournamentButton =[tournament]trophy.png + + + +# # # P A R T Y # # # +Joker =[party]Joker.png +PartyPlayerButton =[party]playerButton.png +PartyTeamButton1 =[party]roundTeamButton.png +PartyTeamButton2 =[party]playerTeamButton.png +PartyTeamButton3 =[party]winTeamButton1.png +PartyTeamButton4 =[party]winTeamButton2.png +PartyTeamButton5 =[party]winTeamButton3.png +PartyRoundBG1 =[party]roundBG1.png +PartyRoundBG2 =[party]roundBG2.png +PartyRoundBG3 =[party]roundBG3.png +PartyRoundBG4 =[party]roundBG4.png +HDL_Pointer =[party]pointer.png +PartyTeamPoints =[party]teamPoints.png +PartyScoreDeco =[party]scoreDecoration.png +PartyScoreBG1 =[party]scoreBG1.png +PartyScoreBG2 =[party]scoreBG2.png +PartyWinDeco1 =[party]winDecoration.png +PartyWinDeco2 =[party]winDecoration.png +PartyWinDeco3 =[party]winDecoration.png +PartyPlayerSelectBG = [party]playerselectbg.png +PartyTrophy =[tournament]trophy.png +PartyWinner =[tournament]winner.png + +# # # S T A T S # # # +StatMainBG1 = [stat]mainBG1.png +StatMainBG2 = [stat]mainBG2.png +StatMainBG3 = [stat]mainBG3.png +StatDetailBG1 = [stat]detailBG1.png + + +# # # N A V I # # # +ButtonP = [button]p.png +ButtonM = [button]m.png +ButtonJ = [button]j.png +ButtonC = [button]c.png +ButtonAlt = [button]alt.png +ButtonAZ = [button]az.png +ButtonEnter = [button]enter.png +ButtonNavi = [button]navi.png +ButtonEsc = [button]esc.png +Button13 = [button]13.png +ButtonIns = [button]ins.png +ButtonDel = [button]del.png + +JumpToBG = [menu]jumpToBg.png +SongMenuBG = [menu]songMenuBg.png +SongMenuSelectBG = [menu]songMenuSelectBg.png +PopUpBG = [menu]popUpBG.png + + +# # # N O T E S # # # +# sung notes - colorized with playercolors +GrayLeft = [sing]notesLeft.png +GrayMid = [sing]notesMid.png +GrayRight = [sing]notesRight.png +# unsung notes - colorized with playercolors +NotePlainLeft = [sing]notesPlainLeft.png +NotePlainMid = [sing]notesPlainMid.png +NotePlainRight = [sing]notesPlainRight.png +# the glow around unsung/sung notes - colorized with playercolors +NoteBGLeft = [sing]notesBgLeft.png +NoteBGMid = [sing]notesBgMid.png +NoteBGRight = [sing]notesBgRight.png +Pause = [sing]pause.png + + +# # # E F F E C T S # # # +NoteStar = [effect]goldenNoteStar.png +NotePerfectStar = [effect]perfectNoteStar.png + + +# # # dirty helpers # # # +Rectangle = [helper]rectangle.png +ButtonFade = [helper]buttonFade.png +BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png + + +# # # DOWNLOAD SCORE # # # +ProgressBar = [sing]timeBar.jpg + +# # # J U K E B O X # # # +JukeboxTimeBar1 = [jukebox]timeBarBG.png +JukeboxTimeBar = [jukebox]timeBar.jpg +JukeboxSong = [jukebox]song.png +JukeboxSongBackground = [jukebox]title.png +JukeboxSongListBackground = [jukebox]songlist.png +JukeboxSongbartopBackground= [jukebox]bartop.png +JukeboxSongOptionsBackground = [jukebox]songoptions.png +JukeboxLyric = [jukebox]lyric.png +JukeboxRandom = [jukebox]random.png +JukeboxRepeat = [jukebox]repeat.png +JukeboxCurrentSongBackground = [jukebox]currentsong.png +JukeboxSongListUp = [jukebox]songlistup.png +JukeboxSongListDown = [jukebox]songlistdown.png +JukeboxOptions = [jukebox]options.png +JukeboxClose = [jukebox]close.png +JukeboxFix = [jukebox]pin.png +JukeboxSongMenuTimeBar = [jukebox]timeBarSongMenuBG.png +JukeboxSongMenuPlayPause = [jukebox]songmenuplaypause.png +JukeboxSongMenuNext = [jukebox]songmenunext.png +JukeboxSongMenuPrevious = [jukebox]songmenuprevious.png +JukeboxSongMenuPlaylist = [jukebox]songmenuplaylist.png +JukeboxField = [jukebox]fieldbg.png +JukeboxButton = [jukebox]mainBar.png +JukeboxSelect = [jukebox]selectbg.png + +# # # E D I T # # # +PlayOnly = [editsub]play.png +playwithnote = [editsub]play-with-note.png +playnote = [editsub]play-note.png +nextseq = [editsub]next-seq.png +previousseq = [editsub]previous-seq.png +undo = [editsub]undo.png +gold = [editsub]gold.png +freestyle = [editsub]freestyle.png + +# # # COLOR PICKER # # # +PickerBG = [color]pickerbg.png +Picker = [color]picker.jpg +Hue = [color]hue.png +HueBar = [color]hue-bar.png +WhiteFade = [color]white-fade.png +BlackFade = [color]black-fade.png +Pointer = [color]pointer.png + +# # # N A M E # # # +AvatarFrame = [name]frame.png +CurrentPlayer = [name]player.png +SelectFrame = [name]select.png +AvatarFrame2 = [score]frame.png + +# # # NO AVATARS # # # +NoAvatar_P1 = [name]noavatarP1.png +NoAvatar_P2 = [name]noavatarP2.png +NoAvatar_P3 = [name]noavatarP3.png +NoAvatar_P4 = [name]noavatarP4.png +NoAvatar_P5 = [name]noavatarP5.png +NoAvatar_P6 = [name]noavatarP6.png +NoAvatar_P7 = [name]noavatarP1.png +NoAvatar_P8 = [name]noavatarP2.png +NoAvatar_P9 = [name]noavatarP3.png +NoAvatar_P10 = [name]noavatarP4.png +NoAvatar_P11 = [name]noavatarP5.png +NoAvatar_P12 = [name]noavatarP6.png + +# # # A B O U T # # # +LogoWeb = [About]logo_web.png +LogoDeluxe = [About]logo_deluxe.png +helperbg = [About]helperbg.png + +# # # D E V E L O P E R S # # # +Dhelperbg = [Developers]helperbg.png \ No newline at end of file diff --git a/game/themes/Fantasy/Magma.ini b/game/themes/Fantasy/Magma.ini new file mode 100644 index 00000000..67d53894 --- /dev/null +++ b/game/themes/Fantasy/Magma.ini @@ -0,0 +1,373 @@ + +################################### +# theme developed by Daniel20 # +# for http:\\ultrastar-es.org # +# visit us to get songs, plugins, # +# themes and more... # +# # +# *some icons belongs to # +# http://www.iconfinder.com/ # +# under Creative Common license # +################################### + +#Video credits to: AA VFX https://www.youtube.com/watch?v=X36DOTEzjHw + +############### +[Skin] +Theme=Fantasy +Name= Magma +Color=Red + +[Textures] +/** + * Interface + */ +interface_selectbg_search = [interface]selectbg_search.png +interface_dialog_background = [interface]dialog_background.png +interface_dialog_background2 = [interface]dialog_background2.png +interface_dialog_backgroundtop = [interface]dialog_backgroundtop.png +interface_dialog_backgroundtop2 = [interface]dialog_backgroundtop2.png + +Cursor = [interface]cursor.png +Cursor_Pressed = [interface]cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = [icon]song_menu.png +icon_song_search = [icon]song_search.png +icon_song_video = [icon]song_video.png +icon_song_medley = [icon]song_medley.png +icon_song_calcmedley = [icon]song_calcmedley.png +icon_song_duet = [icon]song_duet.png + +loadicon = [load]logo.png +loadbaricon = [load]bar.png + +# # # M A I N # # # +ButtonSolo = [main]buttonsolo.png +ButtonAbout = [main]buttonabout.png +ButtonParty = [main]buttonparty.png +ButtonStats = [main]buttonstats.png +ButtonJukebox = [main]buttonjukebox.png +ButtonOption = [main]buttonoption.png +ButtonExit = [main]buttonexit.png +Button2 = [main]button2.png +Button = [main]button.png +ButtonF = [main]buttonf.jpg +MainBar = [main]mainBar.png +SelectBG = [main]selectbg.png + +Select_ArrowLeft = [interface]select_arrow_left.png +Select_ArrowRight = [interface]select_arrow_right.png + +#Backgrounds +LoadingBG = [bg-load]basic.jpg +TitleBG = [bg-main]magma.webm +MainBG = [bg-main]magma.webm +SongBG = [bg-main]magma.webm +ScoreScreenBG = [bg-main]magma.webm +Top5BG = [bg-main]magma.webm +OptionsBG = [bg-main]magma.webm +EditBG = [bg-main]magma.webm +EditSubBG = [bg-main]magma.webm +PartyBG = [bg-main]magma.webm + +#Icons on screen +SongCD = [icon]cd.png +MainIcon = [main]buttonsolo.png +MainSearch = [icon]search.png +IconOption = [main]buttonoption.png +IconEdit = [main]buttonedit.png +IconSongMenu = [icon]songmenu.png +ScoreIcon = [icon]score.png +PartyIcon = [main]buttonparty.png +StatIcon = [main]buttonstats.png +VideoIcon = [icon]video.png + +IconError = [icon]error.png +IconQuestion = [icon]question.png + + +# # # S O N G S E L E C E T # # # +SongSelection1up = [main]songSelection1up.png +SongSelection1dn = [main]songSelection1dn.png +SongSelection1 = [main]songSelection1.png +SongSelection2 = [main]songSelection2.png +SongSelection3 = [main]songSelection3.png +SongSelection4 = [main]songSelection4.png +SongSelection5 = [main]songSelection5.png +SongCover = [main]songCover.jpg +SongMessage = [song]message.png +SongDuetSinger = [song]duetsinger.png +SongDuetSinger2 = [song]duetsinger2.png +SongDuetSinger3 = [song]duetsinger3.png + +# # # S I N G # # # +#the bar where the lyrics reside +LyricBar = [sing]textBar.png +LyricBarDuet = [sing]textBarDuet.png + +#this one slides in, to tell you that singing starts immediately +LyricHelpBar = [sing]lyricsHelpBar.png + +#the bar behind the timestuff +TimeBar1 = [sing]timeBarBG.png + +#the time progress bar (not skinned in this theme :P ) +TimeBar = [sing]timeBar.jpg + +#linebonus, the thing that pop ups at the score +LineBonusBack = [sing]lineBonusPopUp.png + +#Singbar (the thing beneath the scores) +SingBarBack = [sing]singBarBack.png +SingBarBar = [sing]singBarBar.png +SingBarFront = [sing]singBarFront.png + +#Background for scores +ScoreBG = [sing]scoreBg.png + +#Background for the P1, P2 and so on +P = [sing]p.png + +#Pointer for lyrics +Ball = [sing]LyricsBall.png + +#song name for medley mode +SongName = [sing]SongName.png + + +# # # S C O R E / T O P 5 # # # +ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png +ScoreLevel = [score]level.png +ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +ButtonSendScore = [score]buttonsendscore.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + +ScoreEndCap = [score]endcap.png +ScoreLine = [score]line.png +PlayerNumberBox = [main]playerNumberBox.png + +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +# these icons are part of the tango icon set +# licensed under Creative Commons Attribution Share-Alike license +# http://tango.freedesktop.org +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png +Rating_7 = [score]rating_7.png +# # # O P T I O N S # # # +Optionsbuttongame = [Options]buttongame.png +Optionsbuttongraphics = [Options]buttongraphics.png +Optionsbuttonsound = [Options]buttonsound.png +Optionsbuttonlyrics = [Options]buttonlyrics.png +Optionsbuttondesign = [Options]buttondesign.png +Optionsbuttonrecord = [Options]buttonduet.png +Optionsbuttonadvanced = [Options]buttonadvanced.png +Optionsbuttonnetwork = [Options]buttonnetwork.png +Optionsbuttonwebcam = [Options]buttonwebcam.png +Optionsbuttonjukebox = [Options]buttonjukebox.png +Optionsbuttonback = [Options]buttonback.png + +# # # M A I N P A R T Y # # # +ClassicButton =[MainParty]ClassicButton.png +ClassicFreeButton =[MainParty]ClassicFreeButton.png +ChallengeButton =[MainParty]ChallengeButton.png +TournamentButton =[tournament]trophy.png + + + +# # # P A R T Y # # # +Joker =[party]Joker.png +PartyPlayerButton =[party]playerButton.png +PartyTeamButton1 =[party]roundTeamButton.png +PartyTeamButton2 =[party]playerTeamButton.png +PartyTeamButton3 =[party]winTeamButton1.png +PartyTeamButton4 =[party]winTeamButton2.png +PartyTeamButton5 =[party]winTeamButton3.png +PartyRoundBG1 =[party]roundBG1.png +PartyRoundBG2 =[party]roundBG2.png +PartyRoundBG3 =[party]roundBG3.png +PartyRoundBG4 =[party]roundBG4.png +HDL_Pointer =[party]pointer.png +PartyTeamPoints =[party]teamPoints.png +PartyScoreDeco =[party]scoreDecoration.png +PartyScoreBG1 =[party]scoreBG1.png +PartyScoreBG2 =[party]scoreBG2.png +PartyWinDeco1 =[party]winDecoration.png +PartyWinDeco2 =[party]winDecoration.png +PartyWinDeco3 =[party]winDecoration.png +PartyPlayerSelectBG = [party]playerselectbg.png +PartyTrophy =[tournament]trophy.png +PartyWinner =[tournament]winner.png + +# # # S T A T S # # # +StatMainBG1 = [stat]mainBG1.png +StatMainBG2 = [stat]mainBG2.png +StatMainBG3 = [stat]mainBG3.png +StatDetailBG1 = [stat]detailBG1.png + + +# # # N A V I # # # +ButtonP = [button]p.png +ButtonM = [button]m.png +ButtonJ = [button]j.png +ButtonC = [button]c.png +ButtonAlt = [button]alt.png +ButtonAZ = [button]az.png +ButtonEnter = [button]enter.png +ButtonNavi = [button]navi.png +ButtonEsc = [button]esc.png +Button13 = [button]13.png +ButtonIns = [button]ins.png +ButtonDel = [button]del.png + +JumpToBG = [menu]jumpToBg.png +SongMenuBG = [menu]songMenuBg.png +SongMenuSelectBG = [menu]songMenuSelectBg.png +PopUpBG = [menu]popUpBG.png + + +# # # N O T E S # # # +# sung notes - colorized with playercolors +GrayLeft = [sing]notesLeft.png +GrayMid = [sing]notesMid.png +GrayRight = [sing]notesRight.png +# unsung notes - colorized with playercolors +NotePlainLeft = [sing]notesPlainLeft.png +NotePlainMid = [sing]notesPlainMid.png +NotePlainRight = [sing]notesPlainRight.png +# the glow around unsung/sung notes - colorized with playercolors +NoteBGLeft = [sing]notesBgLeft.png +NoteBGMid = [sing]notesBgMid.png +NoteBGRight = [sing]notesBgRight.png +Pause = [sing]pause.png + + +# # # E F F E C T S # # # +NoteStar = [effect]goldenNoteStar.png +NotePerfectStar = [effect]perfectNoteStar.png + + +# # # dirty helpers # # # +Rectangle = [helper]rectangle.png +ButtonFade = [helper]buttonFade.png +BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png + + +# # # DOWNLOAD SCORE # # # +ProgressBar = [sing]timeBar.jpg + +# # # J U K E B O X # # # +JukeboxTimeBar1 = [jukebox]timeBarBG.png +JukeboxTimeBar = [jukebox]timeBar.jpg +JukeboxSong = [jukebox]song.png +JukeboxSongBackground = [jukebox]title.png +JukeboxSongListBackground = [jukebox]songlist.png +JukeboxSongbartopBackground= [jukebox]bartop.png +JukeboxSongOptionsBackground = [jukebox]songoptions.png +JukeboxLyric = [jukebox]lyric.png +JukeboxRandom = [jukebox]random.png +JukeboxRepeat = [jukebox]repeat.png +JukeboxCurrentSongBackground = [jukebox]currentsong.png +JukeboxSongListUp = [jukebox]songlistup.png +JukeboxSongListDown = [jukebox]songlistdown.png +JukeboxOptions = [jukebox]options.png +JukeboxClose = [jukebox]close.png +JukeboxFix = [jukebox]pin.png +JukeboxSongMenuTimeBar = [jukebox]timeBarSongMenuBG.png +JukeboxSongMenuPlayPause = [jukebox]songmenuplaypause.png +JukeboxSongMenuNext = [jukebox]songmenunext.png +JukeboxSongMenuPrevious = [jukebox]songmenuprevious.png +JukeboxSongMenuPlaylist = [jukebox]songmenuplaylist.png +JukeboxField = [jukebox]fieldbg.png +JukeboxButton = [jukebox]mainBar.png +JukeboxSelect = [jukebox]selectbg.png + +# # # E D I T # # # +PlayOnly = [editsub]play.png +playwithnote = [editsub]play-with-note.png +playnote = [editsub]play-note.png +nextseq = [editsub]next-seq.png +previousseq = [editsub]previous-seq.png +undo = [editsub]undo.png +gold = [editsub]gold.png +freestyle = [editsub]freestyle.png + +# # # COLOR PICKER # # # +PickerBG = [color]pickerbg.png +Picker = [color]picker.jpg +Hue = [color]hue.png +HueBar = [color]hue-bar.png +WhiteFade = [color]white-fade.png +BlackFade = [color]black-fade.png +Pointer = [color]pointer.png + +# # # N A M E # # # +AvatarFrame = [name]frame.png +CurrentPlayer = [name]player.png +SelectFrame = [name]select.png +AvatarFrame2 = [score]frame.png + +# # # NO AVATARS # # # +NoAvatar_P1 = [name]noavatarP1.png +NoAvatar_P2 = [name]noavatarP2.png +NoAvatar_P3 = [name]noavatarP3.png +NoAvatar_P4 = [name]noavatarP4.png +NoAvatar_P5 = [name]noavatarP5.png +NoAvatar_P6 = [name]noavatarP6.png +NoAvatar_P7 = [name]noavatarP1.png +NoAvatar_P8 = [name]noavatarP2.png +NoAvatar_P9 = [name]noavatarP3.png +NoAvatar_P10 = [name]noavatarP4.png +NoAvatar_P11 = [name]noavatarP5.png +NoAvatar_P12 = [name]noavatarP6.png + +# # # A B O U T # # # +LogoWeb = [About]logo_web.png +LogoDeluxe = [About]logo_deluxe.png +helperbg = [About]helperbg.png + +# # # D E V E L O P E R S # # # +Dhelperbg = [Developers]helperbg.png \ No newline at end of file diff --git a/game/themes/Fantasy/Space.ini b/game/themes/Fantasy/Space.ini new file mode 100644 index 00000000..47613867 --- /dev/null +++ b/game/themes/Fantasy/Space.ini @@ -0,0 +1,373 @@ + +################################### +# theme developed by Daniel20 # +# for http:\\ultrastar-es.org # +# visit us to get songs, plugins, # +# themes and more... # +# # +# *some icons belongs to # +# http://www.iconfinder.com/ # +# under Creative Common license # +################################### + +#Video credits to: AA VFX https://www.youtube.com/watch?v=S3La-3bUjXk + +############### +[Skin] +Theme=Fantasy +Name= Space +Color=Blue + +[Textures] +/** + * Interface + */ +interface_selectbg_search = [interface]selectbg_search.png +interface_dialog_background = [interface]dialog_background.png +interface_dialog_background2 = [interface]dialog_background2.png +interface_dialog_backgroundtop = [interface]dialog_backgroundtop.png +interface_dialog_backgroundtop2 = [interface]dialog_backgroundtop2.png + +Cursor = [interface]cursor.png +Cursor_Pressed = [interface]cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = [icon]song_menu.png +icon_song_search = [icon]song_search.png +icon_song_video = [icon]song_video.png +icon_song_medley = [icon]song_medley.png +icon_song_calcmedley = [icon]song_calcmedley.png +icon_song_duet = [icon]song_duet.png + +loadicon = [load]logo.png +loadbaricon = [load]bar.png + +# # # M A I N # # # +ButtonSolo = [main]buttonsolo.png +ButtonAbout = [main]buttonabout.png +ButtonParty = [main]buttonparty.png +ButtonStats = [main]buttonstats.png +ButtonJukebox = [main]buttonjukebox.png +ButtonOption = [main]buttonoption.png +ButtonExit = [main]buttonexit.png +Button2 = [main]button2.png +Button = [main]button.png +ButtonF = [main]buttonf.jpg +MainBar = [main]mainBar.png +SelectBG = [main]selectbg.png + +Select_ArrowLeft = [interface]select_arrow_left.png +Select_ArrowRight = [interface]select_arrow_right.png + +#Backgrounds +LoadingBG = [bg-load]basic.jpg +TitleBG = [bg-main]space.webm +MainBG = [bg-main]space.webm +SongBG = [bg-main]space.webm +ScoreScreenBG = [bg-main]space.webm +Top5BG = [bg-main]space.webm +OptionsBG = [bg-main]space.webm +EditBG = [bg-main]space.webm +EditSubBG = [bg-main]space.webm +PartyBG = [bg-main]space.webm + +#Icons on screen +SongCD = [icon]cd.png +MainIcon = [main]buttonsolo.png +MainSearch = [icon]search.png +IconOption = [main]buttonoption.png +IconEdit = [main]buttonedit.png +IconSongMenu = [icon]songmenu.png +ScoreIcon = [icon]score.png +PartyIcon = [main]buttonparty.png +StatIcon = [main]buttonstats.png +VideoIcon = [icon]video.png + +IconError = [icon]error.png +IconQuestion = [icon]question.png + + +# # # S O N G S E L E C E T # # # +SongSelection1up = [main]songSelection1up.png +SongSelection1dn = [main]songSelection1dn.png +SongSelection1 = [main]songSelection1.png +SongSelection2 = [main]songSelection2.png +SongSelection3 = [main]songSelection3.png +SongSelection4 = [main]songSelection4.png +SongSelection5 = [main]songSelection5.png +SongCover = [main]songCover.jpg +SongMessage = [song]message.png +SongDuetSinger = [song]duetsinger.png +SongDuetSinger2 = [song]duetsinger2.png +SongDuetSinger3 = [song]duetsinger3.png + +# # # S I N G # # # +#the bar where the lyrics reside +LyricBar = [sing]textBar.png +LyricBarDuet = [sing]textBarDuet.png + +#this one slides in, to tell you that singing starts immediately +LyricHelpBar = [sing]lyricsHelpBar.png + +#the bar behind the timestuff +TimeBar1 = [sing]timeBarBG.png + +#the time progress bar (not skinned in this theme :P ) +TimeBar = [sing]timeBar.jpg + +#linebonus, the thing that pop ups at the score +LineBonusBack = [sing]lineBonusPopUp.png + +#Singbar (the thing beneath the scores) +SingBarBack = [sing]singBarBack.png +SingBarBar = [sing]singBarBar.png +SingBarFront = [sing]singBarFront.png + +#Background for scores +ScoreBG = [sing]scoreBg.png + +#Background for the P1, P2 and so on +P = [sing]p.png + +#Pointer for lyrics +Ball = [sing]LyricsBall.png + +#song name for medley mode +SongName = [sing]SongName.png + + +# # # S C O R E / T O P 5 # # # +ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png +ScoreLevel = [score]level.png +ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +ButtonSendScore = [score]buttonsendscore.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + +ScoreEndCap = [score]endcap.png +ScoreLine = [score]line.png +PlayerNumberBox = [main]playerNumberBox.png + +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +# these icons are part of the tango icon set +# licensed under Creative Commons Attribution Share-Alike license +# http://tango.freedesktop.org +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png +Rating_7 = [score]rating_7.png +# # # O P T I O N S # # # +Optionsbuttongame = [Options]buttongame.png +Optionsbuttongraphics = [Options]buttongraphics.png +Optionsbuttonsound = [Options]buttonsound.png +Optionsbuttonlyrics = [Options]buttonlyrics.png +Optionsbuttondesign = [Options]buttondesign.png +Optionsbuttonrecord = [Options]buttonduet.png +Optionsbuttonadvanced = [Options]buttonadvanced.png +Optionsbuttonnetwork = [Options]buttonnetwork.png +Optionsbuttonwebcam = [Options]buttonwebcam.png +Optionsbuttonjukebox = [Options]buttonjukebox.png +Optionsbuttonback = [Options]buttonback.png + +# # # M A I N P A R T Y # # # +ClassicButton =[MainParty]ClassicButton.png +ClassicFreeButton =[MainParty]ClassicFreeButton.png +ChallengeButton =[MainParty]ChallengeButton.png +TournamentButton =[tournament]trophy.png + + + +# # # P A R T Y # # # +Joker =[party]Joker.png +PartyPlayerButton =[party]playerButton.png +PartyTeamButton1 =[party]roundTeamButton.png +PartyTeamButton2 =[party]playerTeamButton.png +PartyTeamButton3 =[party]winTeamButton1.png +PartyTeamButton4 =[party]winTeamButton2.png +PartyTeamButton5 =[party]winTeamButton3.png +PartyRoundBG1 =[party]roundBG1.png +PartyRoundBG2 =[party]roundBG2.png +PartyRoundBG3 =[party]roundBG3.png +PartyRoundBG4 =[party]roundBG4.png +HDL_Pointer =[party]pointer.png +PartyTeamPoints =[party]teamPoints.png +PartyScoreDeco =[party]scoreDecoration.png +PartyScoreBG1 =[party]scoreBG1.png +PartyScoreBG2 =[party]scoreBG2.png +PartyWinDeco1 =[party]winDecoration.png +PartyWinDeco2 =[party]winDecoration.png +PartyWinDeco3 =[party]winDecoration.png +PartyPlayerSelectBG = [party]playerselectbg.png +PartyTrophy =[tournament]trophy.png +PartyWinner =[tournament]winner.png + +# # # S T A T S # # # +StatMainBG1 = [stat]mainBG1.png +StatMainBG2 = [stat]mainBG2.png +StatMainBG3 = [stat]mainBG3.png +StatDetailBG1 = [stat]detailBG1.png + + +# # # N A V I # # # +ButtonP = [button]p.png +ButtonM = [button]m.png +ButtonJ = [button]j.png +ButtonC = [button]c.png +ButtonAlt = [button]alt.png +ButtonAZ = [button]az.png +ButtonEnter = [button]enter.png +ButtonNavi = [button]navi.png +ButtonEsc = [button]esc.png +Button13 = [button]13.png +ButtonIns = [button]ins.png +ButtonDel = [button]del.png + +JumpToBG = [menu]jumpToBg.png +SongMenuBG = [menu]songMenuBg.png +SongMenuSelectBG = [menu]songMenuSelectBg.png +PopUpBG = [menu]popUpBG.png + + +# # # N O T E S # # # +# sung notes - colorized with playercolors +GrayLeft = [sing]notesLeft.png +GrayMid = [sing]notesMid.png +GrayRight = [sing]notesRight.png +# unsung notes - colorized with playercolors +NotePlainLeft = [sing]notesPlainLeft.png +NotePlainMid = [sing]notesPlainMid.png +NotePlainRight = [sing]notesPlainRight.png +# the glow around unsung/sung notes - colorized with playercolors +NoteBGLeft = [sing]notesBgLeft.png +NoteBGMid = [sing]notesBgMid.png +NoteBGRight = [sing]notesBgRight.png +Pause = [sing]pause.png + + +# # # E F F E C T S # # # +NoteStar = [effect]goldenNoteStar.png +NotePerfectStar = [effect]perfectNoteStar.png + + +# # # dirty helpers # # # +Rectangle = [helper]rectangle.png +ButtonFade = [helper]buttonFade.png +BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png + + +# # # DOWNLOAD SCORE # # # +ProgressBar = [sing]timeBar.jpg + +# # # J U K E B O X # # # +JukeboxTimeBar1 = [jukebox]timeBarBG.png +JukeboxTimeBar = [jukebox]timeBar.jpg +JukeboxSong = [jukebox]song.png +JukeboxSongBackground = [jukebox]title.png +JukeboxSongListBackground = [jukebox]songlist.png +JukeboxSongbartopBackground= [jukebox]bartop.png +JukeboxSongOptionsBackground = [jukebox]songoptions.png +JukeboxLyric = [jukebox]lyric.png +JukeboxRandom = [jukebox]random.png +JukeboxRepeat = [jukebox]repeat.png +JukeboxCurrentSongBackground = [jukebox]currentsong.png +JukeboxSongListUp = [jukebox]songlistup.png +JukeboxSongListDown = [jukebox]songlistdown.png +JukeboxOptions = [jukebox]options.png +JukeboxClose = [jukebox]close.png +JukeboxFix = [jukebox]pin.png +JukeboxSongMenuTimeBar = [jukebox]timeBarSongMenuBG.png +JukeboxSongMenuPlayPause = [jukebox]songmenuplaypause.png +JukeboxSongMenuNext = [jukebox]songmenunext.png +JukeboxSongMenuPrevious = [jukebox]songmenuprevious.png +JukeboxSongMenuPlaylist = [jukebox]songmenuplaylist.png +JukeboxField = [jukebox]fieldbg.png +JukeboxButton = [jukebox]mainBar.png +JukeboxSelect = [jukebox]selectbg.png + +# # # E D I T # # # +PlayOnly = [editsub]play.png +playwithnote = [editsub]play-with-note.png +playnote = [editsub]play-note.png +nextseq = [editsub]next-seq.png +previousseq = [editsub]previous-seq.png +undo = [editsub]undo.png +gold = [editsub]gold.png +freestyle = [editsub]freestyle.png + +# # # COLOR PICKER # # # +PickerBG = [color]pickerbg.png +Picker = [color]picker.jpg +Hue = [color]hue.png +HueBar = [color]hue-bar.png +WhiteFade = [color]white-fade.png +BlackFade = [color]black-fade.png +Pointer = [color]pointer.png + +# # # N A M E # # # +AvatarFrame = [name]frame.png +CurrentPlayer = [name]player.png +SelectFrame = [name]select.png +AvatarFrame2 = [score]frame.png + +# # # NO AVATARS # # # +NoAvatar_P1 = [name]noavatarP1.png +NoAvatar_P2 = [name]noavatarP2.png +NoAvatar_P3 = [name]noavatarP3.png +NoAvatar_P4 = [name]noavatarP4.png +NoAvatar_P5 = [name]noavatarP5.png +NoAvatar_P6 = [name]noavatarP6.png +NoAvatar_P7 = [name]noavatarP1.png +NoAvatar_P8 = [name]noavatarP2.png +NoAvatar_P9 = [name]noavatarP3.png +NoAvatar_P10 = [name]noavatarP4.png +NoAvatar_P11 = [name]noavatarP5.png +NoAvatar_P12 = [name]noavatarP6.png + +# # # A B O U T # # # +LogoWeb = [About]logo_web.png +LogoDeluxe = [About]logo_deluxe.png +helperbg = [About]helperbg.png + +# # # D E V E L O P E R S # # # +Dhelperbg = [Developers]helperbg.png \ No newline at end of file diff --git a/game/themes/Deluxe/Blue.ini b/game/themes/Fantasy/Static Blue.ini similarity index 79% rename from game/themes/Deluxe/Blue.ini rename to game/themes/Fantasy/Static Blue.ini index 601a71f8..ccf64665 100644 --- a/game/themes/Deluxe/Blue.ini +++ b/game/themes/Fantasy/Static Blue.ini @@ -1,6 +1,19 @@ + +################################### +# theme developed by Daniel20 # +# for http:\\ultrastar-es.org # +# visit us to get songs, plugins, # +# themes and more... # +# # +# *some icons belongs to # +# http://www.iconfinder.com/ # +# under Creative Common license # +################################### + +############### [Skin] -Theme=Deluxe -Name=Blue +Theme=Fantasy +Name= Static Blue Color=Blue [Textures] @@ -26,7 +39,18 @@ icon_song_medley = [icon]song_medley.png icon_song_calcmedley = [icon]song_calcmedley.png icon_song_duet = [icon]song_duet.png +loadicon = [load]logo.png +loadbaricon = [load]bar.png + # # # M A I N # # # +ButtonSolo = [main]buttonsolo.png +ButtonAbout = [main]buttonabout.png +ButtonParty = [main]buttonparty.png +ButtonStats = [main]buttonstats.png +ButtonJukebox = [main]buttonjukebox.png +ButtonOption = [main]buttonoption.png +ButtonExit = [main]buttonexit.png +Button2 = [main]button2.png Button = [main]button.png ButtonF = [main]buttonf.jpg MainBar = [main]mainBar.png @@ -37,6 +61,7 @@ Select_ArrowRight = [interface]select_arrow_right.png #Backgrounds LoadingBG = [bg-load]basic.jpg +TitleBG = [bg-main]blue.jpg MainBG = [bg-main]blue.jpg SongBG = [bg-main]blue.jpg ScoreScreenBG = [bg-main]blue.jpg @@ -48,14 +73,14 @@ PartyBG = [bg-main]blue.jpg #Icons on screen SongCD = [icon]cd.png -MainIcon = [icon]main.png +MainIcon = [main]buttonsolo.png MainSearch = [icon]search.png -IconOption = [icon]options.png -IconEdit = [icon]options.png +IconOption = [main]buttonoption.png +IconEdit = [main]buttonedit.png IconSongMenu = [icon]songmenu.png ScoreIcon = [icon]score.png -PartyIcon = [icon]party.png -StatIcon = [icon]stats.png +PartyIcon = [main]buttonparty.png +StatIcon = [main]buttonstats.png VideoIcon = [icon]video.png IconError = [icon]error.png @@ -63,6 +88,8 @@ IconQuestion = [icon]question.png # # # S O N G S E L E C E T # # # +SongSelection1up = [main]songSelection1up.png +SongSelection1dn = [main]songSelection1dn.png SongSelection1 = [main]songSelection1.png SongSelection2 = [main]songSelection2.png SongSelection3 = [main]songSelection3.png @@ -153,7 +180,25 @@ Rating_4 = [score]rating_4.png Rating_5 = [score]rating_5.png Rating_6 = [score]rating_6.png Rating_7 = [score]rating_7.png -# thank you girls and guys!!! +# # # O P T I O N S # # # +Optionsbuttongame = [Options]buttongame.png +Optionsbuttongraphics = [Options]buttongraphics.png +Optionsbuttonsound = [Options]buttonsound.png +Optionsbuttonlyrics = [Options]buttonlyrics.png +Optionsbuttondesign = [Options]buttondesign.png +Optionsbuttonrecord = [Options]buttonduet.png +Optionsbuttonadvanced = [Options]buttonadvanced.png +Optionsbuttonnetwork = [Options]buttonnetwork.png +Optionsbuttonwebcam = [Options]buttonwebcam.png +Optionsbuttonjukebox = [Options]buttonjukebox.png +Optionsbuttonback = [Options]buttonback.png + +# # # M A I N P A R T Y # # # +ClassicButton =[MainParty]ClassicButton.png +ClassicFreeButton =[MainParty]ClassicFreeButton.png +ChallengeButton =[MainParty]ChallengeButton.png +TournamentButton =[tournament]trophy.png + # # # P A R T Y # # # @@ -201,9 +246,6 @@ Button13 = [button]13.png ButtonIns = [button]ins.png ButtonDel = [button]del.png -Leiste1 = [special]bar1.png -Leiste2 = [special]bar2.png - JumpToBG = [menu]jumpToBg.png SongMenuBG = [menu]songMenuBg.png SongMenuSelectBG = [menu]songMenuSelectBg.png @@ -232,7 +274,7 @@ NotePerfectStar = [effect]perfectNoteStar.png # # # dirty helpers # # # -Rectangle = [helper]rectangle.jpg +Rectangle = [helper]rectangle.png ButtonFade = [helper]buttonFade.png BGFade = [special]bg_fade.png @@ -261,6 +303,7 @@ JukeboxTimeBar = [jukebox]timeBar.jpg JukeboxSong = [jukebox]song.png JukeboxSongBackground = [jukebox]title.png JukeboxSongListBackground = [jukebox]songlist.png +JukeboxSongbartopBackground= [jukebox]bartop.png JukeboxSongOptionsBackground = [jukebox]songoptions.png JukeboxLyric = [jukebox]lyric.png JukeboxRandom = [jukebox]random.png @@ -276,6 +319,9 @@ JukeboxSongMenuPlayPause = [jukebox]songmenuplaypause.png JukeboxSongMenuNext = [jukebox]songmenunext.png JukeboxSongMenuPrevious = [jukebox]songmenuprevious.png JukeboxSongMenuPlaylist = [jukebox]songmenuplaylist.png +JukeboxField = [jukebox]fieldbg.png +JukeboxButton = [jukebox]mainBar.png +JukeboxSelect = [jukebox]selectbg.png # # # E D I T # # # PlayOnly = [editsub]play.png @@ -309,3 +355,17 @@ NoAvatar_P3 = [name]noavatarP3.png NoAvatar_P4 = [name]noavatarP4.png NoAvatar_P5 = [name]noavatarP5.png NoAvatar_P6 = [name]noavatarP6.png +NoAvatar_P7 = [name]noavatarP1.png +NoAvatar_P8 = [name]noavatarP2.png +NoAvatar_P9 = [name]noavatarP3.png +NoAvatar_P10 = [name]noavatarP4.png +NoAvatar_P11 = [name]noavatarP5.png +NoAvatar_P12 = [name]noavatarP6.png + +# # # A B O U T # # # +LogoWeb = [About]logo_web.png +LogoDeluxe = [About]logo_deluxe.png +helperbg = [About]helperbg.png + +# # # D E V E L O P E R S # # # +Dhelperbg = [Developers]helperbg.png \ No newline at end of file diff --git a/game/themes/Fantasy/Static Red.ini b/game/themes/Fantasy/Static Red.ini new file mode 100644 index 00000000..fe87dda0 --- /dev/null +++ b/game/themes/Fantasy/Static Red.ini @@ -0,0 +1,371 @@ + +################################### +# theme developed by Daniel20 # +# for http:\\ultrastar-es.org # +# visit us to get songs, plugins, # +# themes and more... # +# # +# *some icons belongs to # +# http://www.iconfinder.com/ # +# under Creative Common license # +################################### + +############### +[Skin] +Theme=Fantasy +Name= Static Red +Color=Red + +[Textures] +/** + * Interface + */ +interface_selectbg_search = [interface]selectbg_search.png +interface_dialog_background = [interface]dialog_background.png +interface_dialog_background2 = [interface]dialog_background2.png +interface_dialog_backgroundtop = [interface]dialog_backgroundtop.png +interface_dialog_backgroundtop2 = [interface]dialog_backgroundtop2.png + +Cursor = [interface]cursor.png +Cursor_Pressed = [interface]cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = [icon]song_menu.png +icon_song_search = [icon]song_search.png +icon_song_video = [icon]song_video.png +icon_song_medley = [icon]song_medley.png +icon_song_calcmedley = [icon]song_calcmedley.png +icon_song_duet = [icon]song_duet.png + +loadicon = [load]logo.png +loadbaricon = [load]bar.png + +# # # M A I N # # # +ButtonSolo = [main]buttonsolo.png +ButtonAbout = [main]buttonabout.png +ButtonParty = [main]buttonparty.png +ButtonStats = [main]buttonstats.png +ButtonJukebox = [main]buttonjukebox.png +ButtonOption = [main]buttonoption.png +ButtonExit = [main]buttonexit.png +Button2 = [main]button2.png +Button = [main]button.png +ButtonF = [main]buttonf.jpg +MainBar = [main]mainBar.png +SelectBG = [main]selectbg.png + +Select_ArrowLeft = [interface]select_arrow_left.png +Select_ArrowRight = [interface]select_arrow_right.png + +#Backgrounds +LoadingBG = [bg-load]basic.jpg +TitleBG = [bg-main]red.jpg +MainBG = [bg-main]red.jpg +SongBG = [bg-main]red.jpg +ScoreScreenBG = [bg-main]red.jpg +Top5BG = [bg-main]red.jpg +OptionsBG = [bg-main]red.jpg +EditBG = [bg-main]red.jpg +EditSubBG = [bg-main]red.jpg +PartyBG = [bg-main]red.jpg + +#Icons on screen +SongCD = [icon]cd.png +MainIcon = [main]buttonsolo.png +MainSearch = [icon]search.png +IconOption = [main]buttonoption.png +IconEdit = [main]buttonedit.png +IconSongMenu = [icon]songmenu.png +ScoreIcon = [icon]score.png +PartyIcon = [main]buttonparty.png +StatIcon = [main]buttonstats.png +VideoIcon = [icon]video.png + +IconError = [icon]error.png +IconQuestion = [icon]question.png + + +# # # S O N G S E L E C E T # # # +SongSelection1up = [main]songSelection1up.png +SongSelection1dn = [main]songSelection1dn.png +SongSelection1 = [main]songSelection1.png +SongSelection2 = [main]songSelection2.png +SongSelection3 = [main]songSelection3.png +SongSelection4 = [main]songSelection4.png +SongSelection5 = [main]songSelection5.png +SongCover = [main]songCover.jpg +SongMessage = [song]message.png +SongDuetSinger = [song]duetsinger.png +SongDuetSinger2 = [song]duetsinger2.png +SongDuetSinger3 = [song]duetsinger3.png + +# # # S I N G # # # +#the bar where the lyrics reside +LyricBar = [sing]textBar.png +LyricBarDuet = [sing]textBarDuet.png + +#this one slides in, to tell you that singing starts immediately +LyricHelpBar = [sing]lyricsHelpBar.png + +#the bar behind the timestuff +TimeBar1 = [sing]timeBarBG.png + +#the time progress bar (not skinned in this theme :P ) +TimeBar = [sing]timeBar.jpg + +#linebonus, the thing that pop ups at the score +LineBonusBack = [sing]lineBonusPopUp.png + +#Singbar (the thing beneath the scores) +SingBarBack = [sing]singBarBack.png +SingBarBar = [sing]singBarBar.png +SingBarFront = [sing]singBarFront.png + +#Background for scores +ScoreBG = [sing]scoreBg.png + +#Background for the P1, P2 and so on +P = [sing]p.png + +#Pointer for lyrics +Ball = [sing]LyricsBall.png + +#song name for medley mode +SongName = [sing]SongName.png + + +# # # S C O R E / T O P 5 # # # +ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png +ScoreLevel = [score]level.png +ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +ButtonSendScore = [score]buttonsendscore.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + +ScoreEndCap = [score]endcap.png +ScoreLine = [score]line.png +PlayerNumberBox = [main]playerNumberBox.png + +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +# these icons are part of the tango icon set +# licensed under Creative Commons Attribution Share-Alike license +# http://tango.freedesktop.org +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png +Rating_7 = [score]rating_7.png +# # # O P T I O N S # # # +Optionsbuttongame = [Options]buttongame.png +Optionsbuttongraphics = [Options]buttongraphics.png +Optionsbuttonsound = [Options]buttonsound.png +Optionsbuttonlyrics = [Options]buttonlyrics.png +Optionsbuttondesign = [Options]buttondesign.png +Optionsbuttonrecord = [Options]buttonduet.png +Optionsbuttonadvanced = [Options]buttonadvanced.png +Optionsbuttonnetwork = [Options]buttonnetwork.png +Optionsbuttonwebcam = [Options]buttonwebcam.png +Optionsbuttonjukebox = [Options]buttonjukebox.png +Optionsbuttonback = [Options]buttonback.png + +# # # M A I N P A R T Y # # # +ClassicButton =[MainParty]ClassicButton.png +ClassicFreeButton =[MainParty]ClassicFreeButton.png +ChallengeButton =[MainParty]ChallengeButton.png +TournamentButton =[tournament]trophy.png + + + +# # # P A R T Y # # # +Joker =[party]Joker.png +PartyPlayerButton =[party]playerButton.png +PartyTeamButton1 =[party]roundTeamButton.png +PartyTeamButton2 =[party]playerTeamButton.png +PartyTeamButton3 =[party]winTeamButton1.png +PartyTeamButton4 =[party]winTeamButton2.png +PartyTeamButton5 =[party]winTeamButton3.png +PartyRoundBG1 =[party]roundBG1.png +PartyRoundBG2 =[party]roundBG2.png +PartyRoundBG3 =[party]roundBG3.png +PartyRoundBG4 =[party]roundBG4.png +HDL_Pointer =[party]pointer.png +PartyTeamPoints =[party]teamPoints.png +PartyScoreDeco =[party]scoreDecoration.png +PartyScoreBG1 =[party]scoreBG1.png +PartyScoreBG2 =[party]scoreBG2.png +PartyWinDeco1 =[party]winDecoration.png +PartyWinDeco2 =[party]winDecoration.png +PartyWinDeco3 =[party]winDecoration.png +PartyPlayerSelectBG = [party]playerselectbg.png +PartyTrophy =[tournament]trophy.png +PartyWinner =[tournament]winner.png + +# # # S T A T S # # # +StatMainBG1 = [stat]mainBG1.png +StatMainBG2 = [stat]mainBG2.png +StatMainBG3 = [stat]mainBG3.png +StatDetailBG1 = [stat]detailBG1.png + + +# # # N A V I # # # +ButtonP = [button]p.png +ButtonM = [button]m.png +ButtonJ = [button]j.png +ButtonC = [button]c.png +ButtonAlt = [button]alt.png +ButtonAZ = [button]az.png +ButtonEnter = [button]enter.png +ButtonNavi = [button]navi.png +ButtonEsc = [button]esc.png +Button13 = [button]13.png +ButtonIns = [button]ins.png +ButtonDel = [button]del.png + +JumpToBG = [menu]jumpToBg.png +SongMenuBG = [menu]songMenuBg.png +SongMenuSelectBG = [menu]songMenuSelectBg.png +PopUpBG = [menu]popUpBG.png + + +# # # N O T E S # # # +# sung notes - colorized with playercolors +GrayLeft = [sing]notesLeft.png +GrayMid = [sing]notesMid.png +GrayRight = [sing]notesRight.png +# unsung notes - colorized with playercolors +NotePlainLeft = [sing]notesPlainLeft.png +NotePlainMid = [sing]notesPlainMid.png +NotePlainRight = [sing]notesPlainRight.png +# the glow around unsung/sung notes - colorized with playercolors +NoteBGLeft = [sing]notesBgLeft.png +NoteBGMid = [sing]notesBgMid.png +NoteBGRight = [sing]notesBgRight.png +Pause = [sing]pause.png + + +# # # E F F E C T S # # # +NoteStar = [effect]goldenNoteStar.png +NotePerfectStar = [effect]perfectNoteStar.png + + +# # # dirty helpers # # # +Rectangle = [helper]rectangle.png +ButtonFade = [helper]buttonFade.png +BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png + + +# # # DOWNLOAD SCORE # # # +ProgressBar = [sing]timeBar.jpg + +# # # J U K E B O X # # # +JukeboxTimeBar1 = [jukebox]timeBarBG.png +JukeboxTimeBar = [jukebox]timeBar.jpg +JukeboxSong = [jukebox]song.png +JukeboxSongBackground = [jukebox]title.png +JukeboxSongListBackground = [jukebox]songlist.png +JukeboxSongbartopBackground= [jukebox]bartop.png +JukeboxSongOptionsBackground = [jukebox]songoptions.png +JukeboxLyric = [jukebox]lyric.png +JukeboxRandom = [jukebox]random.png +JukeboxRepeat = [jukebox]repeat.png +JukeboxCurrentSongBackground = [jukebox]currentsong.png +JukeboxSongListUp = [jukebox]songlistup.png +JukeboxSongListDown = [jukebox]songlistdown.png +JukeboxOptions = [jukebox]options.png +JukeboxClose = [jukebox]close.png +JukeboxFix = [jukebox]pin.png +JukeboxSongMenuTimeBar = [jukebox]timeBarSongMenuBG.png +JukeboxSongMenuPlayPause = [jukebox]songmenuplaypause.png +JukeboxSongMenuNext = [jukebox]songmenunext.png +JukeboxSongMenuPrevious = [jukebox]songmenuprevious.png +JukeboxSongMenuPlaylist = [jukebox]songmenuplaylist.png +JukeboxField = [jukebox]fieldbg.png +JukeboxButton = [jukebox]mainBar.png +JukeboxSelect = [jukebox]selectbg.png + +# # # E D I T # # # +PlayOnly = [editsub]play.png +playwithnote = [editsub]play-with-note.png +playnote = [editsub]play-note.png +nextseq = [editsub]next-seq.png +previousseq = [editsub]previous-seq.png +undo = [editsub]undo.png +gold = [editsub]gold.png +freestyle = [editsub]freestyle.png + +# # # COLOR PICKER # # # +PickerBG = [color]pickerbg.png +Picker = [color]picker.jpg +Hue = [color]hue.png +HueBar = [color]hue-bar.png +WhiteFade = [color]white-fade.png +BlackFade = [color]black-fade.png +Pointer = [color]pointer.png + +# # # N A M E # # # +AvatarFrame = [name]frame.png +CurrentPlayer = [name]player.png +SelectFrame = [name]select.png +AvatarFrame2 = [score]frame.png + +# # # NO AVATARS # # # +NoAvatar_P1 = [name]noavatarP1.png +NoAvatar_P2 = [name]noavatarP2.png +NoAvatar_P3 = [name]noavatarP3.png +NoAvatar_P4 = [name]noavatarP4.png +NoAvatar_P5 = [name]noavatarP5.png +NoAvatar_P6 = [name]noavatarP6.png +NoAvatar_P7 = [name]noavatarP1.png +NoAvatar_P8 = [name]noavatarP2.png +NoAvatar_P9 = [name]noavatarP3.png +NoAvatar_P10 = [name]noavatarP4.png +NoAvatar_P11 = [name]noavatarP5.png +NoAvatar_P12 = [name]noavatarP6.png + +# # # A B O U T # # # +LogoWeb = [About]logo_web.png +LogoDeluxe = [About]logo_deluxe.png +helperbg = [About]helperbg.png + +# # # D E V E L O P E R S # # # +Dhelperbg = [Developers]helperbg.png \ No newline at end of file diff --git a/game/themes/Fantasy/Static Violet.ini b/game/themes/Fantasy/Static Violet.ini new file mode 100644 index 00000000..985b03f4 --- /dev/null +++ b/game/themes/Fantasy/Static Violet.ini @@ -0,0 +1,371 @@ + +################################### +# theme developed by Daniel20 # +# for http:\\ultrastar-es.org # +# visit us to get songs, plugins, # +# themes and more... # +# # +# *some icons belongs to # +# http://www.iconfinder.com/ # +# under Creative Common license # +################################### + +############### +[Skin] +Theme=Fantasy +Name= Static Violet +Color=Violet + +[Textures] +/** + * Interface + */ +interface_selectbg_search = [interface]selectbg_search.png +interface_dialog_background = [interface]dialog_background.png +interface_dialog_background2 = [interface]dialog_background2.png +interface_dialog_backgroundtop = [interface]dialog_backgroundtop.png +interface_dialog_backgroundtop2 = [interface]dialog_backgroundtop2.png + +Cursor = [interface]cursor.png +Cursor_Pressed = [interface]cursor_pressed.png + +/** + * Icons + */ +icon_song_menu = [icon]song_menu.png +icon_song_search = [icon]song_search.png +icon_song_video = [icon]song_video.png +icon_song_medley = [icon]song_medley.png +icon_song_calcmedley = [icon]song_calcmedley.png +icon_song_duet = [icon]song_duet.png + +loadicon = [load]logo.png +loadbaricon = [load]bar.png + +# # # M A I N # # # +ButtonSolo = [main]buttonsolo.png +ButtonAbout = [main]buttonabout.png +ButtonParty = [main]buttonparty.png +ButtonStats = [main]buttonstats.png +ButtonJukebox = [main]buttonjukebox.png +ButtonOption = [main]buttonoption.png +ButtonExit = [main]buttonexit.png +Button2 = [main]button2.png +Button = [main]button.png +ButtonF = [main]buttonf.jpg +MainBar = [main]mainBar.png +SelectBG = [main]selectbg.png + +Select_ArrowLeft = [interface]select_arrow_left.png +Select_ArrowRight = [interface]select_arrow_right.png + +#Backgrounds +LoadingBG = [bg-load]basic.jpg +TitleBG = [bg-main]violet.jpg +MainBG = [bg-main]violet.jpg +SongBG = [bg-main]violet.jpg +ScoreScreenBG = [bg-main]violet.jpg +Top5BG = [bg-main]violet.jpg +OptionsBG = [bg-main]violet.jpg +EditBG = [bg-main]violet.jpg +EditSubBG = [bg-main]violet.jpg +PartyBG = [bg-main]violet.jpg + +#Icons on screen +SongCD = [icon]cd.png +MainIcon = [main]buttonsolo.png +MainSearch = [icon]search.png +IconOption = [main]buttonoption.png +IconEdit = [main]buttonedit.png +IconSongMenu = [icon]songmenu.png +ScoreIcon = [icon]score.png +PartyIcon = [main]buttonparty.png +StatIcon = [main]buttonstats.png +VideoIcon = [icon]video.png + +IconError = [icon]error.png +IconQuestion = [icon]question.png + + +# # # S O N G S E L E C E T # # # +SongSelection1up = [main]songSelection1up.png +SongSelection1dn = [main]songSelection1dn.png +SongSelection1 = [main]songSelection1.png +SongSelection2 = [main]songSelection2.png +SongSelection3 = [main]songSelection3.png +SongSelection4 = [main]songSelection4.png +SongSelection5 = [main]songSelection5.png +SongCover = [main]songCover.jpg +SongMessage = [song]message.png +SongDuetSinger = [song]duetsinger.png +SongDuetSinger2 = [song]duetsinger2.png +SongDuetSinger3 = [song]duetsinger3.png + +# # # S I N G # # # +#the bar where the lyrics reside +LyricBar = [sing]textBar.png +LyricBarDuet = [sing]textBarDuet.png + +#this one slides in, to tell you that singing starts immediately +LyricHelpBar = [sing]lyricsHelpBar.png + +#the bar behind the timestuff +TimeBar1 = [sing]timeBarBG.png + +#the time progress bar (not skinned in this theme :P ) +TimeBar = [sing]timeBar.jpg + +#linebonus, the thing that pop ups at the score +LineBonusBack = [sing]lineBonusPopUp.png + +#Singbar (the thing beneath the scores) +SingBarBack = [sing]singBarBack.png +SingBarBar = [sing]singBarBar.png +SingBarFront = [sing]singBarFront.png + +#Background for scores +ScoreBG = [sing]scoreBg.png + +#Background for the P1, P2 and so on +P = [sing]p.png + +#Pointer for lyrics +Ball = [sing]LyricsBall.png + +#song name for medley mode +SongName = [sing]SongName.png + + +# # # S C O R E / T O P 5 # # # +ScoreBox = [score]box.png +ScoreGlassBox = [score]glass_box.png +ScoreLevel = [score]level.png +ScoreLevelRound = [score]levelRound.png + +ScoreLevel_Dark = [score]level_dark.png +ScoreLevel_Dark_Round = [score]level_dark_round.png + +ScoreLevel_Light = [score]level_light.png +ScoreLevel_Light_Round = [score]level_light_round.png + +ScoreLevel_Lightest = [score]level_lightest.png +ScoreLevel_Lightest_Round = [score]level_lightest_round.png + +ButtonSendScore = [score]buttonsendscore.png + +# Boxes near the text, that show what color is for which bar +ScoreBar_box_lightest = [score]bar_box_lightest.png +ScoreBar_box_light = [score]bar_box_light.png +ScoreBar_box_dark = [score]bar_box_dark.png + +ScoreEndCap = [score]endcap.png +ScoreLine = [score]line.png +PlayerNumberBox = [main]playerNumberBox.png + +PlayerIDBox01 = [sing.player1]lyric_active.png +PlayerIDBox02 = [sing.player2]lyric_active.png +PlayerIDBox03 = [sing.player3]lyric_active.png +PlayerIDBox04 = [sing.player4]lyric_active.png +PlayerIDBox05 = [sing.player5]lyric_active.png +PlayerIDBox06 = [sing.player6]lyric_active.png + +# these icons are part of the tango icon set +# licensed under Creative Commons Attribution Share-Alike license +# http://tango.freedesktop.org +Rating_0 = [score]rating_0.png +Rating_1 = [score]rating_1.png +Rating_2 = [score]rating_2.png +Rating_3 = [score]rating_3.png +Rating_4 = [score]rating_4.png +Rating_5 = [score]rating_5.png +Rating_6 = [score]rating_6.png +Rating_7 = [score]rating_7.png +# # # O P T I O N S # # # +Optionsbuttongame = [Options]buttongame.png +Optionsbuttongraphics = [Options]buttongraphics.png +Optionsbuttonsound = [Options]buttonsound.png +Optionsbuttonlyrics = [Options]buttonlyrics.png +Optionsbuttondesign = [Options]buttondesign.png +Optionsbuttonrecord = [Options]buttonduet.png +Optionsbuttonadvanced = [Options]buttonadvanced.png +Optionsbuttonnetwork = [Options]buttonnetwork.png +Optionsbuttonwebcam = [Options]buttonwebcam.png +Optionsbuttonjukebox = [Options]buttonjukebox.png +Optionsbuttonback = [Options]buttonback.png + +# # # M A I N P A R T Y # # # +ClassicButton =[MainParty]ClassicButton.png +ClassicFreeButton =[MainParty]ClassicFreeButton.png +ChallengeButton =[MainParty]ChallengeButton.png +TournamentButton =[tournament]trophy.png + + + +# # # P A R T Y # # # +Joker =[party]Joker.png +PartyPlayerButton =[party]playerButton.png +PartyTeamButton1 =[party]roundTeamButton.png +PartyTeamButton2 =[party]playerTeamButton.png +PartyTeamButton3 =[party]winTeamButton1.png +PartyTeamButton4 =[party]winTeamButton2.png +PartyTeamButton5 =[party]winTeamButton3.png +PartyRoundBG1 =[party]roundBG1.png +PartyRoundBG2 =[party]roundBG2.png +PartyRoundBG3 =[party]roundBG3.png +PartyRoundBG4 =[party]roundBG4.png +HDL_Pointer =[party]pointer.png +PartyTeamPoints =[party]teamPoints.png +PartyScoreDeco =[party]scoreDecoration.png +PartyScoreBG1 =[party]scoreBG1.png +PartyScoreBG2 =[party]scoreBG2.png +PartyWinDeco1 =[party]winDecoration.png +PartyWinDeco2 =[party]winDecoration.png +PartyWinDeco3 =[party]winDecoration.png +PartyPlayerSelectBG = [party]playerselectbg.png +PartyTrophy =[tournament]trophy.png +PartyWinner =[tournament]winner.png + +# # # S T A T S # # # +StatMainBG1 = [stat]mainBG1.png +StatMainBG2 = [stat]mainBG2.png +StatMainBG3 = [stat]mainBG3.png +StatDetailBG1 = [stat]detailBG1.png + + +# # # N A V I # # # +ButtonP = [button]p.png +ButtonM = [button]m.png +ButtonJ = [button]j.png +ButtonC = [button]c.png +ButtonAlt = [button]alt.png +ButtonAZ = [button]az.png +ButtonEnter = [button]enter.png +ButtonNavi = [button]navi.png +ButtonEsc = [button]esc.png +Button13 = [button]13.png +ButtonIns = [button]ins.png +ButtonDel = [button]del.png + +JumpToBG = [menu]jumpToBg.png +SongMenuBG = [menu]songMenuBg.png +SongMenuSelectBG = [menu]songMenuSelectBg.png +PopUpBG = [menu]popUpBG.png + + +# # # N O T E S # # # +# sung notes - colorized with playercolors +GrayLeft = [sing]notesLeft.png +GrayMid = [sing]notesMid.png +GrayRight = [sing]notesRight.png +# unsung notes - colorized with playercolors +NotePlainLeft = [sing]notesPlainLeft.png +NotePlainMid = [sing]notesPlainMid.png +NotePlainRight = [sing]notesPlainRight.png +# the glow around unsung/sung notes - colorized with playercolors +NoteBGLeft = [sing]notesBgLeft.png +NoteBGMid = [sing]notesBgMid.png +NoteBGRight = [sing]notesBgRight.png +Pause = [sing]pause.png + + +# # # E F F E C T S # # # +NoteStar = [effect]goldenNoteStar.png +NotePerfectStar = [effect]perfectNoteStar.png + + +# # # dirty helpers # # # +Rectangle = [helper]rectangle.png +ButtonFade = [helper]buttonFade.png +BGFade = [special]bg_fade.png + + +# # # D U E T # # # +LyricIcon_P1 = [sing.player1]lyric_active.png +LyricIconD_P1 = [sing.player1]lyric_inactive.png +LyricIcon_P2 = [sing.player2]lyric_active.png +LyricIconD_P2 = [sing.player2]lyric_inactive.png +LyricIcon_P3 = [sing.player3]lyric_active.png +LyricIconD_P3 = [sing.player3]lyric_inactive.png +LyricIcon_P4 = [sing.player4]lyric_active.png +LyricIconD_P4 = [sing.player4]lyric_inactive.png +LyricIcon_P5 = [sing.player5]lyric_active.png +LyricIconD_P5 = [sing.player5]lyric_inactive.png +LyricIcon_P6 = [sing.player6]lyric_active.png +LyricIconD_P6 = [sing.player6]lyric_inactive.png + + +# # # DOWNLOAD SCORE # # # +ProgressBar = [sing]timeBar.jpg + +# # # J U K E B O X # # # +JukeboxTimeBar1 = [jukebox]timeBarBG.png +JukeboxTimeBar = [jukebox]timeBar.jpg +JukeboxSong = [jukebox]song.png +JukeboxSongBackground = [jukebox]title.png +JukeboxSongListBackground = [jukebox]songlist.png +JukeboxSongbartopBackground= [jukebox]bartop.png +JukeboxSongOptionsBackground = [jukebox]songoptions.png +JukeboxLyric = [jukebox]lyric.png +JukeboxRandom = [jukebox]random.png +JukeboxRepeat = [jukebox]repeat.png +JukeboxCurrentSongBackground = [jukebox]currentsong.png +JukeboxSongListUp = [jukebox]songlistup.png +JukeboxSongListDown = [jukebox]songlistdown.png +JukeboxOptions = [jukebox]options.png +JukeboxClose = [jukebox]close.png +JukeboxFix = [jukebox]pin.png +JukeboxSongMenuTimeBar = [jukebox]timeBarSongMenuBG.png +JukeboxSongMenuPlayPause = [jukebox]songmenuplaypause.png +JukeboxSongMenuNext = [jukebox]songmenunext.png +JukeboxSongMenuPrevious = [jukebox]songmenuprevious.png +JukeboxSongMenuPlaylist = [jukebox]songmenuplaylist.png +JukeboxField = [jukebox]fieldbg.png +JukeboxButton = [jukebox]mainBar.png +JukeboxSelect = [jukebox]selectbg.png + +# # # E D I T # # # +PlayOnly = [editsub]play.png +playwithnote = [editsub]play-with-note.png +playnote = [editsub]play-note.png +nextseq = [editsub]next-seq.png +previousseq = [editsub]previous-seq.png +undo = [editsub]undo.png +gold = [editsub]gold.png +freestyle = [editsub]freestyle.png + +# # # COLOR PICKER # # # +PickerBG = [color]pickerbg.png +Picker = [color]picker.jpg +Hue = [color]hue.png +HueBar = [color]hue-bar.png +WhiteFade = [color]white-fade.png +BlackFade = [color]black-fade.png +Pointer = [color]pointer.png + +# # # N A M E # # # +AvatarFrame = [name]frame.png +CurrentPlayer = [name]player.png +SelectFrame = [name]select.png +AvatarFrame2 = [score]frame.png + +# # # NO AVATARS # # # +NoAvatar_P1 = [name]noavatarP1.png +NoAvatar_P2 = [name]noavatarP2.png +NoAvatar_P3 = [name]noavatarP3.png +NoAvatar_P4 = [name]noavatarP4.png +NoAvatar_P5 = [name]noavatarP5.png +NoAvatar_P6 = [name]noavatarP6.png +NoAvatar_P7 = [name]noavatarP1.png +NoAvatar_P8 = [name]noavatarP2.png +NoAvatar_P9 = [name]noavatarP3.png +NoAvatar_P10 = [name]noavatarP4.png +NoAvatar_P11 = [name]noavatarP5.png +NoAvatar_P12 = [name]noavatarP6.png + +# # # A B O U T # # # +LogoWeb = [About]logo_web.png +LogoDeluxe = [About]logo_deluxe.png +helperbg = [About]helperbg.png + +# # # D E V E L O P E R S # # # +Dhelperbg = [Developers]helperbg.png \ No newline at end of file diff --git a/game/themes/Fantasy/[About]helperbg.png b/game/themes/Fantasy/[About]helperbg.png new file mode 100644 index 00000000..2ac7a64a Binary files /dev/null and b/game/themes/Fantasy/[About]helperbg.png differ diff --git a/game/themes/Fantasy/[About]logo_deluxe.png b/game/themes/Fantasy/[About]logo_deluxe.png new file mode 100644 index 00000000..db175f31 Binary files /dev/null and b/game/themes/Fantasy/[About]logo_deluxe.png differ diff --git a/game/themes/Fantasy/[About]logo_web.png b/game/themes/Fantasy/[About]logo_web.png new file mode 100644 index 00000000..19664f7e Binary files /dev/null and b/game/themes/Fantasy/[About]logo_web.png differ diff --git a/game/themes/Fantasy/[Developers]helperbg.png b/game/themes/Fantasy/[Developers]helperbg.png new file mode 100644 index 00000000..ce7d6f47 Binary files /dev/null and b/game/themes/Fantasy/[Developers]helperbg.png differ diff --git a/game/themes/Deluxe/[Options]buttonNetwork.png b/game/themes/Fantasy/[Options]buttonNetwork.png similarity index 100% rename from game/themes/Deluxe/[Options]buttonNetwork.png rename to game/themes/Fantasy/[Options]buttonNetwork.png diff --git a/game/themes/Deluxe/[Options]buttonWebcam.png b/game/themes/Fantasy/[Options]buttonWebcam.png similarity index 100% rename from game/themes/Deluxe/[Options]buttonWebcam.png rename to game/themes/Fantasy/[Options]buttonWebcam.png diff --git a/game/themes/Deluxe/[Options]buttonadvanced.png b/game/themes/Fantasy/[Options]buttonadvanced.png similarity index 100% rename from game/themes/Deluxe/[Options]buttonadvanced.png rename to game/themes/Fantasy/[Options]buttonadvanced.png diff --git a/game/themes/Deluxe/[Options]buttonback.png b/game/themes/Fantasy/[Options]buttonback.png similarity index 100% rename from game/themes/Deluxe/[Options]buttonback.png rename to game/themes/Fantasy/[Options]buttonback.png diff --git a/game/themes/Deluxe/[Options]buttondesign.png b/game/themes/Fantasy/[Options]buttondesign.png similarity index 100% rename from game/themes/Deluxe/[Options]buttondesign.png rename to game/themes/Fantasy/[Options]buttondesign.png diff --git a/game/themes/Deluxe/[Options]buttonduet.png b/game/themes/Fantasy/[Options]buttonduet.png similarity index 100% rename from game/themes/Deluxe/[Options]buttonduet.png rename to game/themes/Fantasy/[Options]buttonduet.png diff --git a/game/themes/Deluxe/[Options]buttongame.png b/game/themes/Fantasy/[Options]buttongame.png similarity index 100% rename from game/themes/Deluxe/[Options]buttongame.png rename to game/themes/Fantasy/[Options]buttongame.png diff --git a/game/themes/Deluxe/[Options]buttongraphics.png b/game/themes/Fantasy/[Options]buttongraphics.png similarity index 100% rename from game/themes/Deluxe/[Options]buttongraphics.png rename to game/themes/Fantasy/[Options]buttongraphics.png diff --git a/game/themes/Deluxe/[Options]buttonjukebox.png b/game/themes/Fantasy/[Options]buttonjukebox.png similarity index 100% rename from game/themes/Deluxe/[Options]buttonjukebox.png rename to game/themes/Fantasy/[Options]buttonjukebox.png diff --git a/game/themes/Deluxe/[Options]buttonlyrics.png b/game/themes/Fantasy/[Options]buttonlyrics.png similarity index 100% rename from game/themes/Deluxe/[Options]buttonlyrics.png rename to game/themes/Fantasy/[Options]buttonlyrics.png diff --git a/game/themes/Deluxe/[Options]buttonsound.png b/game/themes/Fantasy/[Options]buttonsound.png similarity index 100% rename from game/themes/Deluxe/[Options]buttonsound.png rename to game/themes/Fantasy/[Options]buttonsound.png diff --git a/game/themes/Fantasy/[bg-load]basic.jpg b/game/themes/Fantasy/[bg-load]basic.jpg new file mode 100644 index 00000000..2562863a Binary files /dev/null and b/game/themes/Fantasy/[bg-load]basic.jpg differ diff --git a/game/themes/Fantasy/[bg-main]Magma.webm b/game/themes/Fantasy/[bg-main]Magma.webm new file mode 100644 index 00000000..5380f8ad Binary files /dev/null and b/game/themes/Fantasy/[bg-main]Magma.webm differ diff --git a/game/themes/Deluxe/[bg-main]blue.jpg b/game/themes/Fantasy/[bg-main]blue.jpg similarity index 100% rename from game/themes/Deluxe/[bg-main]blue.jpg rename to game/themes/Fantasy/[bg-main]blue.jpg diff --git a/game/themes/Fantasy/[bg-main]lines.webm b/game/themes/Fantasy/[bg-main]lines.webm new file mode 100644 index 00000000..b5d7926a Binary files /dev/null and b/game/themes/Fantasy/[bg-main]lines.webm differ diff --git a/installer/dependencies/dll/avcodec-52.dll b/game/themes/Fantasy/[bg-main]love.webm similarity index 50% rename from installer/dependencies/dll/avcodec-52.dll rename to game/themes/Fantasy/[bg-main]love.webm index b067dda5..d313f14a 100644 Binary files a/installer/dependencies/dll/avcodec-52.dll and b/game/themes/Fantasy/[bg-main]love.webm differ diff --git a/game/themes/Fantasy/[bg-main]red.jpg b/game/themes/Fantasy/[bg-main]red.jpg new file mode 100644 index 00000000..b0f24510 Binary files /dev/null and b/game/themes/Fantasy/[bg-main]red.jpg differ diff --git a/game/themes/Fantasy/[bg-main]space.webm b/game/themes/Fantasy/[bg-main]space.webm new file mode 100644 index 00000000..6475f5bb Binary files /dev/null and b/game/themes/Fantasy/[bg-main]space.webm differ diff --git a/game/themes/Fantasy/[bg-main]violet.jpg b/game/themes/Fantasy/[bg-main]violet.jpg new file mode 100644 index 00000000..33374acb Binary files /dev/null and b/game/themes/Fantasy/[bg-main]violet.jpg differ diff --git a/game/themes/Deluxe/[button]13.png b/game/themes/Fantasy/[button]13.png similarity index 100% rename from game/themes/Deluxe/[button]13.png rename to game/themes/Fantasy/[button]13.png diff --git a/game/themes/Deluxe/[button]alt.png b/game/themes/Fantasy/[button]alt.png similarity index 100% rename from game/themes/Deluxe/[button]alt.png rename to game/themes/Fantasy/[button]alt.png diff --git a/game/themes/Deluxe/[button]az.png b/game/themes/Fantasy/[button]az.png similarity index 100% rename from game/themes/Deluxe/[button]az.png rename to game/themes/Fantasy/[button]az.png diff --git a/game/themes/Deluxe/[button]del.png b/game/themes/Fantasy/[button]del.png similarity index 100% rename from game/themes/Deluxe/[button]del.png rename to game/themes/Fantasy/[button]del.png diff --git a/game/themes/Deluxe/[button]enter.png b/game/themes/Fantasy/[button]enter.png similarity index 100% rename from game/themes/Deluxe/[button]enter.png rename to game/themes/Fantasy/[button]enter.png diff --git a/game/themes/Deluxe/[button]esc.png b/game/themes/Fantasy/[button]esc.png similarity index 100% rename from game/themes/Deluxe/[button]esc.png rename to game/themes/Fantasy/[button]esc.png diff --git a/game/themes/Deluxe/[button]ins.png b/game/themes/Fantasy/[button]ins.png similarity index 100% rename from game/themes/Deluxe/[button]ins.png rename to game/themes/Fantasy/[button]ins.png diff --git a/game/themes/Deluxe/[button]j.png b/game/themes/Fantasy/[button]j.png similarity index 100% rename from game/themes/Deluxe/[button]j.png rename to game/themes/Fantasy/[button]j.png diff --git a/game/themes/Deluxe/[button]m.png b/game/themes/Fantasy/[button]m.png similarity index 100% rename from game/themes/Deluxe/[button]m.png rename to game/themes/Fantasy/[button]m.png diff --git a/game/themes/Deluxe/[button]navi.png b/game/themes/Fantasy/[button]navi.png similarity index 100% rename from game/themes/Deluxe/[button]navi.png rename to game/themes/Fantasy/[button]navi.png diff --git a/game/themes/Deluxe/[button]p.png b/game/themes/Fantasy/[button]p.png similarity index 100% rename from game/themes/Deluxe/[button]p.png rename to game/themes/Fantasy/[button]p.png diff --git a/game/themes/Deluxe/[color]black-fade.png b/game/themes/Fantasy/[color]black-fade.png similarity index 100% rename from game/themes/Deluxe/[color]black-fade.png rename to game/themes/Fantasy/[color]black-fade.png diff --git a/game/themes/Deluxe/[color]hue-bar.png b/game/themes/Fantasy/[color]hue-bar.png similarity index 100% rename from game/themes/Deluxe/[color]hue-bar.png rename to game/themes/Fantasy/[color]hue-bar.png diff --git a/game/themes/Deluxe/[color]picker.jpg b/game/themes/Fantasy/[color]picker.jpg similarity index 100% rename from game/themes/Deluxe/[color]picker.jpg rename to game/themes/Fantasy/[color]picker.jpg diff --git a/game/themes/Deluxe/[color]picker.png b/game/themes/Fantasy/[color]picker.png similarity index 100% rename from game/themes/Deluxe/[color]picker.png rename to game/themes/Fantasy/[color]picker.png diff --git a/game/themes/Deluxe/[color]pickerbg.png b/game/themes/Fantasy/[color]pickerbg.png similarity index 100% rename from game/themes/Deluxe/[color]pickerbg.png rename to game/themes/Fantasy/[color]pickerbg.png diff --git a/game/themes/Deluxe/[color]pointer.png b/game/themes/Fantasy/[color]pointer.png similarity index 100% rename from game/themes/Deluxe/[color]pointer.png rename to game/themes/Fantasy/[color]pointer.png diff --git a/game/themes/Deluxe/[color]white-fade.png b/game/themes/Fantasy/[color]white-fade.png similarity index 100% rename from game/themes/Deluxe/[color]white-fade.png rename to game/themes/Fantasy/[color]white-fade.png diff --git a/game/themes/Deluxe/[editsub]freestyle.png b/game/themes/Fantasy/[editsub]freestyle.png similarity index 100% rename from game/themes/Deluxe/[editsub]freestyle.png rename to game/themes/Fantasy/[editsub]freestyle.png diff --git a/game/themes/Deluxe/[editsub]gold.png b/game/themes/Fantasy/[editsub]gold.png similarity index 100% rename from game/themes/Deluxe/[editsub]gold.png rename to game/themes/Fantasy/[editsub]gold.png diff --git a/game/themes/Deluxe/[editsub]next-seq.png b/game/themes/Fantasy/[editsub]next-seq.png similarity index 100% rename from game/themes/Deluxe/[editsub]next-seq.png rename to game/themes/Fantasy/[editsub]next-seq.png diff --git a/game/themes/Deluxe/[editsub]play-note.png b/game/themes/Fantasy/[editsub]play-note.png similarity index 100% rename from game/themes/Deluxe/[editsub]play-note.png rename to game/themes/Fantasy/[editsub]play-note.png diff --git a/game/themes/Deluxe/[editsub]play-with-note.png b/game/themes/Fantasy/[editsub]play-with-note.png similarity index 100% rename from game/themes/Deluxe/[editsub]play-with-note.png rename to game/themes/Fantasy/[editsub]play-with-note.png diff --git a/game/themes/Deluxe/[editsub]play.png b/game/themes/Fantasy/[editsub]play.png similarity index 100% rename from game/themes/Deluxe/[editsub]play.png rename to game/themes/Fantasy/[editsub]play.png diff --git a/game/themes/Deluxe/[editsub]previous-seq.png b/game/themes/Fantasy/[editsub]previous-seq.png similarity index 100% rename from game/themes/Deluxe/[editsub]previous-seq.png rename to game/themes/Fantasy/[editsub]previous-seq.png diff --git a/game/themes/Deluxe/[editsub]undo.png b/game/themes/Fantasy/[editsub]undo.png similarity index 100% rename from game/themes/Deluxe/[editsub]undo.png rename to game/themes/Fantasy/[editsub]undo.png diff --git a/game/themes/Deluxe/[effect]goldenNoteStar.png b/game/themes/Fantasy/[effect]goldenNoteStar.png similarity index 100% rename from game/themes/Deluxe/[effect]goldenNoteStar.png rename to game/themes/Fantasy/[effect]goldenNoteStar.png diff --git a/game/themes/Deluxe/[effect]perfectNoteStar.png b/game/themes/Fantasy/[effect]perfectNoteStar.png similarity index 100% rename from game/themes/Deluxe/[effect]perfectNoteStar.png rename to game/themes/Fantasy/[effect]perfectNoteStar.png diff --git a/game/themes/Fantasy/[helper]buttonFade.png b/game/themes/Fantasy/[helper]buttonFade.png new file mode 100644 index 00000000..c51465db Binary files /dev/null and b/game/themes/Fantasy/[helper]buttonFade.png differ diff --git a/game/themes/Fantasy/[helper]buttonFade2.png b/game/themes/Fantasy/[helper]buttonFade2.png new file mode 100644 index 00000000..c51465db Binary files /dev/null and b/game/themes/Fantasy/[helper]buttonFade2.png differ diff --git a/game/themes/Deluxe/[helper]rectangle.jpg b/game/themes/Fantasy/[helper]rectangle.jpg similarity index 100% rename from game/themes/Deluxe/[helper]rectangle.jpg rename to game/themes/Fantasy/[helper]rectangle.jpg diff --git a/game/themes/Fantasy/[helper]rectangle.png b/game/themes/Fantasy/[helper]rectangle.png new file mode 100644 index 00000000..8c607396 Binary files /dev/null and b/game/themes/Fantasy/[helper]rectangle.png differ diff --git a/game/themes/Deluxe/[icon]error.png b/game/themes/Fantasy/[icon]error.png similarity index 100% rename from game/themes/Deluxe/[icon]error.png rename to game/themes/Fantasy/[icon]error.png diff --git a/game/themes/Deluxe/[icon]main.png b/game/themes/Fantasy/[icon]main.png similarity index 100% rename from game/themes/Deluxe/[icon]main.png rename to game/themes/Fantasy/[icon]main.png diff --git a/game/themes/Deluxe/[icon]options.png b/game/themes/Fantasy/[icon]options.png similarity index 100% rename from game/themes/Deluxe/[icon]options.png rename to game/themes/Fantasy/[icon]options.png diff --git a/game/themes/Deluxe/[icon]party.png b/game/themes/Fantasy/[icon]party.png similarity index 100% rename from game/themes/Deluxe/[icon]party.png rename to game/themes/Fantasy/[icon]party.png diff --git a/game/themes/Deluxe/[icon]question.png b/game/themes/Fantasy/[icon]question.png similarity index 100% rename from game/themes/Deluxe/[icon]question.png rename to game/themes/Fantasy/[icon]question.png diff --git a/game/themes/Fantasy/[icon]score.png b/game/themes/Fantasy/[icon]score.png new file mode 100644 index 00000000..012bde58 Binary files /dev/null and b/game/themes/Fantasy/[icon]score.png differ diff --git a/game/themes/Fantasy/[icon]song_calcmedley.png b/game/themes/Fantasy/[icon]song_calcmedley.png new file mode 100644 index 00000000..3b1b243e Binary files /dev/null and b/game/themes/Fantasy/[icon]song_calcmedley.png differ diff --git a/game/themes/Deluxe/[icon]song_duet.png b/game/themes/Fantasy/[icon]song_duet.png similarity index 100% rename from game/themes/Deluxe/[icon]song_duet.png rename to game/themes/Fantasy/[icon]song_duet.png diff --git a/game/themes/Fantasy/[icon]song_medley.png b/game/themes/Fantasy/[icon]song_medley.png new file mode 100644 index 00000000..514e9e3d Binary files /dev/null and b/game/themes/Fantasy/[icon]song_medley.png differ diff --git a/game/themes/Deluxe/[icon]song_menu.png b/game/themes/Fantasy/[icon]song_menu.png similarity index 100% rename from game/themes/Deluxe/[icon]song_menu.png rename to game/themes/Fantasy/[icon]song_menu.png diff --git a/game/themes/Deluxe/[icon]song_search.png b/game/themes/Fantasy/[icon]song_search.png similarity index 100% rename from game/themes/Deluxe/[icon]song_search.png rename to game/themes/Fantasy/[icon]song_search.png diff --git a/game/themes/Fantasy/[icon]song_video.png b/game/themes/Fantasy/[icon]song_video.png new file mode 100644 index 00000000..bd72ceb2 Binary files /dev/null and b/game/themes/Fantasy/[icon]song_video.png differ diff --git a/game/themes/Deluxe/[icon]stats.png b/game/themes/Fantasy/[icon]stats.png similarity index 100% rename from game/themes/Deluxe/[icon]stats.png rename to game/themes/Fantasy/[icon]stats.png diff --git a/game/themes/Deluxe/[icon]video.png b/game/themes/Fantasy/[icon]video.png similarity index 100% rename from game/themes/Deluxe/[icon]video.png rename to game/themes/Fantasy/[icon]video.png diff --git a/game/themes/Deluxe/[interface]cursor.png b/game/themes/Fantasy/[interface]cursor.png similarity index 100% rename from game/themes/Deluxe/[interface]cursor.png rename to game/themes/Fantasy/[interface]cursor.png diff --git a/game/themes/Deluxe/[interface]cursor_pressed.png b/game/themes/Fantasy/[interface]cursor_pressed.png similarity index 100% rename from game/themes/Deluxe/[interface]cursor_pressed.png rename to game/themes/Fantasy/[interface]cursor_pressed.png diff --git a/game/themes/Deluxe/[interface]dialog_background.png b/game/themes/Fantasy/[interface]dialog_background.png similarity index 100% rename from game/themes/Deluxe/[interface]dialog_background.png rename to game/themes/Fantasy/[interface]dialog_background.png diff --git a/game/themes/Fantasy/[interface]dialog_background0.png b/game/themes/Fantasy/[interface]dialog_background0.png new file mode 100644 index 00000000..38f4a67b Binary files /dev/null and b/game/themes/Fantasy/[interface]dialog_background0.png differ diff --git a/game/themes/Deluxe/[interface]dialog_background2.png b/game/themes/Fantasy/[interface]dialog_background2.png similarity index 100% rename from game/themes/Deluxe/[interface]dialog_background2.png rename to game/themes/Fantasy/[interface]dialog_background2.png diff --git a/game/themes/Deluxe/[interface]dialog_backgroundtop.png b/game/themes/Fantasy/[interface]dialog_backgroundtop.png similarity index 100% rename from game/themes/Deluxe/[interface]dialog_backgroundtop.png rename to game/themes/Fantasy/[interface]dialog_backgroundtop.png diff --git a/game/themes/Deluxe/[interface]dialog_backgroundtop2.png b/game/themes/Fantasy/[interface]dialog_backgroundtop2.png similarity index 100% rename from game/themes/Deluxe/[interface]dialog_backgroundtop2.png rename to game/themes/Fantasy/[interface]dialog_backgroundtop2.png diff --git a/game/themes/Deluxe/[interface]select_arrow_left.png b/game/themes/Fantasy/[interface]select_arrow_left.png similarity index 100% rename from game/themes/Deluxe/[interface]select_arrow_left.png rename to game/themes/Fantasy/[interface]select_arrow_left.png diff --git a/game/themes/Deluxe/[interface]select_arrow_right.png b/game/themes/Fantasy/[interface]select_arrow_right.png similarity index 100% rename from game/themes/Deluxe/[interface]select_arrow_right.png rename to game/themes/Fantasy/[interface]select_arrow_right.png diff --git a/game/themes/Fantasy/[interface]selectbg_search.png b/game/themes/Fantasy/[interface]selectbg_search.png new file mode 100644 index 00000000..04a4854f Binary files /dev/null and b/game/themes/Fantasy/[interface]selectbg_search.png differ diff --git a/game/themes/Deluxe/[jukebox]close.png b/game/themes/Fantasy/[jukebox]close.png similarity index 100% rename from game/themes/Deluxe/[jukebox]close.png rename to game/themes/Fantasy/[jukebox]close.png diff --git a/game/themes/Deluxe/[jukebox]currentsong.png b/game/themes/Fantasy/[jukebox]currentsong.png similarity index 100% rename from game/themes/Deluxe/[jukebox]currentsong.png rename to game/themes/Fantasy/[jukebox]currentsong.png diff --git a/game/themes/Deluxe/[jukebox]lyric.png b/game/themes/Fantasy/[jukebox]lyric.png similarity index 80% rename from game/themes/Deluxe/[jukebox]lyric.png rename to game/themes/Fantasy/[jukebox]lyric.png index da04d4f5..367ac5f9 100644 Binary files a/game/themes/Deluxe/[jukebox]lyric.png and b/game/themes/Fantasy/[jukebox]lyric.png differ diff --git a/game/themes/Deluxe/[jukebox]options.png b/game/themes/Fantasy/[jukebox]options.png similarity index 100% rename from game/themes/Deluxe/[jukebox]options.png rename to game/themes/Fantasy/[jukebox]options.png diff --git a/game/themes/Deluxe/[jukebox]pin.png b/game/themes/Fantasy/[jukebox]pin.png similarity index 100% rename from game/themes/Deluxe/[jukebox]pin.png rename to game/themes/Fantasy/[jukebox]pin.png diff --git "a/game/themes/Deluxe/[jukebox]random - C\303\263pia.png" "b/game/themes/Fantasy/[jukebox]random - C\303\263pia.png" similarity index 93% rename from "game/themes/Deluxe/[jukebox]random - C\303\263pia.png" rename to "game/themes/Fantasy/[jukebox]random - C\303\263pia.png" index a86c0b00..698938d1 100644 Binary files "a/game/themes/Deluxe/[jukebox]random - C\303\263pia.png" and "b/game/themes/Fantasy/[jukebox]random - C\303\263pia.png" differ diff --git a/game/themes/Deluxe/[jukebox]random.png b/game/themes/Fantasy/[jukebox]random.png similarity index 100% rename from game/themes/Deluxe/[jukebox]random.png rename to game/themes/Fantasy/[jukebox]random.png diff --git a/game/themes/Deluxe/[jukebox]repeat.png b/game/themes/Fantasy/[jukebox]repeat.png similarity index 100% rename from game/themes/Deluxe/[jukebox]repeat.png rename to game/themes/Fantasy/[jukebox]repeat.png diff --git a/game/themes/Deluxe/[jukebox]songlist.png b/game/themes/Fantasy/[jukebox]songlist.png similarity index 100% rename from game/themes/Deluxe/[jukebox]songlist.png rename to game/themes/Fantasy/[jukebox]songlist.png diff --git a/game/themes/Deluxe/[jukebox]songlistdown.png b/game/themes/Fantasy/[jukebox]songlistdown.png similarity index 100% rename from game/themes/Deluxe/[jukebox]songlistdown.png rename to game/themes/Fantasy/[jukebox]songlistdown.png diff --git a/game/themes/Deluxe/[jukebox]songlistup.png b/game/themes/Fantasy/[jukebox]songlistup.png similarity index 100% rename from game/themes/Deluxe/[jukebox]songlistup.png rename to game/themes/Fantasy/[jukebox]songlistup.png diff --git a/game/themes/Deluxe/[jukebox]songmenunext.png b/game/themes/Fantasy/[jukebox]songmenunext.png similarity index 100% rename from game/themes/Deluxe/[jukebox]songmenunext.png rename to game/themes/Fantasy/[jukebox]songmenunext.png diff --git a/game/themes/Deluxe/[jukebox]songmenuplaylist.png b/game/themes/Fantasy/[jukebox]songmenuplaylist.png similarity index 100% rename from game/themes/Deluxe/[jukebox]songmenuplaylist.png rename to game/themes/Fantasy/[jukebox]songmenuplaylist.png diff --git a/game/themes/Deluxe/[jukebox]songmenuplaypause.png b/game/themes/Fantasy/[jukebox]songmenuplaypause.png similarity index 100% rename from game/themes/Deluxe/[jukebox]songmenuplaypause.png rename to game/themes/Fantasy/[jukebox]songmenuplaypause.png diff --git a/game/themes/Deluxe/[jukebox]songmenuprevious.png b/game/themes/Fantasy/[jukebox]songmenuprevious.png similarity index 100% rename from game/themes/Deluxe/[jukebox]songmenuprevious.png rename to game/themes/Fantasy/[jukebox]songmenuprevious.png diff --git a/game/themes/Deluxe/[jukebox]songoptions.png b/game/themes/Fantasy/[jukebox]songoptions.png similarity index 100% rename from game/themes/Deluxe/[jukebox]songoptions.png rename to game/themes/Fantasy/[jukebox]songoptions.png diff --git a/game/themes/Deluxe/[jukebox]timeBar.jpg b/game/themes/Fantasy/[jukebox]timeBar.jpg similarity index 100% rename from game/themes/Deluxe/[jukebox]timeBar.jpg rename to game/themes/Fantasy/[jukebox]timeBar.jpg diff --git a/game/themes/Deluxe/[button]c.png b/game/themes/Fantasy/[jukebox]timeBarBG.png similarity index 67% rename from game/themes/Deluxe/[button]c.png rename to game/themes/Fantasy/[jukebox]timeBarBG.png index fae96083..c4446c70 100644 Binary files a/game/themes/Deluxe/[button]c.png and b/game/themes/Fantasy/[jukebox]timeBarBG.png differ diff --git a/game/themes/Deluxe/[jukebox]timeBarSongMenuBG.png b/game/themes/Fantasy/[jukebox]timeBarSongMenuBG.png similarity index 100% rename from game/themes/Deluxe/[jukebox]timeBarSongMenuBG.png rename to game/themes/Fantasy/[jukebox]timeBarSongMenuBG.png diff --git a/game/themes/Deluxe/[jukebox]title.png b/game/themes/Fantasy/[jukebox]title.png similarity index 100% rename from game/themes/Deluxe/[jukebox]title.png rename to game/themes/Fantasy/[jukebox]title.png diff --git a/game/themes/Deluxe/[main]button.png b/game/themes/Fantasy/[main]button.png similarity index 100% rename from game/themes/Deluxe/[main]button.png rename to game/themes/Fantasy/[main]button.png diff --git a/game/themes/Deluxe/[main]button2.png b/game/themes/Fantasy/[main]button2.png similarity index 100% rename from game/themes/Deluxe/[main]button2.png rename to game/themes/Fantasy/[main]button2.png diff --git a/game/themes/Deluxe/[main]buttonabout.png b/game/themes/Fantasy/[main]buttonabout.png similarity index 100% rename from game/themes/Deluxe/[main]buttonabout.png rename to game/themes/Fantasy/[main]buttonabout.png diff --git a/game/themes/Deluxe/[main]buttonexit.png b/game/themes/Fantasy/[main]buttonexit.png similarity index 100% rename from game/themes/Deluxe/[main]buttonexit.png rename to game/themes/Fantasy/[main]buttonexit.png diff --git a/game/themes/Deluxe/[main]buttonf.jpg b/game/themes/Fantasy/[main]buttonf.jpg similarity index 100% rename from game/themes/Deluxe/[main]buttonf.jpg rename to game/themes/Fantasy/[main]buttonf.jpg diff --git a/game/themes/Deluxe/[main]buttonjukebox.png b/game/themes/Fantasy/[main]buttonjukebox.png similarity index 100% rename from game/themes/Deluxe/[main]buttonjukebox.png rename to game/themes/Fantasy/[main]buttonjukebox.png diff --git a/game/themes/Deluxe/[main]buttonoption.png b/game/themes/Fantasy/[main]buttonoption.png similarity index 100% rename from game/themes/Deluxe/[main]buttonoption.png rename to game/themes/Fantasy/[main]buttonoption.png diff --git a/game/themes/Deluxe/[main]buttonparty.png b/game/themes/Fantasy/[main]buttonparty.png similarity index 100% rename from game/themes/Deluxe/[main]buttonparty.png rename to game/themes/Fantasy/[main]buttonparty.png diff --git a/game/themes/Deluxe/[main]buttonsolo.png b/game/themes/Fantasy/[main]buttonsolo.png similarity index 100% rename from game/themes/Deluxe/[main]buttonsolo.png rename to game/themes/Fantasy/[main]buttonsolo.png diff --git a/game/themes/Deluxe/[main]buttonstats.png b/game/themes/Fantasy/[main]buttonstats.png similarity index 100% rename from game/themes/Deluxe/[main]buttonstats.png rename to game/themes/Fantasy/[main]buttonstats.png diff --git a/game/themes/Deluxe/[main]mainBar.png b/game/themes/Fantasy/[main]mainBar.png similarity index 100% rename from game/themes/Deluxe/[main]mainBar.png rename to game/themes/Fantasy/[main]mainBar.png diff --git a/game/themes/Deluxe/[main]playerNumberBox.png b/game/themes/Fantasy/[main]playerNumberBox.png similarity index 100% rename from game/themes/Deluxe/[main]playerNumberBox.png rename to game/themes/Fantasy/[main]playerNumberBox.png diff --git a/game/themes/Deluxe/[main]selectbg.png b/game/themes/Fantasy/[main]selectbg.png similarity index 100% rename from game/themes/Deluxe/[main]selectbg.png rename to game/themes/Fantasy/[main]selectbg.png diff --git a/game/themes/Deluxe/[main]songCover.jpg b/game/themes/Fantasy/[main]songCover.jpg similarity index 100% rename from game/themes/Deluxe/[main]songCover.jpg rename to game/themes/Fantasy/[main]songCover.jpg diff --git a/game/themes/Deluxe/[main]songSelection1.png b/game/themes/Fantasy/[main]songSelection1.png similarity index 100% rename from game/themes/Deluxe/[main]songSelection1.png rename to game/themes/Fantasy/[main]songSelection1.png diff --git a/game/themes/Fantasy/[main]songSelection1dn.png b/game/themes/Fantasy/[main]songSelection1dn.png new file mode 100644 index 00000000..096574ae Binary files /dev/null and b/game/themes/Fantasy/[main]songSelection1dn.png differ diff --git a/game/themes/Fantasy/[main]songSelection1up.png b/game/themes/Fantasy/[main]songSelection1up.png new file mode 100644 index 00000000..324a5a26 Binary files /dev/null and b/game/themes/Fantasy/[main]songSelection1up.png differ diff --git a/game/themes/Deluxe/[main]songSelection2.png b/game/themes/Fantasy/[main]songSelection2.png similarity index 100% rename from game/themes/Deluxe/[main]songSelection2.png rename to game/themes/Fantasy/[main]songSelection2.png diff --git a/game/themes/Deluxe/[main]songSelection3.png b/game/themes/Fantasy/[main]songSelection3.png similarity index 100% rename from game/themes/Deluxe/[main]songSelection3.png rename to game/themes/Fantasy/[main]songSelection3.png diff --git a/game/themes/Deluxe/[main]songSelection4.png b/game/themes/Fantasy/[main]songSelection4.png similarity index 100% rename from game/themes/Deluxe/[main]songSelection4.png rename to game/themes/Fantasy/[main]songSelection4.png diff --git a/game/themes/Deluxe/[main]songSelection5.png b/game/themes/Fantasy/[main]songSelection5.png similarity index 100% rename from game/themes/Deluxe/[main]songSelection5.png rename to game/themes/Fantasy/[main]songSelection5.png diff --git a/game/themes/Deluxe/[menu]PopUpFg.png b/game/themes/Fantasy/[menu]PopUpFg.png similarity index 100% rename from game/themes/Deluxe/[menu]PopUpFg.png rename to game/themes/Fantasy/[menu]PopUpFg.png diff --git a/game/themes/Deluxe/[menu]jumpToBg.png b/game/themes/Fantasy/[menu]jumpToBg.png similarity index 100% rename from game/themes/Deluxe/[menu]jumpToBg.png rename to game/themes/Fantasy/[menu]jumpToBg.png diff --git a/game/themes/Fantasy/[menu]songMenuBg.png b/game/themes/Fantasy/[menu]songMenuBg.png new file mode 100644 index 00000000..0309b3e0 Binary files /dev/null and b/game/themes/Fantasy/[menu]songMenuBg.png differ diff --git a/game/themes/Deluxe/[menu]songMenuSelectBg.png b/game/themes/Fantasy/[menu]songMenuSelectBg.png similarity index 100% rename from game/themes/Deluxe/[menu]songMenuSelectBg.png rename to game/themes/Fantasy/[menu]songMenuSelectBg.png diff --git a/game/themes/Deluxe/[name]frame.png b/game/themes/Fantasy/[name]frame.png similarity index 100% rename from game/themes/Deluxe/[name]frame.png rename to game/themes/Fantasy/[name]frame.png diff --git a/game/themes/Deluxe/[name]noavatarP1.png b/game/themes/Fantasy/[name]noavatarP1.png similarity index 100% rename from game/themes/Deluxe/[name]noavatarP1.png rename to game/themes/Fantasy/[name]noavatarP1.png diff --git a/game/themes/Deluxe/[name]noavatarP2.png b/game/themes/Fantasy/[name]noavatarP2.png similarity index 100% rename from game/themes/Deluxe/[name]noavatarP2.png rename to game/themes/Fantasy/[name]noavatarP2.png diff --git a/game/themes/Deluxe/[name]noavatarP3.png b/game/themes/Fantasy/[name]noavatarP3.png similarity index 100% rename from game/themes/Deluxe/[name]noavatarP3.png rename to game/themes/Fantasy/[name]noavatarP3.png diff --git a/game/themes/Deluxe/[name]noavatarP4.png b/game/themes/Fantasy/[name]noavatarP4.png similarity index 100% rename from game/themes/Deluxe/[name]noavatarP4.png rename to game/themes/Fantasy/[name]noavatarP4.png diff --git a/game/themes/Deluxe/[name]noavatarP5.png b/game/themes/Fantasy/[name]noavatarP5.png similarity index 100% rename from game/themes/Deluxe/[name]noavatarP5.png rename to game/themes/Fantasy/[name]noavatarP5.png diff --git a/game/themes/Deluxe/[name]noavatarP6.png b/game/themes/Fantasy/[name]noavatarP6.png similarity index 100% rename from game/themes/Deluxe/[name]noavatarP6.png rename to game/themes/Fantasy/[name]noavatarP6.png diff --git a/game/themes/Deluxe/[name]player.png b/game/themes/Fantasy/[name]player.png similarity index 100% rename from game/themes/Deluxe/[name]player.png rename to game/themes/Fantasy/[name]player.png diff --git a/game/themes/Deluxe/[name]select.png b/game/themes/Fantasy/[name]select.png similarity index 100% rename from game/themes/Deluxe/[name]select.png rename to game/themes/Fantasy/[name]select.png diff --git a/game/themes/Deluxe/[party]Joker.png b/game/themes/Fantasy/[party]Joker.png similarity index 100% rename from game/themes/Deluxe/[party]Joker.png rename to game/themes/Fantasy/[party]Joker.png diff --git a/game/themes/Deluxe/[party]playerButton.png b/game/themes/Fantasy/[party]playerButton.png similarity index 100% rename from game/themes/Deluxe/[party]playerButton.png rename to game/themes/Fantasy/[party]playerButton.png diff --git a/game/themes/Deluxe/[party]playerTeamButton.png b/game/themes/Fantasy/[party]playerTeamButton.png similarity index 100% rename from game/themes/Deluxe/[party]playerTeamButton.png rename to game/themes/Fantasy/[party]playerTeamButton.png diff --git a/game/themes/Deluxe/[party]playerselectbg.png b/game/themes/Fantasy/[party]playerselectbg.png similarity index 100% rename from game/themes/Deluxe/[party]playerselectbg.png rename to game/themes/Fantasy/[party]playerselectbg.png diff --git a/game/themes/Deluxe/[party]pointer.png b/game/themes/Fantasy/[party]pointer.png similarity index 100% rename from game/themes/Deluxe/[party]pointer.png rename to game/themes/Fantasy/[party]pointer.png diff --git a/game/themes/Deluxe/[party]roundBG1.png b/game/themes/Fantasy/[party]roundBG1.png similarity index 100% rename from game/themes/Deluxe/[party]roundBG1.png rename to game/themes/Fantasy/[party]roundBG1.png diff --git a/game/themes/Deluxe/[party]roundBG2.png b/game/themes/Fantasy/[party]roundBG2.png similarity index 100% rename from game/themes/Deluxe/[party]roundBG2.png rename to game/themes/Fantasy/[party]roundBG2.png diff --git a/game/themes/Deluxe/[party]roundBG3.png b/game/themes/Fantasy/[party]roundBG3.png similarity index 100% rename from game/themes/Deluxe/[party]roundBG3.png rename to game/themes/Fantasy/[party]roundBG3.png diff --git a/game/themes/Deluxe/[party]roundBG4.png b/game/themes/Fantasy/[party]roundBG4.png similarity index 100% rename from game/themes/Deluxe/[party]roundBG4.png rename to game/themes/Fantasy/[party]roundBG4.png diff --git a/game/themes/Deluxe/[party]roundTeamButton.png b/game/themes/Fantasy/[party]roundTeamButton.png similarity index 100% rename from game/themes/Deluxe/[party]roundTeamButton.png rename to game/themes/Fantasy/[party]roundTeamButton.png diff --git a/game/themes/Deluxe/[party]scoreBG1.png b/game/themes/Fantasy/[party]scoreBG1.png similarity index 100% rename from game/themes/Deluxe/[party]scoreBG1.png rename to game/themes/Fantasy/[party]scoreBG1.png diff --git a/game/themes/Deluxe/[party]scoreBG2.png b/game/themes/Fantasy/[party]scoreBG2.png similarity index 100% rename from game/themes/Deluxe/[party]scoreBG2.png rename to game/themes/Fantasy/[party]scoreBG2.png diff --git a/game/themes/Deluxe/[party]scoreDecoration.png b/game/themes/Fantasy/[party]scoreDecoration.png similarity index 100% rename from game/themes/Deluxe/[party]scoreDecoration.png rename to game/themes/Fantasy/[party]scoreDecoration.png diff --git a/game/themes/Deluxe/[party]teamPoints.png b/game/themes/Fantasy/[party]teamPoints.png similarity index 100% rename from game/themes/Deluxe/[party]teamPoints.png rename to game/themes/Fantasy/[party]teamPoints.png diff --git a/game/themes/Deluxe/[party]winDecoration.png b/game/themes/Fantasy/[party]winDecoration.png similarity index 100% rename from game/themes/Deluxe/[party]winDecoration.png rename to game/themes/Fantasy/[party]winDecoration.png diff --git a/game/themes/Deluxe/[party]winTeamButton1.png b/game/themes/Fantasy/[party]winTeamButton1.png similarity index 100% rename from game/themes/Deluxe/[party]winTeamButton1.png rename to game/themes/Fantasy/[party]winTeamButton1.png diff --git a/game/themes/Deluxe/[party]winTeamButton2.png b/game/themes/Fantasy/[party]winTeamButton2.png similarity index 100% rename from game/themes/Deluxe/[party]winTeamButton2.png rename to game/themes/Fantasy/[party]winTeamButton2.png diff --git a/game/themes/Deluxe/[party]winTeamButton3.png b/game/themes/Fantasy/[party]winTeamButton3.png similarity index 100% rename from game/themes/Deluxe/[party]winTeamButton3.png rename to game/themes/Fantasy/[party]winTeamButton3.png diff --git a/game/themes/Deluxe/[score]Line.png b/game/themes/Fantasy/[score]Line.png similarity index 100% rename from game/themes/Deluxe/[score]Line.png rename to game/themes/Fantasy/[score]Line.png diff --git a/game/themes/Deluxe/[score]bar_box_dark.png b/game/themes/Fantasy/[score]bar_box_dark.png similarity index 100% rename from game/themes/Deluxe/[score]bar_box_dark.png rename to game/themes/Fantasy/[score]bar_box_dark.png diff --git a/game/themes/Deluxe/[score]bar_box_light.png b/game/themes/Fantasy/[score]bar_box_light.png similarity index 100% rename from game/themes/Deluxe/[score]bar_box_light.png rename to game/themes/Fantasy/[score]bar_box_light.png diff --git a/game/themes/Deluxe/[score]bar_box_lightest.png b/game/themes/Fantasy/[score]bar_box_lightest.png similarity index 100% rename from game/themes/Deluxe/[score]bar_box_lightest.png rename to game/themes/Fantasy/[score]bar_box_lightest.png diff --git a/game/themes/Deluxe/[score]box.png b/game/themes/Fantasy/[score]box.png similarity index 100% rename from game/themes/Deluxe/[score]box.png rename to game/themes/Fantasy/[score]box.png diff --git a/game/themes/Deluxe/[score]buttonsendscore.png b/game/themes/Fantasy/[score]buttonsendscore.png similarity index 100% rename from game/themes/Deluxe/[score]buttonsendscore.png rename to game/themes/Fantasy/[score]buttonsendscore.png diff --git a/game/themes/Deluxe/[score]endcap.png b/game/themes/Fantasy/[score]endcap.png similarity index 100% rename from game/themes/Deluxe/[score]endcap.png rename to game/themes/Fantasy/[score]endcap.png diff --git a/game/themes/Deluxe/[score]frame.png b/game/themes/Fantasy/[score]frame.png similarity index 100% rename from game/themes/Deluxe/[score]frame.png rename to game/themes/Fantasy/[score]frame.png diff --git a/game/themes/Deluxe/[score]glass_box.png b/game/themes/Fantasy/[score]glass_box.png similarity index 100% rename from game/themes/Deluxe/[score]glass_box.png rename to game/themes/Fantasy/[score]glass_box.png diff --git a/game/themes/Deluxe/[score]level.png b/game/themes/Fantasy/[score]level.png similarity index 100% rename from game/themes/Deluxe/[score]level.png rename to game/themes/Fantasy/[score]level.png diff --git a/game/themes/Deluxe/[score]levelRound.png b/game/themes/Fantasy/[score]levelRound.png similarity index 100% rename from game/themes/Deluxe/[score]levelRound.png rename to game/themes/Fantasy/[score]levelRound.png diff --git a/game/themes/Deluxe/[score]level_dark.png b/game/themes/Fantasy/[score]level_dark.png similarity index 100% rename from game/themes/Deluxe/[score]level_dark.png rename to game/themes/Fantasy/[score]level_dark.png diff --git a/game/themes/Deluxe/[score]level_dark_round.png b/game/themes/Fantasy/[score]level_dark_round.png similarity index 100% rename from game/themes/Deluxe/[score]level_dark_round.png rename to game/themes/Fantasy/[score]level_dark_round.png diff --git a/game/themes/Deluxe/[score]level_light.png b/game/themes/Fantasy/[score]level_light.png similarity index 100% rename from game/themes/Deluxe/[score]level_light.png rename to game/themes/Fantasy/[score]level_light.png diff --git a/game/themes/Deluxe/[score]level_light_round.png b/game/themes/Fantasy/[score]level_light_round.png similarity index 100% rename from game/themes/Deluxe/[score]level_light_round.png rename to game/themes/Fantasy/[score]level_light_round.png diff --git a/game/themes/Deluxe/[score]level_lightest.png b/game/themes/Fantasy/[score]level_lightest.png similarity index 100% rename from game/themes/Deluxe/[score]level_lightest.png rename to game/themes/Fantasy/[score]level_lightest.png diff --git a/game/themes/Deluxe/[score]level_lightest_round.png b/game/themes/Fantasy/[score]level_lightest_round.png similarity index 100% rename from game/themes/Deluxe/[score]level_lightest_round.png rename to game/themes/Fantasy/[score]level_lightest_round.png diff --git a/game/themes/Deluxe/[score]rating_0.png b/game/themes/Fantasy/[score]rating_0.png similarity index 100% rename from game/themes/Deluxe/[score]rating_0.png rename to game/themes/Fantasy/[score]rating_0.png diff --git a/game/themes/Deluxe/[score]rating_1.png b/game/themes/Fantasy/[score]rating_1.png similarity index 100% rename from game/themes/Deluxe/[score]rating_1.png rename to game/themes/Fantasy/[score]rating_1.png diff --git a/game/themes/Deluxe/[score]rating_2.png b/game/themes/Fantasy/[score]rating_2.png similarity index 100% rename from game/themes/Deluxe/[score]rating_2.png rename to game/themes/Fantasy/[score]rating_2.png diff --git a/game/themes/Deluxe/[score]rating_3.png b/game/themes/Fantasy/[score]rating_3.png similarity index 100% rename from game/themes/Deluxe/[score]rating_3.png rename to game/themes/Fantasy/[score]rating_3.png diff --git a/game/themes/Deluxe/[score]rating_4.png b/game/themes/Fantasy/[score]rating_4.png similarity index 100% rename from game/themes/Deluxe/[score]rating_4.png rename to game/themes/Fantasy/[score]rating_4.png diff --git a/game/themes/Deluxe/[score]rating_5.png b/game/themes/Fantasy/[score]rating_5.png similarity index 100% rename from game/themes/Deluxe/[score]rating_5.png rename to game/themes/Fantasy/[score]rating_5.png diff --git a/game/themes/Deluxe/[score]rating_6.png b/game/themes/Fantasy/[score]rating_6.png similarity index 100% rename from game/themes/Deluxe/[score]rating_6.png rename to game/themes/Fantasy/[score]rating_6.png diff --git a/game/themes/Deluxe/[score]rating_7.png b/game/themes/Fantasy/[score]rating_7.png similarity index 100% rename from game/themes/Deluxe/[score]rating_7.png rename to game/themes/Fantasy/[score]rating_7.png diff --git a/game/themes/Deluxe/[sing.player1]lyric_active.png b/game/themes/Fantasy/[sing.player1]lyric_active.png similarity index 100% rename from game/themes/Deluxe/[sing.player1]lyric_active.png rename to game/themes/Fantasy/[sing.player1]lyric_active.png diff --git a/game/themes/Deluxe/[sing.player1]lyric_inactive.png b/game/themes/Fantasy/[sing.player1]lyric_inactive.png similarity index 100% rename from game/themes/Deluxe/[sing.player1]lyric_inactive.png rename to game/themes/Fantasy/[sing.player1]lyric_inactive.png diff --git a/game/themes/Deluxe/[sing.player2]lyric_active.png b/game/themes/Fantasy/[sing.player2]lyric_active.png similarity index 100% rename from game/themes/Deluxe/[sing.player2]lyric_active.png rename to game/themes/Fantasy/[sing.player2]lyric_active.png diff --git a/game/themes/Deluxe/[sing.player2]lyric_inactive.png b/game/themes/Fantasy/[sing.player2]lyric_inactive.png similarity index 100% rename from game/themes/Deluxe/[sing.player2]lyric_inactive.png rename to game/themes/Fantasy/[sing.player2]lyric_inactive.png diff --git a/game/themes/Deluxe/[sing.player3]lyric_active.png b/game/themes/Fantasy/[sing.player3]lyric_active.png similarity index 100% rename from game/themes/Deluxe/[sing.player3]lyric_active.png rename to game/themes/Fantasy/[sing.player3]lyric_active.png diff --git a/game/themes/Deluxe/[sing.player3]lyric_inactive.png b/game/themes/Fantasy/[sing.player3]lyric_inactive.png similarity index 100% rename from game/themes/Deluxe/[sing.player3]lyric_inactive.png rename to game/themes/Fantasy/[sing.player3]lyric_inactive.png diff --git a/game/themes/Deluxe/[sing.player4]lyric_active.png b/game/themes/Fantasy/[sing.player4]lyric_active.png similarity index 100% rename from game/themes/Deluxe/[sing.player4]lyric_active.png rename to game/themes/Fantasy/[sing.player4]lyric_active.png diff --git a/game/themes/Deluxe/[sing.player4]lyric_inactive.png b/game/themes/Fantasy/[sing.player4]lyric_inactive.png similarity index 100% rename from game/themes/Deluxe/[sing.player4]lyric_inactive.png rename to game/themes/Fantasy/[sing.player4]lyric_inactive.png diff --git a/game/themes/Deluxe/[sing.player5]lyric_active.png b/game/themes/Fantasy/[sing.player5]lyric_active.png similarity index 100% rename from game/themes/Deluxe/[sing.player5]lyric_active.png rename to game/themes/Fantasy/[sing.player5]lyric_active.png diff --git a/game/themes/Deluxe/[sing.player5]lyric_inactive.png b/game/themes/Fantasy/[sing.player5]lyric_inactive.png similarity index 100% rename from game/themes/Deluxe/[sing.player5]lyric_inactive.png rename to game/themes/Fantasy/[sing.player5]lyric_inactive.png diff --git a/game/themes/Deluxe/[sing.player6]lyric_active.png b/game/themes/Fantasy/[sing.player6]lyric_active.png similarity index 100% rename from game/themes/Deluxe/[sing.player6]lyric_active.png rename to game/themes/Fantasy/[sing.player6]lyric_active.png diff --git a/game/themes/Deluxe/[sing.player6]lyric_inactive.png b/game/themes/Fantasy/[sing.player6]lyric_inactive.png similarity index 100% rename from game/themes/Deluxe/[sing.player6]lyric_inactive.png rename to game/themes/Fantasy/[sing.player6]lyric_inactive.png diff --git a/game/themes/Deluxe/[sing]LyricsBall.png b/game/themes/Fantasy/[sing]LyricsBall.png similarity index 100% rename from game/themes/Deluxe/[sing]LyricsBall.png rename to game/themes/Fantasy/[sing]LyricsBall.png diff --git a/game/themes/Deluxe/[sing]SongName.png b/game/themes/Fantasy/[sing]SongName.png similarity index 100% rename from game/themes/Deluxe/[sing]SongName.png rename to game/themes/Fantasy/[sing]SongName.png diff --git a/game/themes/Fantasy/[sing]lineBonusPopUp.png b/game/themes/Fantasy/[sing]lineBonusPopUp.png new file mode 100644 index 00000000..1f204c89 Binary files /dev/null and b/game/themes/Fantasy/[sing]lineBonusPopUp.png differ diff --git a/game/themes/Deluxe/[sing]lyricsHelpBar.png b/game/themes/Fantasy/[sing]lyricsHelpBar.png similarity index 100% rename from game/themes/Deluxe/[sing]lyricsHelpBar.png rename to game/themes/Fantasy/[sing]lyricsHelpBar.png diff --git a/game/themes/Deluxe/[sing]notesBgLeft.png b/game/themes/Fantasy/[sing]notesBgLeft.png similarity index 100% rename from game/themes/Deluxe/[sing]notesBgLeft.png rename to game/themes/Fantasy/[sing]notesBgLeft.png diff --git a/game/themes/Deluxe/[sing]notesBgMid.png b/game/themes/Fantasy/[sing]notesBgMid.png similarity index 100% rename from game/themes/Deluxe/[sing]notesBgMid.png rename to game/themes/Fantasy/[sing]notesBgMid.png diff --git a/game/themes/Deluxe/[sing]notesBgRight.png b/game/themes/Fantasy/[sing]notesBgRight.png similarity index 100% rename from game/themes/Deluxe/[sing]notesBgRight.png rename to game/themes/Fantasy/[sing]notesBgRight.png diff --git a/game/themes/Deluxe/[sing]notesLeft.png b/game/themes/Fantasy/[sing]notesLeft.png similarity index 100% rename from game/themes/Deluxe/[sing]notesLeft.png rename to game/themes/Fantasy/[sing]notesLeft.png diff --git a/game/themes/Deluxe/[sing]notesMid.png b/game/themes/Fantasy/[sing]notesMid.png similarity index 100% rename from game/themes/Deluxe/[sing]notesMid.png rename to game/themes/Fantasy/[sing]notesMid.png diff --git a/game/themes/Deluxe/[sing]notesPlainLeft.png b/game/themes/Fantasy/[sing]notesPlainLeft.png similarity index 100% rename from game/themes/Deluxe/[sing]notesPlainLeft.png rename to game/themes/Fantasy/[sing]notesPlainLeft.png diff --git a/game/themes/Deluxe/[sing]notesPlainMid.png b/game/themes/Fantasy/[sing]notesPlainMid.png similarity index 100% rename from game/themes/Deluxe/[sing]notesPlainMid.png rename to game/themes/Fantasy/[sing]notesPlainMid.png diff --git a/game/themes/Deluxe/[sing]notesPlainRight.png b/game/themes/Fantasy/[sing]notesPlainRight.png similarity index 100% rename from game/themes/Deluxe/[sing]notesPlainRight.png rename to game/themes/Fantasy/[sing]notesPlainRight.png diff --git a/game/themes/Deluxe/[sing]notesRight.png b/game/themes/Fantasy/[sing]notesRight.png similarity index 100% rename from game/themes/Deluxe/[sing]notesRight.png rename to game/themes/Fantasy/[sing]notesRight.png diff --git a/game/themes/Fantasy/[sing]p.png b/game/themes/Fantasy/[sing]p.png new file mode 100644 index 00000000..db8dec4d Binary files /dev/null and b/game/themes/Fantasy/[sing]p.png differ diff --git a/game/themes/Deluxe/[sing]pause.png b/game/themes/Fantasy/[sing]pause.png similarity index 100% rename from game/themes/Deluxe/[sing]pause.png rename to game/themes/Fantasy/[sing]pause.png diff --git a/game/themes/Deluxe/[sing]scoreBg.jpg b/game/themes/Fantasy/[sing]scoreBg.jpg similarity index 100% rename from game/themes/Deluxe/[sing]scoreBg.jpg rename to game/themes/Fantasy/[sing]scoreBg.jpg diff --git a/game/themes/Fantasy/[sing]scoreBg.png b/game/themes/Fantasy/[sing]scoreBg.png new file mode 100644 index 00000000..e15412d5 Binary files /dev/null and b/game/themes/Fantasy/[sing]scoreBg.png differ diff --git a/game/themes/Deluxe/[sing]singBarBack.png b/game/themes/Fantasy/[sing]singBarBack.png similarity index 100% rename from game/themes/Deluxe/[sing]singBarBack.png rename to game/themes/Fantasy/[sing]singBarBack.png diff --git a/game/themes/Deluxe/[sing]singBarBar.jpg b/game/themes/Fantasy/[sing]singBarBar.jpg similarity index 100% rename from game/themes/Deluxe/[sing]singBarBar.jpg rename to game/themes/Fantasy/[sing]singBarBar.jpg diff --git a/game/themes/Deluxe/[sing]singBarBar.png b/game/themes/Fantasy/[sing]singBarBar.png similarity index 100% rename from game/themes/Deluxe/[sing]singBarBar.png rename to game/themes/Fantasy/[sing]singBarBar.png diff --git a/game/themes/Deluxe/[sing]singBarFront.png b/game/themes/Fantasy/[sing]singBarFront.png similarity index 100% rename from game/themes/Deluxe/[sing]singBarFront.png rename to game/themes/Fantasy/[sing]singBarFront.png diff --git a/game/themes/Fantasy/[sing]textBar.png b/game/themes/Fantasy/[sing]textBar.png new file mode 100644 index 00000000..00869fe9 Binary files /dev/null and b/game/themes/Fantasy/[sing]textBar.png differ diff --git a/game/themes/Fantasy/[sing]textBarDuet.png b/game/themes/Fantasy/[sing]textBarDuet.png new file mode 100644 index 00000000..43963d4e Binary files /dev/null and b/game/themes/Fantasy/[sing]textBarDuet.png differ diff --git a/game/themes/Deluxe/[sing]timeBar.jpg b/game/themes/Fantasy/[sing]timeBar.jpg similarity index 100% rename from game/themes/Deluxe/[sing]timeBar.jpg rename to game/themes/Fantasy/[sing]timeBar.jpg diff --git a/game/themes/Fantasy/[sing]timeBarBG.png b/game/themes/Fantasy/[sing]timeBarBG.png new file mode 100644 index 00000000..2fcb261d Binary files /dev/null and b/game/themes/Fantasy/[sing]timeBarBG.png differ diff --git a/game/themes/Fantasy/[sing]timeBarBG2.png b/game/themes/Fantasy/[sing]timeBarBG2.png new file mode 100644 index 00000000..1b8b255f Binary files /dev/null and b/game/themes/Fantasy/[sing]timeBarBG2.png differ diff --git a/game/themes/Deluxe/[song]duetsinger.png b/game/themes/Fantasy/[song]duetsinger.png similarity index 100% rename from game/themes/Deluxe/[song]duetsinger.png rename to game/themes/Fantasy/[song]duetsinger.png diff --git a/game/themes/Deluxe/[song]duetsinger2.png b/game/themes/Fantasy/[song]duetsinger2.png similarity index 100% rename from game/themes/Deluxe/[song]duetsinger2.png rename to game/themes/Fantasy/[song]duetsinger2.png diff --git a/game/themes/Deluxe/[song]duetsinger3.png b/game/themes/Fantasy/[song]duetsinger3.png similarity index 100% rename from game/themes/Deluxe/[song]duetsinger3.png rename to game/themes/Fantasy/[song]duetsinger3.png diff --git a/game/themes/Deluxe/[song]message.png b/game/themes/Fantasy/[song]message.png similarity index 100% rename from game/themes/Deluxe/[song]message.png rename to game/themes/Fantasy/[song]message.png diff --git a/game/themes/Fantasy/[special]bar1.png b/game/themes/Fantasy/[special]bar1.png new file mode 100644 index 00000000..c51465db Binary files /dev/null and b/game/themes/Fantasy/[special]bar1.png differ diff --git a/game/themes/Fantasy/[special]bar2.png b/game/themes/Fantasy/[special]bar2.png new file mode 100644 index 00000000..c51465db Binary files /dev/null and b/game/themes/Fantasy/[special]bar2.png differ diff --git a/game/themes/Deluxe/[special]bg_fade.png b/game/themes/Fantasy/[special]bg_fade.png similarity index 100% rename from game/themes/Deluxe/[special]bg_fade.png rename to game/themes/Fantasy/[special]bg_fade.png diff --git a/game/themes/Deluxe/[stat]detailBG1.png b/game/themes/Fantasy/[stat]detailBG1.png similarity index 100% rename from game/themes/Deluxe/[stat]detailBG1.png rename to game/themes/Fantasy/[stat]detailBG1.png diff --git a/game/themes/Deluxe/[stat]mainBG1.png b/game/themes/Fantasy/[stat]mainBG1.png similarity index 100% rename from game/themes/Deluxe/[stat]mainBG1.png rename to game/themes/Fantasy/[stat]mainBG1.png diff --git a/game/themes/Deluxe/[stat]mainBG2.png b/game/themes/Fantasy/[stat]mainBG2.png similarity index 100% rename from game/themes/Deluxe/[stat]mainBG2.png rename to game/themes/Fantasy/[stat]mainBG2.png diff --git a/game/themes/Deluxe/[stat]mainBG3.png b/game/themes/Fantasy/[stat]mainBG3.png similarity index 100% rename from game/themes/Deluxe/[stat]mainBG3.png rename to game/themes/Fantasy/[stat]mainBG3.png diff --git a/game/themes/Deluxe/[tournament]trophy.png b/game/themes/Fantasy/[tournament]trophy.png similarity index 100% rename from game/themes/Deluxe/[tournament]trophy.png rename to game/themes/Fantasy/[tournament]trophy.png diff --git a/game/themes/Deluxe/[tournament]winner.png b/game/themes/Fantasy/[tournament]winner.png similarity index 100% rename from game/themes/Deluxe/[tournament]winner.png rename to game/themes/Fantasy/[tournament]winner.png diff --git a/game/webs/.include b/game/webs/.include new file mode 100644 index 00000000..e69de29b diff --git a/icons/WorldParty.ico b/icons/WorldParty.ico new file mode 100644 index 00000000..8e5fa3a1 Binary files /dev/null and b/icons/WorldParty.ico differ diff --git a/icons/ultrastardx-icon.svg b/icons/ultrastardx-icon.svg deleted file mode 100644 index 0dd0102e..00000000 --- a/icons/ultrastardx-icon.svg +++ /dev/null @@ -1,4259 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - File Manager - - - Jakub Steiner - - - http://jimmac.musichall.cz - - - file - manager - copy - move - filesystem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/icons/ultrastardx-icon_256.png b/icons/ultrastardx-icon_256.png deleted file mode 100644 index 45eaeda3..00000000 Binary files a/icons/ultrastardx-icon_256.png and /dev/null differ diff --git a/icons/ultrastardx-icon_32.png b/icons/ultrastardx-icon_32.png deleted file mode 100644 index 8a492352..00000000 Binary files a/icons/ultrastardx-icon_32.png and /dev/null differ diff --git a/icons/ultrastardx-icon_512.png b/icons/ultrastardx-icon_512.png deleted file mode 100644 index 9c7cbb93..00000000 Binary files a/icons/ultrastardx-icon_512.png and /dev/null differ diff --git a/icons/ultrastardx.icns b/icons/ultrastardx.icns deleted file mode 100644 index 86b128b0..00000000 Binary files a/icons/ultrastardx.icns and /dev/null differ diff --git a/icons/ultrastardx.ico b/icons/ultrastardx.ico deleted file mode 100644 index 7595126e..00000000 Binary files a/icons/ultrastardx.ico and /dev/null differ diff --git a/icons/usdx..ico b/icons/usdx..ico deleted file mode 100644 index 460639d6..00000000 Binary files a/icons/usdx..ico and /dev/null differ diff --git a/install b/install new file mode 100644 index 00000000..7c3939ef --- /dev/null +++ b/install @@ -0,0 +1,6 @@ +apt-get update && apt-get install fpc libsdl2-dev libsdl2-image-dev libsdl2-image-2.0-0 libsdl2-2.0-0 libsdl2-mixer-2.0-0 libsdl2-mixer-dev libsdl2-net-2.0-0 libsdl2-net-dev libsdl2-ttf-2.0-0 libsdl2-ttf-dev libsdl2-gfx-1.0-0 libsdl2-gfx-dev ffmpeg libavdevice-dev libsqlite3-0 libsqlite3-dev libpcre3 libpcre3-dev ttf-dejavu ttf-freefont portaudio19-dev lua5.1-dev libpng16-16 libopencv-highgui-dev libprojectm-dev +./autogen.sh +./configure +make +make install +cp WorldParty.desktop /usr/share/applications/Worldparty.desktop \ No newline at end of file diff --git a/installer/Update.nsi b/installer/Update.nsi index ce24273a..31d96ffc 100644 --- a/installer/Update.nsi +++ b/installer/Update.nsi @@ -3,9 +3,16 @@ ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ !include MUI2.nsh +!include WordFunc.nsh +!include StrFunc.nsh !include WinVer.nsh !include LogicLib.nsh !include nsDialogs.nsh +!include UAC.nsh +;!include LangFile.nsh ; included in NSIS installation +!include nsResize.nsh + +${StrRep} ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ; Variables @@ -15,14 +22,17 @@ !define path_settings ".\settings" !define path_languages ".\languages" -!define path_images "..\installerdependencies\images" -!define path_plugins "..\installerdependencies\plugins" +!define path_dependencies ".\dependencies" +!define path_images ".\dependencies\images" +!define path_plugins ".\dependencies\plugins" !define path_gdf "$WINDIR\gdf.dll" +; MultiLanguage - Show all languages: +!define MUI_LANGDLL_ALLLANGUAGES + !addPluginDir "${path_plugins}\" !include "${path_settings}\variables.nsh" -!include "${path_settings}\GameExplorer.nsh" !include "${path_settings}\functions.nsh" ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ @@ -34,21 +44,35 @@ SetCompressor /SOLID lzma SetCompressorDictSize 32 SetDatablockOptimize On -Var /GLOBAL CHECKBOX +Var /GLOBAL CHECKBOX_CHECKONLINE Var /GLOBAL label_update_information -Var /GLOBAL checkbox_state +Var /GLOBAL checkonline_state + +Var /GLOBAL online_version ; used in localization, be careful at renaming +Var /GLOBAL installed_version ; used in localization, be careful at renaming + +Var /GLOBAL download_version ; used in localization, be careful at renaming +Var /GLOBAL installerexe ; path to downloaded new installer + +Var /GLOBAL finish_message ; contains of various message for the finish page +Var /GLOBAL skipdownload ; set if the download should be skipped +Var /GLOBAL gotversion ; set if the version file from the backend server was downloaded +Var /GLOBAL downloaded +Var /GLOBAL failed ; Error. 1=open 2=download 3=invalid_exe 4=skipped XPStyle on Name "${name} ${version} - Update" -Brandingtext "${name} ${version} Update" -OutFile "ultrastardx-${version}-update.exe" +Brandingtext "${name} ${version} - Update" -InstallDir "$PROGRAMFILES\${name} ${version}" +!system 'md "dist"' +OutFile "dist\${exeupdate}.exe" -; Windows Vista / Windows 7: +InstallDir "${PRODUCT_PATH}" -RequestExecutionLevel admin +; Windows Vista / Windows 7: +; must be "user" for UAC plugin +RequestExecutionLevel user ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ; Interface Settings @@ -56,8 +80,8 @@ RequestExecutionLevel admin ; Icons: -!define MUI_ICON "${path_images}\${img_install}" -!define MUI_UNICON "${path_images}\${img_uninstall}" +!define MUI_ICON "${img_install}" +!define MUI_UNICON "${img_uninstall}" ; Header and Side Images: @@ -71,7 +95,7 @@ RequestExecutionLevel admin ; Abort Warnings: !define MUI_ABORTWARNING -!define MUI_ABORTWARNING_TEXT "$(abort_install)" +!define MUI_ABORTWARNING_TEXT "$(abort_update)" !define MUI_ABORTWARNING_CANCEL_DEFAULT !define MUI_UNABORTWARNING @@ -88,6 +112,22 @@ RequestExecutionLevel admin !define MUI_WELCOMEPAGE_TITLE "$(page_welcome_title_update)" !define MUI_WELCOMEPAGE_TEXT "$(page_welcome_txt_update)" +; Finish Pages: + +!define MUI_FINISHPAGE_TITLE_3LINES + +!define MUI_FINISHPAGE_TEXT_LARGE +!define MUI_FINISHPAGE_TEXT "$(page_finish_txt_update)" + +!define MUI_FINISHPAGE_LINK "$(page_finish_linktxt)" +!define MUI_FINISHPAGE_LINK_LOCATION "${homepage}" + +!define MUI_FINISHPAGE_NOREBOOTSUPPORT + +; MUI_FINISHPAGE_RUN is executed as admin by default. +!define MUI_FINISHPAGE_RUN +!define MUI_FINISHPAGE_RUN_FUNCTION RunInstaller + ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ; Pages Installation Routine ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ @@ -96,120 +136,370 @@ RequestExecutionLevel admin ; USDX Update Page -Page custom Update Download +Page custom pageUpdateConfirm pageVersionCheck + +Page custom pageSelect + +!define MUI_PAGE_CUSTOMFUNCTION_PRE PreDownload +!insertmacro MUI_PAGE_INSTFILES -Function Update +!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinishShowCallback +!insertmacro MUI_PAGE_FINISH -nsDialogs::Create /NOUNLOAD 1018 +Function pageUpdateConfirm + + nsDialogs::Create /NOUNLOAD 1018 Pop $0 ${NSD_CreateCheckbox} 0 -150 100% 8u "$(update_connect)" - Pop $CHECKBOX + Pop $CHECKBOX_CHECKONLINE GetFunctionAddress $0 OnCheckbox - nsDialogs::OnClick /NOUNLOAD $CHECKBOX $0 - + nsDialogs::OnClick /NOUNLOAD $CHECKBOX_CHECKONLINE $0 + ${NSD_SetState} $CHECKBOX_CHECKONLINE $checkonline_state + ${NSD_CreateLabel} 0 0 100% 30u "$(update_information)" Pop $label_update_information + + GetDlgItem $R0 $HWNDPARENT 1 + SendMessage $R0 ${WM_SETTEXT} 0 `STR:$(button_next)` + + nsDialogs::Show + +FunctionEnd ; pageUpdateConfirm page End + +Function pageVersionCheck + + ; read current installed version + ReadRegStr $installed_version "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}" 'DisplayVersion' + + ${NSD_GetState} $CHECKBOX_CHECKONLINE $checkonline_state + ${If} $checkonline_state == "1" + + StrCpy $2 "${version_url}" + StrCpy $3 "${installer_version_path}" + + ; NSISdl::download/quiet doesn't work for some reason with the provided url and path, it creates an empty file and times out + ;NSISdl::download_quiet /TIMEOUT=5000 "$2" "$3" + ; use inetc for this purpose instead + inetc::get /SILENT /CONNECTTIMEOUT 5 "$2" "$3" + + ; if download failed + IfFileExists "$3" +3 + SetErrors + Goto Failed + + Push 1 + Push "$3" + Call ReadFileLine + Pop $1 + StrCpy $online_version $1 ; store for late use + Delete "$3" + + ; if downloaded file doesn't have a valid version string as first line + StrCmp $1 "" 0 +3 + SetErrors + Goto Failed + + ${VersionCompare} "$installed_version" "$online_version" $R1 + ${If} $R1 == "0" + StrCpy $finish_message "$(update_check_equal)" + StrCpy $skipdownload "1" + ${ElseIf} $R1 == "1" + StrCpy $finish_message "$(update_check_newer)" + StrCpy $skipdownload "1" + ${ElseIf} $R1 == "2" + StrCpy $finish_message "$(update_check_older)" + StrCpy $skipdownload "0" + StrCpy $gotversion "1" + + Return + + NoDownload: + StrCpy $finish_message "$(update_check_no)" + StrCpy $skipdownload "1" + ${Else} -nsDialogs::Show - - -FunctionEnd ; Update page End - -Function Download - -${NSD_GetState} $CHECKBOX $checkbox_state + Failed: + StrCpy $finish_message "$(update_check_failed)" + StrCpy $failed 1 + StrCpy $skipdownload "1" + ${EndIf} -${If} $checkbox_state == "1" + ${ElseIf} $checkonline_state == "0" + ; TODO: install embedded + StrCpy $skipdownload "" + ${if} "$installed_version" == "" + StrCpy $finish_message "$(update_noinstallation_offline)" + ${else} + StrCpy $finish_message "$(update_check_offline)" + ${endif} + ${EndIf} -NSISdl::download /TIMEOUT=50000 http://ultrastardeluxe.xtremeweb-hosting.net/version.txt $TEMP\version.txt +FunctionEnd -Push 1 -Push "$TEMP\version.txt" - Call ReadFileLine -Pop $1 +Function pageSelect -ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${name} ${version}" 'DivsplayVersion' + ${If} $skipdownload == "" + ${OrIf} $skipdownload == "1" + Abort + ${endif} + + nsDialogs::Create /NOUNLOAD 1018 -${VersionCompare} "$R0" "$1" $R1 + Pop $0 + GetFunctionAddress $2 SelectVersionClick + + ${NSD_CreateRadioButton} 20 100 100% 8u "$(update_versions_none)" + Pop $1 + nsDialogs::SetUserData $1 "" + nsDialogs::OnClick /NOUNLOAD $1 $2 + + ${NSD_CreateRadioButton} 20 120 100% 8u "${name} $online_version" + Pop $1 + nsDialogs::SetUserData $1 "$online_version" + nsDialogs::OnClick /NOUNLOAD $1 $2 + + ; selection first version + ${NSD_SetState} $1 "1" + StrCpy $download_version $online_version + + ; TODO: add aditional available versions + ; ${NSD_CreateRadioButton} 20 140 100% 8u "${name} 1.5.1" + ; Pop $1 + ; nsDialogs::SetUserData $1 "1.5.1" + ; nsDialogs::OnClick /NOUNLOAD $1 $2 + + + ${NSD_CreateLabel} 0 0 100% 50u "$(update_versions_info)$\n$\n$finish_message" + Pop $label_update_information + + GetDlgItem $R0 $HWNDPARENT 1 + SendMessage $R0 ${WM_SETTEXT} 0 `STR:$(button_next)` + + nsDialogs::Show -${If} $R1 == "0" +FunctionEnd ; pageSelect page End -messageBox MB_OK|MB_ICONINFORMATION "$(update_check_equal)" +Function FinishShowCallback + + SendMessage $mui.FinishPage.Text ${WM_SETTEXT} 0 "STR:$finish_message" -${Else} - ${If} $R1 == "1" + ;StrCpy $MUI_NOABORTWARNING 1 + + ${if} $installerexe == "" + ShowWindow $mui.FinishPage.RUN_TEXT ${SW_HIDE} # hide installer + + ${if} $failed <> "" + ${andif} $failed > "0" + ; resize for larger finish messages + nsResize::Add $mui.FinishPage.Text 0 0 0 40u + ${endif} + ${else} + + ; replace checkbox label with installer name + StrCpy $0 "$(MUI_TEXT_FINISH_RUN)" + ${StrRep} $0 $0 "$(^NameDA)" "${Name} $download_version ${installername}" + SendMessage $mui.FinishPage.RUN_TEXT ${WM_SETTEXT} 0 "STR:$0" + + ; disable starting installer, it is required + EnableWindow $mui.FinishPage.Run 0 ; 0=disabled; 1=enabled + + ${endif} +FunctionEnd - IfFileExists $TEMP\version.txt FileExists - SetErrors - Goto Failed +Function RunInstaller + IfFileExists "$installerexe" 0 +3 + UAC::ShellExec "open" "" "$installerexe" "" "" + Goto End + + End: +FunctionEnd - FileExists: - messageBox MB_OK|MB_ICONINFORMATION "$(update_check_newer)" +Function OnCheckbox + Pop $0 # HWND + GetDlgItem $R0 $HWNDPARENT 1 + + ${NSD_GetState} $CHECKBOX_CHECKONLINE $0 + ${If} $0 <> 0 + SendMessage $R0 ${WM_SETTEXT} 0 `STR:$(button_check_update)` ;"STR:Install" ${Else} - - ${If} $R1 == "2" - messageBox MB_YESNO|MB_ICONQUESTION \ - "$(update_check_older)" IDNO +6 - - Push 2 - Push "$TEMP\version.txt" - Call ReadFileLine - Pop $2 - - ExecShell Open $2 - - ${Else} - - Failed: - messageBox MB_YESNO|MB_ICONQUESTION \ - "$(update_check_failed)" IDNO +2 - - ExecShell Open http://www.ultrastardeluxe.org - - ${EndIf} + SendMessage $R0 ${WM_SETTEXT} 0 `STR:$(button_next)` ;^CloseBtn ${EndIf} -${EndIf} -${Else} - -; If checkbox_state = 0 - - -${EndIf} -Delete "$TEMP\version.txt" +FunctionEnd +Function SelectVersionClick + Pop $0 # HWND + nsDialogs::GetUserData $0 + Pop $1 + StrCpy $download_version $1 +FunctionEnd +Function ReadFileLine + Exch $0 ;file + Exch + Exch $1 ;line number + Push $2 + Push $3 + + FileOpen $2 $0 r + StrCpy $3 0 + + Loop: + IntOp $3 $3 + 1 + ClearErrors + FileRead $2 $0 + IfErrors +2 + StrCmp $3 $1 0 loop + FileClose $2 + + Pop $3 + Pop $2 + Pop $1 + Exch $0 FunctionEnd +;!insertmacro MUI_PAGE_INSTFILES +;!insertmacro MUI_PAGE_FINISH + ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ; UPDATE (Section 1) ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +Function PreDownload + ${If} $checkonline_state == "0" + ${OrIf} $skipdownload == "1" + Abort + ${endif} +FunctionEnd + +Section "Download Installer" Section2 + + ${If} $checkonline_state == "0" + ${OrIf} $skipdownload == "1" + Abort + ${endif} + + ${If} $download_version == "" + StrCpy $finish_message "$(update_download_none)" + Goto End + ${endif} + + ; ${If} $downloaded == "1" + ; messageBox MB_OK|MB_ICONINFORMATION "abort check2" + ; Abort + ; ${endif} + + StrCpy $4 "${installer_exe_path}" + StrCpy $0 ${update_url} + ${StrRep} $0 $0 ${update_mask_online_version} $1 + ${StrRep} $0 $0 ${update_mask_installer_version} $2 + + NSISdl::download /TRANSLATE2 $(update_download_downloading) $(update_download_connecting) \ + $(update_download_remain_sec) $(update_download_remain_min) \ + $(update_download_remain_hour) $(update_download_remain_secs) \ + $(update_download_remain_mins) $(update_download_remain_hours) \ + $(update_download_progress) \ + /TIMEOUT=60000 "$0" "$4" + + ;inetc::get /CONNECTTIMEOUT 60 \ + /TRANSLATE $(update_download_downloading) $(update_download_connecting) $(update_download_sec) $(update_download_min) $(update_download_hour) $(update_download_multi) $(update_download_progress) $(update_download_remaining) \ + "$0" "$4" + + Pop $R0 ;Get the return value + + StrCmp $R0 "cancelled" +1 +4 + StrCpy $finish_message "$(update_download_aborted)" + StrCpy $failed 4 + Goto Failed + StrCmp $R0 "cancel" +1 +4 + StrCpy $finish_message "$(update_download_aborted)" + StrCpy $failed 4 + Goto Failed + + IfFileExists "$4" +5 + SetErrors + StrCpy $finish_message "$(update_download_failed)" + StrCpy $failed 2 + Goto Failed + + + ; verify if the downloaded file is an executable file + ; (in cases the download is an html file etc.) + ${FileIsExecutable} $4 $R0 + ${if} $R0 == false + SetErrors + StrCpy $finish_message "$(update_download_invalid_installer)" + StrCpy $failed 3 + Goto Failed + ${endif} + + ; installer download finished + StrCpy $installerexe $4 + StrCpy $finish_message "$(update_download_success)" + Goto End + + Failed: + + End: + +SectionEnd + Section $(name_section1) Section1 + ${Unless} ${SectionIsSelected} ${Section1} + Abort + ${EndUnless} + + ; TODO embedded installation + SectionIn RO SetOutPath $INSTDIR SetOverwrite try + + ;WriteUninstaller "$INSTDIR\Test.exe" SectionEnd ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; Language Support +; Section Descriptions ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -!insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_LANGUAGE "German" +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${Section1} $(DESC_Section1) + +!insertmacro MUI_FUNCTION_DESCRIPTION_END + + +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; Language Support +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ + +!include "${path_settings}\languages.nsh" !insertmacro MUI_RESERVEFILE_LANGDLL -!include "${path_languages}\*.nsh" +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; Main +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ Function .onInit - !insertmacro MUI_LANGDLL_DISPLAY + !define PRODUCT_NAME111 "${name} ${version}" + + ${UAC.I.Elevate.AdminOnly} + System::Call 'kernel32::CreateMutexA(i 0, i 0, t "USdx Update.exe") ?e' + Pop $R0 + StrCmp $R0 0 +3 + MessageBox MB_OK|MB_ICONEXCLAMATION $(oninit_updating) + Abort + + ; check online by default + StrCpy $checkonline_state 1 + + !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd diff --git a/installer/UltraStar Deluxe.nsi b/installer/WorldParty Installer.nsi similarity index 53% rename from installer/UltraStar Deluxe.nsi rename to installer/WorldParty Installer.nsi index 68026b6a..3866c268 100644 --- a/installer/UltraStar Deluxe.nsi +++ b/installer/WorldParty Installer.nsi @@ -3,101 +3,103 @@ ; Ultrastar Deluxe WorldParty ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;;;;;;;;;;;;;;;;;;;;;;;;; -; Libraries ; -;;;;;;;;;;;;;;;;;;;;;;;;; - -!include MUI2.nsh ;Used for create the interface -!include LogicLib.nsh ;Used for internal calculations -!include InstallOptions.nsh ;Used for components selections -!include nsDialogs.nsh ;Used for custom pages -!include UAC.nsh ;Used for get privileges to write on disk -!include FileFunc.nsh ;used for get size info at uninstaller - -;;;;;;;;;;;;;;;;;;;;;;;;; -; Variables ; -;;;;;;;;;;;;;;;;;;;;;;;;; - -; Product Information: -!define PRODUCT_NAME "Ultrastar Deluxe WorldParty" -!define PRODUCT_VERSION "16.10" -!define PRODUCT_PUBLISHER "Ultrastar Espaa" -!define PRODUCT_WEB_SITE "http://ultrastar-es.org" -!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" -!define PRODUCT_UNINST_ROOT_KEY "HKLM" -!define ARP "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" - -; Paths: +!include MUI2.nsh +!include WinVer.nsh +!include LogicLib.nsh +!include InstallOptions.nsh +!include nsDialogs.nsh +!include UAC.nsh +!include FileFunc.nsh + +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; Variables +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ + +; Installer Paths: + !define path_settings ".\settings" !define path_languages ".\languages" !define path_dependencies ".\dependencies" !define path_images ".\dependencies\images" !define path_plugins ".\dependencies\plugins" -; Icons -!define MUI_ICON "install.ico" -!define MUI_UNICON "uninstall.ico" - ; MultiLanguage - Show all languages: -!define MUI_LANGDLL_ALLLANGUAGES +!define MUI_LANGDLL_ALLLANGUAGES -; Header and Side Images: -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "${path_images}\header.bmp" -!define MUI_HEADERIMAGE_UNBITMAP "${path_images}\header.bmp" -!define MUI_WELCOMEFINISHPAGE_BITMAP "${path_images}\side.bmp" -!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${path_images}\side.bmp" +!addPluginDir "${path_plugins}\" -; Abort Warnings: -!define MUI_ABORTWARNING -!define MUI_ABORTWARNING_TEXT "$(abort_install)" -!define MUI_ABORTWARNING_CANCEL_DEFAULT -!define MUI_UNABORTWARNING -!define MUI_UNABORTWARNING_TEXT "$(abort_uninstall)" -!define MUI_UNABORTWARNING_CANCEL_DEFAULT +!include "${path_settings}\variables.nsh" +!include "${path_settings}\functions.nsh" -;Program name -!define exe "WorldParty" +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; Export Settings +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -!addPluginDir "${path_plugins}\" +SetCompress Auto +SetCompressor lzma +SetCompressorDictSize 64 +SetDatablockOptimize On -!include "${path_settings}\functions.nsh" +CRCCheck on +XPStyle on -;;;;;;;;;;;;;;;;;;;;;;;;; -; General configuration ; -;;;;;;;;;;;;;;;;;;;;;;;;; +Name "${name} ${version}" +Brandingtext "${name} ${version} Installation" -Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" -Brandingtext "${PRODUCT_NAME} ${PRODUCT_VERSION} Installation" -OutFile "${PRODUCT_NAME} ${PRODUCT_VERSION}.exe" +!system 'md "dist"' +OutFile "dist\${installerexe}.exe" -InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" ; Default install directory -InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "InstallDir" -RequestExecutionLevel user ; ask for admin privileges in windows vista, 7,8,10 or higher +InstallDir "${PRODUCT_PATH}" +InstallDirRegKey "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}" "InstallDir" -SetCompressorDictSize 64 ;improves ratio compression +; Windows Vista / Windows 7: +; must be "user" for UAC plugin +RequestExecutionLevel user -SetOverwrite ifnewer -CRCCheck on +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; Interface Settings +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; Installer Pages ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Icons: +!define MUI_ICON "${img_install}" +!define MUI_UNICON "${img_uninstall}" + +; Header and Side Images: + +!define MUI_HEADERIMAGE +!define MUI_HEADERIMAGE_BITMAP "${path_images}\${img_header}" +!define MUI_HEADERIMAGE_UNBITMAP "${path_images}\${img_header}" + +!define MUI_WELCOMEFINISHPAGE_BITMAP "${path_images}\${img_side}" +!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${path_images}\${img_side}" + +; Abort Warnings: + +!define MUI_ABORTWARNING +!define MUI_ABORTWARNING_TEXT "$(abort_install)" +!define MUI_ABORTWARNING_CANCEL_DEFAULT + +!define MUI_UNABORTWARNING +!define MUI_UNABORTWARNING_TEXT "$(abort_uninstall)" +!define MUI_UNABORTWARNING_CANCEL_DEFAULT + +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; Pages Installation Routine Settings +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ; Welcome Page: !define MUI_WELCOMEPAGE_TITLE_3LINES !define MUI_WELCOMEPAGE_TITLE "$(page_welcome_title)" - !define MUI_WELCOMEPAGE_TEXT "$(page_welcome_txt)" ; License Page: !define MUI_LICENSEPAGE_RADIOBUTTONS + ; Finish Pages: !define MUI_FINISHPAGE_TITLE_3LINES @@ -117,7 +119,7 @@ Function RunAppAsUser FunctionEnd !define MUI_FINISHPAGE_LINK "$(page_finish_linktxt)" -!define MUI_FINISHPAGE_LINK_LOCATION "${PRODUCT_WEB_SITE}" +!define MUI_FINISHPAGE_LINK_LOCATION "${homepage}" !define MUI_FINISHPAGE_SHOWREADME !define MUI_FINISHPAGE_SHOWREADME_TEXT $(page_finish_desktop) @@ -132,24 +134,26 @@ FunctionEnd ; Pages Installation Routine ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ - !insertmacro MUI_PAGE_WELCOME -!insertmacro MUI_PAGE_LICENSE ".\dependencies\documents\license.txt" +!insertmacro MUI_PAGE_LICENSE "${license}" !insertmacro MUI_PAGE_DIRECTORY ; Start menu page -Var ICONS_GROUP +; TODO: verify. don't think we should disallow disabling shortcuts. think of a portable version !define MUI_STARTMENUPAGE_NODISABLE -!define MUI_STARTMENUPAGE_DEFAULTFOLDER "${PRODUCT_NAME}" + +!define MUI_STARTMENUPAGE_DEFAULTFOLDER "${name}" !define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}" !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" -!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_NAME}" -!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP +!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${name}" + +Var StartMenuFolder +!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder !insertmacro MUI_PAGE_INSTFILES -; USDX Settings Page +; USDX Settings Page Page custom Settings @@ -190,7 +194,7 @@ Function DetermineUserDataDir notexists: StrCpy $UseAppData true SetShellVarContext current - StrCpy $UserDataPath "$APPDATA\ultrastardx" + StrCpy $UserDataPath "$APPDATA\${exe}" SetShellVarContext all end: Delete "$INSTDIR\config.use" @@ -199,11 +203,32 @@ FunctionEnd Function Settings - !insertmacro INSTALLOPTIONS_WRITE "Settings-$LANGUAGE" "Field 18" "State" "$INSTDIR\songs" + ; localize settings + + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 17" "Text" "$(page_settings_config_title)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 10" "Text" "$(page_settings_config_info)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 1" "Text" "$(page_settings_fullscreen_label)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 9" "Text" "$(page_settings_fullscreen_info)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 2" "Text" "$(page_settings_language_label)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 11" "Text" "$(page_settings_language_info)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 3" "Text" "$(page_settings_resolution_label)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 12" "Text" "$(page_settings_resolution_info)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 4" "Text" "$(page_settings_tabs_label)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 13" "Text" "$(page_settings_tabs_info)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 14" "Text" "$(page_settings_sorting_label)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 16" "Text" "$(page_settings_sorting_info)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 18" "Text" "$(page_settings_songdir_label)" + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 19" "Text" "$(page_settings_songdir_info)" + + ; Set default value + + !insertmacro INSTALLOPTIONS_WRITE "Settings" "Field 18" "State" "$INSTDIR\songs" + + ; show dialog !insertmacro MUI_HEADER_TEXT " " "$(page_settings_subtitle)" - !insertmacro INSTALLOPTIONS_DISPLAY "Settings-$LANGUAGE" - + !insertmacro INSTALLOPTIONS_DISPLAY "Settings" + ; Get all the variables: Var /GLOBAL LABEL_COMPONENTS @@ -228,12 +253,12 @@ Function Settings Var /GLOBAL sorting Var /GLOBAL songdir - !insertmacro INSTALLOPTIONS_READ $fullscreen "Settings-$LANGUAGE" "Field 5" "State" - !insertmacro INSTALLOPTIONS_READ $language2 "Settings-$LANGUAGE" "Field 6" "State" - !insertmacro INSTALLOPTIONS_READ $resolution "Settings-$LANGUAGE" "Field 7" "State" - !insertmacro INSTALLOPTIONS_READ $tabs "Settings-$LANGUAGE" "Field 8" "State" - !insertmacro INSTALLOPTIONS_READ $sorting "Settings-$LANGUAGE" "Field 15" "State" - !insertmacro INSTALLOPTIONS_READ $songdir "Settings-$LANGUAGE" "Field 18" "State" + !insertmacro INSTALLOPTIONS_READ $fullscreen "Settings" "Field 5" "State" + !insertmacro INSTALLOPTIONS_READ $language2 "Settings" "Field 6" "State" + !insertmacro INSTALLOPTIONS_READ $resolution "Settings" "Field 7" "State" + !insertmacro INSTALLOPTIONS_READ $tabs "Settings" "Field 8" "State" + !insertmacro INSTALLOPTIONS_READ $sorting "Settings" "Field 15" "State" + !insertmacro INSTALLOPTIONS_READ $songdir "Settings" "Field 18" "State" WriteINIStr "$ConfigIniPath" "Game" "Language" "$language2" WriteINIStr "$ConfigIniPath" "Game" "Tabs" "$tabs" @@ -264,7 +289,6 @@ FunctionEnd ; Settings page End UninstPage custom un.AskDelete un.DeleteAll - Function un.AskDelete nsDialogs::Create /NOUNLOAD 1018 @@ -303,55 +327,54 @@ FunctionEnd Function un.DeleteAll -${NSD_GetState} $CHECKBOX_COVERS $CB_COVERS_State -${NSD_GetState} $CHECKBOX_CONFIG $CB_CONFIG_State -${NSD_GetState} $CHECKBOX_SCORES $CB_SCORES_State -${NSD_GetState} $CHECKBOX_SCORES $CB_SCREENSHOTS_State -${NSD_GetState} $CHECKBOX_SCORES $CB_PLAYLISTS_State -${NSD_GetState} $CHECKBOX_SONGS $CB_SONGS_State - -${If} $CB_COVERS_State == "1" ; Remove covers - RMDir /r "$INSTDIR\covers" - SetShellVarContext current - RMDir /r "$APPDATA\ultrastardx\covers" - SetShellVarContext all -${EndIf} - -${If} $CB_CONFIG_State == "1" ; Remove config - SetShellVarContext current - Delete "$APPDATA\ultrastardx\config.ini" - SetShellVarContext all - Delete "$INSTDIR\config.ini" -${EndIf} + ${NSD_GetState} $CHECKBOX_COVERS $CB_COVERS_State + ${NSD_GetState} $CHECKBOX_CONFIG $CB_CONFIG_State + ${NSD_GetState} $CHECKBOX_SCORES $CB_SCORES_State + ${NSD_GetState} $CHECKBOX_SCORES $CB_SCREENSHOTS_State + ${NSD_GetState} $CHECKBOX_SCORES $CB_PLAYLISTS_State + ${NSD_GetState} $CHECKBOX_SONGS $CB_SONGS_State + + ${If} $CB_COVERS_State == "1" ; Remove covers + RMDir /r "$INSTDIR\covers" + SetShellVarContext current + RMDir /r "$APPDATA\${exe}\covers" + SetShellVarContext all + ${EndIf} -${If} $CB_SCORES_State == "1" ; Remove highscores - SetShellVarContext current - Delete "$APPDATA\ultrastardx\Ultrastar.db" - SetShellVarContext all - Delete "$INSTDIR\Ultrastar.db" -${EndIf} + ${If} $CB_CONFIG_State == "1" ; Remove config + SetShellVarContext current + Delete "$APPDATA\${exe}\config.ini" + SetShellVarContext all + Delete "$INSTDIR\config.ini" + ${EndIf} -${If} $CB_SCREENSHOTS_State == "1" ; Remove screenshots - RMDir /r "$INSTDIR\sreenshots" - SetShellVarContext current - RMDir /r "$APPDATA\ultrastardx\screenshots" - SetShellVarContext all -${EndIf} + ${If} $CB_SCORES_State == "1" ; Remove highscores + SetShellVarContext current + Delete "$APPDATA\${exe}\Ultrastar.db" + SetShellVarContext all + Delete "$INSTDIR\Ultrastar.db" + ${EndIf} -${If} $CB_SCREENSHOTS_State == "1" ; Remove playlists - RMDir /r "$INSTDIR\playlists" - SetShellVarContext current - RMDir /r "$APPDATA\ultrastardx\playlists" - SetShellVarContext all -${EndIf} + ${If} $CB_SCREENSHOTS_State == "1" ; Remove screenshots + RMDir /r "$INSTDIR\sreenshots" + SetShellVarContext current + RMDir /r "$APPDATA\${exe}\screenshots" + SetShellVarContext all + ${EndIf} -${If} $CB_SONGS_State == "1" ; Remove songs - RMDir /r "$INSTDIR\songs" - SetShellVarContext current - RMDir /r "$APPDATA\ultrastardx\songs" - SetShellVarContext all -${EndIf} + ${If} $CB_SCREENSHOTS_State == "1" ; Remove playlists + RMDir /r "$INSTDIR\playlists" + SetShellVarContext current + RMDir /r "$APPDATA\${exe}\playlists" + SetShellVarContext all + ${EndIf} + ${If} $CB_SONGS_State == "1" ; Remove songs + RMDir /r "$INSTDIR\songs" + SetShellVarContext current + RMDir /r "$APPDATA\${exe}\songs" + SetShellVarContext all + ${EndIf} FunctionEnd @@ -363,15 +386,23 @@ FunctionEnd ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ;------------------------------------ -; MAIN COMPONENTS +; MAIN COMPONENTS (Section 1) ;------------------------------------ -Section "Install" - +Section $(name_section1) Section1 + + SectionIn RO SetOutPath $INSTDIR SetOverwrite try + + ; make installation folder read/writable for all authenticated users, + ; so shared settings, songs, logfile,... can be used and overall game handling is easier + ; TODO: use All Users->AppData for this instead in future releases + AccessControl::GrantOnFile \ + "$INSTDIR\" "(BU)" "GenericRead + GenericExecute + GenericWrite + Delete" Call DetermineUserDataDir + !include "${path_settings}\files_main_install.nsh" ; Create Shortcuts: @@ -381,25 +412,30 @@ Section "Install" SetShellVarContext all SetOutPath "$INSTDIR" - ;CreateDirectory "$INSTDIR\${PRODUCT_NAME} ${PRODUCT_VERSION}" - CreateDirectory "$SMPROGRAMS\$ICONS_GROUP" - CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\$(sm_shortcut).lnk" "$INSTDIR\${exe}.exe" - CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\$(sm_website).lnk" "${PRODUCT_WEB_SITE}" - CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\$(sm_songs).lnk" "$INSTDIR\songs" - CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\$(sm_uninstall).lnk" "$INSTDIR\Uninstall.exe" + CreateDirectory "$SMPROGRAMS\$StartMenuFolder" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(sm_shortcut).lnk" "$INSTDIR\${exe}.exe" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(sm_website).lnk" "${homepage}" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(sm_songs).lnk" "$INSTDIR\songs" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\$(sm_uninstall).lnk" "$INSTDIR\${exeuninstall}.exe" !insertmacro MUI_STARTMENU_WRITE_END + ; Vista Game Explorer: + ; (removed due to incompatibility with Windows 7, needs rewrite) ; Create Uninstaller: - WriteUninstaller "$INSTDIR\Uninstall.exe" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_NAME} ${PRODUCT_VERSION}" + WriteUninstaller "$INSTDIR\${exeuninstall}.exe" + + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "${name}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${exe}.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "InstallDir" "$INSTDIR" - WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\Uninstall.exe" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\${exeuninstall}.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" + + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Version" "${FullVersion}" + WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Language" "$language" SetOutPath "$INSTDIR" @@ -407,57 +443,60 @@ Section "Install" ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 IntFmt $0 "0x%08X" $0 WriteRegDWORD HKLM "${ARP}" "EstimatedSize" "$0" - SectionEnd - ;------------------------------------ -; UNINSTALL +; UNINSTALL ;------------------------------------ Section Uninstall - !insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP + ; Delete created Icons in startmenu + !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder + SetShellVarContext all + RMDir /r "$SMPROGRAMS\$StartMenuFolder\" + + ; Delete created Icon on Desktop + Delete "$Desktop\$(sm_shortcut).lnk" + !include "${path_settings}\files_main_uninstall.nsh" - + + !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder + Delete "$SMPROGRAMS\$StartMenuFolder\$(sm_shortcut).lnk" + Delete "$SMPROGRAMS\$StartMenuFolder\$(sm_website).lnk" + Delete "$SMPROGRAMS\$StartMenuFolder\$(sm_songs).lnk" + Delete "$SMPROGRAMS\$StartMenuFolder\$(sm_uninstall).lnk" + RMDir "$SMPROGRAMS\$StartMenuFolder" + DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" + ; Unregister from Windows Vista Game Explorer + ; (removed due to incompatibility with Windows 7) SectionEnd - ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ; Language Support ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -!insertmacro MUI_LANGUAGE "English" -!insertmacro MUI_LANGUAGE "German" -!insertmacro MUI_LANGUAGE "Hungarian" -!insertmacro MUI_LANGUAGE "Polish" -!insertmacro MUI_LANGUAGE "Portuguese" -!insertmacro MUI_LANGUAGE "Spanish" - +!include "${path_settings}\languages.nsh" !insertmacro MUI_RESERVEFILE_LANGDLL -!include "${path_languages}\*.nsh" +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; Main +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ;!addPluginDir "${path_plugins}\" - Function .onGUIEnd BGImage::Sound /STOP FunctionEnd Function .onInit - ${UAC.I.Elevate.AdminOnly} - var /GLOBAL version - StrCpy $version "WorldParty" - - System::Call 'kernel32::CreateMutexA(i 0, i 0, t "USdx Installer.exe") ?e' Pop $R0 @@ -466,41 +505,39 @@ Function .onInit MessageBox MB_OK|MB_ICONEXCLAMATION $(oninit_running) Abort - ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME} ${PRODUCT_VERSION}" 'DisplayVersion' + ReadRegStr $R0 "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}" 'DisplayVersion' - ${If} $R0 == $version + ${If} "$R0" == "${PRODUCT_VERSION}" MessageBox MB_YESNO|MB_ICONEXCLAMATION \ - "${PRODUCT_NAME} $R0 $(oninit_alreadyinstalled). $\n$\n $(oninit_installagain)" \ + "${name} $R0 $(oninit_alreadyinstalled). $\n$\n $(oninit_installagain)" \ IDYES continue Abort ${EndIf} - ReadRegStr $R1 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME} ${PRODUCT_VERSION}" 'UninstallString' + ReadRegStr $R1 "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}" 'UninstallString' StrCmp $R1 "" done - + + ReadRegStr $R2 "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}" 'Version' + StrCmp $R1 "" 0 +1 + StrCpy $R1 " ($R1)" - ${If} $R0 != $version + ${If} "$R0" != "${PRODUCT_VERSION}" MessageBox MB_YESNO|MB_ICONEXCLAMATION \ - "${PRODUCT_NAME} $R0 $(oninit_alreadyinstalled). $\n$\n $(oninit_updateusdx) $R0 -> ${PRODUCT_VERSION}" \ + "${name} $R0 $(oninit_alreadyinstalled). $\n$\n $(oninit_updateusdx) $R0$R1 -> ${version} (${FullVersion})" \ IDYES continue Abort ${EndIf} continue: - ReadRegStr $R2 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME} ${PRODUCT_VERSION}" 'UninstallString' + ReadRegStr $R2 "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}" 'UninstallString' MessageBox MB_YESNO|MB_ICONEXCLAMATION "$(oninit_uninstall)" IDNO done ExecWait '"$R2" _?=$INSTDIR' done: !insertmacro MUI_LANGDLL_DISPLAY - !insertmacro INSTALLOPTIONS_EXTRACT_AS ".\settings\settings-1031.ini" "Settings-1031" - !insertmacro INSTALLOPTIONS_EXTRACT_AS ".\settings\settings-1033.ini" "Settings-1033" - !insertmacro INSTALLOPTIONS_EXTRACT_AS ".\settings\settings-1038.ini" "Settings-1038" - !insertmacro INSTALLOPTIONS_EXTRACT_AS ".\settings\settings-1045.ini" "Settings-1045" - !insertmacro INSTALLOPTIONS_EXTRACT_AS ".\settings\settings-1034.ini" "Settings-1034" - !insertmacro INSTALLOPTIONS_EXTRACT_AS ".\settings\settings-2070.ini" "Settings-2070" + !insertmacro INSTALLOPTIONS_EXTRACT_AS ".\settings\settings.ini" "Settings" ;--------- Splash image InitPluginsDir @@ -510,8 +547,7 @@ done: Pop $0 ; $0 has '1' if the user closed the splash screen early, ; '0' if everything closed normally, and '-1' if some error occurred. -;----------------------- - +;----------------------- FunctionEnd Function un.onInit @@ -537,7 +573,14 @@ end: Abort continue: - !insertmacro MUI_LANGDLL_DISPLAY + + ; restore the installer language. the language has been manually written in order to have + ; the installer always open the language dialog + !define MUI_LANGDLL_REGISTRY_ROOT ${PRODUCT_UNINST_ROOT_KEY} + !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" + !define MUI_LANGDLL_REGISTRY_VALUENAME "Language" + + !insertmacro MUI_UNGETLANGUAGE FunctionEnd diff --git a/installer/dependencies/Unicode/Plugins/AccessControl.dll b/installer/dependencies/Unicode/Plugins/AccessControl.dll new file mode 100644 index 00000000..cc27f63f Binary files /dev/null and b/installer/dependencies/Unicode/Plugins/AccessControl.dll differ diff --git a/installer/dependencies/dll/SDL.dll b/installer/dependencies/dll/SDL.dll deleted file mode 100644 index 3ce97a59..00000000 Binary files a/installer/dependencies/dll/SDL.dll and /dev/null differ diff --git a/installer/dependencies/dll/SDL2.dll b/installer/dependencies/dll/SDL2.dll new file mode 100644 index 00000000..2b7e3193 Binary files /dev/null and b/installer/dependencies/dll/SDL2.dll differ diff --git a/installer/dependencies/dll/SDL2_image.dll b/installer/dependencies/dll/SDL2_image.dll new file mode 100644 index 00000000..cd35db04 Binary files /dev/null and b/installer/dependencies/dll/SDL2_image.dll differ diff --git a/installer/dependencies/dll/SDL2_mixer.dll b/installer/dependencies/dll/SDL2_mixer.dll new file mode 100644 index 00000000..47adbc3f Binary files /dev/null and b/installer/dependencies/dll/SDL2_mixer.dll differ diff --git a/installer/dependencies/dll/SDL_image.dll b/installer/dependencies/dll/SDL_image.dll deleted file mode 100644 index e24b6ee5..00000000 Binary files a/installer/dependencies/dll/SDL_image.dll and /dev/null differ diff --git a/installer/dependencies/dll/SDL_ttf.dll b/installer/dependencies/dll/SDL_ttf.dll deleted file mode 100644 index 43a89db2..00000000 Binary files a/installer/dependencies/dll/SDL_ttf.dll and /dev/null differ diff --git a/game/opengl32_.dll b/installer/dependencies/dll/avcodec-57.dll similarity index 65% rename from game/opengl32_.dll rename to installer/dependencies/dll/avcodec-57.dll index 7ec6680a..f2cb274c 100644 Binary files a/game/opengl32_.dll and b/installer/dependencies/dll/avcodec-57.dll differ diff --git a/installer/dependencies/dll/avdevice-52.dll b/installer/dependencies/dll/avdevice-52.dll deleted file mode 100644 index 13f670cf..00000000 Binary files a/installer/dependencies/dll/avdevice-52.dll and /dev/null differ diff --git a/installer/dependencies/dll/avdevice-57.dll b/installer/dependencies/dll/avdevice-57.dll new file mode 100644 index 00000000..2124a53a Binary files /dev/null and b/installer/dependencies/dll/avdevice-57.dll differ diff --git a/installer/dependencies/dll/avfilter-1.dll b/installer/dependencies/dll/avfilter-1.dll deleted file mode 100644 index cb4443ef..00000000 Binary files a/installer/dependencies/dll/avfilter-1.dll and /dev/null differ diff --git a/installer/dependencies/dll/avfilter-6.dll b/installer/dependencies/dll/avfilter-6.dll new file mode 100644 index 00000000..e7646585 Binary files /dev/null and b/installer/dependencies/dll/avfilter-6.dll differ diff --git a/installer/dependencies/dll/avformat-52.dll b/installer/dependencies/dll/avformat-52.dll deleted file mode 100644 index 582a7843..00000000 Binary files a/installer/dependencies/dll/avformat-52.dll and /dev/null differ diff --git a/installer/dependencies/dll/avformat-57.dll b/installer/dependencies/dll/avformat-57.dll new file mode 100644 index 00000000..39e1a567 Binary files /dev/null and b/installer/dependencies/dll/avformat-57.dll differ diff --git a/installer/dependencies/dll/avutil-50.dll b/installer/dependencies/dll/avutil-50.dll deleted file mode 100644 index f35694dc..00000000 Binary files a/installer/dependencies/dll/avutil-50.dll and /dev/null differ diff --git a/installer/dependencies/dll/avutil-55.dll b/installer/dependencies/dll/avutil-55.dll new file mode 100644 index 00000000..ba98ce29 Binary files /dev/null and b/installer/dependencies/dll/avutil-55.dll differ diff --git a/installer/dependencies/dll/bass.dll b/installer/dependencies/dll/bass.dll index f0f71752..87cd8314 100644 Binary files a/installer/dependencies/dll/bass.dll and b/installer/dependencies/dll/bass.dll differ diff --git a/installer/dependencies/dll/bass_fx.dll b/installer/dependencies/dll/bass_fx.dll new file mode 100644 index 00000000..381fa5f8 Binary files /dev/null and b/installer/dependencies/dll/bass_fx.dll differ diff --git a/installer/dependencies/dll/jpeg.dll b/installer/dependencies/dll/jpeg.dll deleted file mode 100644 index 12dfb0d2..00000000 Binary files a/installer/dependencies/dll/jpeg.dll and /dev/null differ diff --git a/installer/dependencies/dll/libFLAC-8.dll b/installer/dependencies/dll/libFLAC-8.dll new file mode 100644 index 00000000..bcc6524c Binary files /dev/null and b/installer/dependencies/dll/libFLAC-8.dll differ diff --git a/installer/dependencies/dll/libfreetype6.dll b/installer/dependencies/dll/libfreetype6.dll new file mode 100644 index 00000000..fed8bca1 Binary files /dev/null and b/installer/dependencies/dll/libfreetype6.dll differ diff --git a/installer/dependencies/dll/libjpeg-9.dll b/installer/dependencies/dll/libjpeg-9.dll new file mode 100644 index 00000000..6790e5d8 Binary files /dev/null and b/installer/dependencies/dll/libjpeg-9.dll differ diff --git a/installer/dependencies/dll/libmodplug-1.dll b/installer/dependencies/dll/libmodplug-1.dll new file mode 100644 index 00000000..69be1be0 Binary files /dev/null and b/installer/dependencies/dll/libmodplug-1.dll differ diff --git a/installer/dependencies/dll/libogg-0.dll b/installer/dependencies/dll/libogg-0.dll new file mode 100644 index 00000000..1b3a7bd4 Binary files /dev/null and b/installer/dependencies/dll/libogg-0.dll differ diff --git a/installer/dependencies/dll/libpng12-0.dll b/installer/dependencies/dll/libpng12-0.dll deleted file mode 100644 index 278c6b75..00000000 Binary files a/installer/dependencies/dll/libpng12-0.dll and /dev/null differ diff --git a/installer/dependencies/dll/libpng16-16.dll b/installer/dependencies/dll/libpng16-16.dll new file mode 100644 index 00000000..30833f0c Binary files /dev/null and b/installer/dependencies/dll/libpng16-16.dll differ diff --git a/installer/dependencies/dll/libprojectM2.dll b/installer/dependencies/dll/libprojectM2.dll new file mode 100644 index 00000000..d11c307f Binary files /dev/null and b/installer/dependencies/dll/libprojectM2.dll differ diff --git a/installer/dependencies/dll/libtiff-3.dll b/installer/dependencies/dll/libtiff-3.dll deleted file mode 100644 index 4c6091ad..00000000 Binary files a/installer/dependencies/dll/libtiff-3.dll and /dev/null differ diff --git a/installer/dependencies/dll/libtiff-5.dll b/installer/dependencies/dll/libtiff-5.dll new file mode 100644 index 00000000..49e2818b Binary files /dev/null and b/installer/dependencies/dll/libtiff-5.dll differ diff --git a/installer/dependencies/dll/libvorbis-0.dll b/installer/dependencies/dll/libvorbis-0.dll new file mode 100644 index 00000000..7f79a16a Binary files /dev/null and b/installer/dependencies/dll/libvorbis-0.dll differ diff --git a/installer/dependencies/dll/libvorbisfile-3.dll b/installer/dependencies/dll/libvorbisfile-3.dll new file mode 100644 index 00000000..4e3a5ed9 Binary files /dev/null and b/installer/dependencies/dll/libvorbisfile-3.dll differ diff --git a/installer/dependencies/dll/libwebp-4.dll b/installer/dependencies/dll/libwebp-4.dll new file mode 100644 index 00000000..488ce83b Binary files /dev/null and b/installer/dependencies/dll/libwebp-4.dll differ diff --git a/installer/dependencies/dll/lua51.dll b/installer/dependencies/dll/lua51.dll deleted file mode 100644 index 27ab2654..00000000 Binary files a/installer/dependencies/dll/lua51.dll and /dev/null differ diff --git a/installer/dependencies/dll/pcre3.dll b/installer/dependencies/dll/pcre3.dll index a37d2b48..b5fd2a63 100644 Binary files a/installer/dependencies/dll/pcre3.dll and b/installer/dependencies/dll/pcre3.dll differ diff --git a/installer/dependencies/dll/portaudio_x86.dll b/installer/dependencies/dll/portaudio_x86.dll index d690819f..125b14a1 100644 Binary files a/installer/dependencies/dll/portaudio_x86.dll and b/installer/dependencies/dll/portaudio_x86.dll differ diff --git a/installer/dependencies/dll/postproc-54.dll b/installer/dependencies/dll/postproc-54.dll new file mode 100644 index 00000000..59318e24 Binary files /dev/null and b/installer/dependencies/dll/postproc-54.dll differ diff --git a/installer/dependencies/dll/smpeg2.dll b/installer/dependencies/dll/smpeg2.dll new file mode 100644 index 00000000..1cef5883 Binary files /dev/null and b/installer/dependencies/dll/smpeg2.dll differ diff --git a/installer/dependencies/dll/sqlite3.dll b/installer/dependencies/dll/sqlite3.dll index 0b1017ab..3bedc32f 100644 Binary files a/installer/dependencies/dll/sqlite3.dll and b/installer/dependencies/dll/sqlite3.dll differ diff --git a/installer/dependencies/dll/swresample-2.dll b/installer/dependencies/dll/swresample-2.dll new file mode 100644 index 00000000..60fa41e6 Binary files /dev/null and b/installer/dependencies/dll/swresample-2.dll differ diff --git a/installer/dependencies/dll/swscale-0.dll b/installer/dependencies/dll/swscale-0.dll deleted file mode 100644 index 08aa34d1..00000000 Binary files a/installer/dependencies/dll/swscale-0.dll and /dev/null differ diff --git a/installer/dependencies/dll/swscale-4.dll b/installer/dependencies/dll/swscale-4.dll new file mode 100644 index 00000000..9f07e6dc Binary files /dev/null and b/installer/dependencies/dll/swscale-4.dll differ diff --git a/installer/dependencies/dll/zlib1.dll b/installer/dependencies/dll/zlib1.dll index 91bd79c2..68a8bf7a 100644 Binary files a/installer/dependencies/dll/zlib1.dll and b/installer/dependencies/dll/zlib1.dll differ diff --git a/installer/dependencies/documents/documentation-new.docx b/installer/dependencies/documents/documentation-new.docx new file mode 100644 index 00000000..87af8cdd Binary files /dev/null and b/installer/dependencies/documents/documentation-new.docx differ diff --git a/installer/dependencies/documents/documentation.pdf b/installer/dependencies/documents/documentation.pdf index ae99a860..5f11ea09 100644 Binary files a/installer/dependencies/documents/documentation.pdf and b/installer/dependencies/documents/documentation.pdf differ diff --git a/installer/dependencies/documents/thirdparty/LICENSE.FLAC.txt b/installer/dependencies/documents/thirdparty/LICENSE.FLAC.txt new file mode 100644 index 00000000..94fd3aa6 --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.FLAC.txt @@ -0,0 +1,32 @@ +The source code to this library used with SDL_mixer can be found here: +http://www.libsdl.org/projects/SDL_mixer/libs/ +--- + +Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/installer/dependencies/documents/thirdparty/LICENSE.jpeg.txt b/installer/dependencies/documents/thirdparty/LICENSE.jpeg.txt new file mode 100644 index 00000000..17d7ff0e --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.jpeg.txt @@ -0,0 +1,65 @@ +The source code to this library used with SDL_image can be found here: +http://www.libsdl.org/projects/SDL_image/libs/ +--- + +LEGAL ISSUES +============ + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, + please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a + program, you must acknowledge somewhere in your documentation that + you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, +with respect to this software, its quality, accuracy, merchantability, or +fitness for a particular purpose. This software is provided "AS IS", and you, +its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-2012, Thomas G. Lane, Guido Vollbeding. +All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this +software (or portions thereof) for any purpose, without fee, subject to these +conditions: +(1) If any part of the source code for this software is distributed, then this +README file must be included, with this copyright and no-warranty notice +unaltered; and any additions, deletions, or changes to the original files +must be clearly indicated in accompanying documentation. +(2) If only executable code is distributed, then the accompanying +documentation must state that "this software is based in part on the work of +the Independent JPEG Group". +(3) Permission for use of this software is granted only if the user accepts +full responsibility for any undesirable consequences; the authors accept +NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, +not just to the unmodified library. If you use our work, you ought to +acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name +in advertising or publicity relating to this software or products derived from +it. This software may be referred to only as "the Independent JPEG Group's +software". + +We specifically permit and encourage the use of this software as the basis of +commercial products, provided that all warranty or liability claims are +assumed by the product vendor. + + +The IJG distribution formerly included code to read and write GIF files. +To avoid entanglement with the Unisys LZW patent, GIF reading support has +been removed altogether, and the GIF writer has been simplified to produce +"uncompressed GIFs". This technique does not use the LZW algorithm; the +resulting GIF files are larger than usual, but are readable by all standard +GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of + CompuServe Incorporated. GIF(sm) is a Service Mark property of + CompuServe Incorporated." diff --git a/installer/dependencies/documents/thirdparty/LICENSE.modplug.txt b/installer/dependencies/documents/thirdparty/LICENSE.modplug.txt new file mode 100644 index 00000000..59fbf826 --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.modplug.txt @@ -0,0 +1 @@ +ModPlug-XMMS and libmodplug are now in the public domain. diff --git a/installer/dependencies/documents/thirdparty/LICENSE.ogg-vorbis.txt b/installer/dependencies/documents/thirdparty/LICENSE.ogg-vorbis.txt new file mode 100644 index 00000000..c2cb6d56 --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.ogg-vorbis.txt @@ -0,0 +1,32 @@ +The source code to this library used with SDL_mixer can be found here: +http://www.libsdl.org/projects/SDL_mixer/libs/ +--- + +Copyright (c) 2002-2008 Xiph.org Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/installer/dependencies/documents/thirdparty/LICENSE.png.txt b/installer/dependencies/documents/thirdparty/LICENSE.png.txt new file mode 100644 index 00000000..78d131c0 --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.png.txt @@ -0,0 +1,114 @@ +The source code to this library used with SDL_image can be found here: +http://www.libsdl.org/projects/SDL_image/libs/ +--- + +This copy of the libpng notices is provided for your convenience. In case of +any discrepancy between this copy and the notices in the file png.h that is +included in the libpng distribution, the latter shall prevail. + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + +If you modify libpng you may insert additional notices immediately following +this sentence. + +This code is released under the libpng license. + +libpng versions 1.2.6, August 15, 2004, through 1.5.7, December 15, 2011, are +Copyright (c) 2004, 2006-2011 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.2.5 +with the following individual added to the list of Contributing Authors + + Cosmin Truta + +libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are +Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.0.6 +with the following individuals added to the list of Contributing Authors + + Simon-Pierre Cadieux + Eric S. Raymond + Gilles Vollant + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-0.96, +with the following individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996, 1997 Andreas Dilger +Distributed according to the same disclaimer and license as libpng-0.88, +with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authors +and Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and of +fitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary, +or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, without +fee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use this +source code in a product, acknowledgment is not required but would be +appreciated. + + +A "png_get_copyright" function is available, for convenient use in "about" +boxes and the like: + + printf("%s",png_get_copyright(NULL)); + +Also, the PNG logo (in PNG format, of course) is supplied in the +files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + +Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a +certification mark of the Open Source Initiative. + +Glenn Randers-Pehrson +glennrp at users.sourceforge.net +December 15, 2011 diff --git a/installer/dependencies/documents/thirdparty/LICENSE.sdl2.txt b/installer/dependencies/documents/thirdparty/LICENSE.sdl2.txt new file mode 100644 index 00000000..14e2f777 --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.sdl2.txt @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/installer/dependencies/documents/thirdparty/LICENSE.smpeg.txt b/installer/dependencies/documents/thirdparty/LICENSE.smpeg.txt new file mode 100644 index 00000000..21096132 --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.smpeg.txt @@ -0,0 +1,485 @@ +The source code to this library used with SDL_mixer can be found here: +http://www.libsdl.org/projects/SDL_mixer/libs/ +--- + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/installer/dependencies/documents/thirdparty/LICENSE.tiff.txt b/installer/dependencies/documents/thirdparty/LICENSE.tiff.txt new file mode 100644 index 00000000..c6da9125 --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.tiff.txt @@ -0,0 +1,25 @@ +The source code to this library used with SDL_image can be found here: +http://www.libsdl.org/projects/SDL_image/libs/ +--- + +Copyright (c) 1988-1997 Sam Leffler +Copyright (c) 1991-1997 Silicon Graphics, Inc. + +Permission to use, copy, modify, distribute, and sell this software and +its documentation for any purpose is hereby granted without fee, provided +that (i) the above copyright notices and this permission notice appear in +all copies of the software and related documentation, and (ii) the names of +Sam Leffler and Silicon Graphics may not be used in any advertising or +publicity relating to the software without the specific, prior written +permission of Sam Leffler and Silicon Graphics. + +THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, +EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY +WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR +ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF +LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE +OF THIS SOFTWARE. diff --git a/installer/dependencies/documents/thirdparty/LICENSE.webp.txt b/installer/dependencies/documents/thirdparty/LICENSE.webp.txt new file mode 100644 index 00000000..15993f83 --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.webp.txt @@ -0,0 +1,34 @@ +The source code to this library used with SDL_image can be found here: +http://www.libsdl.org/projects/SDL_image/libs/ +--- + +Copyright (c) 2010, Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google nor the names of its contributors may + be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/installer/dependencies/documents/thirdparty/LICENSE.zlib.txt b/installer/dependencies/documents/thirdparty/LICENSE.zlib.txt new file mode 100644 index 00000000..ae89d83e --- /dev/null +++ b/installer/dependencies/documents/thirdparty/LICENSE.zlib.txt @@ -0,0 +1,31 @@ +The source code to this library used with SDL_image can be found here: +http://www.libsdl.org/projects/SDL_image/libs/ +--- + +Copyright notice: + + (C) 1995-2010 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. diff --git a/installer/dependencies/loop.wav b/installer/dependencies/loop.wav deleted file mode 100644 index 8a252921..00000000 Binary files a/installer/dependencies/loop.wav and /dev/null differ diff --git a/installer/dependencies/plugins/AccessControl.dll b/installer/dependencies/plugins/AccessControl.dll new file mode 100644 index 00000000..0de0324f Binary files /dev/null and b/installer/dependencies/plugins/AccessControl.dll differ diff --git a/installer/dependencies/plugins/INetC.dll b/installer/dependencies/plugins/INetC.dll new file mode 100644 index 00000000..d064bc1a Binary files /dev/null and b/installer/dependencies/plugins/INetC.dll differ diff --git a/installer/dependencies/plugins/nsResize.dll b/installer/dependencies/plugins/nsResize.dll new file mode 100644 index 00000000..8f2a0108 Binary files /dev/null and b/installer/dependencies/plugins/nsResize.dll differ diff --git a/installer/install.ico b/installer/install.ico index fc1d0797..e1fd59f9 100644 Binary files a/installer/install.ico and b/installer/install.ico differ diff --git a/installer/languages/English.nsh b/installer/languages/English.nsh index 9d1429ab..591b9985 100644 --- a/installer/languages/English.nsh +++ b/installer/languages/English.nsh @@ -1,66 +1,191 @@ +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; UltraStar Deluxe Installer - Language file: English ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; UltraStar Deluxe WorldParty Installer - Language file: English -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -LangString abort_install ${LANG_ENGLISH} "Are you sure to abort Installation?" -LangString abort_uninstall ${LANG_ENGLISH} "Are you sure to abort UnInstallation?" -LangString oninit_running ${LANG_ENGLISH} "The installer is already running." -LangString oninit_installagain ${LANG_ENGLISH} "Are you sure you want to install it again?" -LangString oninit_alreadyinstalled ${LANG_ENGLISH} "is already installed" -LangString oninit_closeusdx ${LANG_ENGLISH} "cannot be uninstalled while its running! Do you want to close it?" -LangString oninit_updateusdx ${LANG_ENGLISH} "Do you want to update the installation from:" -LangString oninit_uninstall ${LANG_ENGLISH} "Do you want to uninstall the old version? (recommended)" - -LangString update_connect ${LANG_ENGLISH} "Establish internet connection and check for new version" -LangString button_next ${LANG_ENGLISH} "Next >" -LangString button_close ${LANG_ENGLISH} "Close" -LangString update_information ${LANG_ENGLISH} "You can check if a new version of 'UltraStar Deluxe WorldParty' is available. Thereto an internet connection will be established. If a new version is found, it can be installed afterwards." - -LangString delete_components ${LANG_ENGLISH} "Also delete the following components:" -LangString delete_covers ${LANG_ENGLISH} "Cover?" -LangString delete_highscores ${LANG_ENGLISH} "Highscores?" -LangString delete_config ${LANG_ENGLISH} "Config?" -LangString delete_screenshots ${LANG_ENGLISH} "Screenshots?" -LangString delete_playlists ${LANG_ENGLISH} "Playlists?" -LangString delete_songs ${LANG_ENGLISH} "Remove songs? WARNING: ALL files within the InstallationDir\songs folder will be removed(!)" - -LangString update_check_older ${LANG_ENGLISH} "Your version $R0 is outdated. The new version $1 of UltraStar Deluxe is available. Do you want to update?" -LangString update_check_equal ${LANG_ENGLISH} "Your currently installed version $R0 is up-to-date. No update needed." -LangString update_check_newer ${LANG_ENGLISH} "Your installed version $R0 is newer than the $\n$\rcurrent release version $1 of UltraStar Deluxe. No update needed." -LangString update_check_failed ${LANG_ENGLISH} "The check for a new version failed. Do you want to visit website to check manually ?" +!insertmacro LANGFILE_EXT English + +${LangFileString} error_download_song_info "Error downloading song \'$0' from: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_song_msg "Error downloading song: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +${LangFileString} error_download_theme_info "Error downloading theme \'$0' from: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_theme_msg "Error downloading theme: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +${LangFileString} error_download_skin_info "Error downloading skin \'$0' from: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_skin_msg "Error downloading skin: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +${LangFileString} error_download_plugin_info "Error downloading plugin \'$0' from: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_plugin_msg "Error downloading plugin: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." + +${LangFileString} abort_install "Are you sure to abort installation?" +${LangFileString} abort_uninstall "Are you sure to abort uninstallation?" +${LangFileString} abort_update "Are you sure to abort the update?" +${LangFileString} oninit_running "The installer is already running." +${LangFileString} oninit_updating "An update is already running." +${LangFileString} oninit_installagain "Are you sure you want to install it again?" +${LangFileString} oninit_alreadyinstalled "is already installed" +${LangFileString} oninit_closeusdx "cannot be uninstalled while its running! Do you want to close it?" +${LangFileString} oninit_updateusdx "Do you want to update the installation from:" +${LangFileString} oninit_uninstall "Do you want to uninstall the old version? (recommended)" + +${LangFileString} update_connect "Establish internet connection and check for new version" +${LangFileString} button_next "Next >" +${LangFileString} button_close "Close" + +${LangFileString} delete_components "Also delete the following components:" +${LangFileString} delete_covers "Cover" +${LangFileString} delete_highscores "Highscores" +${LangFileString} delete_config "Config" +${LangFileString} delete_screenshots "Screenshots" +${LangFileString} delete_playlists "Playlists" +${LangFileString} delete_songs "Remove songs? WARNING: ALL files within the InstallationDir\songs folder will be removed(!)" + +${LangFileString} update_information "You can check if a new version of '${name}' is available. Thereto an internet connection will be established. If a new version is found, it can be installed afterwards." +${LangFileString} button_check_update "Check" + +${LangFileString} update_noinstallation_online "You have no version installed. The current installer cannot update your version. Check our website ${homepage} for a new version." +${LangFileString} update_noinstallation_offline "You have no version installed. The current installer/updater cannot install a version. Check our website ${homepage} for a version." +${LangFileString} update_check_offline "Your version $installed_version is up-to-date. The current installer cannot update your version. Visit our project website to get latest news and updates." +${LangFileString} update_check_older "Your version $installed_version is outdated. The new version $online_version of ${name} is available. Choose your option:" +${LangFileString} update_check_equal "Your currently installed version $installed_version is up-to-date. No update needed." +${LangFileString} update_check_newer "Your installed version $installed_version is newer than the $\r$\ncurrent release version $online_version of ${name}. No update needed." +${LangFileString} update_check_no "The current updater/installer won't install a version. Check our website ${homepage} for a new version." +${LangFileString} update_check_failed "The check for a new version failed. Check our website ${homepage} for a new version and manually download a new version." +${LangFileString} update_download_success "The download of the new version $online_version succeeded.$\r$\n$\r$\nFinish the update by closing this updater. The new installation will be started right after." +${LangFileString} update_download_failed "The download of the new version $online_version failed. The installer could not be downloaded.$\r$\n$\r$\nPlease, visit our website ${homepage} for the new version." +${LangFileString} update_download_aborted "The download of the new version $online_version was aborted. Nothing will be updated. Remember, visit our website ${homepage} for latest news and updates." +${LangFileString} update_download_invalid_installer "The download of the new version $online_version failed. The downloaded installer was invalid. This can happen if the server/website has some issues, does not exist anymore or is in maintenance mode.$\r$\n$\r$\nPlease, visit our website ${homepage} and download the installer manually." +${LangFileString} update_download_none "No version to download selected. The current installer cannot update your version. Check our website ${homepage} for latest news and updates." +${LangFileString} update_versions_info "At least one new version of ${name} has been found. Please, select a specific version and choose to update. This version will be downloaded and the installation will be started afterwards." +${LangFileString} update_versions_none "None" + +${LangFileString} update_download_downloading "Downloading %s " +${LangFileString} update_download_connecting "Connecting ... " +${LangFileString} update_download_sec "sec" +${LangFileString} update_download_min "min" +${LangFileString} update_download_hour "hour" +${LangFileString} update_download_multi "s" +${LangFileString} update_download_progress "%dkiB (%d%%) of %dkiB @ %d.%02dkiB/s" +${LangFileString} update_download_remaining " (%d %s%s remaining)" +${LangFileString} update_download_remain_sec " (1 second remaining)" +${LangFileString} update_download_remain_min " (1 minute remaining)" +${LangFileString} update_download_remain_hour " (1 hour remaining)" +${LangFileString} update_download_remain_secs " (%u seconds remaining)" +${LangFileString} update_download_remain_mins " (%u minutes remaining)" +${LangFileString} update_download_remain_hours " (%u hours remaining)" ; Welcome Page: -LangString page_welcome_title_update ${LANG_ENGLISH} "Welcome to the UltraStar Deluxe WorldParty Update Wizard" -LangString page_welcome_txt_update ${LANG_ENGLISH} "This wizard will guide you through the Update process of UltraStar Deluxe WorldParty. UltraStar Deluxe is a free open source Karaoke game, which can be compared with Singstar.$\n$\r$\n$\rThe UltraStar Deluxe Team and zup3r_vock (WorldParty Mod) wishes you fun.$\n$\rProject website: http://www.ultrastardeluxe.org$\n$\rSupport Forum: http://forum.ultrastardeluxe.org" -LangString page_welcome_title ${LANG_ENGLISH} "Welcome to the UltraStar Deluxe WorldParty Setup Wizard" -LangString page_welcome_txt ${LANG_ENGLISH} "This wizard will guide you through the Installation of UltraStar Deluxe WorldParty. UltraStar Deluxe is a free open source Karaoke game, which can be compared with Singstar.$\n$\r$\n$\rThe UltraStar Deluxe Team and zup3r_vock (WorldParty Mod) wishes you fun.$\n$\rProject website: http://www.ultrastardeluxe.org$\n$\rSupport Forum: http://forum.ultrastardeluxe.org" -LangString page_un_welcome_title ${LANG_ENGLISH} "Welcome to the UltraStar Deluxe WorldParty uninstall wizard" +${LangFileString} page_welcome_title_update "Welcome to the ${name} Update Wizard" +${LangFileString} page_welcome_txt_update "This wizard will guide you through the Update process of ${name}. ${name} is a free open source Karaoke game, which can be compared with Singstar.$\r$\n$\r$\nThe ${publisher} wishes you fun.$\r$\n$\r$\nProject website:$\r$\n${homepage}$\r$\n$\r$\nSupport Forum:$\n$\r${forum}" +${LangFileString} page_welcome_title "Welcome to the ${name} Setup Wizard" +${LangFileString} page_welcome_txt "This wizard will guide you through the Installation of ${name}. ${name} is a free open source Karaoke game, which can be compared with Singstar.$\r$\n$\r$\nThe ${publisher} wishes you fun.$\r$\n$\r$\nProject website:$\r$\n${homepage}$\r$\n$\r$\nSupport Forum:$\r$\n${forum}" +${LangFileString} page_un_welcome_title "Welcome to the ${name} uninstall wizard" ; Components Page: -LangString page_components_info ${LANG_ENGLISH} "Hover the component to get details" +${LangFileString} page_components_info "Hover the component to get details" ; Custom Page -LangString page_settings_fullscreen ${LANG_ENGLISH} "Fullscreen Mode" -LangString page_settings_subtitle ${LANG_ENGLISH} "Specify your favorite settings for UltraStar Deluxe WorldParty." +${LangFileString} page_settings_subtitle "Specify your favorite settings for ${name}." +${LangFileString} page_settings_config_title "${name} Configuration (optional)" +${LangFileString} page_settings_config_info "All settings can also be changed in the GUI later." +${LangFileString} page_settings_fullscreen_label "Fullscreen Mode:" +${LangFileString} page_settings_fullscreen_info "Start game in window or fullscreen?" +${LangFileString} page_settings_language_label "Language:" +${LangFileString} page_settings_language_info "Adjust the GUI language." +${LangFileString} page_settings_resolution_label "Resolution:" +${LangFileString} page_settings_resolution_info "Choose screen resolution/window size." +${LangFileString} page_settings_tabs_label "Tabs:" +${LangFileString} page_settings_tabs_info "Employ a virtual folder structure to show songs?" +${LangFileString} page_settings_sorting_label "Sorting:" +${LangFileString} page_settings_sorting_info "Select criterion to sort songs." +${LangFileString} page_settings_songdir_label "SongDir" +${LangFileString} page_settings_songdir_info "Choose additional song directory for ${name}." ; Finish Page: -LangString page_finish_txt ${LANG_ENGLISH} "UltraStar Deluxe WorldParty was installed successfully on you system.$\n$\r$\n$\rVisit out project website to get latest news and updates." -LangString page_finish_linktxt ${LANG_ENGLISH} "Project website" -LangString page_finish_desktop ${LANG_ENGLISH} "Create Desktop Shortcut?" +${LangFileString} page_finish_txt "${name} was installed successfully on your system.$\r$\n$\r$\nVisit our project website to get latest news and updates." +${LangFileString} page_finish_linktxt "Project website" +${LangFileString} page_finish_desktop "Create Desktop Shortcut?" + +;unused +${LangFileString} page_finish_txt_update "${name} Update has checked for a new version." + ; Start Menu and Shortcuts -LangString sm_shortcut ${LANG_ENGLISH} "Play UltraStar Deluxe WorldParty" -LangString sm_uninstall ${LANG_ENGLISH} "Uninstall" -LangString sm_website ${LANG_ENGLISH} "Website" -LangString sm_license ${LANG_ENGLISH} "License" -LangString sm_readme ${LANG_ENGLISH} "Readme" -LangString sm_songs ${LANG_ENGLISH} "Songs" -LangString sm_documentation ${LANG_ENGLISH} "Documentation" +${LangFileString} sm_shortcut "Play ${name}" +${LangFileString} sm_uninstall "Uninstall" +${LangFileString} sm_website "Website" +${LangFileString} sm_license "License" +${LangFileString} sm_readme "Readme" +${LangFileString} sm_songs "Songs" +${LangFileString} sm_update "Update" +${LangFileString} sm_documentation "Documentation" + +${LangFileString} sc_play "Play" +${LangFileString} sc_desktop "Create Desktop Shortcut" + +; Sections and SectionGroups + +${LangFileString} name_section1 "Main components" +${LangFileString} name_section2 "Songs" +${LangFileString} name_s2_sub1 "Jonathan Coulton" +${LangFileString} name_s2_sub2 "Shearer" +${LangFileString} name_s2_sub3 "Wise Guys" +${LangFileString} name_s2_sub4 "Pornophonique" + +${LangFileString} DESC_Section1 "These are the basic files needed by ${name}" +${LangFileString} DESC_Section2 "You can choose which songs should be downloaded (Requires Internet Connection!)" +${LangFileString} DESC_Section2_sub1 "You can choose which Jonathan Coulton songs (CC by-nc 3.0) should be installed." +${LangFileString} DESC_Section2_sub2 "You can choose which Shearer songs (CC by-nc-sa 2.0 / 3.0) should be installed." +${LangFileString} DESC_Section2_sub3 "You can choose which Wise Guys songs should be installed." +${LangFileString} DESC_Section2_sub4 "You can choose which Pornophonique songs should be installed." + +${LangFileString} DESC_g2Section2 "Download the song 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5)." +${LangFileString} DESC_g2Section3 "Download the song 'Joshua Morin - On The Run' (CC by-sa 2.5)." +${LangFileString} DESC_g2Section4 "Download the song 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0)." +${LangFileString} DESC_g2Section5 "Download the song 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5)." +${LangFileString} DESC_g2Section1 "Download the song 'Bodo Wartke - Liebeslied (Love Song)'." +${LangFileString} DESC_g2Section6 "Download the song 'Pornophonique - Space Invaders (Karaoke)' (CC by-nc-nd 2.0)." + +${LangFileString} DESC_s2_sub1_Section1 "Download the song 'Monkey Shines'." +${LangFileString} DESC_s2_sub1_Section2 "Download the song 'I Crush Everything'." +${LangFileString} DESC_s2_sub1_Section3 "Download the song 'Not About You'." +${LangFileString} DESC_s2_sub1_Section4 "Download the song 'Mr. Fancy Pants'." +${LangFileString} DESC_s2_sub1_Section5 "Download the song 'Big Bad World One'." +${LangFileString} DESC_s2_sub1_Section6 "Download the song 'Flickr [incl. video]'." +${LangFileString} DESC_s2_sub1_Section7 "Download the song 'My Beige Bear'." +${LangFileString} DESC_s2_sub1_Section8 "Download the song 'The Future Soon'." +${LangFileString} DESC_s2_sub1_Section9 "Download the song 'Ikea'." +${LangFileString} DESC_s2_sub1_Section10 "Download the song 'Furry Old Lobster'." +${LangFileString} DESC_s2_sub1_Section11 "Download the song 'Code Monkey [incl. video]'." +${LangFileString} DESC_s2_sub1_Section12 "Download the song 'I´m Your Moon'." +${LangFileString} DESC_s2_sub1_Section13 "Download the song 'First Of May'." +${LangFileString} DESC_s2_sub1_Section14 "Download the song 'Dance, Soterios Johnson, Dance'." +${LangFileString} DESC_s2_sub1_Section15 "Download the song 'A Talk With George'." +${LangFileString} DESC_s2_sub1_Section16 "Download the song 'Creepy Doll [incl. video]'." +${LangFileString} DESC_s2_sub1_Section17 "Download the song 'That Spells DNA'." +${LangFileString} DESC_s2_sub1_Section18 "Download the song 'When You Go'." +${LangFileString} DESC_s2_sub1_Section19 "Download the song 'Better'." +${LangFileString} DESC_s2_sub1_Section20 "Download the song 'Shop Vac'." +${LangFileString} DESC_s2_sub1_Section21 "Download the song 'I Feel Fantastic'." +${LangFileString} DESC_s2_sub1_Section22 "Download the song 'Re: Your Brains'." +${LangFileString} DESC_s2_sub1_Section23 "Download the song 'Skullcrusher Mountain'." +${LangFileString} DESC_s2_sub1_Section24 "Download the song 'Chiron Beta Prime [incl. video]'." + +${LangFileString} DESC_s2_sub2_Section1 "Download the song '69'." +${LangFileString} DESC_s2_sub2_Section2 "Download the song '69 (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section3 "Download the song 'Can't stop it'." +${LangFileString} DESC_s2_sub2_Section4 "Download the song 'Can't stop it (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section5 "Download the song 'In My Hand'." +${LangFileString} DESC_s2_sub2_Section6 "Download the song 'Man Song'." +${LangFileString} DESC_s2_sub2_Section7 "Download the song 'Man Song (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section8 "Download the song 'Stay with me'." +${LangFileString} DESC_s2_sub2_Section9 "Download the song 'Stay with me (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section10 "Download the song 'Consequence Of Dawn'." + +${LangFileString} DESC_s2_sub3_Section1 "Download the song 'Lebendig und kräftig und schärfer'." +${LangFileString} DESC_s2_sub3_Section2 "Download the song 'Mensch, wo bist du?'." +${LangFileString} DESC_s2_sub3_Section3 "Download the song 'Mensch, wo bist du? (Karaoke)'." -LangString sc_play ${LANG_ENGLISH} "Play" -LangString sc_desktop ${LANG_ENGLISH} "Create Desktop Shortcut?" +; Optional Themes +; (not available) \ No newline at end of file diff --git a/installer/languages/German.nsh b/installer/languages/German.nsh index 5052cc6d..bbfa9b9a 100644 --- a/installer/languages/German.nsh +++ b/installer/languages/German.nsh @@ -1,68 +1,188 @@ -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; UltraStar Deluxe WorldParty Installer - Language file: German +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; UltraStar Deluxe Installer - Language file: German ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -LangString abort_install ${LANG_GERMAN} "Willst du die Installation wirklich abbrechen?" -LangString abort_uninstall ${LANG_GERMAN} "Willst du die Deinstallation wirklich abbrechen?" -LangString oninit_running ${LANG_GERMAN} "Die Installation wird bereits ausgefhrt." -LangString oninit_installagain ${LANG_GERMAN} "Bist du sicher, dass du es erneut installieren mchtest?" -LangString oninit_alreadyinstalled ${LANG_GERMAN} "ist bereits installiert" -LangString oninit_closeusdx ${LANG_GERMAN} "kann nicht whrend der Laufzeit deinstalliert werden. Soll es geschlossen werden?" -LangString oninit_updateusdx ${LANG_GERMAN} "Mchtest du das Programm aktualisieren von" -LangString oninit_uninstall ${LANG_GERMAN} "Mchtest du die alte Version entfernen? (empfohlen)" - -LangString update_connect ${LANG_GERMAN} "Mit dem Internet verbinden und nach aktueller Version suchen" -LangString button_next ${LANG_GERMAN} "Weiter >" -LangString button_close ${LANG_GERMAN} "Beenden" -LangString update_information ${LANG_GERMAN} "Du kannst nach einer aktuelleren Version von 'UltraStar Deluxe WorldParty' suchen. Dazu wird eine Verbindung mit dem Internet hergestellt. Wurde eine aktuellere Version gefunden, kann diese anschlieend installiert werden." - -LangString delete_components ${LANG_GERMAN} "Folgende Komponenten ebenfalls entfernen:" -LangString delete_covers ${LANG_GERMAN} "Cover?" -LangString delete_highscores ${LANG_GERMAN} "Statistiken?" -LangString delete_config ${LANG_GERMAN} "Konfiguration?" -LangString delete_screenshots ${LANG_GERMAN} "Screenshots?" -LangString delete_playlists ${LANG_GERMAN} "Playlisten?" -LangString delete_songs ${LANG_GERMAN} "Lieder lschen? WARNUNG: ALLE Dateien im Unterordner 'songs' des Installationsverzeichnisses werden gelscht(!)" - -LangString update_check_older ${LANG_GERMAN} "Deine aktuelle Version $R0 ist veraltet. Die neue Version $1 von UltraStar Deluxe WorldParty ist verfgbar. Mchtest du sie runterladen?" -LangString update_check_equal ${LANG_GERMAN} "Deine aktuelle Version $R0 ist auf dem neusten Stand.$\n$\rKein Update bentigt." -LangString update_check_newer ${LANG_GERMAN} "Deine aktuelle Version $R0 ist neuer als die zurzeit verffentlichte$\n$\rVersion $1 von UltraStar Deluxe WorldParty. Kein Update bentigt." -LangString update_check_failed ${LANG_GERMAN} "Die Aktualisierungsprfung ist fehlgeschlagen. Willst du manuell nach Updates suchen?" +!insertmacro LANGFILE_EXT German + +${LangFileString} error_download_song_info "Fehler beim Herunterladen des Songs \'$0' von: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_song_msg "Fehler beim Herunterladen des Songs \'$0' von: $\r$\n$1$\r$\n$\r$\nKlicke OK um mit der Installation fortzufahren." +${LangFileString} error_download_theme_info "Fehler beim Herunterladen des Designs \'$0' von: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_theme_msg "Fehler beim Herunterladen des Designs \'$0' von: $\r$\n$1$\r$\n$\r$\nKlicke OK um mit der Installation fortzufahren." +${LangFileString} error_download_skin_info "Fehler beim Herunterladen des Skins \'$0' von: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_skin_msg "Fehler beim Herunterladen des Skins \'$0' von: $\r$\n$1$\r$\n$\r$\nKlicke OK um mit der Installation fortzufahren." +${LangFileString} error_download_plugin_info "Fehler beim Herunterladen des Plugins \'$0' von: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_plugin_msg "Fehler beim Herunterladen des Plugins \'$0' von: $\r$\n$1$\r$\n$\r$\nKlicke OK um mit der Installation fortzufahren." + +${LangFileString} abort_install "Willst du die Installation wirklich abbrechen?" +${LangFileString} abort_uninstall "Willst du die Deinstallation wirklich abbrechen?" +${LangFileString} abort_update "Willst du das Updaten wirklich abbrechen?" +${LangFileString} oninit_running "Die Installation wird bereits ausgeführt." +${LangFileString} oninit_updating "Eine Aktualisierung wird bereits ausgeführt." +${LangFileString} oninit_installagain "Bist du sicher, dass du es erneut installieren möchtest?" +${LangFileString} oninit_alreadyinstalled "ist bereits installiert" +${LangFileString} oninit_closeusdx "kann nicht während der Laufzeit deinstalliert werden. Soll es geschlossen werden?" +${LangFileString} oninit_updateusdx "Möchtest du das Programm aktualisieren von" +${LangFileString} oninit_uninstall "Möchtest du die alte Version entfernen? (empfohlen)" + +${LangFileString} update_connect "Mit dem Internet verbinden und nach aktueller Version suchen" +${LangFileString} button_next "Weiter >" +${LangFileString} button_close "Beenden" + +${LangFileString} delete_components "Folgende Komponenten ebenfalls entfernen:" +${LangFileString} delete_covers "Cover" +${LangFileString} delete_highscores "Statistiken" +${LangFileString} delete_config "Konfiguration" +${LangFileString} delete_screenshots "Screenshots" +${LangFileString} delete_playlists "Playlisten" +${LangFileString} delete_songs "Lieder löschen? WARNUNG: ALLE Dateien im Unterordner 'songs' des Installationsverzeichnisses werden gelöscht(!)" + +${LangFileString} update_information "Du kannst nach einer aktuelleren Version von '${name}' suchen. Dazu wird eine Verbindung mit dem Internet hergestellt. Wurde eine aktuellere Version gefunden, kann diese anschließend installiert werden." +${LangFileString} button_check_update "Überprüfen" + +${LangFileString} update_noinstallation_online "Du hast keine Version installiert. Diese Installationsroutine kann die aktuelle Version nicht aktualisieren. Besuche unsere Projektwebseite ${homepage} um nach einer aktuellen Version zu suchen." +${LangFileString} update_noinstallation_offline "Du hast keine Version installiert. Diese Installationsroutine kann eine Aktualisierung nicht installieren. Besuche unsere Projektwebseite ${homepage} um nach einer aktuellen Version zu suchen." +${LangFileString} update_check_offline "Deine aktuelle Version $installed_version ist auf dem neusten Stand. se Installationsroutine kann die aktuelle Version nicht aktualisieren. Besuche unsere Projektwebseite ${homepage} um nach einer aktuellen Version zu suchen." +${LangFileString} update_check_older "Deine aktuelle Version $installed_version ist veraltet. Die neueste Version $online_version von ${name} ist verfügbar. Wähle eine Option aus:" +${LangFileString} update_check_equal "Deine aktuelle Version $installed_version ist auf dem neusten Stand.$\n$\rKein Update benötigt." +${LangFileString} update_check_newer "Deine aktuelle Version $installed_version ist neuer als die zurzeit veröffentlichte$\n$\rVersion $online_version von ${name}. Kein Update benötigt." +${LangFileString} update_check_no "Diese Installationsroutine wird keine Version installieren. Besuche unsere Projektwebseite ${homepage} um nach einer aktuellen Version zu suchen." +${LangFileString} update_check_failed "Die Aktualisierungsprüfung ist fehlgeschlagen. Besuche unsere Projektwebseite ${homepage} um nach einer aktuellen Version zu suchen und manuell diese herunterzuladen." +${LangFileString} update_download_success "Das Herunterladen der neuen Version $online_version war erfolgreich.$\n$\r$\n$\rBeende die Aktualisierung indem du diese Installationsroutine schließt. Die Installation der neuen Version wird am Anschluss gestartet." +${LangFileString} update_download_failed "Das Herunterladen der neuen Version $online_version ist fehlgeschlagen. Bitte, besuche unsere Projektwebseite ${homepage} um nach einer aktuellen Version zu suchen." +${LangFileString} update_download_aborted "Das Herunterladen der neuen Version $online_version wurde abgebrochen. Eine Aktualisierung bleibt aus. Denk daran, besuche unsere Projektwebseite ${homepage} um die neusten Updates und News zu erhalten." +${LangFileString} update_download_invalid_installer "Das Herunterladen der neuen Version $online_version ist fehlgeschlagen. Die heruntergeladene Installationsdatei war fehlerhaft. Dies kann verschiedene Gründe haben wie ein Probleme mit dem Server oder der Webseite, die Datei nicht mehr verfügbar ist oder der Server sich in Wartung befindet.$\n$\r$\n$\rBitte, besuche unsere Projektwebseite ${homepage} um die aktuelle Version manuell herunterzuladen." +${LangFileString} update_download_none "Keine Version zum Herunterladen ausgewählt. Diese Installationsroutine kann keine Aktualisierung durchführen. Besuche unsere Projektwebseite ${homepage} um die neusten Updates und News zu erhalten." +${LangFileString} update_versions_info "Es wurde mindestens eine neue Version von ${name} gefunden. Wähle eine aus um diese zu installieren. Diese wird heruntergeladen und anschließend die Installationsroutine der neuen Version gestartet." +${LangFileString} update_versions_none "Keine" + +${LangFileString} update_download_downloading "Herunterladen: %s " +${LangFileString} update_download_connecting "Verbinden ... " +${LangFileString} update_download_sec "Sekunde" +${LangFileString} update_download_min "Minute" +${LangFileString} update_download_hour "Stunde" +${LangFileString} update_download_multi "n" +${LangFileString} update_download_progress "%dkB (%d%%) von %dkB @ %d.%01dkB/s" +${LangFileString} update_download_remaining " (%d %s%s verbleibend)" +${LangFileString} update_download_remain_sec " (1 Sekunde verbleibend)" +${LangFileString} update_download_remain_min " (1 Minute verbleibend)" +${LangFileString} update_download_remain_hour " (1 hour verbleibend)" +${LangFileString} update_download_remain_secs " (%u Sekunden verbleibend)" +${LangFileString} update_download_remain_mins " (%u Minuten verbleibend)" +${LangFileString} update_download_remain_hours " (%u Stunden verbleibend)" ; Welcome Page: -LangString page_welcome_title_update ${LANG_GERMAN} "Willkommen beim Aktualisierungsassistenten von UltraStar Deluxe WorldParty" -LangString page_welcome_txt_update ${LANG_GERMAN} "Dieser Assistent wird dich durch die Aktualisierung von UltraStar Deluxe WorldParty begleiten. UltraStar Deluxe ist ein kostenloses quelloffenes Karaokespiel, welches Singstar hnelt. $\n$\r$\n$\rDas UltraStar Deluxe Team und zup3r_vock (WorldParty Mod) wnscht viel Spa.$\n$\rProjekthomepage: http://www.ultrastardeluxe.org http://www.ultrastar-es.org$\n$\rSupport Forum: http://forum.ultrastardeluxe.org" - -LangString page_welcome_title ${LANG_GERMAN} "Willkommen zur Installationsroutine von UltraStar Deluxe WorldParty" -LangString page_welcome_txt ${LANG_GERMAN} "Dieser Assistent wird dich durch die Installation von UltraStar Deluxe WorldParty begleiten. UltraStar Deluxe ist ein kostenloses quelloffenes Karaokespiel, welches Singstar hnelt. $\n$\r$\n$\rDas UltraStar Deluxe Team und zup3r_vock (WorldParty Mod) wnscht viel Spa.$\n$\rProjekthomepage: http://www.ultrastardeluxe.org http://www.ultrastar-es.org$\n$\rSupport Forum: http://forum.ultrastardeluxe.org" - -LangString page_un_welcome_title ${LANG_GERMAN} "Willkommen zur Deinstallation von UltraStar Deluxe WorldParty" +${LangFileString} page_welcome_title_update "Willkommen beim Aktualisierungsassistenten von ${name}" +${LangFileString} page_welcome_txt_update "Dieser Assistent wird dich durch die Aktualisierung von ${name} begleiten. ${name} ist ein kostenloses quelloffenes Karaokespiel, welches Singstar ähnelt. $\n$\r$\n$\rDas ${publisher} wünscht viel Spaß.$\n$\r$\n$\rProjektseite:$\n$\r${homepage}$\n$\r$\n$\rSupport Forum:$\n$\r${forum}" +${LangFileString} page_welcome_title "Willkommen zur Installationsroutine von ${name}" +${LangFileString} page_welcome_txt "Dieser Assistent wird dich durch die Installation von ${name} begleiten. ${name} ist ein kostenloses quelloffenes Karaokespiel, welches Singstar ähnelt. $\n$\r$\n$\rDas ${publisher} wünscht viel Spaß.$\n$\r$\n$\rProjektseite:$\n$\r${homepage}$\n$\r$\n$\rSupport Forum:$\n$\r${forum}" +${LangFileString} page_un_welcome_title "Willkommen zur Deinstallation von ${name}" ; Components Page: -LangString page_components_info ${LANG_GERMAN} "Schiebe den Mauszeiger ber die Komponente um Details einzusehen" +${LangFileString} page_components_info "Bewege den Mauszeiger über die Komponente um Details einzusehen" ; Custom Page -LangString page_settings_fullscreen ${LANG_GERMAN} "Vollbild Modus:" -LangString page_settings_subtitle ${LANG_GERMAN} "Lege deine favorisierten Einstellungen fr UltraStar Deluxe WorldParty fest." +${LangFileString} page_settings_subtitle "Lege deine favorisierten Einstellungen für ${name} fest." +${LangFileString} page_settings_config_title "${name} Konfiguration (Optional)" +${LangFileString} page_settings_config_info "Alle Einstellungen können nachträglich im Spielmenü geändert werden." +${LangFileString} page_settings_fullscreen_label "Vollbild Modus:" +${LangFileString} page_settings_fullscreen_info "Spiel im Fenster oder Vollbild starten?" +${LangFileString} page_settings_language_label "Sprache:" +${LangFileString} page_settings_language_info "Passe die Sprache des Menüs an." +${LangFileString} page_settings_resolution_label "Auflösung:" +${LangFileString} page_settings_resolution_info "Wähle die Auflösung/Fenstergröße aus." +${LangFileString} page_settings_tabs_label "Ordnerstruktur:" +${LangFileString} page_settings_tabs_info "Eine virtuelle Ordnerstruktur zum Anzeigen der Lieder verwenden?" +${LangFileString} page_settings_sorting_label "Sortierung:" +${LangFileString} page_settings_sorting_info "Kriterium zum Sortieren der Lieder wählen." +${LangFileString} page_settings_songdir_label "SongDir" +${LangFileString} page_settings_songdir_info "Hier kann ein weiterer Ordner mit Songs für ${name} angegeben werden." ; Finish Page: -LangString page_finish_txt ${LANG_GERMAN} "UltraStar Deluxe WorldParty wurde erfolgreich auf Ihrem System installiert.$\n$\r$\n$\rBesuche unsere Projektwebseite um die neusten Updates und News zu erhalten." -LangString page_finish_linktxt ${LANG_GERMAN} "Projektwebseite" -LangString page_finish_desktop ${LANG_GERMAN} "Verknpfung auf dem Desktop erstellen?" +${LangFileString} page_finish_txt "${name} wurde erfolgreich auf Ihrem System installiert.$\n$\r$\n$\rBesuche unsere Projektwebseite um die neusten Updates und News zu erhalten." +${LangFileString} page_finish_linktxt "Projektwebseite" +${LangFileString} page_finish_desktop "Verknüpfung auf dem Desktop erstellen?" + +;unused +${LangFileString} page_finish_txt_update "${name} Update hat nach einer neuen Version gesucht." -; Start Menu and Shortcuts -LangString sm_website ${LANG_GERMAN} "Webseite" -LangString sm_uninstall ${LANG_GERMAN} "Deinstallieren" -LangString sm_shortcut ${LANG_GERMAN} "UltraStar Deluxe WorldParty spielen" -LangString sm_license ${LANG_GERMAN} "Lizenz" -LangString sm_readme ${LANG_GERMAN} "Lies mich" -LangString sm_songs ${LANG_GERMAN} "Songs" -LangString sm_documentation ${LANG_GERMAN} "Dokumentation" +; Start Menu and Shortcuts -LangString sc_play ${LANG_GERMAN} "Spielen" -LangString sc_desktop ${LANG_GERMAN} "Verknpfung auf dem Desktop erstellen?" +${LangFileString} sm_shortcut "${name} spielen" +${LangFileString} sm_uninstall "Deinstallieren" +${LangFileString} sm_website "Webseite" +${LangFileString} sm_license "Lizenz" +${LangFileString} sm_readme "Lies mich" +${LangFileString} sm_songs "Songs" +${LangFileString} sm_update "Updaten" +${LangFileString} sm_documentation "Dokumentation" + +${LangFileString} sc_play "Spielen" +${LangFileString} sc_desktop "Verknüpfung auf dem Desktop erstellen" + +; Sections and SectionGroups + +${LangFileString} name_section1 "Hauptkomponenten" +${LangFileString} name_section2 "Songs" +${LangFileString} name_s2_sub1 "Jonathan Coulton" +${LangFileString} name_s2_sub2 "Shearer" +${LangFileString} name_s2_sub3 "Wise Guys" +${LangFileString} name_s2_sub4 "Pornophonique" + +${LangFileString} DESC_Section1 "Dies sind die von ${name} benötigten Grunddateien" +${LangFileString} DESC_Section2 "Hier können Songs zum Herunterladen gewählt werden. (Benötigt aktive Internetverbindung!)" +${LangFileString} DESC_Section2_sub1 "Hier können Jonathan Coulton Songs (CC by-nc 3.0) zum Herunterladen gewählt werden." +${LangFileString} DESC_Section2_sub2 "Hier können Shearer Songs (CC by-nc-sa 2.0 / 3.0) zum Herunterladen gewählt werden." +${LangFileString} DESC_Section2_sub3 "Hier können Wise Guys Songs zum Herunterladen gewählt werden." +${LangFileString} DESC_Section2_sub4 "Hier können Pornophonique Songs zum Herunterladen gewählt werden." + +${LangFileString} DESC_g2Section2 "Lädt das Lied 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5) herunter." +${LangFileString} DESC_g2Section3 "Lädt das Lied 'Joshua Morin - On The Run' (CC by-sa 2.5) herunter." +${LangFileString} DESC_g2Section4 "Lädt das Lied 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0) herunter." +${LangFileString} DESC_g2Section5 "Lädt das Lied 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5) herunter." +${LangFileString} DESC_g2Section1 "Lädt das Lied 'Bodo Wartke - Liebeslied (Love Song)' herunter." +${LangFileString} DESC_g2Section6 "Lädt das Lied 'Pornophonique - Space Invaders (Karaoke)' (CC by-nc-nd 2.0) herunter." + +${LangFileString} DESC_s2_sub1_Section1 "Lädt das Lied 'Monkey Shines' herunter." +${LangFileString} DESC_s2_sub1_Section2 "Lädt das Lied 'I Crush Everything' herunter." +${LangFileString} DESC_s2_sub1_Section3 "Lädt das Lied 'Not About You' herunter." +${LangFileString} DESC_s2_sub1_Section4 "Lädt das Lied 'Mr. Fancy Pants' herunter." +${LangFileString} DESC_s2_sub1_Section5 "Lädt das Lied 'Big Bad World One' herunter." +${LangFileString} DESC_s2_sub1_Section6 "Lädt das Lied 'Flickr [inkl. Video]' herunter." +${LangFileString} DESC_s2_sub1_Section7 "Lädt das Lied 'My Beige Bear' herunter." +${LangFileString} DESC_s2_sub1_Section8 "Lädt das Lied 'The Future Soon' herunter." +${LangFileString} DESC_s2_sub1_Section9 "Lädt das Lied 'Ikea' herunter." +${LangFileString} DESC_s2_sub1_Section10 "Lädt das Lied 'Furry Old Lobster' herunter." +${LangFileString} DESC_s2_sub1_Section11 "Lädt das Lied 'Code Monkey [inkl. Video]' herunter." +${LangFileString} DESC_s2_sub1_Section12 "Lädt das Lied 'I´m Your Moon' herunter." +${LangFileString} DESC_s2_sub1_Section13 "Lädt das Lied 'First Of May' herunter." +${LangFileString} DESC_s2_sub1_Section14 "Lädt das Lied 'Dance, Soterios Johnson, Dance' herunter." +${LangFileString} DESC_s2_sub1_Section15 "Lädt das Lied 'A Talk With George' herunter." +${LangFileString} DESC_s2_sub1_Section16 "Lädt das Lied 'Creepy Doll [inkl. Video]' herunter." +${LangFileString} DESC_s2_sub1_Section17 "Lädt das Lied 'That Spells DNA' herunter." +${LangFileString} DESC_s2_sub1_Section18 "Lädt das Lied 'When You Go' herunter." +${LangFileString} DESC_s2_sub1_Section19 "Lädt das Lied 'Better' herunter." +${LangFileString} DESC_s2_sub1_Section20 "Lädt das Lied 'Shop Vac' herunter." +${LangFileString} DESC_s2_sub1_Section21 "Lädt das Lied 'I Feel Fantastic' herunter." +${LangFileString} DESC_s2_sub1_Section22 "Lädt das Lied 'Re: Your Brains' herunter." +${LangFileString} DESC_s2_sub1_Section23 "Lädt das Lied 'Skullcrusher Mountain' herunter." +${LangFileString} DESC_s2_sub1_Section24 "Lädt das Lied 'Chiron Beta Prime [inkl. Video]' herunter." + +${LangFileString} DESC_s2_sub2_Section1 "Lädt das Lied '69' herunter." +${LangFileString} DESC_s2_sub2_Section2 "Lädt das Lied '69 (Karaoke)' herunter." +${LangFileString} DESC_s2_sub2_Section3 "Lädt das Lied 'Can't stop it' herunter." +${LangFileString} DESC_s2_sub2_Section4 "Lädt das Lied 'Can't stop it (Karaoke)' herunter." +${LangFileString} DESC_s2_sub2_Section5 "Lädt das Lied 'In My Hand' herunter." +${LangFileString} DESC_s2_sub2_Section6 "Lädt das Lied 'Man Song' herunter." +${LangFileString} DESC_s2_sub2_Section7 "Lädt das Lied 'Man Song (Karaoke)' herunter." +${LangFileString} DESC_s2_sub2_Section8 "Lädt das Lied 'Stay with me' herunter." +${LangFileString} DESC_s2_sub2_Section9 "Lädt das Lied 'Stay with me (Karaoke)' herunter." +${LangFileString} DESC_s2_sub2_Section10 "Lädt das Lied 'Consequence Of Dawn' herunter." + +${LangFileString} DESC_s2_sub3_Section1 "Lädt das Lied 'Lebendig und kräftig und schärfer' herunter." +${LangFileString} DESC_s2_sub3_Section2 "Lädt das Lied 'Mensch, wo bist du?' herunter." +${LangFileString} DESC_s2_sub3_Section3 "Lädt das Lied 'Mensch, wo bist du? (Karaoke)' herunter." diff --git a/installer/languages/Hungarian.nsh b/installer/languages/Hungarian.nsh index e63b25f8..674ceaa6 100644 --- a/installer/languages/Hungarian.nsh +++ b/installer/languages/Hungarian.nsh @@ -1,67 +1,191 @@ -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; UltraStar Deluxe WorldParty Installer - Language file: Hungarian +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; UltraStar Deluxe Installer - Language file: Hungarian ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ; Translation by Gergely BOR . -LangString abort_install ${LANG_HUNGARIAN} "Biztosan megszaktja a teleptst?" -LangString abort_uninstall ${LANG_HUNGARIAN} "Biztosan megszaktja a program eltvoltst?" -LangString oninit_running ${LANG_HUNGARIAN} "A telepts mr folyamatban van." -LangString oninit_installagain ${LANG_HUNGARIAN} "Biztos abban, hogy mg egyszer telepteni szeretn?" -LangString oninit_alreadyinstalled ${LANG_HUNGARIAN} "mr teleptve van" -LangString oninit_closeusdx ${LANG_HUNGARIAN} "nem eltvolthat, ha mg fut! Kvnja a program bezrst?" -LangString oninit_updateusdx ${LANG_HUNGARIAN} "Kvnja-e a programot frissteni errl a helyrl:" -LangString oninit_uninstall ${LANG_HUNGARIAN} "Do you want to uninstall the old version? (recommended)" - -LangString update_connect ${LANG_HUNGARIAN} "j verzi keresse az interneten" -LangString button_next ${LANG_HUNGARIAN} "Tovbb >" -LangString button_close ${LANG_HUNGARIAN} "Bezrs" -LangString update_information ${LANG_HUNGARIAN} "Ellenrizheti, hogy van-e j 'UltraStar Deluxe WorldParty'-verzi. Ehhez internetkapcsolat szksges. Ha van j verzi, az ezt kveten telepthet." - -LangString delete_components ${LANG_HUNGARIAN} "Also delete the following components:" -LangString delete_covers ${LANG_HUNGARIAN} "Trljk a bortkat?" -LangString delete_highscores ${LANG_HUNGARIAN} "Trljk a pontszmokat?" -LangString delete_config ${LANG_HUNGARIAN} "Config?" -LangString delete_screenshots ${LANG_HUNGARIAN} "Screenshots?" -LangString delete_playlists ${LANG_HUNGARIAN} "Playlists?" -LangString delete_songs ${LANG_HUNGARIAN} "Trljk a dalokat is? WARNING: ALL files within the InstallationDir\songs folder will be removed(!)" - -LangString update_check_older ${LANG_HUNGARIAN} "Az n gpn teleptett verzinl ($R0) van mr jabb ($1). Kvnja frissteni?" -LangString update_check_equal ${LANG_HUNGARIAN} "Az n gpn a legfrissebb verzi ($R0) van teleptve. Frissts nem szksges." -LangString update_check_newer ${LANG_HUNGARIAN} "Az n gpn teleptett verzi ($R0) frissebb, mint a jelenlegi kiads ($1). Frissts nem szksges." -LangString update_check_failed ${LANG_HUNGARIAN} "Az ellenrzs sikertelen. Kvnja betlteni a program weboldalt, hogy ellenrizhesse hogy van-e frissts?" +!insertmacro LANGFILE_EXT Hungarian + +;TODO ${LangFileString} error_download_song_info "Error downloading song \'$0' from: $\r$\n$1$\r$\n$\r$\n" +;TODO ${LangFileString} error_download_song_msg "Error downloading song: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +;TODO ${LangFileString} error_download_theme_info "Error downloading theme \'$0' from: $\r$\n$1$\r$\n$\r$\n" +;TODO ${LangFileString} error_download_theme_msg "Error downloading theme: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +;TODO ${LangFileString} error_download_skin_info "Error downloading skin \'$0' from: $\r$\n$1$\r$\n$\r$\n" +;TODO ${LangFileString} error_download_skin_msg "Error downloading skin: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +;TODO ${LangFileString} error_download_plugin_info "Error downloading plugin \'$0' from: $\r$\n$1$\r$\n$\r$\n" +;TODO ${LangFileString} error_download_plugin_msg "Error downloading plugin: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." + +${LangFileString} abort_install "Biztosan megszakítja a telepítést?" +${LangFileString} abort_uninstall "Biztosan megszakítja a program eltávolítását?" +;TODO ${LangFileString} abort_update "Are you sure to abort the update?" +${LangFileString} oninit_running "A telepítés már folyamatban van." +;TODO ${LangFileString} oninit_updating "An update is already running." +${LangFileString} oninit_installagain "Biztos abban, hogy még egyszer telepíteni szeretné?" +${LangFileString} oninit_alreadyinstalled "már telepítve van" +${LangFileString} oninit_closeusdx "nem eltávolítható, ha még fut! Kívánja a program bezárását?" +${LangFileString} oninit_updateusdx "Kívánja-e a programot frissíteni errõl a helyrõl:" +${LangFileString} oninit_uninstall "Do you want to uninstall the old version? (recommended)" + +${LangFileString} update_connect "Új verzió keresése az interneten" +${LangFileString} button_next "Tovább >" +${LangFileString} button_close "Bezárás" +${LangFileString} update_information "Ellenõrizheti, hogy van-e új '${name}'-verzió. Ehhez internetkapcsolat szükséges. Ha van új verzió, az ezt követõen telepíthetõ." +;TODO ${LangFileString} button_check_update "Check" + +${LangFileString} delete_components "Also delete the following components:" +${LangFileString} delete_covers "Töröljük a borítókat?" +${LangFileString} delete_highscores "Töröljük a pontszámokat?" +${LangFileString} delete_config "Config?" +${LangFileString} delete_screenshots "Screenshots?" +${LangFileString} delete_playlists "Playlists?" +${LangFileString} delete_songs "Töröljük a dalokat is? WARNING: ALL files within the InstallationDir\songs folder will be removed(!)" + +;TODO ${LangFileString} update_noinstallation_online "You have no version installed. The current installer cannot update your version. Check our website ${homepage} for a new version." +;TODO ${LangFileString} update_noinstallation_offline "You have no version installed. The current installer/updater cannot install a version. Check our website ${homepage} for a version." +;TODO ${LangFileString} update_check_offline "Your version $installed_version is up-to-date. The current installer cannot update your version. Visit our project website to get latest news and updates." +${LangFileString} update_check_older "Az Ön gépén telepített verziónál ($installed_version) van már újabb (online_version). Kívánja frissíteni?" +${LangFileString} update_check_equal "Az Ön gépén a legfrissebb verzió ($installed_version) van telepítve. Frissítés nem szükséges." +${LangFileString} update_check_newer "Az Ön gépén telepített verzió ($installed_version) frissebb, mint a jelenlegi kiadás (online_version). Frissítés nem szükséges." +;TODO ${LangFileString} update_check_no "The current updater/installer won't install a version. Check our website ${homepage} for a new version." +${LangFileString} update_check_failed "Az ellenõrzés sikertelen. Kívánja betölteni a program weboldalát, hogy ellenõrizhesse hogy van-e frissítés?" +;TODO ${LangFileString} update_download_success "The download of the new version $online_version succeeded.$\r$\n$\r$\nFinish the update by closing this updater. The new installation will be started right after." +;TODO ${LangFileString} update_download_failed "The download of the new version $online_version failed. The installer could not be downloaded.$\r$\n$\r$\nPlease, visit our website ${homepage} for the new version." +;TODO ${LangFileString} update_download_aborted "The download of the new version $online_version was aborted. Nothing will be updated. Remember, visit our website ${homepage} for latest news and updates." +;TODO ${LangFileString} update_download_invalid_installer "The download of the new version $online_version failed. The downloaded installer was invalid. This can happen if the server/website has some issues, does not exist anymore or is in maintenance mode.$\r$\n$\r$\nPlease, visit our website ${homepage} and download the installer manually." +;TODO ${LangFileString} update_download_none "No version to download selected. The current installer cannot update your version. Check our website ${homepage} for latest news and updates." +;TODO ${LangFileString} update_versions_info "At least one new version of ${name} has been found. Please, select a specific version and choose to update. This version will be downloaded and the installation will be started afterwards." +;TODO ${LangFileString} update_versions_none "None" + +;TODO ${LangFileString} update_download_downloading "Downloading %s " +;TODO ${LangFileString} update_download_connecting "Connecting ... " +;TODO ${LangFileString} update_download_sec "sec" +;TODO ${LangFileString} update_download_min "min" +;TODO ${LangFileString} update_download_hour "hour" +;TODO ${LangFileString} update_download_multi "s" +;TODO ${LangFileString} update_download_progress "%dkiB (%d%%) of %dkiB @ %d.%02dkiB/s" +;TODO ${LangFileString} update_download_remaining " (%d %s%s remaining)" +;TODO ${LangFileString} update_download_remain_sec " (1 second remaining)" +;TODO ${LangFileString} update_download_remain_min " (1 minute remaining)" +;TODO ${LangFileString} update_download_remain_hour " (1 hour remaining)" +;TODO ${LangFileString} update_download_remain_secs " (%u seconds remaining)" +;TODO ${LangFileString} update_download_remain_mins " (%u minutes remaining)" +;TODO ${LangFileString} update_download_remain_hours " (%u hours remaining)" ; Welcome Page: -LangString page_welcome_title_update ${LANG_HUNGARIAN} "dvzli nt az UltraStar Deluxe WorldParty frisstsi varzslja!" -LangString page_welcome_txt_update ${LANG_HUNGARIAN} "Ez a varzsl vgigvezeti nt az UltraStar Deluxe WorldParty frisstsi folyamatn. Az UltraStar Deluxe egy ingyenes s szabad karaokeprogram, olyan mint a Singstar.$\n$\r$\n$\rAz UltraStar Deluxe csapata s zup3r_vock (WorldParty Mod) j szrakozst kvn!$\n$\rA projekt weboldala: http://www.ultrastardeluxe.org/ http://www.ultrastar-es.org/$\n$\rTmogats a frumunkon: http://forum.ultrastardeluxe.org/" -LangString page_welcome_title ${LANG_HUNGARIAN} "dvzli nt az UltraStar Deluxe WorldParty teleptsi varzslja!" -LangString page_welcome_txt ${LANG_HUNGARIAN} "Ez a varzsl vgigvezeti nt az UltraStar Deluxe WorldParty teleptsi folyamatn. Az UltraStar Deluxe egy ingyenes s szabad karaokeprogram, olyan mint a Singstar.$\n$\r$\n$\rAz UltraStar Deluxe csapata s zup3r_vock (WorldParty Mod) j szrakozst kvn!$\n$\rA projekt weboldala: http://www.ultrastardeluxe.org/ http://www.ultrastar-es.org/$\n$\rTmogats a frumunkon: http://forum.ultrastardeluxe.org/" -LangString page_un_welcome_title ${LANG_HUNGARIAN} "dvzli nt az UltraStar Deluxe WorldParty eltvoltsi varzslja!" +${LangFileString} page_welcome_title_update "Üdvözli Önt az ${name} frissítési varázslója!" +${LangFileString} page_welcome_txt_update "Ez a varázsló végigvezeti Önt az ${name} frissítési folyamatán. Az ${name} egy ingyenes és szabad karaokeprogram, olyan mint a Singstar.$\r$\n$\r$\n${publisher} csapata jó szórakozást kíván!$\r$\n$\r$\nA projekt weboldala:$\n$\r${homepage}$\r$\n$\r$\nTámogatás a fórumunkon:$\n$\r${forum}" +${LangFileString} page_welcome_title "Üdvözli Önt az ${name} telepítési varázslója!" +${LangFileString} page_welcome_txt "Ez a varázsló végigvezeti Önt az ${name} telepítési folyamatán. Az ${name} egy ingyenes és szabad karaokeprogram, olyan mint a Singstar.$\r$\n$\r$\n${publisher} csapata jó szórakozást kíván!$\r$\n$\r$\nA projekt weboldala:$\n$\r${homepage}$\r$\n$\r$\nTámogatás a fórumunkon:$\n$\r${forum}" +${LangFileString} page_un_welcome_title "Üdvözli Önt az ${name} eltávolítási varázslója!" ; Components Page: -LangString page_components_info ${LANG_HUNGARIAN} "Rszletes informcirt vigye az egeret a komponens fl" +${LangFileString} page_components_info "Részletes információért vigye az egeret a komponens fölé" ; Custom Page -LangString page_settings_fullscreen ${LANG_HUNGARIAN} "Teljes kpernys zemmd" -LangString page_settings_subtitle ${LANG_HUNGARIAN} "Adja meg a kedvenc UltraStar Deluxe WorldParty-belltst." +${LangFileString} page_settings_subtitle "Adja meg a kedvenc ${name}-beállítását." +;TODO ${LangFileString} page_settings_config_title "${name} Configuration (optional)" +;TODO ${LangFileString} page_settings_config_info "All settings can also be changed in the GUI later." +${LangFileString} page_settings_fullscreen_label "Teljes képernyõs üzemmód:" +;TODO ${LangFileString} page_settings_fullscreen_info "Start game in window or fullscreen?" +${LangFileString} page_settings_language_label "Nyelv:" +;TODO ${LangFileString} page_settings_language_info "Adjust the GUI language." +${LangFileString} page_settings_resolution_label "Felbontás:" +;TODO ${LangFileString} page_settings_resolution_info "Choose screen resolution/window size." +;TODO ${LangFileString} page_settings_tabs_label "Tabs:" +;TODO ${LangFileString} page_settings_tabs_info "Employ a virtual folder structure to show songs?" +;TODO ${LangFileString} page_settings_sorting_label "Sorting:" +;TODO ${LangFileString} page_settings_sorting_info "Select criterion to sort songs." +;TODO ${LangFileString} page_settings_songdir_label "SongDir" +;TODO ${LangFileString} page_settings_songdir_info "Choose additional song directory for ${name}." ; Finish Page: -LangString page_finish_txt ${LANG_HUNGARIAN} "Az UltraStar Deluxe WorldParty teleptse sikeresen befejezdtt.$\n$\r$\n$\rHa kvncsi a legfrissebb hrekre s frisstsekre, krjk ltogassa meg projektnk weboldalt." -LangString page_finish_linktxt ${LANG_HUNGARIAN} "A projekt weboldala" -LangString page_finish_desktop ${LANG_HUNGARIAN} "Tegynk egy parancsikont az asztalra?" +${LangFileString} page_finish_txt "Az ${name} telepítése sikeresen befejezõdött.$\r$\n$\r$\nHa kíváncsi a legfrissebb hírekre és frissítésekre, kérjük látogassa meg projektünk weboldalát." +${LangFileString} page_finish_linktxt "A projekt weboldala" +${LangFileString} page_finish_desktop "Tegyünk egy parancsikont az asztalra?" + +;unused +;TODO ${LangFileString} page_finish_txt_update "${name} Update has checked for a new version." ; Start Menu and Shortcuts -LangString sm_shortcut ${LANG_HUNGARIAN} "UltraStar Deluxe WorldParty karaoke" -LangString sm_uninstall ${LANG_HUNGARIAN} "Eltvolts" -LangString sm_website ${LANG_HUNGARIAN} "Weboldal" -LangString sm_license ${LANG_HUNGARIAN} "Licensz" -LangString sm_readme ${LANG_HUNGARIAN} "OlvassEl" -LangString sm_songs ${LANG_HUNGARIAN} "Dalok" -LangString sm_documentation ${LANG_HUNGARIAN} "Dokumentci" +${LangFileString} sm_shortcut "${name} karaoke" +${LangFileString} sm_uninstall "Eltávolítás" +${LangFileString} sm_website "Weboldal" +${LangFileString} sm_license "Licensz" +${LangFileString} sm_readme "OlvassEl" +${LangFileString} sm_songs "Dalok" +;TODO ${LangFileString} sm_update "Update" +${LangFileString} sm_documentation "Dokumentáció" + +${LangFileString} sc_play "Játék" +${LangFileString} sc_desktop "Tegyünk egy parancsikont az asztalra?" + +; Sections and SectionGroups + +${LangFileString} name_section1 "Fõ komponensek" +${LangFileString} name_section2 "Dalok" +${LangFileString} name_s2_sub1 "Jonathan Coulton" +${LangFileString} name_s2_sub2 "Shearer" +${LangFileString} name_s2_sub3 "Wise Guys" +${LangFileString} name_s2_sub4 "Pornophonique" + +${LangFileString} DESC_Section1 "Azok a fájlok, melyek mindenképpen szükségesek az ${name} futtatásához." +${LangFileString} DESC_Section2 "Kiválaszthatja, hogy milyen dalok legyenek telepítve." +${LangFileString} DESC_Section2_sub1 "Kiválaszthatja, hogy mely Jonathan Coulton-dalok (CC by-nc 3.0) legyenek telepítve." +${LangFileString} DESC_Section2_sub2 "Kiválaszthatja, hogy mely Shearer-dalok (CC by-nc-sa 2.0 / 3.0) legyenek telepítve." +${LangFileString} DESC_Section2_sub3 "Kiválaszthatja, hogy mely Wise Guys-dalok legyenek telepítve." +${LangFileString} DESC_Section2_sub4 "Kiválaszthatja, hogy mely Pornophonique-dalok legyenek telepítve." +${LangFileString} DESC_Section3 "Kiválaszthatja, hogy milyen témák legyenek telepítve. A témák használatával a program grafikai megjelenése változik meg. A témák telepítése nem kötelezõ." + +${LangFileString} DESC_g2Section2 "Telepítésre kerül a 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5) címu dal." +${LangFileString} DESC_g2Section3 "Telepítésre kerül a 'Joshua Morin - On The Run' (CC by-sa 2.5) címu dal." +${LangFileString} DESC_g2Section4 "Telepítésre kerül a 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0) címu dal." +${LangFileString} DESC_g2Section5 "Telepítésre kerül a 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5) címu dal." +${LangFileString} DESC_g2Section1 "Telepítésre kerül a 'Bodo Wartke - Liebeslied (Love Song)' címu dal." +${LangFileString} DESC_g2Section6 "Telepítésre kerül a 'Pornophonique - Space Invaders (Karaoke)' (CC by-nc-nd 2.0) címu dal." + +${LangFileString} DESC_s2_sub1_Section1 "Telepítésre kerül a 'Monkey Shines' címu dal." +${LangFileString} DESC_s2_sub1_Section2 "Telepítésre kerül a 'I Crush Everything' címu dal." +${LangFileString} DESC_s2_sub1_Section3 "Telepítésre kerül a 'Not About You'." +${LangFileString} DESC_s2_sub1_Section4 "Telepítésre kerül a 'Mr. Fancy Pants' címu dal." +${LangFileString} DESC_s2_sub1_Section5 "Telepítésre kerül a 'Big Bad World One' címu dal." +${LangFileString} DESC_s2_sub1_Section6 "Telepítésre kerül a 'Flickr' címu dal (videóval)." +${LangFileString} DESC_s2_sub1_Section7 "Telepítésre kerül a 'My Beige Bear' címu dal." +${LangFileString} DESC_s2_sub1_Section8 "Telepítésre kerül a 'The Future Soon' címu dal." +${LangFileString} DESC_s2_sub1_Section9 "Telepítésre kerül a 'Ikea' címu dal." +${LangFileString} DESC_s2_sub1_Section10 "Telepítésre kerül a 'Furry Old Lobster' címu dal." +${LangFileString} DESC_s2_sub1_Section11 "Telepítésre kerül a 'Code Monkey' címu dal (videóval)." +${LangFileString} DESC_s2_sub1_Section12 "Telepítésre kerül a 'I'm Your Moon' címu dal." +${LangFileString} DESC_s2_sub1_Section13 "Telepítésre kerül a 'First Of May' címu dal." +${LangFileString} DESC_s2_sub1_Section14 "Telepítésre kerül a 'Dance, Soterios Johnson, Dance' címu dal." +${LangFileString} DESC_s2_sub1_Section15 "Telepítésre kerül a 'A Talk With George' címu dal." +${LangFileString} DESC_s2_sub1_Section16 "Telepítésre kerül a 'Creepy Doll' címu dal (videóval)." +${LangFileString} DESC_s2_sub1_Section17 "Telepítésre kerül a 'That Spells DNA' címu dal." +${LangFileString} DESC_s2_sub1_Section18 "Telepítésre kerül a 'When You Go' címu dal." +${LangFileString} DESC_s2_sub1_Section19 "Telepítésre kerül a 'Better' címu dal." +${LangFileString} DESC_s2_sub1_Section20 "Telepítésre kerül a 'Shop Vac' címu dal." +${LangFileString} DESC_s2_sub1_Section21 "Telepítésre kerül a 'I Feel Fantastic' címu dal." +${LangFileString} DESC_s2_sub1_Section22 "Telepítésre kerül a 'Re: Your Brains' címu dal." +${LangFileString} DESC_s2_sub1_Section23 "Telepítésre kerül a 'Skullcrusher Mountain' címu dal." +${LangFileString} DESC_s2_sub1_Section24 "Telepítésre kerül a 'Chiron Beta Prime' címu dal (videóval)." + +${LangFileString} DESC_s2_sub2_Section1 "Telepítésre kerül a '69' címu dal." +${LangFileString} DESC_s2_sub2_Section2 "Telepítésre kerül a '69 (Karaoke)' címu dal." +${LangFileString} DESC_s2_sub2_Section3 "Telepítésre kerül a 'Can't stop it' címu dal." +${LangFileString} DESC_s2_sub2_Section4 "Telepítésre kerül a 'Can't stop it (Karaoke)' címu dal." +${LangFileString} DESC_s2_sub2_Section5 "Telepítésre kerül a 'In My Hand' címu dal." +${LangFileString} DESC_s2_sub2_Section6 "Telepítésre kerül a 'Man Song' címu dal." +${LangFileString} DESC_s2_sub2_Section7 "Telepítésre kerül a 'Man Song (Karaoke)' címu dal." +${LangFileString} DESC_s2_sub2_Section8 "Telepítésre kerül a 'Stay with me' címu dal." +${LangFileString} DESC_s2_sub2_Section9 "Telepítésre kerül a 'Stay with me (Karaoke)' címu dal." +${LangFileString} DESC_s2_sub2_Section10 "Telepítésre kerül a 'Consequence Of Dawn' címu dal." + +${LangFileString} DESC_s2_sub3_Section1 "Telepítésre kerül a 'Lebendig und kräftig und schärfer' címu dal." +${LangFileString} DESC_s2_sub3_Section2 "Telepítésre kerül a 'Mensch, wo bist du?' címu dal." +${LangFileString} DESC_s2_sub3_Section3 "Telepítésre kerül a 'Mensch, wo bist du? (Karaoke)' címu dal." -LangString sc_play ${LANG_HUNGARIAN} "Jtk" -LangString sc_desktop ${LANG_HUNGARIAN} "Tegynk egy parancsikont az asztalra?" +; Optional Themes +; (not available) diff --git a/installer/languages/Polish.nsh b/installer/languages/Polish.nsh index d0016be1..67b6fa6a 100644 --- a/installer/languages/Polish.nsh +++ b/installer/languages/Polish.nsh @@ -1,66 +1,188 @@ +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; UltraStar Deluxe Installer - Language file: Polish ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; UltraStar Deluxe WorldParty Installer - Language file: Polish -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -LangString abort_install ${LANG_POLISH} "Czy jeste pewien e chcesz zatrzyma instalacj ?" -LangString abort_uninstall ${LANG_POLISH} "Czy jeste pewien e chcesz zatrzyma odinstalowywanie ?" -LangString oninit_running ${LANG_POLISH} "Instajacja jest ju uruchomiona." -LangString oninit_installagain ${LANG_POLISH} "Jeste pewien e chcesz zainstalowa jeszcze raz ?" -LangString oninit_alreadyinstalled ${LANG_POLISH} "Jest obecnie zainstalowany" -LangString oninit_closeusdx ${LANG_POLISH} "nie moe by odinstalowany dopki jest uruchomiony! Czy chcesz zamkn go ?" -LangString oninit_updateusdx ${LANG_POLISH} "Do you want to update the installation from:" -LangString oninit_uninstall ${LANG_POLISH} "Czy chcesz odinstalowa star wersj ? (rekomendowane)" - -LangString update_connect ${LANG_POLISH} "Sprawd poczenie z insternetm i sprawd nowe wersje" -LangString button_next ${LANG_POLISH} "Dalej >" -LangString button_close ${LANG_POLISH} "Zamknij" -LangString update_information ${LANG_POLISH} "Moesz sprawdzi czy jest nowsza wersja 'UltraStar Deluxe WorldParty'. Aby to zrobi pocz si z internetm. Jeli nowa wersja zostanie znaleziona, bdzie mona j zainstalowa." - -LangString delete_components ${LANG_POLISH} "Tak usun nastpujce skadniki:" -LangString delete_covers ${LANG_POLISH} "Okadka?" -LangString delete_highscores ${LANG_POLISH} "Wyniki?" -LangString delete_config ${LANG_POLISH} "Koniguracja?" -LangString delete_screenshots ${LANG_POLISH} "Zrzuty ekranw?" -LangString delete_playlists ${LANG_POLISH} "Playlisty?" -LangString delete_songs ${LANG_POLISH} "Usun piosenki? UWAGA: Wszystkie pliki w katalogu InstallationDir\songs bd usunite(!)" - -LangString update_check_older ${LANG_POLISH} "Twoja werjsa $R0 jest przestarzaa. Nowa wersja $1 UltraStar'a Deluxe WorldParty jest ju dostpna. Czy chcesz dokona aktualizacji ?" -LangString update_check_equal ${LANG_POLISH} "Obecnie zainstalowana wersja $R0 jest najbardziej aktualna. Nie ma nowszych wersji." -LangString update_check_newer ${LANG_POLISH} "Twoja obecnie zainstalowana wersja $R0 jest nowsza ni $\n$\robecnie wydana wersja $1 UltraStar'a Deluxe WorldParty. Nie ma nowszych aktualizacji." -LangString update_check_failed ${LANG_POLISH} "Poszukiwanie nowyszch wersji zakoczyo si bdem. Czy chcesz odwiedzi stron gwn i sprawdzi rcznie ?" +!insertmacro LANGFILE_EXT Polish + +${LangFileString} error_download_song_info "Błąd pobierania utworu \'$0' z: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_song_msg "Błąd pobierania utwory: '$0' z: $\r$\n$1$\r$\n$\r$\nKliknij OK aby kontynuować instalację." +${LangFileString} error_download_theme_info "Błąd pobierania stylu \'$0' z: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_theme_msg "Błąd pobierania stylu: '$0' z: $\r$\n$1$\r$\n$\r$\nKliknij OK aby kontynuować instalację." +${LangFileString} error_download_skin_info "Błąd pobierania skórki \'$0' z: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_skin_msg "Błąd pobierania skórki: '$0' z: $\r$\n$1$\r$\n$\r$\nKliknij OK aby kontynuować instalację." +${LangFileString} error_download_plugin_info "Błąd pobierania pluginu \'$0' z: $\r$\n$1$\r$\n$\r$\n" +${LangFileString} error_download_plugin_msg "Błąd pobierania pluginu: '$0' z: $\r$\n$1$\r$\n$\r$\nKliknij OK aby kontynuować instalację." + +${LangFileString} abort_install "Czy jesteś pewien, że chcesz zatrzymać instalację?" +${LangFileString} abort_uninstall "Czy jesteś pewien, że chcesz zatrzymać odinstalowywanie?" +${LangFileString} abort_update "Czy jesteś pewien, że chcesz przerwać aktualizację?" +${LangFileString} oninit_running "Instalacja jest już uruchomiona." +${LangFileString} oninit_updating "Aktualizacja jest już uruchomiona." +${LangFileString} oninit_installagain "Jesteś pewien, że chcesz zainstalować jeszcze raz?" +${LangFileString} oninit_alreadyinstalled "jest już zainstalowany" +${LangFileString} oninit_closeusdx "nie może być odinstalowany dopóki jest uruchomiony! Czy chcesz go zamknąć?" +${LangFileString} oninit_updateusdx "Czy chcesz zaktualizować instalację z:" +${LangFileString} oninit_uninstall "Czy chcesz odinstalować starą wersję? (rekomendowane)" + +${LangFileString} update_connect "Sprawdź połączenie z Internetem i sprawdź nowe wersje" +${LangFileString} button_next "Dalej >" +${LangFileString} button_close "Zamknij" +${LangFileString} update_information "Możesz sprawdzić czy jest nowsza wersja '${name}'. Aby to zrobić połącz się z internetem. Jeżeli nowa wersja zostanie znaleziona, będzie można ją zainstalować." +${LangFileString} button_check_update "Sprawdź" + +${LangFileString} delete_components "Usuń również następujące składniki:" +${LangFileString} delete_covers "Okładka" +${LangFileString} delete_highscores "Wyniki" +${LangFileString} delete_config "Koniguracja" +${LangFileString} delete_screenshots "Zrzuty ekranów" +${LangFileString} delete_playlists "Playlisty" +${LangFileString} delete_songs "Usunąć piosenki? UWAGA: Wszystkie pliki w katalogu InstallationDir\songs będą usunięte(!)" + +${LangFileString} update_noinstallation_online "Nie masz zainstalowanej żadnej wersji. Obecny instalator nie może zaktualizować twojej wersji. Odwiedź naszą stronę ${homepage}, aby pobrać nową wersję." +${LangFileString} update_noinstallation_offline "Nie masz zainstalowanej żadnej wersji. Obecny instalator/aktualizator nie może zainstalować wersji. Odwiedź naszą stronę ${homepage}, aby pobrać wersję." +${LangFileString} update_check_offline "Twoja wersja $installed_version jest aktualna. Obecny instalator nie może zaktualizować twojej wersji. Odwiedź stronę naszego projektu, aby uzyskać najnowsze informacje i aktualizacje." +${LangFileString} update_check_older "Twoja wersja $installed_version jest przestarzała. Nowa wersja online_version ${name} jest już dostępna. Czy chcesz dokonać aktualizacji?" +${LangFileString} update_check_equal "Obecnie zainstalowana wersja $installed_version jest najbardziej aktualna. Nie ma nowszych wersji." +${LangFileString} update_check_newer "Twoja obecnie zainstalowana wersja $installed_version jest nowsza niż $\r$\nobecnie wydana wersja online_version ${name}. Nie ma nowszych aktualizacji." +${LangFileString} update_check_no "Obecny aktualizator/instalator nie zainstaluje wersji. Odwiedź naszą stronę ${homepage}, aby pobrać nową wersję." +${LangFileString} update_check_failed "Poszukiwanie nowyszch wersji zakończyło siê błędem. Czy chcesz odwiedzić stronę główną i sprawdzić ręcznie?" +${LangFileString} update_download_success "Pobieranie nowej wersji $online_version zakończyło się sukcesem.$\r$\n$\r$\nDokończ aktualizację zamykając ten aktualizator. Następnie zostanie uruchomiona nowa instalacja." +${LangFileString} update_download_failed "Pobieranie nowej wersji $online_version nie powiodło się. Instalator nie może zostać pobrany.$\r$\n$\r$\nProszę, odwiedź naszą stronę ${homepage}, aby pobrać nową wersję." +${LangFileString} update_download_aborted "Pobieranie nowej wersji $online_version zostało przerwane. Aktualizacja nie zostanie przeprowadzona. Pamiętaj, odwiedź naszą stronę ${homepage}, aby uzyskać najnowsze informacje i aktualizacje." +${LangFileString} update_download_invalid_installer "Pobieranie nowej wersji $online_version nie powiodło się. Pobrany instalator jest nieprawidłowy. Mogło to nastąpić, jeśli serwer/strona napotkała problemy, już nie istnieje, lub jest w trakcie konserwacji.$\r$\n$\r$\nProszę, odwiedź naszą stronę ${homepage} i pobierz instalator ręcznie."${LangFileString} update_download_none "Nie wybrano wersji do pobrania. Instalator nie może zaktualizować twojej wersji. Odwiedź naszą stronę ${homepage}, aby uzyskać najnowsze informacje i aktualizacje." +${LangFileString} update_versions_info "Przynajmniej jedna nowa wersja ${name} została znaleziona. Proszę, wybierz konkretną wersję do aktualizacji. Ta wersja zostanie pobrana i następnie zostanie uruchomiona instalacja." +${LangFileString} update_versions_none "Brak" + +${LangFileString} update_download_downloading "Pobieranie %s " +${LangFileString} update_download_connecting "Nawiązywanie połączenia ... " +${LangFileString} update_download_sec "sek." +${LangFileString} update_download_min "min." +${LangFileString} update_download_hour "godz." +${LangFileString} update_download_multi "s" +${LangFileString} update_download_progress "%dkiB (%d%%) z %dkiB @ %d.%02dkiB/s" +${LangFileString} update_download_remaining " (%d %s%s do końca)" +${LangFileString} update_download_remain_sec " (1 sekunda do końca)" +${LangFileString} update_download_remain_min " (1 minuta do końca)" +${LangFileString} update_download_remain_hour " (1 godzina do końca)" +${LangFileString} update_download_remain_secs " (%u sekund do końca)" +${LangFileString} update_download_remain_mins " (%u minut do końca)" +${LangFileString} update_download_remain_hours " (%u godzin do końca)" ; Welcome Page: -LangString page_welcome_title_update ${LANG_POLISH} "Witamy w kreatorze aktualizacji programu UltraStar Deluxe WorldParty" -LangString page_welcome_txt_update ${LANG_POLISH} "Ten kreator przeprowadzi ci przez proces aktualizacji gry UltraStar Deluxe WorldParty. UltraStar Deluxe jest bezpatn i Otwart gr Karaoke, ktr mona porwna z SingStar'em.$\n$\r$\n$\rZesp UltraStar Deluxe i zup3r_vock (WorldParty Mod) yczy miej zabawy.$\n$\r$\n$\rStrona projektu: http://www.ultrastardeluxe.org$\n$\rForum wsparcia: http://forum.ultrastardeluxe.org" -LangString page_welcome_title ${LANG_POLISH} "Witamy w kreatorze instalacji programu UltraStar Deluxe WorldParty" -LangString page_welcome_txt ${LANG_POLISH} "Ten kreator przeprowadzi ci przez proces instalacji gry UltraStar Deluxe WorldParty. UltraStar Deluxe jest bezpatn i Otwart gr Karaoke, ktr mona porwna z SingStar'em.$\n$\r$\n$\rZesp UltraStar Deluxe i zup3r_vock (WorldParty Mod) yczy miej zabawy.$\n$\r$\n$\rStrona projektu: http://www.ultrastardeluxe.org$\n$\rForum wsparcia: http://forum.ultrastardeluxe.org" -LangString page_un_welcome_title ${LANG_POLISH} "Witamy w kreatorze deinstalacji gry UltraStar Deluxe WorldParty" +${LangFileString} page_welcome_title_update "Witamy w kreatorze aktualizacji programu ${name}" +${LangFileString} page_welcome_txt_update "Ten kreator przeprowadzi cię przez proces aktualizacji gry ${name}. ${name} jest bezpłatną i Otwartą grą Karaoke, którą można porównać z SingStar'em.$\r$\n$\r$\nZespół ${name} życzy miłej zabawy.$\r$\n$\r$\nStrona projektu:$\n$\r${homepage}$\r$\n$\r$\nForum wsparcia:$\n$\r${forum}" +${LangFileString} page_welcome_title "Witamy w kreatorze instalacji programu ${name}" +${LangFileString} page_welcome_txt "Ten kreator przeprowadzi cię przez proces instalacji gry ${name}. ${name} jest bezpłatną i Otwartą grą Karaoke, którą można porównać z SingStar'em.$\r$\n$\r$\nZespół ${name} życzy miłej zabawy.$\r$\n$\r$\nStrona projektu:$\n$\r${homepage}$\r$\n$\r$\nForum wsparcia:$\n$\r${forum}" +${LangFileString} page_un_welcome_title "Witamy w kreatorze deinstalacji gry ${name}" ; Components Page: -LangString page_components_info ${LANG_POLISH} "Najed myszk na komponent, aby zobaczy szczegy" +${LangFileString} page_components_info "Najedź myszką na komponent, aby zobaczyć szczegóły" ; Custom Page -LangString page_settings_fullscreen ${LANG_POLISH} "Tryb Penoekranowy" -LangString page_settings_subtitle ${LANG_POLISH} "Wybierz ustawienia dogodne dla Ciebie." +${LangFileString} page_settings_subtitle "Wybierz ustawienia dogodne dla Ciebie." +${LangFileString} page_settings_config_title "Konfiguracja ${name} (opcjonalnie)" +${LangFileString} page_settings_config_info "Wszystkie ustawienia można później zmieniać w grze." +${LangFileString} page_settings_fullscreen_label "Tryb Pełnoekranowy:" +${LangFileString} page_settings_fullscreen_info "Czy uruchamiać grę w oknie czy na pełnym ekranie?" +${LangFileString} page_settings_language_label "Język:" +${LangFileString} page_settings_language_info "Dostosuj język interfejsu graficznego." +${LangFileString} page_settings_resolution_label "Rozdzielczość:" +${LangFileString} page_settings_resolution_info "Wybierz rozdzieczość ekran/okna." +${LangFileString} page_settings_tabs_label "Zakładki:" +${LangFileString} page_settings_tabs_info "Czy chcesz aby piosenki zostały pogrupowane na zakładki?" +${LangFileString} page_settings_sorting_label "Sortowanie:" +${LangFileString} page_settings_sorting_info "Wybierz kryteria sortowania piosenek." +${LangFileString} page_settings_songdir_label "SongDir" +${LangFileString} page_settings_songdir_info "Wybierz katalog w którym znajdują się piosenki?" ; Finish Page: -LangString page_finish_txt ${LANG_POLISH} "UltraStar Deluxe WorldParty zosta poprawnie zainstalowany na twoim komputerze.$\n$\r$\n$\rOdwied Nasz stron aby otrzyma najnowsze wiadomoci i aktualizacj." -LangString page_finish_linktxt ${LANG_POLISH} "Strona Projektu" -LangString page_finish_desktop ${LANG_POLISH} "Czy stwrzy skrt na Pulpicie ?" +${LangFileString} page_finish_txt "${name} został poprawnie zainstalowany na twoim komputerze.$\r$\n$\r$\nOdwiedź Naszą stronę aby otrzymać najnowsze wiadomości i aktualizacje." +${LangFileString} page_finish_linktxt "Strona Projektu" +${LangFileString} page_finish_desktop "Czy stwórzyć skrót na Pulpicie?" + +;unused +;TODO ${LangFileString} page_finish_txt_update "${name} Update has checked for a new version." ; Start Menu and Shortcuts -LangString sm_shortcut ${LANG_POLISH} "Graj w UltraStar Deluxe WorldParty" -LangString sm_uninstall ${LANG_POLISH} "Odinstaluj" -LangString sm_website ${LANG_POLISH} "Strona Projektu" -LangString sm_license ${LANG_POLISH} "Licencja" -LangString sm_readme ${LANG_POLISH} "Readme" -LangString sm_songs ${LANG_POLISH} "Piosenki" -LangString sm_documentation ${LANG_POLISH} "Dokumentacja" +${LangFileString} sm_shortcut "Graj w ${name}" +${LangFileString} sm_uninstall "Odinstaluj" +${LangFileString} sm_website "Strona Projektu" +${LangFileString} sm_license "Licencja" +${LangFileString} sm_readme "Readme" +${LangFileString} sm_songs "Piosenki" +${LangFileString} sm_update "Aktualizacja" +${LangFileString} sm_documentation "Dokumentacja" + +${LangFileString} sc_play "Graj" +${LangFileString} sc_desktop "Czy stwórzyć skrót na Pulpicie?" + +; Sections and SectionGroups + +${LangFileString} name_section1 "Główne komponenty" +${LangFileString} name_section2 "Piosenki" +${LangFileString} name_s2_sub1 "Jonathan Coulton" +${LangFileString} name_s2_sub2 "Shearer" +${LangFileString} name_s2_sub3 "Wise Guys" +${LangFileString} name_s2_sub4 "Pornophonique" + +${LangFileString} DESC_Section1 "To są podstawowe pliki wymagane przez ${name}" +${LangFileString} DESC_Section2 "Możesz wybrać które piosenki chcesz ściągnąć (Wymagane połączenie z Internetem!)" +${LangFileString} DESC_Section2_sub1 "Możesz wybrać które piosenki Jonathan Coulton (CC by-nc 3.0) chcesz zainstalować." +${LangFileString} DESC_Section2_sub2 "Możesz wybrać które piosenki Shearer (CC by-nc-sa 2.0 / 3.0) chcesz zainstalować." +${LangFileString} DESC_Section2_sub3 "Możesz wybrać które piosenki Wise Guys chcesz zainstalować." +${LangFileString} DESC_Section2_sub4 "Możesz wybrać które piosenki Pornophonique chcesz zainstalować." + +${LangFileString} DESC_g2Section2 "Ściągnij piosenkę 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5)." +${LangFileString} DESC_g2Section3 "Ściągnij piosenkę 'Joshua Morin - On The Run' (CC by-sa 2.5)." +${LangFileString} DESC_g2Section4 "Ściągnij piosenkę 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0)." +${LangFileString} DESC_g2Section5 "Ściągnij piosenkę 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5)." +${LangFileString} DESC_g2Section1 "Ściągnij piosenkę 'Bodo Wartke - Liebeslied (Love Song)'." +${LangFileString} DESC_g2Section6 "Ściągnij piosenkę 'Pornophonique - Space Invaders (Karaoke)' (CC by-nc-nd 2.0)." + +${LangFileString} DESC_s2_sub1_Section1 "Ściągnij piosenkę 'Monkey Shines'." +${LangFileString} DESC_s2_sub1_Section2 "Ściągnij piosenkę 'I Crush Everything'." +${LangFileString} DESC_s2_sub1_Section3 "Ściągnij piosenkę 'Not About You'." +${LangFileString} DESC_s2_sub1_Section4 "Ściągnij piosenkę 'Mr. Fancy Pants'." +${LangFileString} DESC_s2_sub1_Section5 "Ściągnij piosenkę 'Big Bad World One'." +${LangFileString} DESC_s2_sub1_Section6 "Ściągnij piosenkę 'Flickr [incl. video]'." +${LangFileString} DESC_s2_sub1_Section7 "Ściągnij piosenkę 'My Beige Bear'." +${LangFileString} DESC_s2_sub1_Section8 "Ściągnij piosenkę 'The Future Soon'." +${LangFileString} DESC_s2_sub1_Section9 "Ściągnij piosenkę 'Ikea'." +${LangFileString} DESC_s2_sub1_Section10 "Ściągnij piosenkę 'Furry Old Lobster'." +${LangFileString} DESC_s2_sub1_Section11 "Ściągnij piosenkę 'Code Monkey [incl. video]'." +${LangFileString} DESC_s2_sub1_Section12 "Ściągnij piosenkę 'I´m Your Moon'." +${LangFileString} DESC_s2_sub1_Section13 "Ściągnij piosenkę 'First Of May'." +${LangFileString} DESC_s2_sub1_Section14 "Ściągnij piosenkę 'Dance, Soterios Johnson, Dance'." +${LangFileString} DESC_s2_sub1_Section15 "Ściągnij piosenkę 'A Talk With George'." +${LangFileString} DESC_s2_sub1_Section16 "Ściągnij piosenkę 'Creepy Doll [incl. video]'." +${LangFileString} DESC_s2_sub1_Section17 "Ściągnij piosenkę 'That Spells DNA'." +${LangFileString} DESC_s2_sub1_Section18 "Ściągnij piosenkę 'When You Go'." +${LangFileString} DESC_s2_sub1_Section19 "Ściągnij piosenkę 'Better'." +${LangFileString} DESC_s2_sub1_Section20 "Ściągnij piosenkę 'Shop Vac'." +${LangFileString} DESC_s2_sub1_Section21 "Ściągnij piosenkę 'I Feel Fantastic'." +${LangFileString} DESC_s2_sub1_Section22 "Ściągnij piosenkę 'Re: Your Brains'." +${LangFileString} DESC_s2_sub1_Section23 "Ściągnij piosenkę 'Skullcrusher Mountain'." +${LangFileString} DESC_s2_sub1_Section24 "Ściągnij piosenkę 'Chiron Beta Prime [incl. video]'." + +${LangFileString} DESC_s2_sub2_Section1 "Ściągnij piosenkę '69'." +${LangFileString} DESC_s2_sub2_Section2 "Ściągnij piosenkę '69 (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section3 "Ściągnij piosenkę 'Can't stop it'." +${LangFileString} DESC_s2_sub2_Section4 "Ściągnij piosenkę 'Can't stop it (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section5 "Ściągnij piosenkę 'In My Hand'." +${LangFileString} DESC_s2_sub2_Section6 "Ściągnij piosenkę 'Man Song'." +${LangFileString} DESC_s2_sub2_Section7 "Ściągnij piosenkę 'Man Song (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section8 "Ściągnij piosenkę 'Stay with me'." +${LangFileString} DESC_s2_sub2_Section9 "Ściągnij piosenkę 'Stay with me (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section10 "Ściągnij piosenkę 'Consequence Of Dawn'." + +${LangFileString} DESC_s2_sub3_Section1 "Ściągnij piosenkę 'Lebendig und kräftig und schärfer'." +${LangFileString} DESC_s2_sub3_Section2 "Ściągnij piosenkę 'Mensch, wo bist du?'." +${LangFileString} DESC_s2_sub3_Section3 "Ściągnij piosenkę 'Mensch, wo bist du? (Karaoke)'." -LangString sc_play ${LANG_POLISH} "Graj" -LangString sc_desktop ${LANG_POLISH} "Czy stwrzy skrt na Pulpicie ?" +; Optional Themes +; (not available) diff --git a/installer/languages/Portuguese.nsh b/installer/languages/Portuguese.nsh index 43d203ee..cfa111fa 100644 --- a/installer/languages/Portuguese.nsh +++ b/installer/languages/Portuguese.nsh @@ -1,66 +1,189 @@ +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; UltraStar Deluxe Installer - Language file: Portuguese ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; UltraStar Deluxe WorldParty Installer - Language file: Portuguese -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -LangString abort_install ${LANG_PORTUGUESE} "Tem a certeza que deseja cancelar a instalao?" -LangString abort_uninstall ${LANG_PORTUGUESE} "Tem a certeza que deseja cancelar a desinstalao?" -LangString oninit_running ${LANG_PORTUGUESE} "O instalador j est em execuo." -LangString oninit_installagain ${LANG_PORTUGUESE} "Tem certeza de que deseja instal-lo novamente?" -LangString oninit_alreadyinstalled ${LANG_PORTUGUESE} "j est instalado" -LangString oninit_closeusdx ${LANG_PORTUGUESE} "no pode ser desinstalado enquanto est a correr! Deseja fech-lo?" -LangString oninit_updateusdx ${LANG_PORTUGUESE} "Voc quer atualizar a instalao de:" -LangString oninit_uninstall ${LANG_PORTUGUESE} "Voc quer desinstalar a verso antiga? (recomendado)" - -LangString update_connect ${LANG_PORTUGUESE} "Estabelecer conexo com a internet e verifique se h nova verso" -LangString button_next ${LANG_PORTUGUESE} "Seguinte >" -LangString button_close ${LANG_PORTUGUESE} "Fechar" -LangString update_information ${LANG_PORTUGUESE} "Voc pode verificar se uma nova verso do 'UltraStar Deluxe WorldParty' est disponvel. Uma conexo internet ser estabelecida. Se uma nova verso for encontrada, poder ser instalada depois." - -LangString delete_components ${LANG_PORTUGUESE} "Alm disso, exclua os seguintes componentes:" -LangString delete_covers ${LANG_PORTUGUESE} "Capas?" -LangString delete_highscores ${LANG_PORTUGUESE} "Pontuaes?" -LangString delete_config ${LANG_PORTUGUESE} "Configuraes?" -LangString delete_screenshots ${LANG_PORTUGUESE} "Screenshots?" -LangString delete_playlists ${LANG_PORTUGUESE} "Playlists?" -LangString delete_songs ${LANG_PORTUGUESE} "Remover canes? ATENO: TODOS os arquivos dentro da pasta InstallationDir\songs sero removidos(!)" - -LangString update_check_older ${LANG_PORTUGUESE} "A sua verso $R0 est obsoleta. Uma nova verso ($1) do UltraStar Deluxe est disponvel. Deseja atualizar?" -LangString update_check_equal ${LANG_PORTUGUESE} "A sua verso atualmente instalada $R0 est atualizada." -LangString update_check_newer ${LANG_PORTUGUESE} "A sua verso instalada $R0 mais recente que a $\n$\rverso corrente $1 do UltraStar Deluxe. No necessita de atualizao." -LangString update_check_failed ${LANG_PORTUGUESE} "A verificao de uma nova verso falhou. Voc quer visitar o site para verificar manualmente?" +!insertmacro LANGFILE_EXT Portuguese + +;TODO ${LangFileString} error_download_song_info "Error downloading song \'$0' from: $\r$\n$1$\r$\n$\r$\n" +;TODO ${LangFileString} error_download_song_msg "Error downloading song: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +;TODO ${LangFileString} error_download_theme_info "Error downloading theme \'$0' from: $\r$\n$1$\r$\n$\r$\n" +;TODO ${LangFileString} error_download_theme_msg "Error downloading theme: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +;TODO ${LangFileString} error_download_skin_info "Error downloading skin \'$0' from: $\r$\n$1$\r$\n$\r$\n" +;TODO ${LangFileString} error_download_skin_msg "Error downloading skin: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." +;TODO ${LangFileString} error_download_plugin_info "Error downloading plugin \'$0' from: $\r$\n$1$\r$\n$\r$\n" +;TODO ${LangFileString} error_download_plugin_msg "Error downloading plugin: '$0' from: $\r$\n$1$\r$\n$\r$\nClick OK to continue the installation." + +${LangFileString} abort_install "Tem a certeza que deseja cancelar a instalação?" +${LangFileString} abort_uninstall "Tem a certeza que deseja cancelar a desinstalação?" +;TODO ${LangFileString} abort_update "Are you sure to abort the update?" +${LangFileString} oninit_running "O instalador já está em execução." +;TODO ${LangFileString} oninit_updating "An update is already running." +${LangFileString} oninit_installagain "Tem certeza de que deseja instalá-lo novamente?" +${LangFileString} oninit_alreadyinstalled "já está instalado" +${LangFileString} oninit_closeusdx "não pode ser desinstalado enquanto está a correr! Deseja fechá-lo?" +${LangFileString} oninit_updateusdx "Você quer atualizar a instalação de:" +${LangFileString} oninit_uninstall "Você quer desinstalar a versão antiga? (recomendado)" + +${LangFileString} update_connect "Estabelecer conexão com a internet e verifique se há nova versão" +${LangFileString} button_next "Seguinte >" +${LangFileString} button_close "Fechar" +${LangFileString} update_information "Você pode verificar se uma nova versão do '${name}' está disponível. Uma conexão à internet será estabelecida. Se uma nova versão for encontrada, poderá ser instalada depois." +;TODO ${LangFileString} button_check_update "Check" + +${LangFileString} delete_components "Além disso, exclua os seguintes componentes:" +${LangFileString} delete_covers "Capas?" +${LangFileString} delete_highscores "Pontuações?" +${LangFileString} delete_config "Configurações?" +${LangFileString} delete_screenshots "Screenshots?" +${LangFileString} delete_playlists "Playlists?" +${LangFileString} delete_songs "Remover canções? ATENÇÃO: TODOS os arquivos dentro da pasta InstallationDir\songs serão removidos(!)" + +;TODO ${LangFileString} update_noinstallation_online "You have no version installed. The current installer cannot update your version. Check our website ${homepage} for a new version." +;TODO ${LangFileString} update_noinstallation_offline "You have no version installed. The current installer/updater cannot install a version. Check our website ${homepage} for a version." +;TODO ${LangFileString} update_check_offline "Your version $installed_version is up-to-date. The current installer cannot update your version. Visit our project website to get latest news and updates." +${LangFileString} update_check_older "A sua versão $installed_version está obsoleta. Uma nova versão (online_version) do ${name} está disponível. Deseja atualizar?" +${LangFileString} update_check_equal "A sua versão atualmente instalada $installed_version está atualizada." +${LangFileString} update_check_newer "A sua versão instalada $installed_version é mais recente que a $\r$\nversão corrente online_version do ${name}. Não necessita de atualização." +;TODO ${LangFileString} update_check_no "The current updater/installer won't install a version. Check our website ${homepage} for a new version." +${LangFileString} update_check_failed "A verificação de uma nova versão falhou. Você quer visitar o site para verificar manualmente?" +;TODO ${LangFileString} update_download_success "The download of the new version $online_version succeeded.$\r$\n$\r$\nFinish the update by closing this updater. The new installation will be started right after." +;TODO ${LangFileString} update_download_failed "The download of the new version $online_version failed. The installer could not be downloaded.$\r$\n$\r$\nPlease, visit our website ${homepage} for the new version." +;TODO ${LangFileString} update_download_aborted "The download of the new version $online_version was aborted. Nothing will be updated. Remember, visit our website ${homepage} for latest news and updates." +;TODO ${LangFileString} update_download_invalid_installer "The download of the new version $online_version failed. The downloaded installer was invalid. This can happen if the server/website has some issues, does not exist anymore or is in maintenance mode.$\r$\n$\r$\nPlease, visit our website ${homepage} and download the installer manually." +;TODO ${LangFileString} update_download_none "No version to download selected. The current installer cannot update your version. Check our website ${homepage} for latest news and updates." +;TODO ${LangFileString} update_versions_info "At least one new version of ${name} has been found. Please, select a specific version and choose to update. This version will be downloaded and the installation will be started afterwards." +;TODO ${LangFileString} update_versions_none "None" + +;TODO ${LangFileString} update_download_downloading "Downloading %s " +;TODO ${LangFileString} update_download_connecting "Connecting ... " +;TODO ${LangFileString} update_download_sec "sec" +;TODO ${LangFileString} update_download_min "min" +;TODO ${LangFileString} update_download_hour "hour" +;TODO ${LangFileString} update_download_multi "s" +;TODO ${LangFileString} update_download_progress "%dkiB (%d%%) of %dkiB @ %d.%02dkiB/s" +;TODO ${LangFileString} update_download_remaining " (%d %s%s remaining)" +;TODO ${LangFileString} update_download_remain_sec " (1 second remaining)" +;TODO ${LangFileString} update_download_remain_min " (1 minute remaining)" +;TODO ${LangFileString} update_download_remain_hour " (1 hour remaining)" +;TODO ${LangFileString} update_download_remain_secs " (%u seconds remaining)" +;TODO ${LangFileString} update_download_remain_mins " (%u minutes remaining)" +;TODO ${LangFileString} update_download_remain_hours " (%u hours remaining)" ; Welcome Page: -LangString page_welcome_title_update ${LANG_PORTUGUESE} "Bem-vindo ao assistente de actualizao do UltraStar Deluxe WorldParty" -LangString page_welcome_txt_update ${LANG_PORTUGUESE} "Este assistente ir gui-lo atravs do processo de atualizao do UltraStar Deluxe WorldParty. UltraStar Deluxe um jogo de Karaoke livre de cdigo aberto, que pode ser comparado com o Singstar.$\n$\r$\n$\rA equipa do UltraStar Deluxe e o utilizador zup3r_vock (WorldParty Mod) deseja-lhe que se divirta.$\n$\r$\n$\rWebsite do projecto: http://www.ultrastardeluxe.org$\n$\rForm Suporte: http://forum.ultrastardeluxe.org$\n$\r$\n$\rProjecto Worldparty: http://www.ultrastar-es.org" -LangString page_welcome_title ${LANG_PORTUGUESE} "Bem-vindo ao assistente de instalao do UltraStar Deluxe WorldParty" -LangString page_welcome_txt ${LANG_PORTUGUESE} "Este assistente ir gui-lo atravs do processo de instalao do UltraStar Deluxe WorldParty. UltraStar Deluxe um jogo de Karaoke livre de cdigo aberto, que pode ser comparado com o Singstar.$\n$\r$\n$\rA equipa do UltraStar Deluxe e o utilizador zup3r_vock (WorldParty Mod) deseja-lhe que se divirta.$\n$\r$\n$\rWebsite do projecto: http://www.ultrastardeluxe.org$\n$\rForm Suporte: http://forum.ultrastardeluxe.org$\n$\r$\n$\rProjecto Worldparty: http://www.ultrastar-es.org" -LangString page_un_welcome_title ${LANG_PORTUGUESE} "Bem-vindo ao assistente de desinstalao do UltraStar Deluxe WorldParty" +${LangFileString} page_welcome_title_update "Bem-vindo ao assistente de actualização do ${name}" +${LangFileString} page_welcome_txt_update "Este assistente irá guiá-lo através do processo de atualização do ${name}. ${name} é um jogo de Karaoke livre de código aberto, que pode ser comparado com o Singstar.$\r$\n$\r$\n${publisher} deseja-lhe que se divirta.$\r$\n$\r$\nWebsite do projecto:$\n$\r${homepage}$\r$\n$\r$\nForúm Suporte:$\n$\r${forum}" +${LangFileString} page_welcome_title "Bem-vindo ao assistente de instalação do ${name}" +${LangFileString} page_welcome_txt "Este assistente irá guiá-lo através do processo de instalação do ${name}. ${name} é um jogo de Karaoke livre de código aberto, que pode ser comparado com o Singstar.$\r$\n$\r$\n${publisher} deseja-lhe que se divirta.$\r$\n$\r$\nWebsite do projecto:$\n$\r${homepage}$\r$\n$\r$\nForúm Suporte:$\n$\r${forum}" +${LangFileString} page_un_welcome_title "Bem-vindo ao assistente de desinstalação do ${name}" ; Components Page: -LangString page_components_info ${LANG_PORTUGUESE} "Passe o componente para obter detalhes" +${LangFileString} page_components_info "Passe o componente para obter detalhes" ; Custom Page -LangString page_settings_fullscreen ${LANG_PORTUGUESE} "Ecr Completo" -LangString page_settings_subtitle ${LANG_PORTUGUESE} "Especifique suas configuraes favoritas para UltraStar Deluxe WorldParty." +${LangFileString} page_settings_subtitle "Especifique suas configurações favoritas para ${name}." +${LangFileString} page_settings_config_title "Configuração ${name} (opcional)" +${LangFileString} page_settings_config_info "Todas as opções podem ser posteriormente alteradas no jogo." +${LangFileString} page_settings_fullscreen_label "Ecrã Completo:" +${LangFileString} page_settings_fullscreen_info "Iniciar jogo em janela ou ecrã completo." +${LangFileString} page_settings_language_label "Idioma:" +${LangFileString} page_settings_language_info "Seleccione idioma." +${LangFileString} page_settings_resolution_label "Resolução:" +${LangFileString} page_settings_resolution_info "Escolha a resolução." +${LangFileString} page_settings_tabs_label "Subpastas:" +${LangFileString} page_settings_tabs_info "Pastas virtuais para mostrar canções." +${LangFileString} page_settings_sorting_label "Ordenação:" +${LangFileString} page_settings_sorting_info "Seleccione o critério de ordenação das canções." +${LangFileString} page_settings_songdir_label "Directoria das canções:" +${LangFileString} page_settings_songdir_info "Escolha diretório adicional para as canções do ${name}." ; Finish Page: -LangString page_finish_txt ${LANG_PORTUGUESE} "UltraStar Deluxe WorldParty foi instalado com sucesso no seu sistema.$\n$\r$\n$\rVisite o site do projecto para receber as ltimas notcias e actualizaes." -LangString page_finish_linktxt ${LANG_PORTUGUESE} "Website" -LangString page_finish_desktop ${LANG_PORTUGUESE} "Criar atalho no Ambiente de Trabalho" +${LangFileString} page_finish_txt "${name} foi instalado com sucesso no seu sistema.$\r$\n$\r$\nVisite o site do projecto para receber as últimas notícias e actualizações." +${LangFileString} page_finish_linktxt "Website" +${LangFileString} page_finish_desktop "Criar atalho no Ambiente de Trabalho" + +;unused +;TODO ${LangFileString} page_finish_txt_update "${name} Update has checked for a new version." ; Start Menu and Shortcuts -LangString sm_shortcut ${LANG_PORTUGUESE} "UltraStar Deluxe WorldParty" -LangString sm_uninstall ${LANG_PORTUGUESE} "Uninstall" -LangString sm_website ${LANG_PORTUGUESE} "Website" -LangString sm_license ${LANG_PORTUGUESE} "License" -LangString sm_readme ${LANG_PORTUGUESE} "Readme" -LangString sm_songs ${LANG_PORTUGUESE} "Canes" -LangString sm_documentation ${LANG_PORTUGUESE} "Documentao" +${LangFileString} sm_shortcut "${name}" +${LangFileString} sm_uninstall "Uninstall" +${LangFileString} sm_website "Website" +${LangFileString} sm_license "License" +${LangFileString} sm_readme "Readme" +${LangFileString} sm_songs "Canções" +;TODO ${LangFileString} sm_update "Update" +${LangFileString} sm_documentation "Documentação" + +${LangFileString} sc_play "Play" +${LangFileString} sc_desktop "Criar atalho no Ambiente de Trabalho" + +; Sections and SectionGroups + +${LangFileString} name_section1 "Arquivos principais" +${LangFileString} name_section2 "Canções" +${LangFileString} name_s2_sub1 "Jonathan Coulton" +${LangFileString} name_s2_sub2 "Shearer" +${LangFileString} name_s2_sub3 "Wise Guys" +${LangFileString} name_s2_sub4 "Pornophonique" + +${LangFileString} DESC_Section1 "Estes são os arquivos básicos necessários para ${name}" +${LangFileString} DESC_Section2 "Você pode escolher quais as canções que devem ser baixadas (requer conexão à Internet!)" +${LangFileString} DESC_Section2_sub1 "Você pode escolher quais as canções de Jonathan Coulton (CC by-nc 3.0) devem ser instaladas." +${LangFileString} DESC_Section2_sub2 "Você pode escolher quais as canções de Shearer songs (CC by-nc-sa 2.0 / 3.0) devem ser instaladas." +${LangFileString} DESC_Section2_sub3 "Você pode escolher quais as canções de Wise Guys devem ser instaladas." +${LangFileString} DESC_Section2_sub4 "Você pode escolher quais as canções de Pornophonique devem ser instaladas." + +${LangFileString} DESC_g2Section2 "Baixar 'Dead Smiling Pirates - I 18' (CC by-nc-nd 2.5)." +${LangFileString} DESC_g2Section3 "Baixar 'Joshua Morin - On The Run' (CC by-sa 2.5)." +${LangFileString} DESC_g2Section4 "Baixar 'Pornophonique - Space Invaders' (CC by-nc-nd 2.0)." +${LangFileString} DESC_g2Section5 "Baixar 'Steven Dunston - Northern Star' (CC by-nc-sa 2.5)." +${LangFileString} DESC_g2Section1 "Baixar 'Bodo Wartke - Liebeslied (Love Song)'." +${LangFileString} DESC_g2Section6 "Baixar 'Pornophonique - Space Invaders (Karaoke)' (CC by-nc-nd 2.0)." + +${LangFileString} DESC_s2_sub1_Section1 "Baixar 'Monkey Shines'." +${LangFileString} DESC_s2_sub1_Section2 "Baixar 'I Crush Everything'." +${LangFileString} DESC_s2_sub1_Section3 "Baixar 'Not About You'." +${LangFileString} DESC_s2_sub1_Section4 "Baixar 'Mr. Fancy Pants'." +${LangFileString} DESC_s2_sub1_Section5 "Baixar 'Big Bad World One'." +${LangFileString} DESC_s2_sub1_Section6 "Baixar 'Flickr [incl. video]'." +${LangFileString} DESC_s2_sub1_Section7 "Baixar 'My Beige Bear'." +${LangFileString} DESC_s2_sub1_Section8 "Baixar 'The Future Soon'." +${LangFileString} DESC_s2_sub1_Section9 "Baixar 'Ikea'." +${LangFileString} DESC_s2_sub1_Section10 "Baixar 'Furry Old Lobster'." +${LangFileString} DESC_s2_sub1_Section11 "Baixar 'Code Monkey [incl. video]'." +${LangFileString} DESC_s2_sub1_Section12 "Baixar 'I´m Your Moon'." +${LangFileString} DESC_s2_sub1_Section13 "Baixar 'First Of May'." +${LangFileString} DESC_s2_sub1_Section14 "Baixar 'Dance, Soterios Johnson, Dance'." +${LangFileString} DESC_s2_sub1_Section15 "Baixar 'A Talk With George'." +${LangFileString} DESC_s2_sub1_Section16 "Baixar 'Creepy Doll [incl. video]'." +${LangFileString} DESC_s2_sub1_Section17 "Baixar 'That Spells DNA'." +${LangFileString} DESC_s2_sub1_Section18 "Baixar 'When You Go'." +${LangFileString} DESC_s2_sub1_Section19 "Baixar 'Better'." +${LangFileString} DESC_s2_sub1_Section20 "Baixar 'Shop Vac'." +${LangFileString} DESC_s2_sub1_Section21 "Baixar 'I Feel Fantastic'." +${LangFileString} DESC_s2_sub1_Section22 "Baixar 'Re: Your Brains'." +${LangFileString} DESC_s2_sub1_Section23 "Baixar 'Skullcrusher Mountain'." +${LangFileString} DESC_s2_sub1_Section24 "Baixar 'Chiron Beta Prime [incl. video]'." + +${LangFileString} DESC_s2_sub2_Section1 "Baixar '69'." +${LangFileString} DESC_s2_sub2_Section2 "Baixar '69 (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section3 "Baixar 'Can't stop it'." +${LangFileString} DESC_s2_sub2_Section4 "Baixar 'Can't stop it (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section5 "Baixar 'In My Hand'." +${LangFileString} DESC_s2_sub2_Section6 "Baixar 'Man Song'." +${LangFileString} DESC_s2_sub2_Section7 "Baixar 'Man Song (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section8 "Baixar 'Stay with me'." +${LangFileString} DESC_s2_sub2_Section9 "Baixar 'Stay with me (Karaoke)'." +${LangFileString} DESC_s2_sub2_Section10 "Baixar 'Consequence Of Dawn'." + +${LangFileString} DESC_s2_sub3_Section1 "Baixar 'Lebendig und kräftig und schärfer'." +${LangFileString} DESC_s2_sub3_Section2 "Baixar 'Mensch, wo bist du?'." +${LangFileString} DESC_s2_sub3_Section3 "Baixar 'Mensch, wo bist du? (Karaoke)'." -LangString sc_play ${LANG_PORTUGUESE} "Play" -LangString sc_desktop ${LANG_PORTUGUESE} "Criar atalho no Ambiente de Trabalho" +; Optional Themes +; (not available) diff --git a/installer/languages/Spanish.nsh b/installer/languages/Spanish.nsh index 8c54adca..0ed9fd45 100644 --- a/installer/languages/Spanish.nsh +++ b/installer/languages/Spanish.nsh @@ -1,67 +1,102 @@ -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; UltraStar Deluxe Installer - Language file: Spanish -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ - -LangString abort_install ${LANG_SPANISH} "Seguro que quieres salir de la instalacin?" -LangString abort_uninstall ${LANG_SPANISH} "Seguro que quieres salir de la desinstalacin?" -LangString oninit_running ${LANG_SPANISH} "El instalador ya esta funcionando" -LangString oninit_installagain ${LANG_SPANISH} "Seguro que quieres reinstalarlo?" -LangString oninit_alreadyinstalled ${LANG_SPANISH} "Ya esta instalado" -LangString oninit_closeusdx ${LANG_SPANISH} "No se puede desinstalar ultrastar mientras esta funcionando, quieres cerrarlo?" -LangString oninit_updateusdx ${LANG_SPANISH} "Quieres actualizar la instalacin desde...?" -LangString oninit_uninstall ${LANG_SPANISH} "Quieres desinstalar la antigua versin? (recomendado)" - -LangString update_connect ${LANG_SPANISH} "Estableciendo conexin a internet para comprobar una nueva versin" -LangString button_next ${LANG_SPANISH} "Siguiente" -LangString button_close ${LANG_SPANISH} "Cerrar" -LangString update_information ${LANG_SPANISH} "Puedes comprobar si existe una nueva versin del juego. Si existe una actualizacin ser instalada." - -LangString delete_components ${LANG_SPANISH} "Adems eliminar los siguientes componentes:" -LangString delete_covers ${LANG_SPANISH} "Cartulas" -LangString delete_highscores ${LANG_SPANISH} "Puntuaciones" -LangString delete_config ${LANG_SPANISH} "Configuracin" -LangString delete_screenshots ${LANG_SPANISH} "Capturas de pantalla" -LangString delete_playlists ${LANG_SPANISH} "Listas" -LangString delete_songs ${LANG_SPANISH} "Eliminar canciones ADVERTENCIA: Se eliminarn las canciones que estn en la carpeta songs del directorio del juego (las canciones en otro directorio no se borrarn)" - -LangString update_check_older ${LANG_SPANISH} "Buenas noticias! Hay disponible una nueva versin, Quieres actualizar?" -LangString update_check_equal ${LANG_SPANISH} "Ya tienes la ltima versin instalada" -LangString update_check_newer ${LANG_SPANISH} "Ya tienes la ltima versin instalada" -LangString update_check_failed ${LANG_SPANISH} "La comprobacin ha fallado, Quieres visitar la web para comprobar si existe una nueva versin?" +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; UltraStar Deluxe Worldparty Installer - Language file: Spanish +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ + +!insertmacro LANGFILE_EXT Spanish + +${LangFileString} abort_install "¿Seguro que quieres salir de la instalación?" +${LangFileString} abort_uninstall "¿Seguro que quieres salir de la desinstalación?" +${LangFileString} abort_update "¿Quieres cancelar la actualización?" +${LangFileString} oninit_running "El instalador ya esta funcionando" +${LangFileString} oninit_updating "La actualización ya esta funcionando" +${LangFileString} oninit_installagain "¿Seguro que quieres reinstalarlo?" +${LangFileString} oninit_alreadyinstalled "Ya esta instalado" +${LangFileString} oninit_closeusdx "No puedo desinstalar ultrastar mientras esta funcionando, ¿quieres cerrarlo?" +${LangFileString} oninit_updateusdx "¿Quieres actualizar la instalación desde...?" +${LangFileString} oninit_uninstall "¿Quieres desinstalar la antigua versión? (recomendado)" + +${LangFileString} update_connect "Estableciendo conexión a internet para comprobar una nueva versión" +${LangFileString} button_next "Siguiente" +${LangFileString} button_close "Cerrar" +${LangFileString} update_information "Puedes comprobar si existe una nueva versión del juego. Si existe una actualización será instalada." +${LangFileString} button_check_update "Comprobar" + +${LangFileString} update_noinstallation_online "Ninguna versión está instalada. El instalador no puede actualizar tu versión. Comprueba nuestra web ${homepage} para descargar la última versión." +${LangFileString} update_noinstallation_offline "Ninguna versión está instalada. El instalador no puede actualizar tu versión. Comprueba nuestra web ${homepage} para descargar la última versión." +${LangFileString} update_check_offline "$installed_version está actualizado." +${LangFileString} update_check_older "¡Buenas noticias! Hay disponible una nueva versión, ¿Quieres actualizar?" +${LangFileString} update_check_equal "Ya tienes la última versión instalada" +${LangFileString} update_check_newer "Ya tienes la última versión instalada" +${LangFileString} update_check_no "El instalador no puede actualizar tu versión. Comprueba nuestra web ${homepage} para conseguir una nueva versión." +${LangFileString} update_check_failed "La comprobación ha fallado, ¿Quieres visitar la web para comprobar si existe una nueva versión?" +;TODO ${LangFileString} update_download_success "The download of the new version $online_version succeeded.$\r$\n$\r$\nFinish the update by closing this updater. The new installation will be started right after." +;TODO ${LangFileString} update_download_failed "The download of the new version $online_version failed. The installer could not be downloaded.$\r$\n$\r$\nPlease, visit our website ${homepage} for the new version." +;TODO ${LangFileString} update_download_aborted "The download of the new version $online_version was aborted. Nothing will be updated. Remember, visit our website ${homepage} for latest news and updates." +;TODO ${LangFileString} update_download_invalid_installer "The download of the new version $online_version failed. The downloaded installer was invalid. This can happen if the server/website has some issues, does not exist anymore or is in maintenance mode.$\r$\n$\r$\nPlease, visit our website ${homepage} and download the installer manually." +;TODO ${LangFileString} update_download_none "No version to download selected. The current installer cannot update your version. Check our website ${homepage} for latest news and updates." +;TODO ${LangFileString} update_versions_info "At least one new version of ${name} has been found. Please, select a specific version and choose to update. This version will be downloaded and the installation will be started afterwards." +${LangFileString} update_versions_none "Ninguna" + +${LangFileString} update_download_downloading "Descargando %s " +${LangFileString} update_download_connecting "conectando ... " +${LangFileString} update_download_sec "seg" +${LangFileString} update_download_min "min" +${LangFileString} update_download_hour "hora" +${LangFileString} update_download_multi "s" +${LangFileString} update_download_progress "%dkiB (%d%%) of %dkiB @ %d.%02dkiB/s" +${LangFileString} update_download_remaining " (%d %s%s restante)" +${LangFileString} update_download_remain_sec " (1 segundo restante)" +${LangFileString} update_download_remain_min " (1 minuto restante)" +${LangFileString} update_download_remain_hour " (1 hora restante)" +${LangFileString} update_download_remain_secs " (%u segundos restantes)" +${LangFileString} update_download_remain_mins " (%u minutos restantes)" +${LangFileString} update_download_remain_hours " (%u horas restantes)" ; Welcome Page: -LangString page_welcome_title_update ${LANG_SPANISH} "Bienvenido al asistente de instalacin de UltraStar Deluxe WorldParty" -LangString page_welcome_txt_update ${LANG_SPANISH} "El asistente te guiar a travs de este proceso. UltraStar Deluxe WorldParty es un juego gratuito y libre, con el que podrs emular a tus artistas favoritos.$\n$\r$\n$\r Para ms informacin, visita nuestra pgina web oficial:$\n$\r$\n$\rhttp://ultrastar-es.org$\n$\r" -LangString page_welcome_title ${LANG_SPANISH} "Bienvenido a la instalacin de UltraStar Deluxe Worldparty" -LangString page_welcome_txt ${LANG_SPANISH} "El asistente te guiar a travs de este proceso. UltraStar Deluxe WorldParty es un juego gratuito y libre, con el que podrs emular a tus artistas favoritos.$\n$\r$\n$\r Para ms informacin, visita nuestra pgina web oficial:$\n$\r$\n$\rhttp://ultrastar-es.org$\n$\r" -LangString page_un_welcome_title ${LANG_SPANISH} "Bienvenido a la desinstalacin de UltraStar Deluxe WorldPparty" - -; Components Page: - -LangString page_components_info ${LANG_SPANISH} "Muvete por los componentes para ms detalles" +${LangFileString} page_welcome_title_update "Bienvenido al asistente de instalación de UltraStar Deluxe WorldParty" +${LangFileString} page_welcome_txt_update "El asistente te guiará a través de este proceso. UltraStar Deluxe WorldParty es un juego gratuito y libre, con el que podrás emular a tus artistas favoritos.$\n$\r$\n$\r Para más información, visita nuestra página web oficial:$\n$\r$\n$\r${homepage}$\n$\r" +${LangFileString} page_welcome_title "Bienvenido a la instalación de UltraStar Deluxe Worldparty" +${LangFileString} page_welcome_txt "El asistente te guiará a través de este proceso. UltraStar Deluxe WorldParty es un juego gratuito y libre, con el que podrás emular a tus artistas favoritos.$\n$\r$\n$\r Para más información, visita nuestra página web oficial:$\n$\r$\n$\r${homepage}$\n$\r" +${LangFileString} page_un_welcome_title "Bienvenido a la desinstalación de UltraStar Deluxe Worldparty" ; Custom Page -LangString page_settings_fullscreen ${LANG_SPANISH} "Pantalla completa" -LangString page_settings_subtitle ${LANG_SPANISH} "Configura rpidamente tu UltraStar Deluxe WorldParty." +${LangFileString} page_settings_subtitle "Configura rápidamente tu ${name}." +${LangFileString} page_settings_config_title "Configuración de ${name} (opcional)" +${LangFileString} page_settings_config_info "Toda la configuración será cambiada más tarde." +${LangFileString} page_settings_fullscreen_label "Pantalla completa:" +${LangFileString} page_settings_fullscreen_info "¿Ejecutar el juego en ventana o pantalla completa?" +${LangFileString} page_settings_language_label "Idioma:" +${LangFileString} page_settings_language_info "Elige un idioma." +${LangFileString} page_settings_resolution_label "Resolución:" +${LangFileString} page_settings_resolution_info "Elige una resolución / Tamaño de la ventana." +${LangFileString} page_settings_tabs_label "Etiquetas" +${LangFileString} page_settings_tabs_info "¿Quieres clasificar las canciones en carpetas?" +${LangFileString} page_settings_sorting_label "Ordenar por:" +${LangFileString} page_settings_sorting_info "Selecciona un criterio para ordenar las canciones." +${LangFileString} page_settings_songdir_label "SongDir" +${LangFileString} page_settings_songdir_info "Elige un directorio adicional para tus canciones." ; Finish Page: -LangString page_finish_txt ${LANG_SPANISH} "UltraStar Deluxe Worldparty ha sido instalado con xito.$\n$\r$\n$\rVisita nuestra pgina web para obtener las ltimas noticias y actualizaciones." -LangString page_finish_linktxt ${LANG_SPANISH} "http:\\ultrastar-es.org" -LangString page_finish_desktop ${LANG_SPANISH} "Quieres crear un acceso directo?" - -; Start Menu and Shortcuts +${LangFileString} page_finish_txt "${name} ha sido instalado con éxito.$\r$\n$\r$\nVisita nuestra página web para obtener las últimas noticias y actualizaciones." +${LangFileString} page_finish_linktxt "Página web" +${LangFileString} page_finish_desktop "¿Quieres crear un acceso directo?" -LangString sm_shortcut ${LANG_SPANISH} "UltraStar Deluxe WorldParty" -LangString sm_uninstall ${LANG_SPANISH} "Desinstalar" -LangString sm_website ${LANG_SPANISH} "Pgina web oficial" -LangString sm_license ${LANG_SPANISH} "Licencia" -LangString sm_readme ${LANG_SPANISH} "Leme" -LangString sm_songs ${LANG_SPANISH} "Canciones" -LangString sm_documentation ${LANG_SPANISH} "Documentacin" +;unused +${LangFileString} page_finish_txt_update "Hay una nueva actualización de ${name}" -LangString sc_play ${LANG_SPANISH} "Jugar ahora" -LangString sc_desktop ${LANG_SPANISH} "Quieres crear un acceso directo?" +; Start Menu and Shortcuts +${LangFileString} sm_shortcut "${name}" +${LangFileString} sm_uninstall "Desinstalar" +${LangFileString} sm_website "Página web oficial" +${LangFileString} sm_license "Licencia" +${LangFileString} sm_readme "Léeme" +${LangFileString} sm_songs "Canciones" +${LangFileString} sm_update "Actualizar" +${LangFileString} sm_documentation "Documentación" + +${LangFileString} sc_play "Jugar ahora" +${LangFileString} sc_desktop "¿Quieres crear un acceso directo?" diff --git a/installer/languages/convert.sh b/installer/languages/convert.sh new file mode 100644 index 00000000..34779d0f --- /dev/null +++ b/installer/languages/convert.sh @@ -0,0 +1,70 @@ +#!/bin/bash +# See: http://www.microsoft.com/resources/msdn/goglobal/default.mspx?OS=Windows%20Vista + +declare -a forceLang=() +declare -a forceCP=() + +function convertUTF8 { + local fromcp; + local fromcptext; + if [ ! -f "$1" ]; then + echo "skip $1: does not exist" + return + fi + + fromcp=`getCP "$1"` + if [ -n "$fromcp" ]; then + fromcptext=" from $fromcp"; + fromcp=" -f $fromcp" + fi + + # UTF-8 BOM (0xEF 0xBB 0xBF) + BOM=`echo -n -e "\0357\0273\0277"` + HEADER=`head -c3 "$1"` + if [ "$HEADER" != "$BOM" ]; then + echo -n "Convert $1$fromcptext to UTF8" + echo -n $BOM >"$1.tmp" + ERROR=$(iconv $fromcp -t UTF-8 "$1" 2>&1 >> "$1.tmp" ) + + if [ -z "$ERROR" ]; then + mv "$1.tmp" "$1" + echo "... done." + else + # file wasn't converted propertly + rm -f "$1.tmp" + echo ". Error, unable to convert. Check $1.log" + echo $ERROR>"$1.log" + fi + else + echo "skip $1: already UTF8" + fi +} + +function Force() { + forceLang+=($1.ini) + forceCP+=($2) +} + +function getCP () { + local e + local found + local value=$1 + + i=0 + for e in "${forceLang[@]}" + do + if [ "$e" == "$value" ] ; then + echo ${forceCP[$i]} + return 1 + fi + let i=i+1 + done + + return 0 +} + +# Enable forcing a specific codepage to convert from +# add likes like the following to do so +#Force "Spanish" "CP1252" + +for f in *.nsh; do convertUTF8 "$f"; done diff --git a/installer/languages/translations.txt b/installer/languages/translations.txt index a62ee8c9..adca594d 100644 --- a/installer/languages/translations.txt +++ b/installer/languages/translations.txt @@ -6,11 +6,10 @@ If you want to translate the installer, just: - Take English.nsh and edit each variabe within the "" -- Replace LANG_ENGLISH with the name of your language (in english). +- Replace English in the header with your language (in english) + "!insertmacro LANGFILE_EXT English" -Please also edit the following file -for translating the settings screen: - -..\settings\settings-1033.ini +Please also edit the following file: +..\settings\languages.nsh Thanks for your help in advance! \ No newline at end of file diff --git a/installer/languages/update.py b/installer/languages/update.py new file mode 100644 index 00000000..cf2eeef9 --- /dev/null +++ b/installer/languages/update.py @@ -0,0 +1,291 @@ +#!/usr/bin/python + +# UltraStar Deluxe - Karaoke Game +# +# UltraStar Deluxe is the legal property of its developers, whose names +# are too numerous to list here. Please refer to the COPYRIGHT +# file distributed with this source distribution. +# +# 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 Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +from __future__ import with_statement, print_function +from collections import OrderedDict + +import re +import sys +import os +import codecs + +def xopen(file, mode, encoding): + if sys.version_info[0] > 2: + return open(file=file, mode=mode, encoding=encoding) + else: + return open(name=file, mode=mode) + +def xwriteline(file, content): + if sys.version_info[0] > 2: + # line endings should be handled by the file writer in newer python version + file.write(content + u"\n") + else: + # binary mode does not convert "\n" to the os specific line-ending. + # Use os.linesep instead. + file.write(content + os.linesep) + +def xutf8header(): + if sys.version_info[0] > 2: + return u'\ufeff'; + else: + return codecs.BOM_UTF8; + +def parse(lines, regpat): + #print("Processing %s..." % (file)) + listk = [] + listv = [] + for line in lines: + m = regpat.match(line) + if (m): + listk.append(m.group('key')) + listv.append(m.group('trans')) + #print("Key: %s Value: %s" % (m.group('key'), m.group('trans'))) + else: + listk.append("") + listv.append("") + + return listk, listv + +# buffer english file (always open binary, handle newline uniformly as "\n") +english = [] + +#sys.exit(1) + +with xopen("English.nsh", "rU", encoding="utf8") as f: + for line in f: + english.append(line.strip()) + +transPattern = re.compile('^\s*\$.*?\s+(?P[\w_0-9]+)\s+"(?P.*)"$') +headerPattern = re.compile('!insertmacro\s+(LANG[\w_0-9]*)\s*(?P[\w_0-9]+)') +headerReplacement = '!insertmacro LANGFILE_EXT %s' +replacementPattern = '${LangFileString} %s "%s"' + + +englishkeys,englishtrans = parse(english, transPattern) +print("Source lines count: %i" % (len(english))) +print("Source translations count: %i" % (len(englishkeys)-englishkeys.count(""))) +print("Source arrays: %i %i %i" % (len(english), len(englishkeys), len(englishtrans))) + +def update(lang, createortransfer = False, noremove = False): + print("\nUpdate " + lang) + + langname = lang + m = re.match("(\w+)\.", lang) + if (m): langname = m.group(1) + + # buffer translation file (always open binary, handle newline uniformly) + langlines = [] + langcheck = [] + langkeys = [] + langtrans = [] + if os.path.exists(lang): + with xopen(lang, "rU", encoding="utf8") as f: + for line in f: + stripped = line.strip() + langlines.append(stripped) + m = transPattern.match(stripped) + if (m): + langcheck.append(True) + langkeys.append(m.group('key')) + langtrans.append(m.group('trans')) + else: + langcheck.append(False) + langkeys.append("") + langtrans.append("") + + if createortransfer == True: + with xopen(lang, 'w', encoding='utf-8') as f: + n = len(english) + headerset = False + for i in range(0, n): + key = englishkeys[i] + if (key == ""): + if not headerset and headerPattern.match(english[i]): + xwriteline(f, headerReplacement % langname) + headerset = True + else: + xwriteline(f, english[i]) + elif (key in langkeys): + index = langkeys.index(key) + newstring = replacementPattern % (key, langtrans[index]); + xwriteline(f, newstring) + else: + print("key %s not in translation file" % (key)) + newstring = ";TODO " +replacementPattern % (key, ""); + xwriteline(f, newstring) + + return + + # create a backup first + if os.path.exists(lang): + oldLang = lang + ".bak" + if (os.path.exists(oldLang)): + os.remove(oldLang) + os.rename(lang, oldLang) + + outList = [] + outKeys = [] + outTodo = [] + haskeys = False + transindex = 0 + headerset = False + + # copy lines into arrays to sort new entries into + # remove lines which do not exist in new language file + n = len(langlines) + for i in range(0, n): + if re.match("\s*;\s*TODO", langlines[i]): + print("Old TODO removed: %s" % (langlines[i])) + continue + + key = langkeys[i] + if key == "": + outList.append(langlines[i]) + outKeys.append("") + outTodo.append(False) + continue + + + if key not in englishkeys: + if noremove: + outList.append(langlines[i]) + outKeys.append("") + outTodo.append(False) + continue + else: + print("Removed '%s' with: %s" % (key, langlines[i])) + + # check if previous entries should also be removed + if len(outKeys) > 0 and (i>= n or langcheck[i+1] == False): + w = len(outList)-1 + while w>=0: + if (re.match("^\s*;", outList[w])) and haskeys: outList.pop() # is a comment + elif (outKeys[w] == False or outList[w] == ""): outList.pop() + else: break; + w -= 1 + + else: + # find a previous key which also exists in the copied list + index_insert = -1 + index_in_eng = englishkeys.index(key) + + w = index_in_eng-1 + while w >= 0: + if englishkeys[w] == "": break # previous item wasn't a key, append to list + elif englishkeys[w] in outKeys: + index_insert = outKeys.index(englishkeys[w]) + break + w -= 1 + + if index_insert >= 0: + outList.insert(index_insert+1, langlines[i]) + outKeys.insert(index_insert+1, langkeys[i]) + outTodo.insert(index_insert+1, False) + else: + outList.append(langlines[i]) + outKeys.append(langkeys[i]) + outTodo.append(False) + + haskeys = True + + + # insert new entries into + n = len(englishkeys) + for i in range(0, n): + key = englishkeys[i] + if key == "": continue + if key in outKeys: continue + + # find a previous key which also exists in the copied list + index_insert = -1 + index_in_eng = englishkeys.index(key) + + w = index_in_eng-1 + while w >= 0: + if englishkeys[w] == "": break # previous item wasn't a key, skip and search for next + elif re.match("^\s*;", englishkeys[w]): break # is a comment + elif englishkeys[w] in outKeys: + index_insert = outKeys.index(englishkeys[w]) + break + w -= 1 + + if index_insert >= 0: + outList.insert(index_insert+1, english[i]) + outKeys.insert(index_insert+1, key) + outTodo.insert(index_insert+1, True) + else: + w = index_in_eng+1 + while w < len(outList): + if englishkeys[w] == "": break # next item wasn't a key, skip. append to list + elif re.match("^\s*;", outList[w]): break # is a comment + elif englishkeys[w] in outKeys: + index_insert = outKeys.index(englishkeys[w])+1 + break + w += 1 + + if index_insert >= 0: + outList.insert(index_insert-1, english[i]) + outKeys.insert(index_insert-1, key) + outTodo.insert(index_insert-1, True) + + if index_insert < 0: + outList.append(english[i]) + outKeys.append(key) + outTodo.append(True) + + langkeys = [] + + print ("Lines %i" % (len(langlines))) + print ("Translations %i" % (langcheck.count(True))) + + print ("Removed translations: %i" % (0 if noremove else langcheck.count(True) - ((len(outTodo)-outKeys.count("")) - outTodo.count(True)))) + print ("New translations: %i" % (outTodo.count(True))) + + with xopen(lang, 'w', encoding='utf-8') as f: + n = len(outList) + for i in range(0, n): + if outTodo[i] == True: + xwriteline(f, ";TODO "+outList[i]) + else: + xwriteline(f, outList[i]) + + +if len(sys.argv) >= 2: + # update specific language file passed as command-line argument + createortransfer = False + if len(sys.argv) > 2: createortransfer = sys.argv[2]; + noremove = False + if len(sys.argv) > 3: noremove = sys.argv[3]; + update(sys.argv[1], createortransfer, noremove) +else: + # update all language (nsh) files + nshList=os.listdir(".") + for nsh in nshList: + if not re.search(".nsh$", nsh): + continue + if nsh == "English.nsh": + continue + update(nsh); + + # update template (do not use an .nsi prefix as NSIS might load it) + update("Language.new"); diff --git a/installer/nsResize.nsh b/installer/nsResize.nsh new file mode 100644 index 00000000..7573f721 --- /dev/null +++ b/installer/nsResize.nsh @@ -0,0 +1,187 @@ +!ifndef __nsResize_NSH__ +!define __nsResize_NSH__ + +!macro __nsResize_AddParent Id X Y W H + GetDlgItem $R0 $HWNDPARENT ${Id} + nsResize::Add $R0 ${X} ${Y} ${W} ${H} +!macroend + +!macro __nsResize_AddChild Id X Y W H + GetDlgItem $R1 $R0 ${Id} + nsResize::Add $R1 ${X} ${Y} ${W} ${H} +!macroend + +!macro _nsResize_Window AddWidth AddHeight + + Push $R0 + nsResize::Add $HWNDPARENT 0 0 ${AddWidth} ${AddHeight} + ${If} $(^RTL) == 1 + !insertmacro __nsResize_AddParent 3 0 ${AddHeight} 0 0 + !insertmacro __nsResize_AddParent 1 0 ${AddHeight} 0 0 + !insertmacro __nsResize_AddParent 2 0 ${AddHeight} 0 0 + ${Else} + !insertmacro __nsResize_AddParent 3 ${AddWidth} ${AddHeight} 0 0 + !insertmacro __nsResize_AddParent 1 ${AddWidth} ${AddHeight} 0 0 + !insertmacro __nsResize_AddParent 2 ${AddWidth} ${AddHeight} 0 0 + !insertmacro __nsResize_AddParent 1039 ${AddWidth} 0 0 0 + ${EndIf} + !insertmacro __nsResize_AddParent 1018 0 0 ${AddWidth} ${AddHeight} + !insertmacro __nsResize_AddParent 1044 0 0 ${AddWidth} ${AddHeight} + !insertmacro __nsResize_AddParent 1035 0 ${AddHeight} ${AddWidth} 0 + !insertmacro __nsResize_AddParent 1036 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddParent 1045 0 ${AddHeight} ${AddWidth} 0 + !insertmacro __nsResize_AddParent 1256 0 ${AddHeight} ${AddWidth} 0 + !insertmacro __nsResize_AddParent 1028 0 ${AddHeight} ${AddWidth} 0 + !insertmacro __nsResize_AddParent 1034 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddParent 1037 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddParent 1038 0 0 ${AddWidth} 0 + Pop $R0 + +!macroend +!define nsResize_Window `!insertmacro _nsResize_Window` + +!macro _nsResize_WelcomePage AddWidth AddHeight + + nsResize::Add $mui.WelcomePage.Image 0 0 0 ${AddHeight} + ${If} $(^RTL) == 1 + nsResize::Add $mui.WelcomePage.Title -${AddWidth} 0 ${AddWidth} 0 + nsResize::Add $mui.WelcomePage.Text -${AddWidth} 0 ${AddWidth} ${AddHeight} + ${Else} + nsResize::Add $mui.WelcomePage.Title 0 0 ${AddWidth} 0 + nsResize::Add $mui.WelcomePage.Text 0 0 ${AddWidth} ${AddHeight} + ${EndIf} + +!macroend +!define nsResize_WelcomePage `!insertmacro _nsResize_WelcomePage` + +!macro _nsResize_LicensePage AddWidth AddHeight + + Push $R0 + Push $R1 + FindWindow $R0 `#32770` `` $HWNDPARENT + nsResize::Add $R0 0 0 ${AddWidth} ${AddHeight} + !insertmacro __nsResize_AddChild 1040 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1000 0 0 ${AddWidth} ${AddHeight} + !insertmacro __nsResize_AddChild 1006 0 ${AddHeight} ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1034 0 ${AddHeight} ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1035 0 ${AddHeight} ${AddWidth} 0 + Pop $R1 + Pop $R0 + +!macroend +!define nsResize_LicensePage `!insertmacro _nsResize_LicensePage` + +!macro _nsResize_DirectoryPage AddWidth AddHeight + + Push $R0 + Push $R1 + FindWindow $R0 `#32770` `` $HWNDPARENT + nsResize::Add $R0 0 0 ${AddWidth} ${AddHeight} + !insertmacro __nsResize_AddChild 1019 0 0 ${AddWidth} 0 + ${If} $(^RTL) == 1 + !insertmacro __nsResize_AddChild 1024 ${AddWidth} 0 0 0 + !insertmacro __nsResize_AddChild 1023 ${AddWidth} 0 0 0 + ${Else} + !insertmacro __nsResize_AddChild 1001 ${AddWidth} 0 0 0 + !insertmacro __nsResize_AddChild 1008 ${AddWidth} 0 0 0 + ${EndIf} + !insertmacro __nsResize_AddChild 1006 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1020 0 0 ${AddWidth} 0 + Pop $R1 + Pop $R0 + +!macroend +!define nsResize_DirectoryPage `!insertmacro _nsResize_DirectoryPage` + +!macro _nsResize_ComponentsPage AddWidth AddHeight + + Push $R0 + Push $R1 + FindWindow $R0 `#32770` `` $HWNDPARENT + nsResize::Add $R0 0 0 ${AddWidth} ${AddHeight} + !insertmacro __nsResize_AddChild 1017 0 0 ${AddWidth} ${AddHeight} + ${If} $(^RTL) == 1 + !insertmacro __nsResize_AddChild 1022 ${AddWidth} 0 0 ${AddHeight} + !insertmacro __nsResize_AddChild 1021 ${AddWidth} 0 0 0 + !insertmacro __nsResize_AddChild 1023 ${AddWidth} ${AddHeight} 0 0 + ${Else} + !insertmacro __nsResize_AddChild 1022 0 0 0 ${AddHeight} + !insertmacro __nsResize_AddChild 1023 0 ${AddHeight} 0 0 + ${EndIf} + !insertmacro __nsResize_AddChild 1006 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1032 0 0 ${AddWidth} ${AddHeight} + !ifndef MUI_COMPONENTSPAGE_NODESC + !ifdef MUI_COMPONENTSPAGE_SMALLDESC + !insertmacro __nsResize_AddChild 1042 0 ${AddHeight} ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1043 0 ${AddHeight} ${AddWidth} 0 + !else + !insertmacro __nsResize_AddChild 1042 ${AddWidth} 0 0 ${AddHeight} + !insertmacro __nsResize_AddChild 1043 ${AddWidth} 0 0 ${AddHeight} + !endif + !endif + Pop $R1 + Pop $R0 + +!macroend +!define nsResize_ComponentsPage `!insertmacro _nsResize_ComponentsPage` + +!macro _nsResize_InstFilesPage AddWidth AddHeight + + Push $R0 + Push $R1 + FindWindow $R0 `#32770` `` $HWNDPARENT + nsResize::Add $R0 0 0 ${AddWidth} ${AddHeight} + !insertmacro __nsResize_AddChild 1004 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1006 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1016 0 0 ${AddWidth} ${AddHeight} + Pop $R1 + Pop $R0 + +!macroend +!define nsResize_InstFilesPage `!insertmacro _nsResize_InstFilesPage` + +!macro _nsResize_FinishPage AddWidth AddHeight + + nsResize::Add $mui.FinishPage.Image 0 0 0 ${AddHeight} + ${If} $(^RTL) == 1 + nsResize::Add $mui.FinishPage.Title -${AddWidth} 0 ${AddWidth} 0 + nsResize::Add $mui.FinishPage.Text -${AddWidth} 0 ${AddWidth} ${AddHeight} + ${Else} + nsResize::Add $mui.FinishPage.Title 0 0 ${AddWidth} 0 + nsResize::Add $mui.FinishPage.Text 0 0 ${AddWidth} ${AddHeight} + ${EndIf} + !ifdef MUI_FINISHPAGE_RUN_VARIABLES + nsResize::Add $mui.FinishPage.Run 0 ${AddHeight} 0 0 + !endif + !ifdef MUI_FINISHPAGE_SHOREADME_VARAIBLES ;not a typo! + nsResize::Add $mui.FinishPage.ShowReadme 0 ${AddHeight} 0 0 + !endif + !ifdef MUI_FINISHPAGE_LINK + nsResize::Add $mui.FinishPage.Link 0 ${AddHeight} 0 0 + !endif + !ifdef MUI_FINISHPAGE_REBOOT_VARIABLES + nsResize::Add $mui.FinishPage.RebootNow 0 ${AddHeight} 0 0 + nsResize::Add $mui.FinishPage.RebootLater 0 ${AddHeight} 0 0 + !endif + +!macroend +!define nsResize_FinishPage `!insertmacro _nsResize_FinishPage` + +!macro _nsResize_ConfirmPage AddWidth AddHeight + + Push $R0 + Push $R1 + FindWindow $R0 `#32770` `` $HWNDPARENT + nsResize::Add $R0 0 0 ${AddWidth} ${AddHeight} + ${If} $(^RTL) == 1 + !insertmacro __nsResize_AddChild 1029 ${AddWidth} 0 0 0 + ${EndIf} + !insertmacro __nsResize_AddChild 1000 0 0 ${AddWidth} 0 + !insertmacro __nsResize_AddChild 1006 0 0 ${AddWidth} 0 + Pop $R1 + Pop $R0 + +!macroend +!define nsResize_ConfirmPage `!insertmacro _nsResize_ConfirmPage` + +!endif \ No newline at end of file diff --git a/installer/settings/LCID Code.txt b/installer/settings/LCID Code.txt deleted file mode 100644 index 52cfbb49..00000000 --- a/installer/settings/LCID Code.txt +++ /dev/null @@ -1,8 +0,0 @@ -1031 - Alemo -1033 - Ingls -1038 - Hngaro -1045 - Polaco -2070 - Portugus -1034 - Espanhol - -add line Ultrastar Deluxe.nsi (574 e 510) \ No newline at end of file diff --git a/installer/settings/files_main_install.nsh b/installer/settings/files_main_install.nsh index e3ba4097..0bd1aab9 100644 --- a/installer/settings/files_main_install.nsh +++ b/installer/settings/files_main_install.nsh @@ -17,6 +17,8 @@ IfFileExists $INSTDIR\avutil-49.dll 0 +2 Delete "$INSTDIR\avutil-49.dll" IfFileExists $INSTDIR\bass.dll 0 +2 Delete "$INSTDIR\bass.dll" +IfFileExists $INSTDIR\bass_fx.dll 0 +2 +Delete "$INSTDIR\bass_fx.dll" IfFileExists $INSTDIR\bassmidi.dll 0 +2 Delete "$INSTDIR\bassmidi.dll" IfFileExists $INSTDIR\SDL.dll 0 +2 @@ -69,37 +71,44 @@ ${EndIf} SetOutPath "$INSTDIR" -File /r /x .svn /x .gitignore ..\game\avatars File /r /x .svn /x .gitignore ..\game\covers -File /r /x .svn /x .gitignore ..\game\fonts +File /r /x .svn /x .gitignore ..\game\themes File /r /x .svn /x .gitignore ..\game\languages -File /r /x .svn /x .gitignore ..\game\plugins -File /r /x .svn /x .gitignore ..\game\resources File /r /x .svn /x .gitignore ..\game\sounds -File /r /x .svn /x .gitignore ..\game\themes +File /r /x .svn /x .gitignore ..\game\fonts +File /r /x .svn /x .gitignore ..\game\resources File /r /x .svn /x .gitignore ..\game\visuals File /r /x .svn /x .gitignore ..\game\webs - +File /r /x .svn /x .gitignore ..\game\soundfonts +File /r /x .svn /x .gitignore ..\game\avatars +File /r /x .svn /x .gitignore ..\game\licenses ; Root dir: File .\dependencies\dll\*.dll -File ..\ChangeLog.txt -File ..\README.txt +;File ..\ChangeLog.txt +File ..\game\LuaCommands.odt +File ..\game\Readme.txt +File ..\README.md File .\dependencies\documents\license.txt +File .\dependencies\documents\thirdparty\* File .\dependencies\documents\documentation.pdf -File "..\game\${exe}.exe" +File ..\game\WorldParty.exe ; Covers dir: -;SetOutPath "$INSTDIR\covers" +SetOutPath "$INSTDIR\covers" -;IfFileExists $INSTDIR\covers\covers.ini +2 0 -;File ..\game\covers\covers.ini -;File ..\game\covers\NoCover.jpg -;File "..\game\covers\*.*" +IfFileExists $INSTDIR\covers\covers.ini +2 0 +File ..\game\covers\covers.ini +File ..\game\covers\NoCover.jpg +File "..\game\covers\*.*" ; Plugins dir: +SetOutPath "$INSTDIR\plugins\" +File "..\game\plugins\*.*" + +SetOutPath "$INSTDIR" diff --git a/installer/settings/files_main_uninstall.nsh b/installer/settings/files_main_uninstall.nsh index dc824864..613ba445 100644 --- a/installer/settings/files_main_uninstall.nsh +++ b/installer/settings/files_main_uninstall.nsh @@ -2,18 +2,6 @@ ; UltraStar Deluxe Uninstaller: Main components ; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; Delete created Icons in startmenu - - SetShellVarContext all - RMDir /r "$SMPROGRAMS\$ICONS_GROUP\" - -; Delete created Icon on Desktop - - Delete "$Desktop\Play UltraStar Deluxe WorldParty.lnk" - Delete "$Desktop\UltraStar Deluxe spielen.lnk" - Delete "$Desktop\UltraStar Deluxe karaoke.lnk" - Delete "$Desktop\Graj w UltraStar Deluxe WorldParty.lnk" - ; Remove dirs RMDir /r "$INSTDIR\plugins" @@ -26,57 +14,71 @@ RMDir /r "$INSTDIR\webs" RMDir /r "$INSTDIR\soundfonts" RMDir /r "$INSTDIR\avatars" + RMDir /r "$INSTDIR\licenses" ; Delete remaining files - Delete "$INSTDIR\ScoreConverter.exe" Delete "$INSTDIR\${exe}.exe" - Delete "$INSTDIR\ChangeLog.GERMAN.txt" + Delete "$INSTDIR\${exeupdate}.exe" + Delete "$INSTDIR\ScoreConverter.exe" Delete "$INSTDIR\ChangeLog.txt" Delete "$INSTDIR\LuaCommands.odt" Delete "$INSTDIR\documentation.pdf" - Delete "$INSTDIR\license.txt" - Delete "$INSTDIR\README.txt" + Delete "$INSTDIR\Readme.txt" Delete "$INSTDIR\screenshots.lnk" Delete "$INSTDIR\playlists.lnk" Delete "$INSTDIR\config.ini.lnk" + + ; delete third party licenses + Delete "$INSTDIR\LICENSE*" Delete "$INSTDIR\Error.log" Delete "$INSTDIR\Benchmark.log" Delete "$INSTDIR\cover.db" Delete "$INSTDIR\avatar.db" - Delete "$INSTDIR\avcodec-52.dll" - Delete "$INSTDIR\avformat-52.dll" - Delete "$INSTDIR\avfilter-1.dll" - Delete "$INSTDIR\avdevice-52.dll" - Delete "$INSTDIR\avutil-50.dll" + Delete "$INSTDIR\avcodec-57.dll" + Delete "$INSTDIR\avdevice-57.dll" + Delete "$INSTDIR\avfilter-6.dll" + Delete "$INSTDIR\avformat-57.dll" + Delete "$INSTDIR\avutil-55.dll" Delete "$INSTDIR\bass.dll" Delete "$INSTDIR\bassmidi.dll" + Delete "$INSTDIR\bass_fx.dll" + Delete "$INSTDIR\cv210.dll" + Delete "$INSTDIR\cxcore210.dll" Delete "$INSTDIR\freetype6.dll" Delete "$INSTDIR\glew32.dll" - Delete "$INSTDIR\jpeg.dll" - Delete "$INSTDIR\libpng12-0.dll" + Delete "$INSTDIR\highgui210.dll" + Delete "$INSTDIR\libcurl-3.dll" + Delete "$INSTDIR\libeay32.dll" + Delete "$INSTDIR\libFLAC-8.dll" + Delete "$INSTDIR\libfreetype6.dll" + Delete "$INSTDIR\libidn-11.dll" + Delete "$INSTDIR\libjpeg-9.dll" + Delete "$INSTDIR\libmodplug-1.dll" + Delete "$INSTDIR\libogg-0.dll" + Delete "$INSTDIR\libpng16-16.dll" Delete "$INSTDIR\libprojectM.dll" - Delete "$INSTDIR\libtiff-3.dll" + Delete "$INSTDIR\libprojectM2.dll" + Delete "$INSTDIR\libssl32.dll" + Delete "$INSTDIR\libtiff-5.dll" + Delete "$INSTDIR\libvorbis-0.dll" + Delete "$INSTDIR\libvorbisfile-3.dll" + Delete "$INSTDIR\libwebp-4.dll" Delete "$INSTDIR\lua5.1.dll" - Delete "$INSTDIR\lua51.dll" Delete "$INSTDIR\pcre3.dll" Delete "$INSTDIR\portaudio_x86.dll" Delete "$INSTDIR\portmixer.dll" + Delete "$INSTDIR\postproc-54.dll" Delete "$INSTDIR\projectM-cwrapper.dll" - Delete "$INSTDIR\SDL.dll" - Delete "$INSTDIR\SDL_image.dll" - Delete "$INSTDIR\SDL_ttf.dll" + Delete "$INSTDIR\SDL2.dll" + Delete "$INSTDIR\SDL2_image.dll" + Delete "$INSTDIR\SDL2_mixer.dll" + Delete "$INSTDIR\smpeg2.dll" Delete "$INSTDIR\sqlite3.dll" - Delete "$INSTDIR\swscale-0.dll" + Delete "$INSTDIR\swresample-2.dll" + Delete "$INSTDIR\swscale-4.dll" Delete "$INSTDIR\zlib1.dll" - Delete "$INSTDIR\libcurl-3.dll" - Delete "$INSTDIR\libeay32.dll" - Delete "$INSTDIR\libidn-11.dll" - Delete "$INSTDIR\libssl32.dll" - Delete "$INSTDIR\cv210.dll" - Delete "$INSTDIR\cxcore210.dll" - Delete "$INSTDIR\highgui210.dll" StrCpy $0 "$INSTDIR\songs" Call un.DeleteIfEmpty @@ -94,31 +96,31 @@ SetShellVarContext current - Delete "$APPDATA\ultrastardx\Error.log" - Delete "$APPDATA\ultrastardx\Benchmark.log" - Delete "$APPDATA\ultrastardx\cover.db" - Delete "$APPDATA\ultrastardx\avatar.db" + Delete "$APPDATA\WorldParty\Error.log" + Delete "$APPDATA\WorldParty\Benchmark.log" + Delete "$APPDATA\WorldParty\cover.db" + Delete "$APPDATA\WorldParty\avatar.db" - StrCpy $0 "$APPDATA\ultrastardx\covers" + StrCpy $0 "$APPDATA\WorldParty\covers" Call un.DeleteIfEmpty - StrCpy $0 "$APPDATA\ultrastardx\songs" + StrCpy $0 "$APPDATA\WorldParty\songs" Call un.DeleteIfEmpty - StrCpy $0 "$APPDATA\ultrastardx\screenshots" + StrCpy $0 "$APPDATA\WorldParty\screenshots" Call un.DeleteIfEmpty - StrCpy $0 "$APPDATA\ultrastardx\playlists" + StrCpy $0 "$APPDATA\WorldParty\playlists" Call un.DeleteIfEmpty - StrCpy $0 "$APPDATA\ultrastardx" + StrCpy $0 "$APPDATA\WorldParty" Call un.DeleteIfEmpty SetShellVarContext all ; Self delete: - Delete "$INSTDIR\Uninstall.exe" + Delete "$INSTDIR\${exeuninstall}.exe" StrCpy $0 "$INSTDIR" Call un.DeleteIfEmpty \ No newline at end of file diff --git a/installer/settings/files_opt_songs.nsh b/installer/settings/files_opt_songs.nsh deleted file mode 100644 index 6dc9720a..00000000 --- a/installer/settings/files_opt_songs.nsh +++ /dev/null @@ -1,931 +0,0 @@ -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ -; UltraStar Deluxe Installer: Download optional songs -; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ - -SectionGroup $(name_section2) Section2 - -;----------------------------------------------------------------------- -; BODO WARTKE -;----------------------------------------------------------------------- -Section /o "Bodo Wartke - Liebeslied (Love Song)" g2Section1 - - AddSize 10343 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_song1} $LOCALAPPDATA\Temp\Song-BodoWartke-LoveSong.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-BodoWartke-LoveSong.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-BodoWartke-LoveSong.zip" - - SetOutPath "$INSTDIR" - -SectionEnd - -;----------------------------------------------------------------------- -; Dead Smiling Pirates - I 18 -;----------------------------------------------------------------------- - -Section /o "Dead Smiling Pirates - I 18" g2Section2 - AddSize 2816 - SetOverwrite try - SetOutPath "$INSTDIR" - CreateDirectory "$INSTDIR\songs\Dead Smiling Pirates - I 18" - SetOutPath "$INSTDIR\songs\Dead Smiling Pirates - I 18\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_song2} $LOCALAPPDATA\Temp\Song-I-18.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-I-18.zip" "$INSTDIR\songs\Dead Smiling Pirates - I 18\" - - Delete "$LOCALAPPDATA\Temp\Song-I-18.zip" - - SetOutPath "$INSTDIR" - -SectionEnd - -;----------------------------------------------------------------------- -; Jonathan Coulton Songs -;----------------------------------------------------------------------- - -SectionGroup $(name_s2_sub1) s2_sub1 - -Section /o "A Talk With George" s2_sub1_Section15 - - AddSize 4076 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song15} $LOCALAPPDATA\Temp\Song-JC-ATWG.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-ATWG.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-ATWG.zip" - - SetOutPath "$INSTDIR" -SectionEnd -;----------------------------------------------------------------------- -Section /o "Better" s2_sub1_Section19 - - AddSize 4199 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song19} $LOCALAPPDATA\Temp\Song-JC-Better.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-Better.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-Better.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Monkey Shines" s2_sub1_Section1 - - AddSize 1455 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song1} $LOCALAPPDATA\Temp\Song-JC-MS.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-MS.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-MS.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "I Crush Everything" s2_sub1_Section2 - - AddSize 7127 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song2} $LOCALAPPDATA\Temp\Song-JC-ICE.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-ICE.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-ICE.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Not About You" s2_sub1_Section3 - - AddSize 3492 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song3} $LOCALAPPDATA\Temp\Song-JC-NAY.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-NAY.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-NAY.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Mr. Fancy Pants" s2_sub1_Section4 - - AddSize 2427 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song4} $LOCALAPPDATA\Temp\Song-JC-MFP.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-MFP.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-MFP.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Big Bad World One" s2_sub1_Section5 - - AddSize 4424 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song5} $LOCALAPPDATA\Temp\Song-JC-BBWO.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-BBWO.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-BBWO.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Flickr" s2_sub1_Section6 - - AddSize 21607 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song6} $LOCALAPPDATA\Temp\Song-JC-Flickr.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-Flickr.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-Flickr.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "My Beige Bear" s2_sub1_Section7 - - AddSize 4926 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song7} $LOCALAPPDATA\Temp\Song-JC-MBB.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-MBB.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-MBB.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "The Future Soon" s2_sub1_Section8 - - AddSize 5612 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song8} $LOCALAPPDATA\Temp\Song-JC-TFS.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-TFS.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-TFS.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Ikea" s2_sub1_Section9 - - AddSize 4608 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song9} $LOCALAPPDATA\Temp\Song-JC-Ikea.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-Ikea.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-Ikea.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Furry Old Lobster" s2_sub1_Section10 - - AddSize 3288 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song10} $LOCALAPPDATA\Temp\Song-JC-FOL.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-FOL.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-FOL.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Code Monkey" s2_sub1_Section11 - - AddSize 21402 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song11} $LOCALAPPDATA\Temp\Song-JC-CM.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-CM.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-CM.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Im Your Moon" s2_sub1_Section12 - - AddSize 4916 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song12} $LOCALAPPDATA\Temp\Song-JC-IYM.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-IYM.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-IYM.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "First Of May" s2_sub1_Section13 - - AddSize 6257 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song13} $LOCALAPPDATA\Temp\Song-JC-FOM.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-FOM.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-FOM.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Dance, Soterious Johnson, Dance" s2_sub1_Section14 - - AddSize 5929 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song14} $LOCALAPPDATA\Temp\Song-JC-DSJD.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-DSJD.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-DSJD.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Creepy Doll" s2_sub1_Section16 - - AddSize 66560 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song16} $LOCALAPPDATA\Temp\Song-JC-CD.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-CD.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-CD.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "That Spells DNA" s2_sub1_Section17 - - AddSize 4158 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song17} $LOCALAPPDATA\Temp\Song-JC-TSDNA.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-TSDNA.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-TSDNA.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "When You Go" s2_sub1_Section18 - - AddSize 5755 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song18} $LOCALAPPDATA\Temp\Song-JC-WYG.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-WYG.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-WYG.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shop Vac" s2_sub1_Section20 - - AddSize 5448 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song20} $LOCALAPPDATA\Temp\Song-JC-SV.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-SV.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-SV.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "I Feel Fantastic" s2_sub1_Section21 - - AddSize 3851 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song21} $LOCALAPPDATA\Temp\Song-JC-IFF.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-IFF.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-IFF.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Re: Your Brains" s2_sub1_Section22 - - AddSize 7087 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song22} $LOCALAPPDATA\Temp\Song-JC-ReYB.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-ReYB.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-ReYB.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Skullcrusher Mountain" s2_sub1_Section23 - - AddSize 6298 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song23} $LOCALAPPDATA\Temp\Song-JC-SCM.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-SCM.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-SCM.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Chiron Beta Prime" s2_sub1_Section24 - - AddSize 38298 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub1_song24} $LOCALAPPDATA\Temp\Song-JC-CBP.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-JC-CBP.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-JC-CBP.zip" - - SetOutPath "$INSTDIR" - -SectionEnd - -SectionGroupEnd -;----------------------------------------------------------------------- -; Joshua Morin - On The Run -;----------------------------------------------------------------------- -Section /o "Joshua Morin - On The Run" g2Section3 - AddSize 3881 - SetOverwrite try - SetOutPath "$INSTDIR" - CreateDirectory "$INSTDIR\songs\Joshua Morin - On The Run" - SetOutPath "$INSTDIR\songs\Joshua Morin - On The Run\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_song3} $LOCALAPPDATA\Temp\Song-On-the-run.zip - - Pop $R0 ;Get the return value - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-On-the-run.zip" "$INSTDIR\songs\Joshua Morin - On The Run\" - - Delete "$LOCALAPPDATA\Temp\Song-On-the-run.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -; Pornophonique -;----------------------------------------------------------------------- -SectionGroup $(name_s2_sub4) s2_sub4 - -Section /o "Pornophonique - Space Invaders" g2Section4 - AddSize 3646 - SetOverwrite try - SetOutPath "$INSTDIR" - CreateDirectory "$INSTDIR\songs\Pornophonique - Space Invaders" - SetOutPath "$INSTDIR\songs\Pornophonique - Space Invaders\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_song4} $LOCALAPPDATA\Temp\Song-Space-Invaders.zip - - Pop $R0 ;Get the return value - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Space-Invaders.zip" "$INSTDIR\songs\Pornophonique - Space Invaders\" - - Delete "$LOCALAPPDATA\Temp\Song-Space-Invaders.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Pornophonique - Space Invaders (Karaoke)" g2Section6 - AddSize 3779 - SetOverwrite try - SetOutPath "$INSTDIR\songs" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_song6} $LOCALAPPDATA\Temp\Song-SpaceInvadersKAR.zip - - Pop $R0 ;Get the return value - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-SpaceInvadersKAR.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-SpaceInvadersKAR.zip" - - SetOutPath "$INSTDIR" - -SectionEnd - -SectionGroupEnd -;----------------------------------------------------------------------- -; Shearer -;----------------------------------------------------------------------- -SectionGroup $(name_s2_sub2) s2_sub2 - -Section /o "Shearer - 69" s2_sub2_Section1 - - AddSize 4557 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song1} $LOCALAPPDATA\Temp\Song-Shearer-69.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-69.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-69.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shearer - 69 (Karaoke)" s2_sub2_Section2 - - AddSize 4772 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song2} $LOCALAPPDATA\Temp\Song-Shearer-69-Kar.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-69-Kar.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-69-Kar.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shearer - Can't stop it" s2_sub2_Section3 - - AddSize 5510 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song3} $LOCALAPPDATA\Temp\Song-Shearer-CSI.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-CSI.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-CSI.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shearer - Can't stop it (Karaoke)" s2_sub2_Section4 - - AddSize 4178 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song4} $LOCALAPPDATA\Temp\Song-Shearer-CSI-Kar.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-CSI-Kar.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-CSI-Kar.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shearer - In My Hand" s2_sub2_Section5 - - AddSize 5960 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song5} $LOCALAPPDATA\Temp\Song-Shearer-IMH.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-IMH.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-IMH.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shearer - Man Song" s2_sub2_Section6 - - AddSize 7270 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song6} $LOCALAPPDATA\Temp\Song-Shearer-MS.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-MS.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-MS.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shearer - Man Song (Karaoke)" s2_sub2_Section7 - - AddSize 5807 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song7} $LOCALAPPDATA\Temp\Song-Shearer-MS-Kar.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-MS-Kar.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-MS-Kar.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shearer - Stay With Me" s2_sub2_Section8 - - AddSize 6400 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song8} $LOCALAPPDATA\Temp\Song-Shearer-SWM.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-SWM.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-SWM.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Shearer - Stay With Me (Karaoke)" s2_sub2_Section9 - - AddSize 5417 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub2_song9} $LOCALAPPDATA\Temp\Song-Shearer-SWM-Kar.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Shearer-SWM-Kar.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-Shearer-SWM-Kar.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -SectionGroupEnd - -Section /o "Steven Dunston - Northern Star" g2Section5 - AddSize 2427 - SetOverwrite try - SetOutPath "$INSTDIR" - CreateDirectory "$INSTDIR\songs\Steven Dunston - Northern Star" - SetOutPath "$INSTDIR\songs\Steven Dunston - Northern Star\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_song5} $LOCALAPPDATA\Temp\Song-Northern-Star.zip - - Pop $R0 ;Get the return value - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-Northern-Star.zip" "$INSTDIR\songs\Steven Dunston - Northern Star\" - - Delete "$LOCALAPPDATA\Temp\Song-Northern-Star.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -; Wise Guys -;----------------------------------------------------------------------- -SectionGroup $(name_s2_sub3) s2_sub3 - -Section /o "Wise Guys - Lebendig und krftig und schrfer" s2_sub3_Section1 - - AddSize 4015 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub3_song1} $LOCALAPPDATA\Temp\Song-WiseGuys-LUKUS.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-WiseGuys-LUKUS.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-WiseGuys-LUKUS.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Wise Guys - Mensch, wo bist du?" s2_sub3_Section2 - - AddSize 5335 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub3_song2} $LOCALAPPDATA\Temp\Song-WiseGuys-MWBD.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-WiseGuys-MWBD.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-WiseGuys-MWBD.zip" - - SetOutPath "$INSTDIR" - -SectionEnd -;----------------------------------------------------------------------- -Section /o "Wise Guys - Mensch, wo bist du? (Karaoke)" s2_sub3_Section3 - - AddSize 5335 - SetOverwrite try - SetOutPath "$INSTDIR\songs\" - -; Download song: - NSISdl::download /TIMEOUT=50000 ${download_sub3_song3} $LOCALAPPDATA\Temp\Song-WiseGuys-MWBDKar.zip - - Pop $R0 - StrCmp $R0 "success" dlok - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, click OK to Continue" /SD IDOK - dlok: - - ZipDLL::extractall "$LOCALAPPDATA\Temp\Song-WiseGuys-MWBDKar.zip" "$INSTDIR\songs\" - - Delete "$LOCALAPPDATA\Temp\Song-WiseGuys-MWBDKar.zip" - - SetOutPath "$INSTDIR" - -SectionEnd - -SectionGroupEnd - -SectionGroupEnd \ No newline at end of file diff --git a/installer/settings/functions.nsh b/installer/settings/functions.nsh index 0bb63ba7..f50749c1 100644 --- a/installer/settings/functions.nsh +++ b/installer/settings/functions.nsh @@ -1,9 +1,43 @@ +; Checks if the given file is a executable +; ${FileIsExecutable} "PATH" $ResultVar +Function FileIsExecutable + !define FileIsExecutable `!insertmacro FileIsExecutableCall` + + !macro FileIsExecutableCall _FILE _RESULT + Push `${_FILE}` + Call FileIsExecutable + Pop ${_RESULT} + !macroend + + Exch $0 + + FileOpen $1 $0 "r" # Open the file for reading + FileSeek $1 0 # Move the file pointer to the right position + FileReadByte $1 $2 # Read + FileReadByte $1 $3 # Read + FileClose $1 # Close the file + + # compare exe header + StrCmp $2 "77" 0 BadHeader + StrCmp $3 "90" 0 BadHeader + StrCpy $0 true + Goto End + +BadHeader: + SetErrors + StrCpy $0 false + +End: + Exch $0 + +FunctionEnd + ; Creates Desktop Shortcut(s) if ; checked on Finish Page Function CreateDesktopShortCuts SetOutPath "$INSTDIR" -CreateShortcut "$Desktop\$(sm_shortcut).lnk" "$INSTDIR\ultrastardx.exe" +CreateShortcut "$Desktop\$(sm_shortcut).lnk" "$INSTDIR\${exe}.exe" FunctionEnd ; Deletes only empty dirs which are diff --git a/installer/settings/languages.nsh b/installer/settings/languages.nsh new file mode 100644 index 00000000..4ed7d07d --- /dev/null +++ b/installer/settings/languages.nsh @@ -0,0 +1,17 @@ +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ +; UltraStar Deluxe Installer: Language support +; ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ ~+~ + +!insertmacro MUI_LANGUAGE "English" +!insertmacro MUI_LANGUAGE "German" +!insertmacro MUI_LANGUAGE "Hungarian" +!insertmacro MUI_LANGUAGE "Polish" +!insertmacro MUI_LANGUAGE "Portuguese" +!insertmacro MUI_LANGUAGE "Spanish" + +!insertmacro LANGFILE_INCLUDE "${path_languages}\English.nsh" +!insertmacro LANGFILE_INCLUDE_WITHDEFAULT "${path_languages}\German.nsh" "${path_languages}\English.nsh" +!insertmacro LANGFILE_INCLUDE_WITHDEFAULT "${path_languages}\Hungarian.nsh" "${path_languages}\English.nsh" +!insertmacro LANGFILE_INCLUDE_WITHDEFAULT "${path_languages}\Polish.nsh" "${path_languages}\English.nsh" +!insertmacro LANGFILE_INCLUDE_WITHDEFAULT "${path_languages}\Portuguese.nsh" "${path_languages}\English.nsh" +!insertmacro LANGFILE_INCLUDE_WITHDEFAULT "${path_languages}\Spanish.nsh" "${path_languages}\English.nsh" diff --git a/installer/settings/settings-1031.ini b/installer/settings/settings-1031.ini deleted file mode 100644 index eff57604..00000000 --- a/installer/settings/settings-1031.ini +++ /dev/null @@ -1,161 +0,0 @@ -[Settings] -NumFields=19 - -; Background Group of Settings Box -[Field 17] -Type=GroupBox -Left=0 -Top=0 -Right=300 -Bottom=140 -Text=UltraStar Deluxe Konfiguration (Optional) - -[Field 1] -Type=Label -Text="Vollbild Modus:" -Left=5 -Right=58 -Top=30 -Bottom=38 - -[Field 2] -Type=Label -Text="Sprache:" -Left=5 -Right=58 -Top=47 -Bottom=55 - -[Field 3] -Type=Label -Text="Auflsung:" -Left=5 -Right=58 -Top=64 -Bottom=72 - -[Field 4] -Type=Label -Text="Ordnerstruktur:" -Left=5 -Right=58 -Top=82 -Bottom=90 - -[Field 5] -Type=DropList -ListItems=On|Off -State=On -Left=62 -Right=152 -Top=28 -Bottom=39 - -[Field 6] -Type=DropList -ListItems=Catalan|Croatian|Czech|Danish|Dutch|English|Euskara|Finnish|French|German|Greek|Hungarian|Icelandic|Italian|Japanese|Luxembourgish|Norwegian|Polish|Portuguese|Serbian|Slovak|Slovenian|Spanish|Swedish -State=German -Left=62 -Right=152 -Top=45 -Bottom=56 - -[Field 7] -Type=DropList -ListItems=320x200|640x480|800x600|1024x768|1280x1024|1440x900|1680x1050|1920x1200 -State=800x600 -Left=62 -Right=152 -Top=62 -Bottom=73 - -[Field 8] -Type=DropList -ListItems=On|Off -State=Off -Left=62 -Right=152 -Top=81 -Bottom=91 - -[Field 9] -Type=Label -Text=Spiel im Fenster oder Vollbild starten? -Left=157 -Right=300 -Top=30 -Bottom=38 - -[Field 10] -Type=Label -Text=Alle Einstellungen knnen nachtrglich im Spielmen gendert werden. -Left=5 -Right=246 -Top=14 -Bottom=23 - -[Field 11] -Type=Label -Text=Passe die Sprache des Mens an. -Left=158 -Right=300 -Top=46 -Bottom=55 - -[Field 12] -Type=Label -Text=Whle die Auflsung/Fenstergre aus. -Left=157 -Right=300 -Top=64 -Bottom=72 - -[Field 13] -Type=Label -Text=Eine virtuelle Ordnerstruktur zum Anzeigen der Lieder verwenden? -Left=158 -Right=300 -Top=78 -Bottom=94 - -[Field 14] -Type=Label -Left=5 -Top=100 -Right=58 -Bottom=109 -Text=Sortierung: - -[Field 15] -Type=DropList -Left=62 -Top=100 -Right=152 -Bottom=111 -State=Artist -ListItems=Edition|Genre|Language|Folder|Title|Artist - -[Field 16] -Type=Label -Left=157 -Top=101 -Right=300 -Bottom=110 -Text=Kriterium zum Sortieren der Lieder whlen. - -[Field 18] -Type=DirRequest -Left=5 -Top=121 -Right=152 -Bottom=132 -Text=SongDir -State= - -[Field 19] -Type=Label -Left=158 -Top=119 -Right=295 -Bottom=134 -Text=Hier kann ein weiterer Ordner mit Songs fr UltraStar Deluxe angegeben werden. diff --git a/installer/settings/settings-1034.ini b/installer/settings/settings-1034.ini deleted file mode 100644 index 7cfb3b63..00000000 --- a/installer/settings/settings-1034.ini +++ /dev/null @@ -1,161 +0,0 @@ -[Settings] -NumFields=19 - -; Background Group of Settings Box -[Field 17] -Type=GroupBox -Left=1 -Top=1 -Right=300 -Bottom=140 -Text=Configuracin de UltraStar Deluxe Worldparty (opcional) - -[Field 1] -Type=Label -Text="Pantalla completa" -Left=5 -Right=58 -Top=28 -Bottom=47 - -[Field 2] -Type=Label -Text="Idioma:" -Left=5 -Right=58 -Top=48 -Bottom=55 - -[Field 3] -Type=Label -Text="Resolucin:" -Left=5 -Right=58 -Top=64 -Bottom=72 - -[Field 4] -Type=Label -Text="Mostrar carpetas:" -Left=5 -Right=58 -Top=80 -Bottom=97 - -[Field 5] -Type=DropList -ListItems=On|Off -State=On -Left=62 -Right=152 -Top=28 -Bottom=39 - -[Field 6] -Type=DropList -ListItems=Catalan|Croatian|Czech|Danish|Dutch|English|Euskara|Finnish|French|German|Greek|Hungarian|Icelandic|Italian|Japanese|Luxembourgish|Norwegian|Polish|Portuguese|Serbian|Slovak|Slovenian|Spanish|Swedish -State=English -Left=62 -Right=152 -Top=45 -Bottom=56 - -[Field 7] -Type=DropList -ListItems=320x200|640x480|800x600|1024x768|1280x1024|1440x900|1680x1050|1920x1200 -State=800x600 -Left=62 -Right=152 -Top=62 -Bottom=73 - -[Field 8] -Type=DropList -ListItems=On|Off -State=Off -Left=62 -Right=152 -Top=81 -Bottom=91 - -[Field 9] -Type=Label -Text=Ejecutar el juego en ventana o pantalla completa? -Left=157 -Right=300 -Top=28 -Bottom=44 - -[Field 10] -Type=Label -Text=No te preocupes, puedes configurar estos parmetros en el juego, ms tarde. -Left=5 -Right=260 -Top=14 -Bottom=23 - -[Field 11] -Type=Label -Text=Elige un idioma. -Left=158 -Right=300 -Top=46 -Bottom=55 - -[Field 12] -Type=Label -Text=Elige una resolucin / Tamao de la ventana. -Left=157 -Right=300 -Top=61 -Bottom=77 - -[Field 13] -Type=Label -Text=Quieres clasificar las canciones en carpetas? -Left=158 -Right=300 -Top=78 -Bottom=94 - -[Field 14] -Type=Label -Left=5 -Top=101 -Right=58 -Bottom=111 -Text=Ordenar por: - -[Field 15] -Type=DropList -Left=62 -Top=100 -Right=152 -Bottom=111 -State=Artist -ListItems=Edition|Genre|Language|Folder|Title|Artist - -[Field 16] -Type=Label -Left=157 -Top=98 -Right=300 -Bottom=115 -Text=Selecciona un criterio para ordenar las canciones. - -[Field 18] -Type=DirRequest -Left=5 -Top=121 -Right=152 -Bottom=132 -Text=SongDir -State= - -[Field 19] -Type=Label -Left=158 -Top=119 -Right=295 -Bottom=134 -Text=Elige un directorio adicional para tus canciones. \ No newline at end of file diff --git a/installer/settings/settings-1038.ini b/installer/settings/settings-1038.ini deleted file mode 100644 index b406f61d..00000000 --- a/installer/settings/settings-1038.ini +++ /dev/null @@ -1,161 +0,0 @@ -[Settings] -NumFields=19 - -; Background Group of Settings Box -[Field 17] -Type=GroupBox -Left=1 -Top=1 -Right=300 -Bottom=140 -Text=UltraStar Deluxe Configuration (optional) - -[Field 1] -Type=Label -Text="Teljes kpernys md:" -Left=5 -Right=58 -Top=30 -Bottom=38 - -[Field 2] -Type=Label -Text="Nyelv:" -Left=5 -Right=58 -Top=47 -Bottom=55 - -[Field 3] -Type=Label -Text="Felbonts:" -Left=5 -Right=58 -Top=64 -Bottom=72 - -[Field 4] -Type=Label -Text="Tabs:" -Left=5 -Right=58 -Top=82 -Bottom=90 - -[Field 5] -Type=DropList -ListItems=On|Off -State=On -Left=62 -Right=152 -Top=28 -Bottom=39 - -[Field 6] -Type=DropList -ListItems=Catalan|Croatian|Czech|Danish|Dutch|English|Euskara|Finnish|French|German|Greek|Hungarian|Icelandic|Italian|Japanese|Luxembourgish|Norwegian|Polish|Portuguese|Serbian|Slovak|Slovenian|Spanish|Swedish -State=Hungarian -Left=62 -Right=152 -Top=45 -Bottom=56 - -[Field 7] -Type=DropList -ListItems=320x200|640x480|800x600|1024x768|1280x1024|1440x900|1680x1050|1920x1200 -State=800x600 -Left=62 -Right=152 -Top=62 -Bottom=73 - -[Field 8] -Type=DropList -ListItems=On|Off -State=Off -Left=62 -Right=152 -Top=81 -Bottom=91 - -[Field 9] -Type=Label -Text=Start game in window or fullscreen? -Left=157 -Right=300 -Top=30 -Bottom=38 - -[Field 10] -Type=Label -Text=All settings can also be changed in the GUI later. -Left=5 -Right=246 -Top=14 -Bottom=23 - -[Field 11] -Type=Label -Text=Adjust the GUI language. -Left=158 -Right=300 -Top=46 -Bottom=55 - -[Field 12] -Type=Label -Text=Choose screen resolution/window size. -Left=157 -Right=300 -Top=64 -Bottom=72 - -[Field 13] -Type=Label -Text=Employ a virtual folder structure to show songs? -Left=158 -Right=300 -Top=78 -Bottom=94 - -[Field 14] -Type=Label -Left=5 -Top=100 -Right=58 -Bottom=109 -Text=Sorting: - -[Field 15] -Type=DropList -Left=62 -Top=100 -Right=152 -Bottom=111 -State=Artist -ListItems=Edition|Genre|Language|Folder|Title|Artist - -[Field 16] -Type=Label -Left=157 -Top=101 -Right=300 -Bottom=110 -Text=Select criterion to sort songs. - -[Field 18] -Type=DirRequest -Left=5 -Top=121 -Right=152 -Bottom=132 -Text=SongDir -State= - -[Field 19] -Type=Label -Left=158 -Top=119 -Right=295 -Bottom=134 -Text=Choose additional song directory for UltraStar Deluxe. diff --git a/installer/settings/settings-1045.ini b/installer/settings/settings-1045.ini deleted file mode 100644 index d61298b7..00000000 --- a/installer/settings/settings-1045.ini +++ /dev/null @@ -1,161 +0,0 @@ -[Settings] -NumFields=19 - -; Background Group of Settings Box -[Field 17] -Type=GroupBox -Left=1 -Top=1 -Right=300 -Bottom=140 -Text=Konfiguracja UltraStar Deluxe (opcjonalnie) - -[Field 1] -Type=Label -Text="Tryb Penoekranowy:" -Left=5 -Right=58 -Top=30 -Bottom=38 - -[Field 2] -Type=Label -Text="Jzyk:" -Left=5 -Right=58 -Top=47 -Bottom=55 - -[Field 3] -Type=Label -Text="Rozdzielczo:" -Left=5 -Right=58 -Top=64 -Bottom=72 - -[Field 4] -Type=Label -Text="Zakadki:" -Left=5 -Right=58 -Top=82 -Bottom=90 - -[Field 5] -Type=DropList -ListItems=On|Off -State=On -Left=62 -Right=152 -Top=28 -Bottom=39 - -[Field 6] -Type=DropList -ListItems=Catalan|Croatian|Czech|Danish|Dutch|English|Euskara|Finnish|French|German|Greek|Hungarian|Icelandic|Italian|Japanese|Luxembourgish|Norwegian|Polish|Portuguese|Serbian|Slovak|Slovenian|Spanish|Swedish -State=Polish -Left=62 -Right=152 -Top=45 -Bottom=56 - -[Field 7] -Type=DropList -ListItems=320x200|640x480|800x600|1024x768|1280x1024|1440x900|1680x1050|1920x1200 -State=800x600 -Left=62 -Right=152 -Top=62 -Bottom=73 - -[Field 8] -Type=DropList -ListItems=On|Off -State=Off -Left=62 -Right=152 -Top=81 -Bottom=91 - -[Field 9] -Type=Label -Text=Czy uruchamia gr w oknie czy na penym ekranie? -Left=157 -Right=300 -Top=30 -Bottom=38 - -[Field 10] -Type=Label -Text=Wszystkie ustawienia mona pniej zmieni w grze. -Left=5 -Right=246 -Top=14 -Bottom=23 - -[Field 11] -Type=Label -Text=Dostosuj jzyk GUI. -Left=158 -Right=300 -Top=46 -Bottom=55 - -[Field 12] -Type=Label -Text=Wybierz rozdzieczo ekrany/okna. -Left=157 -Right=300 -Top=64 -Bottom=72 - -[Field 13] -Type=Label -Text=Czy chcesz aby piosenki zostay pogrupowane na zakadki ? -Left=158 -Right=300 -Top=78 -Bottom=94 - -[Field 14] -Type=Label -Left=5 -Top=100 -Right=58 -Bottom=109 -Text=Sortowanie: - -[Field 15] -Type=DropList -Left=62 -Top=100 -Right=152 -Bottom=111 -State=Artist -ListItems=Edition|Genre|Language|Folder|Title|Artist - -[Field 16] -Type=Label -Left=157 -Top=101 -Right=300 -Bottom=110 -Text=Wybierz kryteria sortowania piosenek. - -[Field 18] -Type=DirRequest -Left=5 -Top=121 -Right=152 -Bottom=132 -Text=SongDir -State= - -[Field 19] -Type=Label -Left=158 -Top=119 -Right=295 -Bottom=134 -Text=Wybierz katalog w ktrym znajduj si piosenki? \ No newline at end of file diff --git a/installer/settings/settings-2070.ini b/installer/settings/settings-2070.ini deleted file mode 100644 index 286f7078..00000000 --- a/installer/settings/settings-2070.ini +++ /dev/null @@ -1,161 +0,0 @@ -[Settings] -NumFields=19 - -; Background Group of Settings Box -[Field 17] -Type=GroupBox -Left=1 -Top=1 -Right=300 -Bottom=140 -Text=Configurao UltraStar Deluxe (opcional) - -[Field 1] -Type=Label -Text="Modo Ecr:" -Left=5 -Right=58 -Top=30 -Bottom=38 - -[Field 2] -Type=Label -Text="Idioma:" -Left=5 -Right=58 -Top=47 -Bottom=55 - -[Field 3] -Type=Label -Text="Resoluo:" -Left=5 -Right=58 -Top=64 -Bottom=72 - -[Field 4] -Type=Label -Text="Subpastas:" -Left=5 -Right=58 -Top=82 -Bottom=90 - -[Field 5] -Type=DropList -ListItems=On|Off -State=Off -Left=62 -Right=152 -Top=28 -Bottom=39 - -[Field 6] -Type=DropList -ListItems=Catalan|Croatian|Czech|Danish|Dutch|English|Euskara|Finnish|French|German|Greek|Hungarian|Icelandic|Italian|Japanese|Luxembourgish|Norwegian|Polish|Portuguese|Serbian|Slovak|Slovenian|Spanish|Swedish -State=Portuguese -Left=62 -Right=152 -Top=45 -Bottom=56 - -[Field 7] -Type=DropList -ListItems=320x200|640x480|800x600|1024x768|1280x1024|1366x768|1440x900|1680x1050|1920x1200 -State=800x600 -Left=62 -Right=152 -Top=62 -Bottom=73 - -[Field 8] -Type=DropList -ListItems=On|Off -State=Off -Left=62 -Right=152 -Top=81 -Bottom=91 - -[Field 9] -Type=Label -Text=Iniciar jogo em janela ou ecr completo. -Left=157 -Right=300 -Top=30 -Bottom=38 - -[Field 10] -Type=Label -Text=Todas as opes podem ser posteriormente alteradas no jogo. -Left=5 -Right=246 -Top=14 -Bottom=23 - -[Field 11] -Type=Label -Text=Seleccione idioma. -Left=158 -Right=300 -Top=46 -Bottom=55 - -[Field 12] -Type=Label -Text=Escolha a resoluo. -Left=157 -Right=300 -Top=64 -Bottom=72 - -[Field 13] -Type=Label -Text=Pastas virtuais para mostrar canes. -Left=158 -Right=300 -Top=78 -Bottom=94 - -[Field 14] -Type=Label -Left=5 -Top=100 -Right=58 -Bottom=109 -Text=Ordenao: - -[Field 15] -Type=DropList -Left=62 -Top=100 -Right=152 -Bottom=111 -State=Artist -ListItems=Edition|Genre|Language|Folder|Title|Artist - -[Field 16] -Type=Label -Left=157 -Top=101 -Right=300 -Bottom=110 -Text=Seleccione o critrio de ordenao das canes. - -[Field 18] -Type=DirRequest -Left=5 -Top=121 -Right=152 -Bottom=132 -Text=Directoria das canes: -State= - -[Field 19] -Type=Label -Left=158 -Top=119 -Right=295 -Bottom=134 -Text=Escolha diretrio adicional para as canes do UltraStar deluxe. \ No newline at end of file diff --git a/installer/settings/settings-1033.ini b/installer/settings/settings.ini similarity index 79% rename from installer/settings/settings-1033.ini rename to installer/settings/settings.ini index 65d8b2ac..433a5f1c 100644 --- a/installer/settings/settings-1033.ini +++ b/installer/settings/settings.ini @@ -15,15 +15,15 @@ Type=Label Text="Fullscreen Mode:" Left=5 Right=58 -Top=30 -Bottom=38 +Top=28 +Bottom=47 [Field 2] Type=Label Text="Language:" Left=5 Right=58 -Top=47 +Top=48 Bottom=55 [Field 3] @@ -39,12 +39,12 @@ Type=Label Text="Tabs:" Left=5 Right=58 -Top=82 -Bottom=90 +Top=80 +Bottom=97 [Field 5] Type=DropList -ListItems=On|Off +ListItems=Borderless|On|Off State=On Left=62 Right=152 @@ -53,7 +53,7 @@ Bottom=39 [Field 6] Type=DropList -ListItems=Catalan|Croatian|Czech|Danish|Dutch|English|Euskara|Finnish|French|German|Greek|Hungarian|Icelandic|Italian|Japanese|Luxembourgish|Norwegian|Polish|Portuguese|Serbian|Slovak|Slovenian|Spanish|Swedish +ListItems=Catalan|Chinese|Croatian|Czech|Danish|Dutch|English|Euskara|Finnish|French|Scottish Gaelic|Galician|German|Greek|Hungarian|Icelandic|Italian|Japanese|Luxembourgish|Norwegian|Polish|Portuguese|Serbian|Slovak|Slovenian|Spanish|Swedish State=English Left=62 Right=152 @@ -83,14 +83,14 @@ Type=Label Text=Start game in window or fullscreen? Left=157 Right=300 -Top=30 -Bottom=38 +Top=28 +Bottom=44 [Field 10] Type=Label Text=All settings can also be changed in the GUI later. Left=5 -Right=246 +Right=260 Top=14 Bottom=23 @@ -107,8 +107,8 @@ Type=Label Text=Choose screen resolution/window size. Left=157 Right=300 -Top=64 -Bottom=72 +Top=61 +Bottom=77 [Field 13] Type=Label @@ -121,9 +121,9 @@ Bottom=94 [Field 14] Type=Label Left=5 -Top=100 +Top=101 Right=58 -Bottom=109 +Bottom=111 Text=Sorting: [Field 15] @@ -138,9 +138,9 @@ ListItems=Edition|Genre|Language|Folder|Title|Artist [Field 16] Type=Label Left=157 -Top=101 +Top=98 Right=300 -Bottom=110 +Bottom=115 Text=Select criterion to sort songs. [Field 18] @@ -158,4 +158,4 @@ Left=158 Top=119 Right=295 Bottom=134 -Text=Choose additional song directory for UltraStar Deluxe. \ No newline at end of file +Text=Choose additional song directory for UltraStar Deluxe. diff --git a/installer/settings/variables.nsh b/installer/settings/variables.nsh index 7aecd713..f01a92eb 100644 --- a/installer/settings/variables.nsh +++ b/installer/settings/variables.nsh @@ -4,17 +4,38 @@ ; Product Information: -!define version "RC 1" ; Make sure version is also set in onInit -!define version2 "16.10" +!define VersionStr "16.12" +!define FullVersion "16.12 RC1 Update 2" ; semver compatible. see semver.org + +!define installername " Installer" +!define installerexe "WorldParty ${VersionStr} installer" + + +; generated +!define version "${VersionStr}" +!define meta StrLower($version) + !define name "UltraStar Deluxe WorldParty" !define publisher "UltraStar España" !define homepage "http://ultrastar-es.org" - -!define exe "ultrastardx" +!define exe "WorldParty" +!define exeuninstall "Uninstall" +!define exeupdate "Update" !define license ".\dependencies\documents\license.txt" +!define music1 ".\dependencies\loop.wav" +!define music2 "$PLUGINSDIR\loop.wav" + +; Installer + +!define installer_version_path "$LOCALAPPDATA\Temp\WorldParty" +!define installer_exe_path "$LOCALAPPDATA\Temp\WorldPartyupdate.exe" +;!define version_url "http://raw.githubusercontent.com/UltraStar-Deluxe/USDX/release/VERSION" +;!define update_url "https://github.com/UltraStar-Deluxe/USDX/releases/download/%VERSION%/UltraStar.Deluxe_v%VERSIONSTRING%-installer.exe" +!define update_mask_online_version "%VERSION%" +!define update_mask_installer_version "%VERSIONSTRING%" ; Icons @@ -28,16 +49,10 @@ ; Registry for Start menu entries: -!define PRODUCT_NAME "${name} ${version}" +!define PRODUCT_NAME "${name}" !define PRODUCT_VERSION "${version}" !define PRODUCT_PUBLISHER "${publisher}" !define PRODUCT_WEB_SITE "${homepage}" -!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${name} ${version}" +!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${name}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" - -; Download URLs for Songs and Themes: - -; SONGS - -; THEMES -; (removed theme section - currently no additional skins available for this usdx version) +!define PRODUCT_PATH "$PROGRAMFILES\${name}" diff --git a/res/ultrastardx.exe.manifest b/res/WorldParty.exe.manifest similarity index 93% rename from res/ultrastardx.exe.manifest rename to res/WorldParty.exe.manifest index e67f4627..b2315a54 100644 --- a/res/ultrastardx.exe.manifest +++ b/res/WorldParty.exe.manifest @@ -1,6 +1,6 @@  - + UltraStar Deluxe diff --git a/res/link.rc b/res/link.rc new file mode 100644 index 00000000..07f142a8 --- /dev/null +++ b/res/link.rc @@ -0,0 +1,4 @@ +#define MANIFEST_RESOURCE_ID 1 +#define RT_MANIFEST 24 +MANIFEST_RESOURCE_ID RT_MANIFEST "..\\res\\WorldParty.exe.manifest" +MAINICON ICON "..\\icons\\WorldParty.ico" diff --git a/res/rccompile-delphi.bat b/res/rccompile-delphi.bat index b2e206fa..223d01cf 100644 --- a/res/rccompile-delphi.bat +++ b/res/rccompile-delphi.bat @@ -1,2 +1,2 @@ -@set RES_NAME=ultrastardx +@set RES_NAME=link BRC32 -r -fo%RES_NAME%.res %RES_NAME%.rc diff --git a/res/rccompile-fpc.bat b/res/rccompile-fpc.bat index ea1c1987..2d4b72d3 100644 --- a/res/rccompile-fpc.bat +++ b/res/rccompile-fpc.bat @@ -1,4 +1,4 @@ -@set PATH=C:\Programme\lazarus\fpc\2.2.4\bin\i386-win32\;%PATH% -@set RES_NAME=ultrastardx +@set PATH=C:\FPC\3.0.0\bin\i386-win32;%PATH% +@set RES_NAME=link windres.exe -i %RES_NAME%.rc -o %RES_NAME%.res diff --git a/res/ultrastardx.rc b/res/ultrastardx.rc deleted file mode 100644 index c5d2920f..00000000 --- a/res/ultrastardx.rc +++ /dev/null @@ -1,4 +0,0 @@ -#define MANIFEST_RESOURCE_ID 1 -#define RT_MANIFEST 24 -MANIFEST_RESOURCE_ID RT_MANIFEST "..\\res\\ultrastardx.exe.manifest" -MAINICON ICON "..\\icons\\ultrastardx.ico" diff --git a/src/Makefile.in b/src/Makefile.in index 2ba4511a..623ae245 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -1,3 +1,26 @@ + +# UltraStar Deluxe WorldParty - Karaoke Game +# +# UltraStar Deluxe WorldParty is the legal property of its developers, +# whose names are too numerous to list here. Please refer to the +# COPYRIGHT file distributed with this source distribution. +# +# 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 3 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. Check "LICENSE" file. If not, see +# . +# + + ################################################# # @PACKAGE_STRING@ # @configure_input@ @@ -35,21 +58,21 @@ RM_REC ?= $(RM) -r # General package configuration ################################################# -USDX_PACKAGE_NAME := @PACKAGE_NAME@ -USDX_VERSION := @PACKAGE_VERSION@ -USDX_TARNAME := @PACKAGE_TARNAME@ +USDXWP_PACKAGE_NAME := @PACKAGE_NAME@ +USDXWP_VERSION := @PACKAGE_VERSION@ +USDXWP_TARNAME := @PACKAGE_TARNAME@ ################################################# -# USDX Paths +# USDXWP Paths ################################################# -USDX_SRC_DIR := $(top_srcdir)/src -USDX_GAME_DIR := $(top_srcdir)/game -USDX_TOOLS_DIR := $(top_srcdir)/tools -USDX_BUILD_DIR := $(top_srcdir)/build -USDX_LIB_DIR := $(USDX_SRC_DIR)/lib +USDXWP_SRC_DIR := $(top_srcdir)/src +USDXWP_GAME_DIR := $(top_srcdir)/game +USDXWP_TOOLS_DIR := $(top_srcdir)/tools +USDXWP_BUILD_DIR := $(top_srcdir)/build +USDXWP_LIB_DIR := $(USDXWP_SRC_DIR)/lib -INSTALL_DATADIR := $(datadir)/$(USDX_PACKAGE_NAME) +INSTALL_DATADIR := $(datadir)/$(USDXWP_PACKAGE_NAME) ################################################# # FPC config @@ -65,11 +88,11 @@ PPROCESSOR := @FPC_PROCESSOR@ PUNIT_FLAGS := -Fu. # Directory where compiled units (.ppu and .o files) are stored -PCUNIT_DIR := $(USDX_BUILD_DIR)/fpc-$(PPROCESSOR)-$(PPLATFORM) +PCUNIT_DIR := $(USDXWP_BUILD_DIR)/fpc-$(PPROCESSOR)-$(PPLATFORM) PCUNIT_FLAGS := -FU$(PCUNIT_DIR) # Directories added to the includes path -PINC_FLAGS := -Fi$(USDX_LIB_DIR)/JEDI-SDL/SDL/Pas +PINC_FLAGS := -Fi$(USDXWP_LIB_DIR)/JEDI-SDL/SDL/Pas ## # PFLAGS @@ -130,20 +153,20 @@ endif PFLAGS_ALL = $(PFLAGS) $(PDEFINES) $(PLINKFLAGS) $(PINC_FLAGS) $(PUNIT_FLAGS) $(PCUNIT_FLAGS) ################################################# -# USDX project config +# USDXWP project config ################################################# # dpr project file used as input -USDX_PROJ := ultrastardx.dpr +USDXWP_PROJ := WorldParty.dpr # name of executable -USDX_BIN_NAME ?= ultrastardx$(EXEEXT) -USDX_BIN := $(USDX_GAME_DIR)/$(USDX_BIN_NAME) +USDXWP_BIN_NAME ?= WorldParty$(EXEEXT) +USDXWP_BIN := $(USDXWP_GAME_DIR)/$(USDXWP_BIN_NAME) ################################################# # ProjectM ################################################# -PROJECTM_CWRAPPER_DIR := $(USDX_LIB_DIR)/projectM/cwrapper +PROJECTM_CWRAPPER_DIR := $(USDXWP_LIB_DIR)/projectM/cwrapper PROJECTM_CWRAPPER_LIB := $(PROJECTM_CWRAPPER_DIR)/libprojectM-cwrapper.a USE_PROJECTM_CWRAPPER := @USE_PROJECTM_CWRAPPER@ @@ -196,7 +219,7 @@ rebuild: clean_obj # builds and renders debugging difficult (because FPC uses outdated # .ppu/.o data of files that have been changed). .PHONY: build -build: $(USDX_BIN) +build: $(USDXWP_BIN) ################################################# # build @@ -213,13 +236,13 @@ SRC_FILES = $(shell find $(srcdir) -name "*.inc" -o -name "*.pas" -o -name "*.pp # See [info autoconf], "19.5 How Do I `#define' Installation Directories?" # # Do NOT use paths.inc as target name as it is in the requisite list -# of $(USDX_BIN). +# of $(USDXWP_BIN). .PHONY: create-pathinfo create-pathinfo: echo "INSTALL_DATADIR = '$(INSTALL_DATADIR)';" > paths.inc # check if any src-file changed and rebuild -$(USDX_BIN): $(USDX_PROJ) $(STATIC_LIBS) $(SRC_FILES) +$(USDXWP_BIN): $(USDXWP_PROJ) $(STATIC_LIBS) $(SRC_FILES) @echo "===================================" @echo "Changed files:" @echo "$?" @@ -233,7 +256,7 @@ $(USDX_BIN): $(USDX_PROJ) $(STATIC_LIBS) $(SRC_FILES) $(MKDIR) "$(PCUNIT_DIR)" $(MAKE) create-pathinfo - $(PPC) $(strip $(PFLAGS_ALL)) -o$@ $(USDX_PROJ) + $(PPC) $(strip $(PFLAGS_ALL)) -o$@ $(USDXWP_PROJ) ################################################# # clean-up @@ -249,4 +272,4 @@ clean_obj: clean_bin .PHONY: clean_bin clean_bin: - $(RM) "$(USDX_BIN)" + $(RM) "$(USDXWP_BIN)" diff --git a/src/ultrastardx-travis.lpi b/src/WorldParty for Windows.lpi similarity index 93% rename from src/ultrastardx-travis.lpi rename to src/WorldParty for Windows.lpi index cb5143b4..498a3318 100644 --- a/src/ultrastardx-travis.lpi +++ b/src/WorldParty for Windows.lpi @@ -11,11 +11,12 @@ - + <Title Value="WorldParty"/> <UseXPManifest Value="True"/> <XPManifest> <DpiAware Value="True"/> </XPManifest> + <Icon Value="0"/> </General> <VersionInfo> <MajorVersionNr Value="1"/> @@ -44,9 +45,9 @@ <PackageName Value="LazUtils"/> </Item1> </RequiredPackages> - <Units Count="129"> + <Units Count="124"> <Unit0> - <Filename Value="ultrastardx.dpr"/> + <Filename Value="WorldParty.dpr"/> <IsPartOfProject Value="True"/> </Unit0> <Unit1> @@ -170,410 +171,389 @@ <IsPartOfProject Value="True"/> </Unit30> <Unit31> - <Filename Value="base\USingNotes.pas"/> + <Filename Value="base\USingScores.pas"/> <IsPartOfProject Value="True"/> </Unit31> <Unit32> - <Filename Value="base\USingScores.pas"/> + <Filename Value="base\USkins.pas"/> <IsPartOfProject Value="True"/> </Unit32> <Unit33> - <Filename Value="base\USkins.pas"/> + <Filename Value="base\USong.pas"/> <IsPartOfProject Value="True"/> </Unit33> <Unit34> - <Filename Value="base\USong.pas"/> + <Filename Value="base\USongs.pas"/> <IsPartOfProject Value="True"/> </Unit34> <Unit35> - <Filename Value="base\USongs.pas"/> + <Filename Value="base\UTexture.pas"/> <IsPartOfProject Value="True"/> </Unit35> <Unit36> - <Filename Value="base\UTexture.pas"/> + <Filename Value="base\UThemes.pas"/> <IsPartOfProject Value="True"/> </Unit36> <Unit37> - <Filename Value="base\UThemes.pas"/> + <Filename Value="base\UTime.pas"/> <IsPartOfProject Value="True"/> </Unit37> <Unit38> - <Filename Value="base\UTime.pas"/> + <Filename Value="menu\UMenuText.pas"/> <IsPartOfProject Value="True"/> </Unit38> <Unit39> - <Filename Value="menu\UMenuText.pas"/> + <Filename Value="menu\UDisplay.pas"/> <IsPartOfProject Value="True"/> </Unit39> <Unit40> - <Filename Value="menu\UDisplay.pas"/> + <Filename Value="menu\UDrawTexture.pas"/> <IsPartOfProject Value="True"/> </Unit40> <Unit41> - <Filename Value="menu\UDrawTexture.pas"/> + <Filename Value="menu\UMenu.pas"/> <IsPartOfProject Value="True"/> </Unit41> <Unit42> - <Filename Value="menu\UMenu.pas"/> + <Filename Value="menu\UMenuBackground.pas"/> <IsPartOfProject Value="True"/> </Unit42> <Unit43> - <Filename Value="menu\UMenuBackground.pas"/> + <Filename Value="menu\UMenuBackgroundColor.pas"/> <IsPartOfProject Value="True"/> </Unit43> <Unit44> - <Filename Value="menu\UMenuBackgroundColor.pas"/> + <Filename Value="menu\UMenuBackgroundFade.pas"/> <IsPartOfProject Value="True"/> </Unit44> <Unit45> - <Filename Value="menu\UMenuBackgroundFade.pas"/> + <Filename Value="menu\UMenuBackgroundNone.pas"/> <IsPartOfProject Value="True"/> </Unit45> <Unit46> - <Filename Value="menu\UMenuBackgroundNone.pas"/> + <Filename Value="menu\UMenuBackgroundTexture.pas"/> <IsPartOfProject Value="True"/> </Unit46> <Unit47> - <Filename Value="menu\UMenuBackgroundTexture.pas"/> + <Filename Value="menu\UMenuBackgroundVideo.pas"/> <IsPartOfProject Value="True"/> </Unit47> <Unit48> - <Filename Value="menu\UMenuBackgroundVideo.pas"/> + <Filename Value="menu\UMenuButton.pas"/> <IsPartOfProject Value="True"/> </Unit48> <Unit49> - <Filename Value="menu\UMenuButton.pas"/> + <Filename Value="menu\UMenuButtonCollection.pas"/> <IsPartOfProject Value="True"/> </Unit49> <Unit50> - <Filename Value="menu\UMenuButtonCollection.pas"/> + <Filename Value="menu\UMenuEqualizer.pas"/> <IsPartOfProject Value="True"/> </Unit50> <Unit51> - <Filename Value="menu\UMenuEqualizer.pas"/> + <Filename Value="menu\UMenuInteract.pas"/> <IsPartOfProject Value="True"/> </Unit51> <Unit52> - <Filename Value="menu\UMenuInteract.pas"/> + <Filename Value="menu\UMenuSelectSlide.pas"/> <IsPartOfProject Value="True"/> </Unit52> <Unit53> - <Filename Value="menu\UMenuSelectSlide.pas"/> + <Filename Value="menu\UMenuStatic.pas"/> <IsPartOfProject Value="True"/> </Unit53> <Unit54> - <Filename Value="menu\UMenuStatic.pas"/> + <Filename Value="screens\UScreenCredits.pas"/> <IsPartOfProject Value="True"/> </Unit54> <Unit55> - <Filename Value="screens\UScreenCredits.pas"/> + <Filename Value="screens\UScreenEditHeader.pas"/> <IsPartOfProject Value="True"/> </Unit55> <Unit56> - <Filename Value="screens\UScreenEdit.pas"/> + <Filename Value="screens\UScreenEditSub.pas"/> <IsPartOfProject Value="True"/> </Unit56> <Unit57> - <Filename Value="screens\UScreenEditConvert.pas"/> + <Filename Value="screens\UScreenLoading.pas"/> <IsPartOfProject Value="True"/> </Unit57> <Unit58> - <Filename Value="screens\UScreenEditHeader.pas"/> + <Filename Value="screens\UScreenMain.pas"/> <IsPartOfProject Value="True"/> </Unit58> <Unit59> - <Filename Value="screens\UScreenEditSub.pas"/> + <Filename Value="screens\UScreenName.pas"/> <IsPartOfProject Value="True"/> </Unit59> <Unit60> - <Filename Value="screens\UScreenLevel.pas"/> + <Filename Value="screens\UScreenOpen.pas"/> <IsPartOfProject Value="True"/> </Unit60> <Unit61> - <Filename Value="screens\UScreenLoading.pas"/> + <Filename Value="screens\UScreenOptions.pas"/> <IsPartOfProject Value="True"/> </Unit61> <Unit62> - <Filename Value="screens\UScreenMain.pas"/> + <Filename Value="screens\UScreenOptionsAdvanced.pas"/> <IsPartOfProject Value="True"/> </Unit62> <Unit63> - <Filename Value="screens\UScreenName.pas"/> + <Filename Value="screens\UScreenOptionsGame.pas"/> <IsPartOfProject Value="True"/> </Unit63> <Unit64> - <Filename Value="screens\UScreenOpen.pas"/> + <Filename Value="screens\UScreenOptionsGraphics.pas"/> <IsPartOfProject Value="True"/> </Unit64> <Unit65> - <Filename Value="screens\UScreenOptions.pas"/> + <Filename Value="screens\UScreenOptionsLyrics.pas"/> <IsPartOfProject Value="True"/> </Unit65> <Unit66> - <Filename Value="screens\UScreenOptionsAdvanced.pas"/> + <Filename Value="screens\UScreenOptionsRecord.pas"/> <IsPartOfProject Value="True"/> </Unit66> <Unit67> - <Filename Value="screens\UScreenOptionsGame.pas"/> + <Filename Value="screens\UScreenOptionsSound.pas"/> <IsPartOfProject Value="True"/> </Unit67> <Unit68> - <Filename Value="screens\UScreenOptionsGraphics.pas"/> + <Filename Value="screens\UScreenOptionsThemes.pas"/> <IsPartOfProject Value="True"/> </Unit68> <Unit69> - <Filename Value="screens\UScreenOptionsLyrics.pas"/> + <Filename Value="screens\UScreenPartyNewRound.pas"/> <IsPartOfProject Value="True"/> </Unit69> <Unit70> - <Filename Value="screens\UScreenOptionsRecord.pas"/> + <Filename Value="screens\UScreenPartyOptions.pas"/> <IsPartOfProject Value="True"/> </Unit70> <Unit71> - <Filename Value="screens\UScreenOptionsSound.pas"/> + <Filename Value="screens\UScreenPartyPlayer.pas"/> <IsPartOfProject Value="True"/> </Unit71> <Unit72> - <Filename Value="screens\UScreenOptionsThemes.pas"/> + <Filename Value="screens\UScreenPartyScore.pas"/> <IsPartOfProject Value="True"/> </Unit72> <Unit73> - <Filename Value="screens\UScreenPartyNewRound.pas"/> + <Filename Value="screens\UScreenPartyWin.pas"/> <IsPartOfProject Value="True"/> </Unit73> <Unit74> - <Filename Value="screens\UScreenPartyOptions.pas"/> + <Filename Value="screens\UScreenPopup.pas"/> <IsPartOfProject Value="True"/> </Unit74> <Unit75> - <Filename Value="screens\UScreenPartyPlayer.pas"/> + <Filename Value="screens\UScreenScore.pas"/> <IsPartOfProject Value="True"/> </Unit75> <Unit76> - <Filename Value="screens\UScreenPartyScore.pas"/> + <Filename Value="screens\UScreenSong.pas"/> <IsPartOfProject Value="True"/> </Unit76> <Unit77> - <Filename Value="screens\UScreenPartyWin.pas"/> + <Filename Value="screens\UScreenSongJumpto.pas"/> <IsPartOfProject Value="True"/> </Unit77> <Unit78> - <Filename Value="screens\UScreenPopup.pas"/> + <Filename Value="screens\UScreenSongMenu.pas"/> <IsPartOfProject Value="True"/> </Unit78> <Unit79> - <Filename Value="screens\UScreenScore.pas"/> + <Filename Value="screens\UScreenStatDetail.pas"/> <IsPartOfProject Value="True"/> </Unit79> <Unit80> - <Filename Value="screens\UScreenSing.pas"/> + <Filename Value="screens\UScreenStatMain.pas"/> <IsPartOfProject Value="True"/> </Unit80> <Unit81> - <Filename Value="screens\UScreenSong.pas"/> + <Filename Value="screens\UScreenTop5.pas"/> <IsPartOfProject Value="True"/> </Unit81> <Unit82> - <Filename Value="screens\UScreenSongJumpto.pas"/> + <Filename Value="media\UVisualizer.pas"/> <IsPartOfProject Value="True"/> </Unit82> <Unit83> - <Filename Value="screens\UScreenSongMenu.pas"/> + <Filename Value="media\UAudioConverter.pas"/> <IsPartOfProject Value="True"/> </Unit83> <Unit84> - <Filename Value="screens\UScreenStatDetail.pas"/> + <Filename Value="media\UAudioCore_Bass.pas"/> <IsPartOfProject Value="True"/> </Unit84> <Unit85> - <Filename Value="screens\UScreenStatMain.pas"/> + <Filename Value="media\UAudioCore_Portaudio.pas"/> <IsPartOfProject Value="True"/> </Unit85> <Unit86> - <Filename Value="screens\UScreenTop5.pas"/> + <Filename Value="media\UAudioDecoder_Bass.pas"/> <IsPartOfProject Value="True"/> </Unit86> <Unit87> - <Filename Value="media\UVisualizer.pas"/> + <Filename Value="media\UAudioDecoder_FFmpeg.pas"/> <IsPartOfProject Value="True"/> </Unit87> <Unit88> - <Filename Value="media\UAudioConverter.pas"/> + <Filename Value="media\UAudioInput_Bass.pas"/> <IsPartOfProject Value="True"/> </Unit88> <Unit89> - <Filename Value="media\UAudioCore_Bass.pas"/> + <Filename Value="media\UAudioInput_Portaudio.pas"/> <IsPartOfProject Value="True"/> </Unit89> <Unit90> - <Filename Value="media\UAudioCore_Portaudio.pas"/> + <Filename Value="media\UAudioPlayback_Bass.pas"/> <IsPartOfProject Value="True"/> </Unit90> <Unit91> - <Filename Value="media\UAudioDecoder_Bass.pas"/> + <Filename Value="media\UAudioPlayback_Portaudio.pas"/> <IsPartOfProject Value="True"/> </Unit91> <Unit92> - <Filename Value="media\UAudioDecoder_FFmpeg.pas"/> + <Filename Value="media\UAudioPlayback_SDL.pas"/> <IsPartOfProject Value="True"/> </Unit92> <Unit93> - <Filename Value="media\UAudioInput_Bass.pas"/> + <Filename Value="media\UAudioPlayback_SoftMixer.pas"/> <IsPartOfProject Value="True"/> </Unit93> <Unit94> - <Filename Value="media\UAudioInput_Portaudio.pas"/> + <Filename Value="media\UAudioPlaybackBase.pas"/> <IsPartOfProject Value="True"/> </Unit94> <Unit95> - <Filename Value="media\UAudioPlayback_Bass.pas"/> + <Filename Value="media\UMedia_dummy.pas"/> <IsPartOfProject Value="True"/> </Unit95> <Unit96> - <Filename Value="media\UAudioPlayback_Portaudio.pas"/> + <Filename Value="media\UMediaCore_FFmpeg.pas"/> <IsPartOfProject Value="True"/> </Unit96> <Unit97> - <Filename Value="media\UAudioPlayback_SDL.pas"/> + <Filename Value="media\UMediaCore_SDL.pas"/> <IsPartOfProject Value="True"/> </Unit97> <Unit98> - <Filename Value="media\UAudioPlayback_SoftMixer.pas"/> + <Filename Value="media\UVideo.pas"/> <IsPartOfProject Value="True"/> </Unit98> <Unit99> - <Filename Value="media\UAudioPlaybackBase.pas"/> + <Filename Value="switches.inc"/> <IsPartOfProject Value="True"/> </Unit99> <Unit100> - <Filename Value="media\UMedia_dummy.pas"/> + <Filename Value="config-win.inc"/> <IsPartOfProject Value="True"/> </Unit100> <Unit101> - <Filename Value="media\UMediaCore_FFmpeg.pas"/> + <Filename Value="lua\ULuaUtils.pas"/> <IsPartOfProject Value="True"/> </Unit101> <Unit102> - <Filename Value="media\UMediaCore_SDL.pas"/> + <Filename Value="lua\UHookableEvent.pas"/> <IsPartOfProject Value="True"/> </Unit102> <Unit103> - <Filename Value="media\UVideo.pas"/> + <Filename Value="lua\ULuaCore.pas"/> <IsPartOfProject Value="True"/> </Unit103> <Unit104> - <Filename Value="switches.inc"/> + <Filename Value="lua\ULuaGl.pas"/> <IsPartOfProject Value="True"/> </Unit104> <Unit105> - <Filename Value="config-win.inc"/> + <Filename Value="lua\ULuaLog.pas"/> <IsPartOfProject Value="True"/> </Unit105> <Unit106> - <Filename Value="lua\ULuaUtils.pas"/> + <Filename Value="lua\ULuaParty.pas"/> <IsPartOfProject Value="True"/> </Unit106> <Unit107> - <Filename Value="lua\UHookableEvent.pas"/> + <Filename Value="lua\ULuaScreenSing.pas"/> <IsPartOfProject Value="True"/> </Unit107> <Unit108> - <Filename Value="lua\ULuaCore.pas"/> + <Filename Value="lua\ULuaTextGL.pas"/> <IsPartOfProject Value="True"/> </Unit108> <Unit109> - <Filename Value="lua\ULuaGl.pas"/> + <Filename Value="lua\ULuaTexture.pas"/> <IsPartOfProject Value="True"/> </Unit109> <Unit110> - <Filename Value="lua\ULuaLog.pas"/> + <Filename Value="lua\ULuaUsdx.pas"/> <IsPartOfProject Value="True"/> </Unit110> <Unit111> - <Filename Value="lua\ULuaParty.pas"/> + <Filename Value="lib\bass\delphi\bass.pas"/> <IsPartOfProject Value="True"/> + <UnitName Value="Bass"/> </Unit111> <Unit112> - <Filename Value="lua\ULuaScreenSing.pas"/> + <Filename Value="webSDK\UWebSDK.pas"/> <IsPartOfProject Value="True"/> </Unit112> <Unit113> - <Filename Value="lua\ULuaTextGL.pas"/> + <Filename Value="base\UWebcam.pas"/> <IsPartOfProject Value="True"/> </Unit113> <Unit114> - <Filename Value="lua\ULuaTexture.pas"/> + <Filename Value="screens\UScreenJukebox.pas"/> <IsPartOfProject Value="True"/> </Unit114> <Unit115> - <Filename Value="lua\ULuaUsdx.pas"/> + <Filename Value="screens\UScreenOptionsWebcam.pas"/> <IsPartOfProject Value="True"/> </Unit115> <Unit116> - <Filename Value="lib\bass\delphi\bass.pas"/> + <Filename Value="screens\UScreenAbout.pas"/> <IsPartOfProject Value="True"/> - <UnitName Value="Bass"/> </Unit116> <Unit117> - <Filename Value="webSDK\UWebSDK.pas"/> + <Filename Value="base\UNote.pas"/> <IsPartOfProject Value="True"/> </Unit117> <Unit118> - <Filename Value="base\UWebcam.pas"/> + <Filename Value="base\UPath.pas"/> <IsPartOfProject Value="True"/> </Unit118> <Unit119> - <Filename Value="screens\UScreenJukebox.pas"/> + <Filename Value="base\uunicodestringhelper.pas"/> <IsPartOfProject Value="True"/> + <UnitName Value="UUnicodeStringHelper"/> </Unit119> <Unit120> - <Filename Value="screens\UScreenOptionsWebcam.pas"/> + <Filename Value="base\UFilesystem.pas"/> <IsPartOfProject Value="True"/> </Unit120> <Unit121> - <Filename Value="screens\UScreenAbout.pas"/> + <Filename Value="base\UConfig.pas"/> <IsPartOfProject Value="True"/> </Unit121> <Unit122> - <Filename Value="base\UNote.pas"/> + <Filename Value="screens\views\UScreenSingView.pas"/> <IsPartOfProject Value="True"/> </Unit122> <Unit123> - <Filename Value="base\UPath.pas"/> + <Filename Value="screens\controllers\UScreenSingController.pas"/> <IsPartOfProject Value="True"/> </Unit123> - <Unit124> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\packages\winunits-base\src\comobj.pp"/> - <IsPartOfProject Value="True"/> - </Unit124> - <Unit125> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\packages\fcl-registry\src\registry.pp"/> - <IsPartOfProject Value="True"/> - </Unit125> - <Unit126> - <Filename Value="..\..\..\lazarus\components\lazutils\lazutils.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="LazUtils"/> - </Unit126> - <Unit127> - <Filename Value="base\uunicodestringhelper.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UUnicodeStringHelper"/> - </Unit127> - <Unit128> - <Filename Value="base\UFilesystem.pas"/> - <IsPartOfProject Value="True"/> - </Unit128> </Units> </ProjectOptions> <CompilerOptions> <Version Value="11"/> <PathDelim Value="\"/> <Target> - <Filename Value="..\game\ultrastardx"/> + <Filename Value="..\game\WorldParty"/> </Target> <SearchPaths> - <OtherUnitFiles Value="base;lua;media;menu;screens;lib\OpenGL;lib\SDL2;lib\portaudio;lib\SQLite;lib\other;lib\openCV;webSDK;webSDK\encrypt"/> + <OtherUnitFiles Value="base;lua;media;menu;screens;lib\dglOpenGL;lib\SDL2;lib\portaudio;lib\ffmpeg;lib\SQLite;lib\other;lib\openCV;webSDK;webSDK\encrypt;$(LazarusDir)\components\lazutils;lib\freetype;lib\bass;lib\Lua;screens\controllers;screens\views;lib\pcre"/> <UnitOutputDirectory Value="..\build\fpc-$(TargetCPU)-$(TargetOS)"/> </SearchPaths> <Parsing> @@ -583,17 +563,31 @@ <UseAnsiStrings Value="False"/> </SyntaxOptions> </Parsing> + <CodeGeneration> + <SmartLinkUnit Value="True"/> + <Checks> + <OverflowChecks Value="True"/> + <StackChecks Value="True"/> + </Checks> + <TargetCPU Value="i386"/> + </CodeGeneration> <Linking> <Debugging> - <GenerateDebugInfo Value="False"/> <DebugInfoType Value="dsStabs"/> </Debugging> + <LinkSmart Value="True"/> </Linking> <Other> <Verbosity> <ShowNotes Value="False"/> <ShowHints Value="False"/> </Verbosity> + <WriteFPCLogo Value="False"/> + <ExecuteBefore> + <Command Value="clean.bat ..\build\fpc-$(TargetCPU)-$(TargetOS)"/> + <ScanForFPCMsgs Value="True"/> + <ScanForMakeMsgs Value="True"/> + </ExecuteBefore> <ExecuteAfter> <CompileReasons Compile="False" Build="False" Run="False"/> </ExecuteAfter> diff --git a/src/ultrastardx.dpr b/src/WorldParty.dpr similarity index 87% rename from src/ultrastardx.dpr rename to src/WorldParty.dpr index 5d5ecdaa..6cbe79a1 100644 --- a/src/ultrastardx.dpr +++ b/src/WorldParty.dpr @@ -1,32 +1,30 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/ultrastardx.dpr $ - * $Id: ultrastardx.dpr 3131 2015-09-07 00:11:32Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} - -program ultrastardx; + + +program WorldParty; {$IFDEF MSWINDOWS} - //{$R '..\res\ultrastardx.res' '..\res\ultrastardx.rc'} + {$R '..\res\link.res' '..\res\link.rc'} {$ENDIF} {$IFDEF FPC} @@ -61,6 +59,8 @@ uses //------------------------------ //Includes - 3rd Party Libraries //------------------------------ + SQLiteTable3 in 'lib\SQLite\SQLiteTable3.pas', + SQLite3 in 'lib\SQLite\SQLite3.pas', sdl2 in 'lib\SDL2\sdl2.pas', SDL2_gfx in 'lib\SDL2\SDL2_gfx.pas', SDL2_image in 'lib\SDL2\SDL2_image.pas', @@ -75,7 +75,8 @@ uses freetype in 'lib\freetype\freetype.pas', {$IFDEF UseBass} - bass in 'lib\bass\delphi\bass.pas', + BASS in 'lib\bass\delphi\bass.pas', + BASS_FX in 'lib\bass_fx\bass_fx.pas', UAudioCore_Bass in 'media\UAudioCore_Bass.pas', {$ENDIF} {$IFDEF UsePortaudio} @@ -93,6 +94,9 @@ uses avutil in 'lib\' + FFMPEG_DIR + '\avutil.pas', rational in 'lib\' + FFMPEG_DIR + '\rational.pas', avio in 'lib\' + FFMPEG_DIR + '\avio.pas', + {$IFDEF UseSWResample} + swresample in 'lib\' + FFMPEG_DIR + '\swresample.pas', + {$ENDIF} {$IFDEF useOLD_FFMPEG} mathematics in 'lib\' + FFMPEG_DIR + '\mathematics.pas', opt in 'lib\' + FFMPEG_DIR + '\opt.pas', @@ -106,6 +110,9 @@ uses avutil in 'lib\ffmpeg-0.10\avutil.pas', rational in 'lib\ffmpeg-0.10\rational.pas', avio in 'lib\ffmpeg-0.10\avio.pas', + {$IFDEF UseSWResample} + swresample in 'lib\ffmpeg-0.10\swresample.pas', + {$ENDIF} {$IFDEF UseSWScale} swscale in 'lib\ffmpeg-0.10\swscale.pas', {$ENDIF} @@ -138,16 +145,12 @@ uses WinAllocation in 'lib\other\WinAllocation.pas', Windows, {$ENDIF} - DirWatch in 'lib\other\DirWatch.pas', {$ENDIF} {$IFDEF DARWIN} PseudoThread in 'macosx\PseudoThread.pas', {$ENDIF} - SQLiteTable3 in 'lib\SQLite\SQLiteTable3.pas', - SQLite3 in 'lib\SQLite\SQLite3.pas', - pcre in 'lib\pcre\pcre.pas', //------------------------------ @@ -219,7 +222,6 @@ uses UCommandLine in 'base\UCommandLine.pas', URingBuffer in 'base\URingBuffer.pas', USingScores in 'base\USingScores.pas', - USingNotes in 'base\USingNotes.pas', UPathUtils in 'base\UPathUtils.pas', UNote in 'base\UNote.pas', UBeatTimer in 'base\UBeatTimer.pas', @@ -308,9 +310,9 @@ uses UScreenLoading in 'screens\UScreenLoading.pas', UScreenMain in 'screens\UScreenMain.pas', UScreenName in 'screens\UScreenName.pas', - UScreenLevel in 'screens\UScreenLevel.pas', UScreenSong in 'screens\UScreenSong.pas', - UScreenSing in 'screens\UScreenSing.pas', + UScreenSingController in 'screens\controllers\UScreenSingController.pas', + UScreenSingView in 'screens\views\UScreenSingView.pas', UScreenScore in 'screens\UScreenScore.pas', UScreenJukebox in 'screens\UScreenJukebox.pas', UScreenOptions in 'screens\UScreenOptions.pas', @@ -322,8 +324,6 @@ uses UScreenOptionsRecord in 'screens\UScreenOptionsRecord.pas', UScreenOptionsAdvanced in 'screens\UScreenOptionsAdvanced.pas', UScreenEditSub in 'screens\UScreenEditSub.pas', - UScreenEdit in 'screens\UScreenEdit.pas', - UScreenEditConvert in 'screens\UScreenEditConvert.pas', UScreenEditHeader in 'screens\UScreenEditHeader.pas', UScreenOpen in 'screens\UScreenOpen.pas', UScreenTop5 in 'screens\UScreenTop5.pas', @@ -371,12 +371,12 @@ uses UAvatars in 'base\UAvatars.pas', UScreenAbout in 'screens\UScreenAbout.pas', + UScreenDevelopers in 'screens\UScreenDevelopers.pas', SysUtils; -{$R ultrastardx.res} const - sLineBreak = {$IFDEF MSWINDOWS} AnsiString(#13#10); {$ELSE} AnsiChar(#10); {$ENDIF} + sLineBreakWin = AnsiString(#13#10);//Windows-Style Linebreak. Older USDX versions don't support other formats. var I: Integer; Report: string; @@ -385,7 +385,7 @@ begin try {$IFDEF MSWINDOWS} {$IFDEF CONSOLE} - FreeConsole(); //hacky workaround to get a working GUI-only experience on windows 10 when using fpc 3.0.0 on windows + FreeConsole(); //hacky workaround to get a working GUI-only experience on windows 10 when using fpc 3.0.0 on windows {$ENDIF} {$ENDIF} Main; diff --git a/src/_ultrastardx.dof b/src/_ultrastardx.dof deleted file mode 100644 index 5cd8dbda..00000000 --- a/src/_ultrastardx.dof +++ /dev/null @@ -1,157 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=0 -D=0 -E=0 -F=0 -G=1 -H=1 -I=0 -J=0 -K=0 -L=0 -M=0 -N=1 -O=0 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=0 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=0 -ComparisonTrue=0 -ComparingSignedUnsigned=0 -CombiningSignedUnsigned=0 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=0 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=2 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir=C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\game -UnitOutputDir=..\build\delphi-win -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath=lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella -Packages=vclx;vcl;rtl;vcldb;dbrtl;dsnap;bdertl;dss;teeui;teedb;tee;vcldbx;vclactnband;adortl;visualclx;visualdbclx;dsnapcon;ibxpress -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1031 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=8 -Item0=lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella -Item1=$(DELPHI)\Lib\Debug;lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella -Item2=lib\JEDI-SDL\SDL\Pas;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\lib\acinerella -Item3=$(DELPHI)\Lib\Debug;lib\JEDI-SDL\SDL\Pas;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\webSDK\cURL\src -Item4=lib\JEDI-SDL\SDL\Pas;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\webSDK\cURL\src -Item5=lib\JEDI-SDL\SDL\Pas;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\webSDK\cURL -Item6=lib\JEDI-SDL\SDL\Pas;C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\src\lib\openCV -Item7=lib\JEDI-SDL\SDL\Pas -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\build\delphi-win -[HistoryLists\hlOutputDirectorry] -Count=3 -Item0=C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\game -Item1=C:\Users\rp\Desktop\Source\usdx_2831_WORLDPARTY\game -Item2=..\game diff --git a/src/base/TextGL.pas b/src/base/TextGL.pas index 3289cc68..b097ba2f 100644 --- a/src/base/TextGL.pas +++ b/src/base/TextGL.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/TextGL.pas $ - * $Id: TextGL.pas 2675 2010-10-17 17:00:23Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit TextGL; diff --git a/src/base/UAvatars.pas b/src/base/UAvatars.pas index a8af3078..ad87726b 100644 --- a/src/base/UAvatars.pas +++ b/src/base/UAvatars.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAvatars; @@ -40,6 +37,7 @@ interface SysUtils, Classes, UImage, + UIni, UTexture, UPath; @@ -93,8 +91,8 @@ TBlobWrapper = class(TCustomMemoryStream) var Avatars: TAvatarDatabase; AvatarsList: array of IPath; - NoAvatarTexture: array[1..6] of TTexture; - AvatarPlayerTextures: array[1..6] of TTexture; + NoAvatarTexture: array[1..UIni.IMaxPlayerCount] of TTexture; + AvatarPlayerTextures: array[1..UIni.IMaxPlayerCount] of TTexture; implementation @@ -103,7 +101,6 @@ implementation ULog, UPathUtils, UPlatform, - UIni, UFilesystem, Math, DateUtils; diff --git a/src/base/UBeatTimer.pas b/src/base/UBeatTimer.pas index 7f68deb6..81751f00 100644 --- a/src/base/UBeatTimer.pas +++ b/src/base/UBeatTimer.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UBeatTimer; diff --git a/src/base/UCatCovers.pas b/src/base/UCatCovers.pas index f27bd16d..e4a448ed 100644 --- a/src/base/UCatCovers.pas +++ b/src/base/UCatCovers.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UCatCovers.pas $ - * $Id: UCatCovers.pas 2276 2010-04-22 11:07:24Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UCatCovers; @@ -109,7 +106,7 @@ procedure TCatCovers.LoadPath(const CoversPath: IPath); for I := 0 to List.Count - 1 do begin - CatCover := Path(Ini.ReadString(ISorting[Ord(SortType)], List.Strings[I], 'NoCover.jpg')); + CatCover := Path(Ini.ReadString(ISorting[Ord(SortType)], List.Strings[I], '.\Common\NoCover.jpg')); Add(SortType, List.Strings[I], CoversPath.Append(CatCover)); end; end; @@ -125,7 +122,8 @@ procedure TCatCovers.LoadPath(const CoversPath: IPath); FileInfo := Iter.Next; //Add Cover if it doesn't exist for every Section - Filename := CoversPath.Append(FileInfo.Name); + Filename := CoversPath.Append(FileInfo.Name); + Name := FileInfo.Name.SetExtension('').ToUTF8; for SortType := Low(TSortingType) to High(TSortingType) do @@ -135,9 +133,10 @@ procedure TCatCovers.LoadPath(const CoversPath: IPath); UTF8Delete(TmpName, UTF8Pos('Title', TmpName), 5) else if (SortType = sArtist) and (UTF8Pos('Artist', TmpName) <> 0) then UTF8Delete(TmpName, UTF8Pos('Artist', TmpName), 6); - + if not CoverExists(SortType, TmpName) then Add(SortType, TmpName, Filename); + end; end; end; @@ -162,7 +161,7 @@ function TCatCovers.CoverExists(Sorting: TSortingType; const Name: UTF8String): UpperName: UTF8String; begin Result := False; - UpperName := UTF8Uppercase(Name); //Case Insensitiv + UpperName := UTF8Uppercase(Name); //Case Insensitive for I := 0 to high(cNames[Sorting]) do begin @@ -198,7 +197,7 @@ function TCatCovers.GetCover(Sorting: TSortingType; const Name: UTF8String): IPa begin for I := 0 to CoverPaths.Count-1 do begin - NoCoverPath := (CoverPaths[I] as IPath).Append('NoCover.jpg'); + NoCoverPath := (CoverPaths[I] as IPath).Append('.\Common\NoCover.jpg'); if (NoCoverPath.IsFile) then begin Result := NoCoverPath; diff --git a/src/base/UCommandLine.pas b/src/base/UCommandLine.pas index dd9c3aed..7276e560 100644 --- a/src/base/UCommandLine.pas +++ b/src/base/UCommandLine.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UCommandLine.pas $ - * $Id: UCommandLine.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UCommandLine; @@ -77,6 +74,8 @@ TCMDParams = class property Language: integer read GetLanguage; property Resolution: integer read GetResolution; + property CustomResolution: string read fResolution; + // some procedures for reading infos constructor Create; end; @@ -295,7 +294,7 @@ procedure TCMDParams.ReadParamInfo; Log.LogInfo('Depth: ' + Inttostr(Depth)); Log.LogInfo('Resolution: ' + Inttostr(Resolution)); - Log.LogInfo('Resolution: ' + Inttostr(Language)); + Log.LogInfo('Language: ' + Inttostr(Language)); Log.LogInfo('sResolution: ' + sResolution); Log.LogInfo('sLanguage: ' + sLanguage); @@ -311,42 +310,16 @@ procedure TCMDParams.ReadParamInfo; // GetLanguage - Get Language ID from saved String Information //------------- function TCMDParams.GetLanguage: integer; -{var - I: integer; -} begin - Result := -1; -{* JB - 12sep07 to remove uINI dependency - - //Search for Language - For I := 0 to high(ILanguage) do - if (LowerCase(ILanguage[I]) = sLanguage) then - begin - Result := I; - Break; - end; -*} + Result := StrToIntDef(fLanguage, -1); end; //------------- // GetResolution - Get Resolution ID from saved String Information //------------- function TCMDParams.GetResolution: integer; -{var - I: integer; -} begin - Result := -1; -{* JB - 12sep07 to remove uINI dependency - - //Search for Resolution - For I := 0 to high(IResolution) do - if (LowerCase(IResolution[I]) = sResolution) then - begin - Result := I; - Break; - end; -*} + Result := StrToIntDef(fResolution, -1); end; end. diff --git a/src/base/UCommon.pas b/src/base/UCommon.pas index 33ee10ff..b4878dad 100644 --- a/src/base/UCommon.pas +++ b/src/base/UCommon.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UCommon.pas $ - * $Id: UCommon.pas 2241 2010-04-15 17:57:15Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UCommon; @@ -39,18 +36,23 @@ interface Classes, {$IFDEF MSWINDOWS} Windows, + UPlatformWindows, {$ENDIF} UConfig, ULog, UPath; type + TIntegerDynArray = array of integer; TStringDynArray = array of string; TUTF8StringDynArray = array of UTF8String; const SepWhitespace = [#9, #10, #13, ' ']; // tab, lf, cr, space + SDL_BUTTON_WHEELUP = 1001; // emulated MouseButton ID for mouse wheel up. @Note some high number to prevent conflict. @see sdl_mouse.inc + SDL_BUTTON_WHEELDOWN = 1002; // emulated MouseButton ID for mouse wheel down. @Note some high number to prevent conflict. @see sdl_mouse.inc + {** * Splits a string into pieces separated by Separators. * MaxCount specifies the max. number of pieces. If it is <= 0 the number is @@ -61,11 +63,15 @@ interface * SplitString(' split me now ', 0) -> ['split', 'me', 'now'] * SplitString(' split me now ', 1) -> ['split', 'me now'] *} - function StringInArray(const Value: string; Strings: array of string): Boolean; +function SplitString(const Str: string; MaxCount: integer = 0; Separators: TSysCharSet = SepWhitespace; RemoveEmpty: boolean = true): TStringDynArray; + +function StringInArray(const Value: string; Strings: array of string): Boolean; - function SplitString(const Str: string; MaxCount: integer = 0; Separators: TSysCharSet = SepWhitespace): TStringDynArray; +function StringDeleteFromArray(var InArray: TIntegerDynArray; const InIndex: integer): Boolean; overload; +function StringDeleteFromArray(var InStrings: TStringDynArray; const InIndex: integer): Boolean; overload; +function StringDeleteFromArray(var InStrings: TUTF8StringDynArray; const InIndex: integer): Boolean; overload; - function GetStringWithNoAccents(str: String):String; +function GetStringWithNoAccents(str: String):String; type TRGB = record @@ -107,8 +113,13 @@ procedure MergeSort(List: TList; CompareFunc: TListSortCompare); function GetAlignedMem(Size: cardinal; Alignment: integer): pointer; procedure FreeAlignedMem(P: pointer); -function GetArrayIndex(const SearchArray: array of UTF8String; Value: string; CaseInsensitiv: boolean = false): integer; +function Equals(A, B: string; CaseSensitive: boolean = false): Boolean; overload; +function GetArrayIndex(const SearchArray: array of UTF8String; Value: string; CaseInsensitiv: boolean = false): integer; overload; +function GetArrayIndex(const SearchArray: array of integer; Value: integer): integer; overload; + +function ParseResolutionString(const ResolutionString: string; out x, y: integer): boolean; +function BuildResolutionString(x,y: integer): string; implementation @@ -131,57 +142,83 @@ function StringInArray(const Value: string; Strings: array of string): Boolean; Result := False; end; -function SplitString(const Str: string; MaxCount: integer; Separators: TSysCharSet): TStringDynArray; +function StringDeleteFromArray(var InArray: TIntegerDynArray; const InIndex: integer): Boolean; +begin + Result := false; + if (InIndex >= 0) and (InIndex < Length(InArray)) then + begin + Result := true; + Move(InArray[InIndex + 1], InArray[InIndex], SizeOf(InArray[0]) * (Length(InArray) - InIndex - 1)); + SetLength(InArray, Length(InArray) - 1); + end; +end; + +function StringDeleteFromArray(var InStrings: TStringDynArray; const InIndex: integer): Boolean; +var + i: integer; +begin + Result := false; + if (InIndex >= 0) and (InIndex < Length(InStrings)) then + begin + Result := true; + for i := High(InStrings) downto InIndex+1 do + begin + InStrings[i-1] := InStrings[i]; + end; + SetLength(InStrings, Length(InStrings) - 1); + end; +end; + +function StringDeleteFromArray(var InStrings: TUTF8StringDynArray; const InIndex: integer): Boolean; +var + i: integer; +begin + Result := false; + if (InIndex >= 0) and (InIndex < Length(InStrings)) then + begin + Result := true; + for i := High(InStrings) downto InIndex+1 do + begin + InStrings[i-1] := InStrings[i]; + end; + SetLength(InStrings, Length(InStrings) - 1); + end; +end; - {* - * Adds Str[StartPos..Endpos-1] to the result array. - *} +function SplitString(const Str: string; MaxCount: integer; Separators: TSysCharSet; RemoveEmpty: boolean): TStringDynArray; + + // Adds Str[StartPos..Endpos-1] to the result array. procedure AddSplit(StartPos, EndPos: integer); begin - SetLength(Result, Length(Result)+1); - Result[High(Result)] := Copy(Str, StartPos, EndPos-StartPos); + if (not RemoveEmpty) or (EndPos > StartPos) then + begin + SetLength(Result, Length(Result)+1); + Result[High(Result)] := Copy(Str, StartPos, EndPos-StartPos); + end; end; var - I: integer; + I, Count: integer; Start: integer; - Last: integer; begin Start := 0; + Count := 0; SetLength(Result, 0); for I := 1 to Length(Str) do begin if (Str[I] in Separators) then begin - // end of component found - if (Start > 0) then - begin - AddSplit(Start, I); - Start := 0; - end; - end - else if (Start = 0) then - begin - // mark beginning of component + inc(Count); + AddSplit(Start+1, I); Start := I; - // check if this is the last component - if (Length(Result) = MaxCount-1) then - begin - // find last non-separator char - Last := Length(Str); - while (Str[Last] in Separators) do - Dec(Last); - // add component up to last non-separator - AddSplit(Start, Last); - Exit; - end; + if (MaxCount > 0) and (Count >= MaxCount) then Break end; end; // last component - if (Start > 0) then - AddSplit(Start, Length(Str)+1); + if (Start < Length(Str)+1) then + AddSplit(Start+1, Length(Str)+1); end; const @@ -332,7 +369,7 @@ procedure DisableFloatingPointExceptions(); SetSSECSR($1F80); {$IFEND} *) - + // disable all of the six FPEs (x87 and SSE) to be compatible with C/C++ and // other libs which rely on the standard FPU behaviour (no div-by-zero FPE anymore). SetExceptionMask([exInvalidOp, exDenormalized, exZeroDivide, @@ -379,9 +416,10 @@ function RandomRange(aMin: integer; aMax: integer): integer; *) procedure _ConsoleWriteLn(const aString: string); {$IFDEF HasInline}inline;{$ENDIF} begin + Log.LogConsole(aString); {$IFDEF MSWINDOWS} // sanity check to avoid crashes with writeln() - if (IsConsole) then + if IsConsole and HasConsole then begin {$ENDIF} Writeln(aString); @@ -525,7 +563,7 @@ procedure _MergeSort(InList, TempList, OutList: TList; StartPos, BlockSize: inte else TempList[MidPos] := InList[MidPos]; - // merge sorted left and right sub-lists into output-list + // merge sorted left and right sub-lists into output-list LeftEnd := MidPos; RightEnd := StartPos + BlockSize; Pos := StartPos; @@ -579,6 +617,12 @@ procedure MergeSort(List: TList; CompareFunc: TListSortCompare); TempList.Free; end; +function Equals(A,B: string; CaseSensitive: boolean = false): boolean; +begin + if CaseSensitive then Result := A = B + else Result := (CompareText(A, B) = 0); +end; + (** * Returns the index of Value in SearchArray * or -1 if Value is not in SearchArray. @@ -601,6 +645,53 @@ function GetArrayIndex(const SearchArray: array of UTF8String; Value: string; end; end; +(** + * Returns the index of Value in SearchArray + * or -1 if Value is not in SearchArray. + *) +function GetArrayIndex(const SearchArray: array of integer; Value: integer): integer; +var + i: integer; +begin + Result := -1; + + for i := 0 to High(SearchArray) do + begin + if (SearchArray[i] = Value) then + begin + Result := i; + Break; + end; + end; +end; + +function BuildResolutionString(x,y: integer): string; +begin + Result := Format('%dx%d', [x, y]); +end; + +function ParseResolutionString(const ResolutionString: string; out x,y : integer): boolean; + var + Pieces: TStringDynArray; +begin + Pieces := SplitString(LowerCase(ResolutionString), 1, ['x']); + Result := false; + + if (Length(Pieces) > 1) and (Length(Pieces[0]) > 0) and (Length(Pieces[1]) > 0) then + begin + x := StrToInt(Pieces[0]); + y := StrToInt(Pieces[1]); + end + // FIXME: legacy code as long as SplitString is not fixed + else if Pos('x', ResolutionString) > 0then + begin + x := StrToInt(Copy(ResolutionString, 1, Pos('x', ResolutionString)-1)); + y := StrToInt(Copy(ResolutionString, Pos('x', ResolutionString)+1, 1000)); + end else Exit; + + // verify if resolution has proper values + Result := (x > 0) and (y > 0); +end; type // stores the unaligned pointer of data allocated by GetAlignedMem() diff --git a/src/base/UConfig.pas b/src/base/UConfig.pas index 2af58b96..72598cd3 100644 --- a/src/base/UConfig.pas +++ b/src/base/UConfig.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UConfig.pas $ - * $Id: UConfig.pas 2656 2010-10-10 18:55:31Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UConfig; @@ -127,11 +124,11 @@ interface (* * Current version of UltraStar Deluxe WorldParty *) - USDX_VERSION_MAJOR = 16; - USDX_VERSION_MINOR = 6; - USDX_VERSION_RELEASE = 0; - USDX_VERSION_STATE = 'RC'; - USDX_STRING = 'UltraStar Deluxe WorldParty'; + USDX_VERSION_MAJOR = 17; + USDX_VERSION_MINOR = 03; + USDX_VERSION_RELEASE = ''; + USDX_VERSION_STATE = 'RC1'; + USDX_STRING = 'UltraStar Deluxe WorldParty'; (* * FPC version numbers are already defined as built-in macros: @@ -183,6 +180,12 @@ interface (LIBSWSCALE_VERSION_RELEASE * VERSION_RELEASE); {$ENDIF} + {$IFDEF HaveSWResample} + LIBSWRESAMPLE_VERSION = (LIBSWRESAMPLE_VERSION_MAJOR * VERSION_MAJOR) + + (LIBSWRESAMPLE_VERSION_MINOR * VERSION_MINOR) + + (LIBSWRESAMPLE_VERSION_RELEASE * VERSION_RELEASE); + {$ENDIF} + {$ENDIF} {$IFDEF HaveProjectM} @@ -221,12 +224,10 @@ function USDXShortVersionStr(): string; function USDXVersionStr(): string; begin Result := - USDX_STRING + ' V ' + + USDX_STRING + ' ' + IntToStr(USDX_VERSION_MAJOR) + '.' + - IntToStr(USDX_VERSION_MINOR) + '.' + - IntToStr(USDX_VERSION_RELEASE) + - IfThen(USDX_VERSION_STATE <> '', ' '+USDX_VERSION_STATE) + - ' Build'; + IntToStr(USDX_VERSION_MINOR) + + IfThen(USDX_VERSION_STATE <> '', ' '+USDX_VERSION_STATE) end; end. diff --git a/src/base/UCovers.pas b/src/base/UCovers.pas index 032ccf85..d4b58316 100644 --- a/src/base/UCovers.pas +++ b/src/base/UCovers.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UCovers.pas $ - * $Id: UCovers.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UCovers; diff --git a/src/base/UDLLManager.pas b/src/base/UDLLManager.pas index 677564d5..674ef809 100644 --- a/src/base/UDLLManager.pas +++ b/src/base/UDLLManager.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UDLLManager.pas $ - * $Id: UDLLManager.pas 2259 2009-11-09 00:27:55Z zup3r_vock $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UDLLManager; diff --git a/src/base/UDataBase.pas b/src/base/UDataBase.pas index 6e5669cc..7c82900d 100644 --- a/src/base/UDataBase.pas +++ b/src/base/UDataBase.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UDataBase.pas $ - * $Id: UDataBase.pas 2574 2010-07-07 19:52:32Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UDataBase; diff --git a/src/base/UDraw.pas b/src/base/UDraw.pas index fe3cf54b..e17135a5 100644 --- a/src/base/UDraw.pas +++ b/src/base/UDraw.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UDraw.pas $ - * $Id: UDraw.pas 2514 2010-06-13 10:57:33Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UDraw; @@ -37,7 +34,8 @@ interface UCommon, UThemes, sdl2, - UGraphicClasses; + UGraphicClasses, + UIni; procedure SingDraw; procedure SingDrawLines; @@ -81,8 +79,8 @@ TRecR = record end; var - NotesW: array [0..5] of real; - NotesH: array [0..5] of real; + NotesW: array [0..UIni.IMaxPlayerCount-1] of real; + NotesH: array [0..UIni.IMaxPlayerCount-1] of real; Starfr: integer; StarfrG: integer; @@ -103,14 +101,13 @@ implementation TextGL, UDrawTexture, UGraphic, - UIni, ULog, ULyrics, UNote, UParty, UMusic, URecord, - UScreenSing, + UScreenSingController, UScreenJukebox, USong, UTexture, @@ -415,6 +412,10 @@ procedure SingDrawBeatDelimeters(Left, Top, Right: real; NrLines: integer); Count: integer; TempR: real; begin + + if not Lines[NrLines].Line[Lines[NrLines].Current].HasLength(TempR) then TempR := 0 + else TempR := (Right-Left) / TempR; + if (Lines[NrLines].Line[Lines[NrLines].Current].TotalNotes > 0) and ( Right-Left > 0 ) and ( (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) > 0 ) then TempR := (Right-Left) / (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) else @@ -459,10 +460,9 @@ procedure SingDrawLine(Left, Top, Right: real; NrLines, PlayerNumber: integer; S glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - if (Lines[NrLines].Line[Lines[NrLines].Current].TotalNotes > 0) and ( Right-Left > 0 ) and ( (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) > 0 ) then - TempR := (Right-Left) / (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) - else - TempR := 0; + if not Lines[NrLines].Line[Lines[NrLines].Current].HasLength(TempR) then TempR := 0 + else TempR := (Right-Left) / TempR; + with Lines[NrLines].Line[Lines[NrLines].Current] do begin @@ -575,10 +575,9 @@ procedure SingDrawPlayerLine(X, Y, W: real; NrLines, PlayerIndex: integer; Space //if Player[NrGracza].LengthNote > 0 then begin - if (Lines[NrLines].Line[Lines[NrLines].Current].TotalNotes > 0) and ( W > 0 ) and ( (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) > 0 ) then - TempR := W / (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) - else - TempR := 0; + if not Lines[NrLines].Line[Lines[NrLines].Current].HasLength(TempR) then TempR := 0 + else TempR := W / TempR; + for N := 0 to Player[PlayerIndex].HighNote do begin with Player[PlayerIndex].Note[N] do @@ -686,10 +685,8 @@ procedure SingDrawPlayerBGLine(Left, Top, Right: real; NrLines, PlayerIndex: int glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - if (Lines[NrLines].Line[Lines[NrLines].Current].TotalNotes > 0) and ( Right-Left > 0 ) and ( (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) > 0 ) then - TempR := (Right-Left) / (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) - else - TempR := 0; + if not Lines[NrLines].Line[Lines[NrLines].Current].HasLength(TempR) then TempR := 0 + else TempR := (Right-Left) / TempR; with Lines[NrLines].Line[Lines[NrLines].Current] do begin @@ -1765,140 +1762,6 @@ procedure SingDrawJukebox; glDisable(GL_TEXTURE_2D); end; -{//SingBar Mod -procedure SingDrawSingbar(X, Y, W, H: real; Percent: integer); -var - R: real; - G: real; - B: real; - A: cardinal; - I: integer; - -begin; - - //SingBar Background - glColor4f(1, 1, 1, 0.8); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glBindTexture(GL_TEXTURE_2D, Tex_SingBar_Back.TexNum); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2f(X, Y); - glTexCoord2f(0, 1); glVertex2f(X, Y+H); - glTexCoord2f(1, 1); glVertex2f(X+W, Y+H); - glTexCoord2f(1, 0); glVertex2f(X+W, Y); - glEnd; - - //SingBar coloured Bar - case Percent of - 0..22: begin - R := 1; - G := 0; - B := 0; - end; - 23..42: begin - R := 1; - G := ((Percent-23)/100)*5; - B := 0; - end; - 43..57: begin - R := 1; - G := 1; - B := 0; - end; - 58..77: begin - R := 1-(Percent - 58)/100*5; - G := 1; - B := 0; - end; - 78..99: begin - R := 0; - G := 1; - B := 0; - end; - end; //case - - glColor4f(R, G, B, 1); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glBindTexture(GL_TEXTURE_2D, Tex_SingBar_Bar.TexNum); - //Size= Player[PlayerNum].ScorePercent of W - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2f(X, Y); - glTexCoord2f(0, 1); glVertex2f(X, Y+H); - glTexCoord2f(1, 1); glVertex2f(X+(W/100 * (Percent +1)), Y+H); - glTexCoord2f(1, 0); glVertex2f(X+(W/100 * (Percent +1)), Y); - glEnd; - - //SingBar Front - glColor4f(1, 1, 1, 0.6); - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glBindTexture(GL_TEXTURE_2D, Tex_SingBar_Front.TexNum); - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2f(X, Y); - glTexCoord2f(0, 1); glVertex2f(X, Y+H); - glTexCoord2f(1, 1); glVertex2f(X+W, Y+H); - glTexCoord2f(1, 0); glVertex2f(X+W, Y); - glEnd; -end; -//end Singbar Mod - -//PhrasenBonus - Line Bonus Pop Up -procedure SingDrawLineBonus(const X, Y: Single; Color: TRGB; Alpha: Single; Text: string; Age: integer); -var - Length, X2: real; //Length of Text - Size: integer; //Size of Popup -begin - if Alpha <> 0 then - begin - -//Set Font Propertys - SetFontStyle(2); //Font: Outlined1 - if Age < 5 then - SetFontSize((Age + 1) * 3) - else - SetFontSize(18); - SetFontItalic(False); - -//Check Font Size - Length := glTextWidth (Text) + 3; //Little Space for a Better Look ^^ - -//Text - SetFontPos (X + 50 - (Length / 2), Y + 12); //Position - - if Age < 5 then - Size := Age * 10 - else - Size := 50; - -//Draw Background -// glColor4f(Color.R, Color.G, Color.B, Alpha); //Set Color - glColor4f(1, 1, 1, Alpha); - - glEnable(GL_TEXTURE_2D); - glEnable(GL_BLEND); -// glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - -//New Method, Not Variable - glBindTexture(GL_TEXTURE_2D, Tex_SingLineBonusBack[2].TexNum); - - glBegin(GL_QUADS); - glTexCoord2f(0, 0); glVertex2f(X + 50 - Size, Y + 25 - (Size/2)); - glTexCoord2f(0, 1); glVertex2f(X + 50 - Size, Y + 25 + (Size/2)); - glTexCoord2f(1, 1); glVertex2f(X + 50 + Size, Y + 25 + (Size/2)); - glTexCoord2f(1, 0); glVertex2f(X + 50 + Size, Y + 25 - (Size/2)); - glEnd; - - glColor4f(1, 1, 1, Alpha); //Set Color -//Draw Text - glPrint (Text); - end; -end; -//PhrasenBonus - Line Bonus Mod} - // Draw Note Bars for Editor // There are 11 reasons for a new procedure: (nice binary :D ) // 1. It does not look good when you draw the golden note star effect in the editor @@ -1915,10 +1778,10 @@ procedure EditDrawLine(Left, Top, Right: real; NrLines: integer; Space: integer) glEnable(GL_TEXTURE_2D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - if (Lines[NrLines].Line[Lines[NrLines].Current].TotalNotes > 0) and ( Right-Left > 0 ) and ( (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) > 0 ) then - TempR := (Right-Left) / (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) - else - TempR := 0; + + if not Lines[NrLines].Line[Lines[NrLines].Current].HasLength(TempR) then TempR := 0 + else TempR := (Right-Left) / TempR; + with Lines[NrLines].Line[Lines[NrLines].Current] do begin for Count := 0 to HighNote do diff --git a/src/base/UEditorLyrics.pas b/src/base/UEditorLyrics.pas index fbcf5a1c..2a81bd14 100644 --- a/src/base/UEditorLyrics.pas +++ b/src/base/UEditorLyrics.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UEditorLyrics.pas $ - * $Id: UEditorLyrics.pas 2488 2010-06-11 15:54:50Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UEditorLyrics; diff --git a/src/base/UFiles.pas b/src/base/UFiles.pas index 14192d3b..d1dfec4f 100644 --- a/src/base/UFiles.pas +++ b/src/base/UFiles.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UFiles.pas $ - * $Id: UFiles.pas 2510 2010-06-13 09:03:10Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UFiles; @@ -148,15 +145,17 @@ function SaveSong(const Song: TSong; const Lines: TLines; const Name: IPath; Rel if Song.Background.IsSet then SongFile.WriteLine('#BACKGROUND:' + EncodeToken(Song.Background.ToUTF8)); if Song.Video.IsSet then SongFile.WriteLine('#VIDEO:' + EncodeToken(Song.Video.ToUTF8)); - if Song.VideoGAP <> 0 then SongFile.WriteLine('#VIDEOGAP:' + FloatToStr(Song.VideoGAP)); - if Song.Resolution <> 4 then SongFile.WriteLine('#RESOLUTION:' + IntToStr(Song.Resolution)); - if Song.NotesGAP <> 0 then SongFile.WriteLine('#NOTESGAP:' + IntToStr(Song.NotesGAP)); - if Song.Start <> 0 then SongFile.WriteLine('#START:' + FloatToStr(Song.Start)); - if Song.Finish <> 0 then SongFile.WriteLine('#END:' + IntToStr(Song.Finish)); - if Relative then SongFile.WriteLine('#RELATIVE:yes'); + if Song.VideoGAP <> 0.0 then SongFile.WriteLine('#VIDEOGAP:' + FloatToStr(Song.VideoGAP)); + if Song.Resolution <> 4 then SongFile.WriteLine('#RESOLUTION:' + IntToStr(Song.Resolution)); + if Song.NotesGAP <> 0 then SongFile.WriteLine('#NOTESGAP:' + IntToStr(Song.NotesGAP)); + if Song.Start <> 0.0 then SongFile.WriteLine('#START:' + FloatToStr(Song.Start)); + if Song.Finish <> 0 then SongFile.WriteLine('#END:' + IntToStr(Song.Finish)); + if Relative then SongFile.WriteLine('#RELATIVE:yes'); + + if Song.HasPreview and (Song.PreviewStart >= 0.0) then // also allow writing 0.0 preview if set + SongFile.WriteLine('#PREVIEWSTART:' + FloatToStr(Song.PreviewStart)); if (Song.Medley.Source=msTag) and not Relative and (Song.Medley.EndBeat - Song.Medley.StartBeat > 0) then - //if (Song.Medley.Source=msTag) and not Relative and (Song.Medley.EndBeat - Song.Medley.StartBeat > 0) then begin SongFile.WriteLine('#MedleyStartBeat:' + IntToStr(Song.Medley.StartBeat)); SongFile.WriteLine('#MedleyEndBeat:' + IntToStr(Song.Medley.EndBeat)); diff --git a/src/base/UFilesystem.pas b/src/base/UFilesystem.pas index eaef2ec4..353583f6 100644 --- a/src/base/UFilesystem.pas +++ b/src/base/UFilesystem.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UFilesystem; diff --git a/src/base/UFont.pas b/src/base/UFont.pas index 8946ef6e..15578e02 100644 --- a/src/base/UFont.pas +++ b/src/base/UFont.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UFont.pas $ - * $Id: UFont.pas 2675 2010-10-17 17:00:23Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UFont; diff --git a/src/base/UGraphic.pas b/src/base/UGraphic.pas index e20f78ee..67a09b2a 100644 --- a/src/base/UGraphic.pas +++ b/src/base/UGraphic.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UGraphic.pas $ - * $Id: UGraphic.pas 2339 2010-05-05 07:22:17Z canni0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UGraphic; @@ -39,7 +36,9 @@ interface UTexture, TextGL, UConfig, + UCommon, ULog, + UIni, SysUtils, UImage, UCatCovers, @@ -50,7 +49,6 @@ interface UScreenLoading, UScreenMain, UScreenName, - UScreenLevel, UScreenOptions, UScreenOptionsGame, UScreenOptionsGraphics, @@ -63,18 +61,17 @@ interface UScreenOptionsWebcam, UScreenOptionsJukebox, UScreenSong, - UScreenSing, + UScreenSingController, UScreenJukebox, UScreenJukeboxOptions, UScreenJukeboxPlaylist, UScreenScore, UScreenTop5, UScreenEditSub, - UScreenEdit, UScreenEditHeader, - UScreenEditConvert, UScreenOpen, UScreenAbout, + UScreenDevelopers, USkins, UScreenSongMenu, UScreenSongJumpto, @@ -105,12 +102,24 @@ TRecR = record Bottom: real; end; +const + Mode_Windowed = 0; + Mode_Borderless = 1; + Mode_Fullscreen = 2; + +type + FullscreenModes = integer; + + var Screen: PSDL_Window; glcontext: TSDL_GLContext; LoadingThread: PSDL_Thread; Mutex: PSDL_Mutex; + CurrentWindowMode: FullscreenModes; + WindowModeDirty: boolean; + RenderW: integer; RenderH: integer; ScreenW: integer; @@ -118,13 +127,16 @@ TRecR = record Screens: integer; ScreenAct: integer; ScreenX: integer; + LastX, LastY: integer; + LastW, LastH: integer; + HasValidPosition: boolean; + HasValidSize: boolean; ScreenLoading: TScreenLoading; ScreenMain: TScreenMain; ScreenName: TScreenName; - ScreenLevel: TScreenLevel; ScreenSong: TScreenSong; - ScreenSing: TScreenSing; + ScreenSing: TScreenSingController; ScreenJukebox: TScreenJukebox; ScreenJukeboxOptions: TScreenJukeboxOptions; @@ -144,11 +156,10 @@ TRecR = record ScreenOptionsWebcam: TScreenOptionsWebcam; ScreenOptionsJukebox: TScreenOptionsJukebox; ScreenEditSub: TScreenEditSub; - ScreenEdit: TScreenEdit; - ScreenEditConvert: TScreenEditConvert; ScreenEditHeader: TScreenEditHeader; ScreenOpen: TScreenOpen; ScreenAbout: TScreenAbout; + ScreenDevelopers: TScreenDevelopers; ScreenSongMenu: TScreenSongMenu; ScreenSongJumpto: TScreenSongJumpto; @@ -184,17 +195,17 @@ TRecR = record ScreenPopupScoreDownload: TScreenPopupScoreDownload; //Notes - Tex_Left: array[1..6] of TTexture; //rename to tex_note_left - Tex_Mid: array[1..6] of TTexture; //rename to tex_note_mid - Tex_Right: array[1..6] of TTexture; //rename to tex_note_right + Tex_Left: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_note_left + Tex_Mid: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_note_mid + Tex_Right: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_note_right - Tex_plain_Left: array[1..6] of TTexture; //rename to tex_notebg_left - Tex_plain_Mid: array[1..6] of TTexture; //rename to tex_notebg_mid - Tex_plain_Right: array[1..6] of TTexture; //rename to tex_notebg_right + Tex_plain_Left: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_notebg_left + Tex_plain_Mid: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_notebg_mid + Tex_plain_Right: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_notebg_right - Tex_BG_Left: array[1..6] of TTexture; //rename to tex_noteglow_left - Tex_BG_Mid: array[1..6] of TTexture; //rename to tex_noteglow_mid - Tex_BG_Right: array[1..6] of TTexture; //rename to tex_noteglow_right + Tex_BG_Left: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_noteglow_left + Tex_BG_Mid: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_noteglow_mid + Tex_BG_Right: array[1..UIni.IMaxPlayerCount] of TTexture; //rename to tex_noteglow_right Tex_Note_Star: TTexture; Tex_Note_Perfect_Star: TTexture; @@ -218,19 +229,19 @@ TRecR = record //End PhrasenBonus - Line Bonus Mod //ScoreBG Texs - Tex_ScoreBG: array [0..5] of TTexture; + Tex_ScoreBG: array [0..UIni.IMaxPlayerCount-1] of TTexture; //Score Screen Textures - Tex_Score_NoteBarLevel_Dark : array [1..6] of TTexture; - Tex_Score_NoteBarRound_Dark : array [1..6] of TTexture; + Tex_Score_NoteBarLevel_Dark : array [1..UIni.IMaxPlayerCount] of TTexture; + Tex_Score_NoteBarRound_Dark : array [1..UIni.IMaxPlayerCount] of TTexture; - Tex_Score_NoteBarLevel_Light : array [1..6] of TTexture; - Tex_Score_NoteBarRound_Light : array [1..6] of TTexture; + Tex_Score_NoteBarLevel_Light : array [1..UIni.IMaxPlayerCount] of TTexture; + Tex_Score_NoteBarRound_Light : array [1..UIni.IMaxPlayerCount] of TTexture; - Tex_Score_NoteBarLevel_Lightest : array [1..6] of TTexture; - Tex_Score_NoteBarRound_Lightest : array [1..6] of TTexture; + Tex_Score_NoteBarLevel_Lightest : array [1..UIni.IMaxPlayerCount] of TTexture; + Tex_Score_NoteBarRound_Lightest : array [1..UIni.IMaxPlayerCount] of TTexture; - Tex_Score_Ratings : array [0..7] of TTexture; + Tex_Score_Ratings : array [0..7] of TTexture; //stores all possible rating result images // arrows for SelectSlide Tex_SelectS_ArrowL: TTexture; @@ -310,13 +321,22 @@ procedure UnloadScreens; function LoadingThreadFunction: integer; +procedure UpdateResolution; +procedure UpdateVideoMode; + +procedure SetVideoMode(Mode: FullscreenModes); +function SwitchVideoMode(Mode: FullscreenModes): FullscreenModes; +function HasWindowState(Flag: integer): boolean; + +// events +procedure OnWindowMoved(x,y: integer); +procedure OnWindowResized(w,h: integer); implementation uses Classes, - UIni, UDisplay, UCommandLine, UPathUtils; @@ -424,7 +444,7 @@ procedure LoadTextures; end; const - WINDOW_ICON = 'icons/ultrastardx-icon.png'; + WINDOW_ICON = 'icons/WorldParty.png'; procedure Initialize3D (Title: string); var @@ -536,9 +556,15 @@ procedure InitializeScreen; S: string; I: integer; W, H: integer; + X, Y: integer; // offset for re-positioning Depth: Integer; - Fullscreen: boolean; + Borderless, Fullscreen: boolean; Split: boolean; + Disp: TSDL_DisplayMode; + +label + NoDoubledResolution; + begin if (Params.Screens <> -1) then Screens := Params.Screens + 1 @@ -553,44 +579,105 @@ procedure InitializeScreen; Split := Ini.Split = 1; end; // case + // check whether to start in fullscreen, windowed mode or borderless mode (windowed fullscreen). + // The command-line parameters take precedence over the ini settings. + Borderless := (Ini.FullScreen = 2) and (Params.ScreenMode <> scmFullscreen); + Fullscreen := ((Ini.FullScreen = 1) or (Params.ScreenMode = scmFullscreen)) and + not (Params.ScreenMode = scmWindowed); + // If there is a resolution in Parameters, use it, else use the Ini value - I := Params.Resolution; - if (I <> -1) then - S := IResolution[I] + // check for a custom resolution (in the format of WIDTHxHEIGHT) or try validating ID from TIni + if ParseResolutionString(Params.CustomResolution, W, H) then + Log.LogStatus(Format('Use custom resolution from Command line: %d x %d', [W, H]), 'SDL_SetVideoMode') + else if Ini.GetResolution(Params.Resolution, S) and ParseResolutionString(S, W, H) then + Log.LogStatus(Format('Use resolution by index from command line: %d x %d [%d]', [W, H, Params.Resolution]), 'SDL_SetVideoMode') + else if Fullscreen then + begin + Log.LogStatus('Use config fullscreen resolution', 'SDL_SetVideoMode'); + S := Ini.GetResolutionFullscreen(W, H); + + // fullscreen resolution shouldn't be doubled as it would not allow running real fullscreen + // in a specific resolution if desired and required for some TVs/monitors/display devices + Goto NoDoubledResolution; + end else - S := IResolution[Ini.Resolution]; + begin + Log.LogStatus('Use config resolution', 'SDL_SetVideoMode'); + S := Ini.GetResolution(W, H); - I := Pos('x', S); - W := StrToInt(Copy(S, 1, I-1)); - H := StrToInt(Copy(S, I+1, 1000)); + // hackfix to prevent a doubled resolution twice as GetResolution(int,int) is already doubling the resolution + Goto NoDoubledResolution; + end; + + // hacky fix to support multiplied resolution (in width) in multiple screen setup (Screens=2 and more) + // TODO: RattleSN4K3: Improve the way multiplied screen resolution is applied and stored (see UGraphics::InitializeScreen; W := W * Screens) if ((Screens > 1) and not Split) then W := W * Screens; - Log.LogStatus('SDL_SetVideoMode', 'Initialize3D'); +NoDoubledResolution: - // check whether to start in fullscreen or windowed mode. - // The command-line parameters take precedence over the ini settings. - Fullscreen := ((Ini.FullScreen = 1) or (Params.ScreenMode = scmFullscreen)) and - not (Params.ScreenMode = scmWindowed); + Log.LogStatus('Creating window', 'SDL_SetVideoMode'); - if Fullscreen then + // TODO: use SDL renderer (for proper scale in "real fullscreen"). Able to choose rendering mode (OpenGL, OpenGL ES, Direct3D) + if Borderless then + begin + Log.LogStatus('Set Video Mode... Borderless fullscreen', 'SDL_SetVideoMode'); + CurrentWindowMode := Mode_Borderless; + screen := SDL_CreateWindow('UltraStar Deluxe loading...', + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, W, H, SDL_WINDOW_OPENGL or SDL_WINDOW_FULLSCREEN_DESKTOP or SDL_WINDOW_RESIZABLE); + end + else if Fullscreen then begin - Log.LogStatus('SDL_SetVideoMode', 'Set Video Mode... Full Screen'); + Log.LogStatus('Set Video Mode... Fullscreen', 'SDL_SetVideoMode'); + CurrentWindowMode := Mode_Fullscreen; screen := SDL_CreateWindow('UltraStar Deluxe loading...', - SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED, W, H, SDL_WINDOW_OPENGL or SDL_WINDOW_FULLSCREEN_DESKTOP or SDL_WINDOW_RESIZABLE); + SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, W, H, SDL_WINDOW_OPENGL or SDL_WINDOW_FULLSCREEN or SDL_WINDOW_RESIZABLE); end else begin - Log.LogStatus('SDL_SetVideoMode', 'Set Video Mode... Windowed'); + Log.LogStatus('Set Video Mode... Windowed', 'SDL_SetVideoMode'); + CurrentWindowMode := Mode_Windowed; screen := SDL_CreateWindow('UltraStar Deluxe loading...', - SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED, W, H, SDL_Window_OPENGL or SDL_WINDOW_RESIZABLE); + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, W, H, SDL_WINDOW_OPENGL or SDL_WINDOW_RESIZABLE); end; //SDL_ShowCursor(0); just to be able to debug while having mosue cursor if (screen = nil) then begin - Log.LogCritical('SDL_SetVideoMode Failed', 'Initialize3D'); + Log.LogCritical('Creating window failed', 'SDL_SetVideoMode'); + end + else + begin + X:=0; Y:=0; + + // check if created window has the desired size, otherwise override the config resolution value + if SDL_GetWindowDisplayMode(screen, @Disp) = 0 then + begin + if (Disp.w < W) or (Disp.h < H) then + begin + Log.LogStatus(Format('Video resolution (%s) exceeded possible size (%s). Override stored config resolution!', [BuildResolutionString(W,H), BuildResolutionString(Disp.w, Disp.h)]), 'SDL_SetVideoMode'); + Ini.SetResolution(Disp.w, Disp.h, true); + end + else if Fullscreen and ((Disp.w > W) or (Disp.h > H)) then + begin + Log.LogStatus(Format('Video resolution not used. Using native fullscreen resolution (%s)', [BuildResolutionString(Disp.w, Disp.h)]), 'SDL_SetVideoMode'); + Ini.SetResolution(Disp.w, Disp.h, false, true); + end; + + X := Disp.w - Screen.w; + Y := Disp.h - Screen.h; + end; + + // if screen is out of the visisble desktop area, move it back + // this likely happens when creating a Window bigger than the possible desktop size + if (SDL_GetWindowFlags(screen) and SDL_WINDOW_FULLSCREEN = 0) and ((screen.x < 0) or (screen.Y < 0)) then + begin + // TODO: update SDL2 + //SDL_GetWindowBordersSize(screen, w, h, nil, nil); + Log.LogStatus('Bad position for window. Re-position to (0,0)', 'SDL_SetVideoMode'); + SDL_SetWindowPosition(screen, x, y+x); + end; end; //LoadOpenGL(); @@ -614,8 +701,8 @@ procedure InitializeScreen; RenderH := 600; ScreenW := Screen.w; ScreenH := Screen.h; - // Ausganswerte für die State-Machine setzen - //SDL_GL_SetSwapInterval(1); // VSYNC (currently Windows only) + // Activate Vertical synchronization (Limits FPS to 60, saving power in GPU) + SDL_GL_SetSwapInterval(1); // VSYNC (currently Windows only) {// clear screen once window is being shown // Note: SwapBuffers uses RenderW/H, so they must be defined before @@ -624,6 +711,172 @@ procedure InitializeScreen; SwapBuffers;} end; +function HasWindowState(Flag: integer): boolean; +begin + Result := SDL_GetWindowFlags(screen) and Flag <> 0; +end; + +procedure UpdateResolution(); + var + Disp: TSDL_DisplayMode; + Event: TSDL_event; +begin + if CurrentWindowMode = Mode_Borderless then Exit; + case CurrentWindowMode of + Mode_Fullscreen: + begin + SDL_GetWindowDisplayMode(screen, @Disp); // TODO: verify if not failed + Ini.GetResolutionFullscreen(Disp.W, Disp.H); // we use the fullscreen resolution without being doubled, true fullscreen uses non-multiplied one + SDL_SetWindowDisplayMode(screen, @Disp); + SDL_SetWindowSize(screen, Disp.W, Disp.H); + end; + Mode_Windowed: + begin + Ini.GetResolution(Disp.W, Disp.H); + SDL_SetWindowSize(screen, Disp.W, Disp.H); + + // re-center window if it wasn't moved already, keeps it centered + if not HasValidPosition then + begin + SDL_SetWindowPosition(screen, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + end; + + // simulate window re-drawing, otherwise the context will be different sized + Event.user.type_ := SDL_WINDOWEVENT; + Event.window.event := SDL_WINDOWEVENT_RESIZED; + Event.window.data1 := Disp.W; + Event.window.data2 := Disp.H; + SDL_PushEvent(@Event); + end; + end; +end; + +procedure UpdateVideoMode(); + var + Mode: FullscreenModes; +begin + if Ini.Fullscreen = 1 then Mode := Mode_Fullscreen + else if Ini.FullScreen = 2 then Mode := Mode_Borderless + else Mode := Mode_Windowed; + + SetVideoMode(Mode); +end; + +procedure SetVideoMode(Mode: FullscreenModes); + var + w,h: integer; + Disp: TSDL_DisplayMode; +begin + if Mode = CurrentWindowMode then Exit; + if Mode >= Mode_Fullscreen then + begin + Mode := Mode and not Mode_Borderless; + SDL_GetWindowDisplayMode(screen, @Disp); + SDL_SetWindowFullscreen(screen, SDL_WINDOW_FULLSCREEN); + + Ini.GetResolutionFullscreen(Disp.W, Disp.H); + SDL_SetWindowDisplayMode(screen, @Disp); + SDL_SetWindowSize(screen, Disp.W, Disp.H); + end + else if Mode = Mode_Borderless then + begin + // calls window-resize event which updates screen sizes + SDL_SetWindowFullscreen(screen, SDL_WINDOW_FULLSCREEN_DESKTOP); + end + else if Mode = Mode_Windowed then + begin + WindowModeDirty := true; // set window size dirty to restore old size after switching from fullscreen + SDL_SetWindowFullscreen(screen, SDL_WINDOW_RESIZABLE); // calls window-resize event which updates screen sizes + + ScreenW := LastW; ScreenH := LastH; + if not HasValidSize then Ini.GetResolution(ScreenW, ScreenH); + SDL_SetWindowSize(screen, ScreenW, ScreenH); + end; + + CurrentWindowMode := Mode; +end; + +function SwitchVideoMode(Mode: FullscreenModes): FullscreenModes; +begin + if Mode = Mode_Windowed then Mode := CurrentWindowMode; + SetVideoMode(CurrentWindowMode xor Mode); + Result := CurrentWindowMode; +end; + +procedure OnWindowMoved(x,y: integer); +begin + if CurrentWindowMode <> Mode_Windowed then Exit; + if (SDL_GetWindowFlags(screen) and (SDL_WINDOW_MINIMIZED or SDL_WINDOW_MAXIMIZED) <> 0) then Exit; + + if not WindowModeDirty then + begin + HasValidPosition := true; + LastX := x; + LastY := y; + end; +end; + +procedure OnWindowResized(w,h: integer); +begin + if WindowModeDirty and not HasWindowState(SDL_WINDOW_FULLSCREEN) then + begin + if not HasValidSize then + begin + LastH := ScreenH; + LastW := ScreenW; + end; + + // restoring from maximized state will additionally call a SDL_WINDOWEVENT_RESIZED event + // we keep the dirty flag to still revert to the last none-maximized stored position and size + if HasWindowState(SDL_WINDOW_MINIMIZED or SDL_WINDOW_MAXIMIZED) then + begin + SDL_RestoreWindow(screen); + end + else + begin + WindowModeDirty := false; + end; + + // override render size + ScreenW := LastW; + ScreenH := LastH; + SDL_SetWindowPosition(screen, LastX, LastY); + + // if there wasn't a windowed mode before, center window + if not HasValidPosition then + begin + SDL_SetWindowPosition(screen, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED); + end; + end + else + begin + // override render size + ScreenW := w; ScreenH := h; + + if not HasWindowState(SDL_WINDOW_MAXIMIZED or SDL_WINDOW_FULLSCREEN) then + begin + HasValidSize := true; + LastW := w; + LastH := h; + end; + end; + + if CurrentWindowMode = Mode_Fullscreen then + begin + Screen.W := ScreenW; + Screen.H := ScreenH; + end + else + begin + SDL_SetWindowSize(screen, ScreenW, ScreenH); + end; + + if assigned(Display) then + begin + Display.OnWindowResized(); // notify display window has changed + end; +end; + procedure LoadLoadingScreen; begin ScreenLoading := TScreenLoading.Create; @@ -640,8 +893,7 @@ procedure LoadScreens(Title: string); SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenMain & ScreenName')); ScreenMain := TScreenMain.Create; ScreenName := TScreenName.Create; - SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenLevel & ScreenSong')); - ScreenLevel := TScreenLevel.Create; + SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenSong')); ScreenSong := TScreenSong.Create; SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenSongMenu & ScreenJukebox')); ScreenSongMenu := TScreenSongMenu.Create; @@ -655,7 +907,7 @@ procedure LoadScreens(Title: string); SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenOptions & ScreenOptionsGame')); ScreenOptions := TScreenOptions.Create; ScreenOptionsGame := TScreenOptionsGame.Create; - SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenOptionsGraphics & ScreenOptionsSound')); + SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenOptionsGraphics & ScreenOptionsSound & ScreenOptionsInput')); ScreenOptionsGraphics := TScreenOptionsGraphics.Create; ScreenOptionsSound := TScreenOptionsSound.Create; SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenOptionsLyrics & ScreenOptionsThemes')); @@ -671,13 +923,13 @@ procedure LoadScreens(Title: string); ScreenOptionsWebcam := TScreenOptionsWebcam.Create; SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenOptionsJukebox')); ScreenOptionsJukebox := TScreenOptionsJukebox.Create; - SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenEditSub & ScreenEdit')); + SDL_SetWindowTitle(Screen, PChar(Title + ' - ScreenEditSub')); ScreenEditSub := TScreenEditSub.Create; - ScreenEdit := TScreenEdit.Create; SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenOpen')); ScreenOpen := TScreenOpen.Create; - SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenAbout')); - ScreenAbout := TScreenAbout.Create; + SDL_SetWindowTitle(Screen, PChar(Title + ' - Loading ScreenAbout & ScreenDevelopers')); + ScreenAbout := TScreenAbout.Create; + ScreenDevelopers := TScreenDevelopers.Create; Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen About', 3); Log.BenchmarkStart(3); //ScreenSingModi := TScreenSingModi.Create; //Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Sing with Modi support', 3); Log.BenchmarkStart(3); @@ -720,7 +972,6 @@ procedure UnloadScreens; begin ScreenMain.Free; ScreenName.Free; - ScreenLevel.Free; ScreenSong.Free; //ScreenSing.Free; ScreenScore.Free; @@ -736,13 +987,13 @@ procedure UnloadScreens; ScreenOptionsWebcam.Free; ScreenOptionsJukebox.Free; ScreenEditSub.Free; - ScreenEdit.Free; ScreenJukebox.Free; ScreenJukeboxOptions.Free; ScreenJukeboxPlaylist.Free; ScreenTop5.Free; ScreenOpen.Free; ScreenAbout.Free; + ScreenDevelopers.Free; //ScreenSingModi.Free; ScreenSongMenu.Free; ScreenSongJumpto.Free; diff --git a/src/base/UGraphicClasses.pas b/src/base/UGraphicClasses.pas index dd0c68bd..c9e0a662 100644 --- a/src/base/UGraphicClasses.pas +++ b/src/base/UGraphicClasses.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UGraphicClasses.pas $ - * $Id: UGraphicClasses.pas 2760 2010-12-15 10:02:08Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UGraphicClasses; @@ -36,6 +33,7 @@ interface uses UTexture, ULog, + UIni, SDL2; const @@ -93,7 +91,7 @@ TEffectManager = class Particle : array of TParticle; LastTime : cardinal; RecArray : array of RectanglePositions; - TwinkleArray : array[0..5] of real; // store x-position of last twinkle for every player + TwinkleArray : array[0..UIni.IMaxPlayerCount-1] of real; // store x-position of last twinkle for every player PerfNoteArray : array of PerfectNotePositions; FlareTex: TTexture; @@ -131,7 +129,6 @@ implementation UCommon, UDrawTexture, UGraphic, - UIni, UNote, USkins, UThemes; diff --git a/src/base/UImage.pas b/src/base/UImage.pas index 16c7f08a..aa439c3e 100644 --- a/src/base/UImage.pas +++ b/src/base/UImage.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UImage.pas $ - * $Id: UImage.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UImage; diff --git a/src/base/UIni.pas b/src/base/UIni.pas index 890f820c..e41f154d 100644 --- a/src/base/UIni.pas +++ b/src/base/UIni.pas @@ -1,28 +1,27 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UIni.pas $ - * $Id: UIni.pas 2630 2010-09-04 10:18:40Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} +//TODO: lots of parts in this code should be rewritten in a more object oriented way. + unit UIni; interface @@ -72,21 +71,29 @@ TInputDeviceConfig = record const CHANNEL_OFF = 0; // for field ChannelToPlayerMap LATENCY_AUTODETECT = -1; // for field Latency + DEFAULT_RESOLUTION = '800x600'; + DEFAULT_THEME = 'Modern'; + IMaxPlayerCount = 12; + IPlayers: array[0..6] of UTF8String = ('1', '2', '3', '4', '6', '8', '12'); + IPlayersVals: array[0..6] of integer = ( 1 , 2 , 3 , 4 , 6 , 8 , 12); type //Options - TVisualizerOption = (voOff, voWhenNoVideo, voOn); + TVisualizerOption = (voOff, voWhenNoVideo, voWhenNoVideoAndImage, voOn); TBackgroundMusicOption = (bmoOff, bmoOn); TSongMenuMode = ( smRoulette, smChessboard, smCarousel, smSlotMachine, smSlide, smList, smMosaic); TIni = class private + function ExtractKeyIndex(const Key, Prefix, Suffix: string): integer; function GetMaxKeyIndex(Keys: TStringList; const Prefix, Suffix: string): integer; function ReadArrayIndex(const SearchArray: array of UTF8String; IniFile: TCustomIniFile; - IniSection: string; IniProperty: string; Default: integer): integer; + IniSection: string; IniProperty: string; Default: integer; CaseInsensitive: boolean = false): integer; overload; + function ReadArrayIndex(const SearchArray: array of UTF8String; IniFile: TCustomIniFile; + IniSection: string; IniProperty: string; Default: integer; DefaultValue: UTF8String; CaseInsensitive: boolean = false): integer; overload; procedure TranslateOptionValues; procedure LoadInputDeviceCfg(IniFile: TMemIniFile); @@ -99,18 +106,18 @@ TIni = class public // Players or Teams colors - SingColor: array [0..5] of integer; + SingColor: array[0..(IMaxPlayerCount-1)] of integer; Name: array[0..15] of UTF8String; - PlayerColor: array[0..5] of integer; + PlayerColor: array[0..(IMaxPlayerCount-1)] of integer; TeamColor: array[0..2] of integer; - PlayerAvatar: array[0..5] of UTF8String; - PlayerLevel: array[0..5] of integer; + PlayerAvatar: array[0..(IMaxPlayerCount-1)] of UTF8String; + PlayerLevel: array[0..(IMaxPlayerCount-1)] of integer; // Templates for Names Mod NameTeam: array[0..2] of UTF8String; - NameTemplate: array[0..11] of UTF8String; + NameTemplate: array[0..(IMaxPlayerCount-1)] of UTF8String; //Filename of the opened iniFile Filename: IPath; @@ -132,7 +139,8 @@ TIni = class MaxFramerateGet: byte; Screens: integer; Split: integer; - Resolution: integer; + Resolution: integer; // Resolution for windowed mode + ResolutionFullscreen: integer; // Resolution for real fullscreen (changing Video mode) Depth: integer; VisualizerOption: integer; FullScreen: integer; @@ -154,6 +162,7 @@ TIni = class ThresholdIndex: integer; AudioOutputBufferSizeIndex: integer; VoicePassthrough: integer; + MusicAutoGain: integer; SoundFont: string; SyncTo: integer; @@ -271,11 +280,32 @@ TIni = class procedure SaveSingTimebarMode; procedure SaveJukeboxTimebarMode; + { Sets resolution. + @return (@true when resolution was added, @false otherwise) } + function SetResolution(ResolutionString: string; RemoveCurrent: boolean = false; NoSave: boolean = false): boolean; overload; + { Sets resolution. + @return (@true when resolution was added, @false otherwise) } + function SetResolution(w,h: integer; RemoveCurrent: boolean = false; NoSave: boolean = false): boolean; overload; + { Sets resolution given by the index pointing to a resolution in IResolution. + @return (@true when resolution ID was found, @false otherwise) } + function SetResolution(index: integer): boolean; overload; + function GetResolution(): string; overload; + function GetResolution(out w,h: integer): string; overload; + function GetResolution(index: integer; out ResolutionString: string): boolean; overload; + + function GetResolutionFullscreen(): string; overload; + function GetResolutionFullscreen(out w,h: integer): string; overload; + function GetResolutionFullscreen(index: integer; out ResolutionString: string): boolean; overload; + + procedure ClearCustomResolutions(); + end; var Ini: TIni; IResolution: TUTF8StringDynArray; + IResolutionFullScreen: TUTF8StringDynArray; + IResolutionCustom: TUTF8StringDynArray; ILanguage: TUTF8StringDynArray; ITheme: TUTF8StringDynArray; ISkin: TUTF8StringDynArray; @@ -285,15 +315,11 @@ TIni = class *} const - IPlayers: array[0..4] of UTF8String = ('1', '2', '3', '4', '6'); - IPlayersVals: array[0..4] of integer = ( 1 , 2 , 3 , 4 , 6 ); - IDifficulty: array[0..2] of UTF8String = ('Easy', 'Medium', 'Hard'); ITabs: array[0..1] of UTF8String = ('Off', 'On'); const - //ISorting: array[0..9] of UTF8String = ('Edition', 'Genre', 'Language', 'Folder', 'Title', 'Artist', 'Artist2', 'Year', 'Decade', 'Playlist'); - ISorting: array[0..8] of UTF8String = ('Edition', 'Genre', 'Language', 'Folder', 'Title', 'Artist', 'Artist2', 'Year', 'Decade'); + ISorting: array[0..9] of UTF8String = ('Edition', 'Genre', 'Language', 'Folder', 'Title', 'Artist', 'Artist2', 'Year', 'Decade', 'Playlist'); ISongMenuMode: array[0..6] of UTF8String = ('Roulette', 'Chessboard', 'Carousel', 'Slot Machine', 'Slide', 'List', 'Mosaic'); type @@ -307,9 +333,9 @@ TIni = class IMaxFramerate: array[0..11] of UTF8String = ('10', '20', '30', '40', '50', '60', '70', '80', '90', '100', '150', '200'); IScreens: array[0..1] of UTF8String = ('1', '2'); ISplit: array[0..1] of UTF8String = ('Off', 'On'); - IFullScreen: array[0..1] of UTF8String = ('Off', 'On'); + IFullScreen: array[0..2] of UTF8String = ('Off', 'On', 'Borderless'); IDepth: array[0..1] of UTF8String = ('16 bit', '32 bit'); - IVisualizer: array[0..2] of UTF8String = ('Off', 'WhenNoVideo','On'); + IVisualizer: array[0..3] of UTF8String = ('Off', 'WhenNoVideo', 'WhenNoVideoAndImage', 'On'); IBackgroundMusic: array[0..1] of UTF8String = ('Off', 'On'); @@ -335,6 +361,10 @@ TIni = class IThresholdVals: array[0..3] of single = (0.05, 0.10, 0.15, 0.20); IVoicePassthrough: array[0..1] of UTF8String = ('Off', 'On'); + + IMusicAutoGain: array[0..3] of UTF8String = ('Off', 'Soft', 'Medium', 'Hard'); + IMusicAutoGainVals: array[0..3] of integer = (-1, 0, 1, 2); + const ISyncTo: array[0..2] of UTF8String = ('Music', 'Lyrics', 'Off'); @@ -377,7 +407,6 @@ TIni = class IHexSingColor: array[0..20] of UTF8String = ('0096FF', '3FBF3F', 'FF3FC0', 'DC0000', 'B43FE6', 'FF9000', 'FFFF00', 'C07F1F', '000000', '00FFE6', 'FF7F66', '99FF66', 'CCCCFF', 'FFE6CC', '339999', '9900CC', '336699', 'FF99FF', '8A5C2E', 'FFCC33', ''); - //IHexColor: array[0..9] of UTF8String = ('0096FF', '3FBF3F', 'FF3FC0', 'DC0000', 'B43FE6', 'FF9000', 'FFFF00', 'C07F1F', '000000', ''); IHexGrayColor: array[0..9] of UTF8String = ('000000', '202020', '404040', '606060', '808080', 'A0A0A0', 'C0C0C0', 'D6D6D6', 'FFFFFF', ''); IHexOColor: array[0..2] of UTF8String = ('000000', 'FFFFFF', ''); @@ -401,7 +430,8 @@ TIni = class IPartyPopup: array[0..1] of UTF8String = ('Off', 'On'); IJoypad: array[0..1] of UTF8String = ('Off', 'On'); - IMouse: array[0..2] of UTF8String = ('Off', 'Hardware Cursor', 'Software Cursor'); + IMouse: array[0..2] of UTF8String = ('Off', 'System', 'Game'); + IMouseLegacy: array[0..2] of UTF8String = ('Off', 'Hardware Cursor', 'Software Cursor'); // use to convert old config option to new ISingTimebarMode: array[0..2] of UTF8String = ('Current', 'Remaining', 'Total'); IJukeboxTimebarMode: array[0..2] of UTF8String = ('Current', 'Remaining', 'Total'); @@ -435,8 +465,8 @@ TIni = class IDebugTranslated: array[0..1] of UTF8String = ('Off', 'On'); - IFullScreenTranslated: array[0..1] of UTF8String = ('Off', 'On'); - IVisualizerTranslated: array[0..2] of UTF8String = ('Off', 'WhenNoVideo','On'); + IFullScreenTranslated: array[0..2] of UTF8String = ('Off', 'On', 'Borderless'); + IVisualizerTranslated: array[0..3] of UTF8String = ('Off', 'WhenNoVideo', 'WhenNoVideoAndImage','On'); IBackgroundMusicTranslated: array[0..1] of UTF8String = ('Off', 'On'); ISingWindowTranslated: array[0..1] of UTF8String = ('Small', 'Big'); @@ -455,6 +485,8 @@ TIni = class ISavePlaybackTranslated: array[0..1] of UTF8String = ('Off', 'On'); IVoicePassthroughTranslated: array[0..1] of UTF8String = ('Off', 'On'); + + IMusicAutoGainTranslated: array[0..3] of UTF8String = ('Off', 'Soft', 'Medium', 'Hard'); ISyncToTranslated: array[0..2] of UTF8String = ('Music', 'Lyrics', 'Off'); @@ -496,19 +528,20 @@ TIni = class ITopScoresTranslated: array[0..1] of UTF8String = ('All', 'Player'); IJoypadTranslated: array[0..1] of UTF8String = ('Off', 'On'); - IMouseTranslated: array[0..2] of UTF8String = ('Off', 'Hardware Cursor', 'Software Cursor'); + IMouseTranslated: array[0..2] of UTF8String = ('Off', 'On [System Cursor]', 'On [Game Cursor]'); + IMouseTranslatedLegacy: array[0..2] of UTF8String = ('Off', 'Hardware Cursor', 'Software Cursor'); ISingTimebarModeTranslated: array[0..2] of UTF8String = ('Current', 'Remaining', 'Total'); IJukeboxTimebarModeTranslated: array[0..2] of UTF8String = ('Current', 'Remaining', 'Total'); // Recording options - IChannelPlayerTranslated: array[0..6] of UTF8String = ('Off', '1', '2', '3', '4', '5', '6'); + IChannelPlayerTranslated: array[0..IMaxPlayerCount] of UTF8String = ('Off', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'); IMicBoostTranslated: array[0..3] of UTF8String = ('Off', '+6dB', '+12dB', '+18dB'); // Network ISendNameTranslated: array[0..1] of UTF8String = ('Off', 'On'); IAutoModeTranslated: array[0..2] of UTF8String = ('Off', 'Send', 'Guardar'); - IAutoPlayerTranslated: array[0..6] of UTF8String = ('Player 1', 'Player 2', 'Player 3', 'Player 4', 'Player 5', 'Player 6', 'All'); + IAutoPlayerTranslated: array[0..IMaxPlayerCount] of UTF8String = ('Player 1', 'Player 2', 'Player 3', 'Player 4', 'Player 5', 'Player 6', 'Player 7', 'Player 8', 'Player 9', 'Player 10', 'Player 11', 'Player 12', 'All'); IAutoScoreEasyTranslated: array of UTF8String; IAutoScoreMediumTranslated: array of UTF8String; IAutoScoreHardTranslated: array of UTF8String; @@ -521,7 +554,7 @@ TIni = class IWebcamEffectTranslated: array [0..10] of UTF8String; // Name - IPlayerTranslated: array[0..5] of UTF8String = ('Player 1', 'Player 2', 'Player 3', 'Player 4', 'Player 5', 'Player 6'); + IPlayerTranslated: array[0..(IMaxPlayerCount-1)] of UTF8String = ('Player 1', 'Player 2', 'Player 3', 'Player 4', 'Player 5', 'Player 6', 'Player 7', 'Player 8', 'Player 9', 'Player 10', 'Player 11', 'Player 12'); IRed: array[0..255] of UTF8String; IGreen: array[0..255] of UTF8String; @@ -545,6 +578,9 @@ implementation UPathUtils, UUnicodeUtils; +const + IGNORE_INDEX = -1; + (** * Translate and set the values of options, which need translation. *) @@ -553,11 +589,11 @@ procedure TIni.TranslateOptionValues; I: integer; Zeros: string; begin - // Load Languagefile - if (Params.Language <> -1) then + // Load Languagefile, fallback to config language if param is invalid + if (Params.Language > -1) and (Params.Language < Length(ILanguage)) then ULanguage.Language.ChangeLanguage(ILanguage[Params.Language]) else - ULanguage.Language.ChangeLanguage(ILanguage[Ini.Language]); + ULanguage.Language.ChangeLanguage(ILanguage[Language]); SetLength(ILanguageTranslated, Length(ILanguage)); for I := 0 to High(ILanguage) do @@ -602,10 +638,12 @@ procedure TIni.TranslateOptionValues; IFullScreenTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); IFullScreenTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_ON'); + IFullScreenTranslated[2] := ULanguage.Language.Translate('OPTION_VALUE_BORDERLESS'); IVisualizerTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); IVisualizerTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_WHENNOVIDEO'); - IVisualizerTranslated[2] := ULanguage.Language.Translate('OPTION_VALUE_ON'); + IVisualizerTranslated[2] := ULanguage.Language.Translate('OPTION_VALUE_WHENNOVIDEOANDIMAGE'); + IVisualizerTranslated[3] := ULanguage.Language.Translate('OPTION_VALUE_ON'); IBackgroundMusicTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); IBackgroundMusicTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_ON'); @@ -644,6 +682,11 @@ procedure TIni.TranslateOptionValues; IVoicePassthroughTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); IVoicePassthroughTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_ON'); + IMusicAutoGainTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); + IMusicAutoGainTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_GAIN_SOFT'); + IMusicAutoGainTranslated[2] := ULanguage.Language.Translate('OPTION_VALUE_GAIN_MEDIUM'); + IMusicAutoGainTranslated[3] := ULanguage.Language.Translate('OPTION_VALUE_GAIN_HARD'); + ISyncToTranslated[Ord(stMusic)] := ULanguage.Language.Translate('OPTION_VALUE_MUSIC'); ISyncToTranslated[Ord(stLyrics)] := ULanguage.Language.Translate('OPTION_VALUE_LYRICS'); ISyncToTranslated[Ord(stOff)] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); @@ -791,8 +834,12 @@ procedure TIni.TranslateOptionValues; IJoypadTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_ON'); IMouseTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); - IMouseTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_HARDWARE_CURSOR'); - IMouseTranslated[2] := ULanguage.Language.Translate('OPTION_VALUE_SOFTWARE_CURSOR'); + IMouseTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_SYSTEM_CURSOR'); + IMouseTranslated[2] := ULanguage.Language.Translate('OPTION_VALUE_GAME_CURSOR'); + + IMouseTranslatedLegacy[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); + IMouseTranslatedLegacy[1] := ULanguage.Language.Translate('OPTION_VALUE_HARDWARE_CURSOR'); + IMouseTranslatedLegacy[2] := ULanguage.Language.Translate('OPTION_VALUE_SOFTWARE_CURSOR'); ISingTimebarModeTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_CURRENT'); ISingTimebarModeTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_REMAINING'); @@ -848,12 +895,10 @@ procedure TIni.TranslateOptionValues; // Recording options IChannelPlayerTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); - IChannelPlayerTranslated[1] := '1'; - IChannelPlayerTranslated[2] := '2'; - IChannelPlayerTranslated[3] := '3'; - IChannelPlayerTranslated[4] := '4'; - IChannelPlayerTranslated[5] := '5'; - IChannelPlayerTranslated[6] := '6'; + for I:=1 to IMaxPlayerCount do + begin + IChannelPlayerTranslated[I] :=IntToStr(I); + end; IMicBoostTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); IMicBoostTranslated[1] := '+6dB'; @@ -865,13 +910,11 @@ procedure TIni.TranslateOptionValues; IAutoModeTranslated[1] := ULanguage.Language.Translate('OPTION_VALUE_SEND'); IAutoModeTranslated[2] := ULanguage.Language.Translate('OPTION_VALUE_SAVE'); - IAutoPlayerTranslated[0] := ULanguage.Language.Translate('OPTION_PLAYER_1'); - IAutoPlayerTranslated[1] := ULanguage.Language.Translate('OPTION_PLAYER_2'); - IAutoPlayerTranslated[2] := ULanguage.Language.Translate('OPTION_PLAYER_3'); - IAutoPlayerTranslated[3] := ULanguage.Language.Translate('OPTION_PLAYER_4'); - IAutoPlayerTranslated[4] := ULanguage.Language.Translate('OPTION_PLAYER_5'); - IAutoPlayerTranslated[5] := ULanguage.Language.Translate('OPTION_PLAYER_6'); - IAutoPlayerTranslated[6] := ULanguage.Language.Translate('OPTION_ALL_PLAYERS'); + for I:=0 to IMaxPlayerCount-1 do + begin + IAutoPlayerTranslated[I] :=ULanguage.Language.Translate('OPTION_PLAYER_' + IntToStr(I)); + end; + IAutoPlayerTranslated[12] := ULanguage.Language.Translate('OPTION_ALL_PLAYERS'); // Webcam IWebcamFlipTranslated[0] := ULanguage.Language.Translate('OPTION_VALUE_OFF'); @@ -991,15 +1034,27 @@ function TIni.GetMaxKeyIndex(Keys: TStringList; const Prefix, Suffix: string): i * returned. *) function TIni.ReadArrayIndex(const SearchArray: array of UTF8String; IniFile: TCustomIniFile; - IniSection: string; IniProperty: string; Default: integer): integer; + IniSection: string; IniProperty: string; Default: integer; CaseInsensitive: boolean = false): integer; +begin + Result := ReadArrayIndex(SearchArray, IniFile, IniSection, IniProperty, Default, '', CaseInsensitive); +end; + +function TIni.ReadArrayIndex(const SearchArray: array of UTF8String; IniFile: TCustomIniFile; + IniSection: string; IniProperty: string; Default: integer; DefaultValue: UTF8String; CaseInsensitive: boolean = false): integer; var StrValue: string; begin - StrValue := IniFile.ReadString(IniSection, IniProperty, SearchArray[Default]); - Result := GetArrayIndex(SearchArray, StrValue); - if (Result = -1) then + StrValue := IniFile.ReadString(IniSection, IniProperty, ''); + Result := GetArrayIndex(SearchArray, StrValue, CaseInsensitive); + if (Result < 0) then begin - Result := Default; + if (Default = IGNORE_INDEX) and (not UCommon.Equals(StrValue, DefaultValue, not CaseInsensitive)) then + begin + // priorite default string value + Result := GetArrayIndex(SearchArray, DefaultValue, CaseInsensitive); + end; + + if (Result < 0) or (Result > High(SearchArray)) then Result := Default; end; end; @@ -1060,9 +1115,9 @@ procedure TIni.LoadInputDeviceCfg(IniFile: TMemIniFile); RecordKeys.Free(); // MicBoost - MicBoost := GetArrayIndex(IMicBoost, IniFile.ReadString('Record', 'MicBoost', 'Off')); + MicBoost := ReadArrayIndex(IMicBoost, IniFile, 'Record', 'MicBoost', IGNORE_INDEX, 'Off'); // Threshold - ThresholdIndex := GetArrayIndex(IThreshold, IniFile.ReadString('Record', 'Threshold', IThreshold[1])); + ThresholdIndex := ReadArrayIndex(IThreshold, IniFile, 'Record', 'Threshold', 1); end; procedure TIni.SaveInputDeviceCfg(IniFile: TIniFile); @@ -1123,14 +1178,14 @@ procedure TIni.LoadThemes(IniFile: TCustomIniFile); Log.CriticalError('Could not find any valid Themes.'); end; - Theme := GetArrayIndex(ITheme, IniFile.ReadString('Themes', 'Theme', 'DELUXE'), true); + Theme := ReadArrayIndex(ITheme, IniFile, 'Themes', 'Theme', IGNORE_INDEX, DEFAULT_THEME, true); if (Theme = -1) then Theme := 0; // Skin Skin.onThemeChange; - SkinNo := GetArrayIndex(ISkin, IniFile.ReadString('Themes', 'Skin', ISkin[UThemes.Theme.Themes[Theme].DefaultSkin])); + SkinNo := ReadArrayIndex(ISkin, IniFile, 'Themes', 'Skin', UThemes.Theme.Themes[Theme].DefaultSkin); { there may be a not existing skin in the ini file e.g. due to manual edit or corrupted file. @@ -1139,7 +1194,7 @@ procedure TIni.LoadThemes(IniFile: TCustomIniFile); SkinNo := 0; // Color - Color := GetArrayIndex(IColor, IniFile.ReadString('Themes', 'Color', IColor[Skin.GetDefaultColor(SkinNo)])); + Color := ReadArrayIndex(IColor, IniFile, 'Themes', 'Color', Skin.GetDefaultColor(SkinNo)); end; procedure TIni.LoadScreenModes(IniFile: TCustomIniFile); @@ -1155,110 +1210,153 @@ procedure TIni.LoadScreenModes(IniFile: TCustomIniFile); end; var - Modes: PSDL_Rect; - I: integer; + I, Success, DisplayIndex: integer; + CurrentMode, ModeIter, MaxMode: TSDL_DisplayMode; + CurrentRes, ResString: string; begin - MaxFramerate:= GetArrayIndex(IMaxFramerate, IniFile.ReadString('Graphics', 'MaxFramerate', '60')); + MaxFramerate := ReadArrayIndex(IMaxFramerate, IniFile, 'Graphics', 'MaxFramerate', IGNORE_INDEX, '60'); MaxFramerateGet:= StrToInt(IMaxFramerate[MaxFramerate]); // Screens - Screens := GetArrayIndex(IScreens, IniFile.ReadString('Graphics', 'Screens', IScreens[0])); + Screens := ReadArrayIndex(IScreens, IniFile, 'Graphics', 'Screens', 0); // Split mode - Split := GetArrayIndex(ISplit, IniFile.ReadString('Graphics', 'Split', ISplit[0])); + Split := ReadArrayIndex(ISplit, IniFile, 'Graphics', 'Split', 0); // FullScreen - FullScreen := GetArrayIndex(IFullScreen, IniFile.ReadString('Graphics', 'FullScreen', 'On')); - - // Resolution - SetLength(IResolution, 0); + FullScreen := ReadArrayIndex(IFullScreen, IniFile, 'Graphics', 'FullScreen', IGNORE_INDEX, 'Borderless'); + + // standard fallback resolutions + SetLength(IResolution, 27); + IResolution[0] := '640x480'; // VGA + IResolution[1] := '720x480'; // SDTV 480i, EDTV 480p [TV] + IResolution[2] := '720x576'; // SDTV 576i, EDTV 576p [TV] + IResolution[3] := '768x576'; // SDTV 576i, EDTV 576p [TV] + IResolution[4] := '800x600'; // SVGA + IResolution[5] := '960x540'; // Quarter FHD + IResolution[6] := '1024x768'; // XGA + IResolution[7] := '1152x666'; + IResolution[8] := '1152x864'; // XGA+ + IResolution[9] := '1280x720'; // WXGA-H + IResolution[10] := '1280x800'; // WXGA + IResolution[11] := '1280x960'; // WXGA + IResolution[12] := '1280x1024'; // SXGA + IResolution[13] := '1366x768'; // HD + IResolution[14] := '1400x1050'; // SXGA+ + IResolution[15] := '1440x900'; // WXGA+ + IResolution[16] := '1600x900'; // HD+ + IResolution[17] := '1600x1200'; // UXGA + IResolution[18] := '1680x1050'; // WSXGA+ + IResolution[19] := '1920x1080'; // FHD + IResolution[20] := '1920x1200'; // WUXGA + IResolution[21] := '2048x1152'; // QWXGA + IResolution[22] := '2560x1440'; // WQHD + IResolution[23] := '2560x1600'; // WQXGA + IResolution[24] := '3840x2160'; // 4K UHD + IResolution[25] := '4096x2304'; // 4K + IResolution[26] := '4096x3072'; // HXGA // Check if there are any modes available - // TODO: we should seperate windowed and fullscreen modes. Otherwise it is not - // possible to select a reasonable fullscreen mode when in windowed mode - //basisbit todo implement sdl2 feature to get video modes here - {if IFullScreen[FullScreen] = 'On' then - Modes := SDL_ListModes(nil, SDL_OPENGL or SDL_FULLSCREEN) - else - Modes := SDL_ListModes(nil, SDL_OPENGL or SDL_RESIZABLE) ; - if (Modes = nil) then + // retrieve currently used Video Display + DisplayIndex := -1; + MaxMode.h := 0; MaxMode.w := 0; + CurrentMode.h := -1; CurrentMode.w := -1; + for I := 0 to SDL_GetNumVideoDisplays() - 1 do begin - Log.LogStatus( 'No resolutions Found' , 'Video'); - end - else if (Modes = PSDL_Rect(-1)) then - begin} - // Fallback to some standard resolutions - SetLength(IResolution, 18); - IResolution[0] := '640x480'; - IResolution[1] := '800x600'; - IResolution[2] := '1024x768'; - IResolution[3] := '1152x666';; - IResolution[4] := '1152x864'; - IResolution[5] := '1280x800'; - IResolution[6] := '1280x960'; - IResolution[7] := '1280x1024'; - IResolution[8] := '1366x768'; - IResolution[9] := '1400x1050'; - IResolution[10] := '1440x900'; - IResolution[11] := '1600x900'; - IResolution[12] := '1600x1200'; - IResolution[13] := '1680x1050'; - IResolution[14] := '1920x1080'; - IResolution[15] := '1920x1200'; - IResolution[16] := '2048x1152'; - IResolution[17] := '2560x1600'; - - Resolution := GetArrayIndex(IResolution, IniFile.ReadString('Graphics', 'Resolution', '800x600')); - if Resolution = -1 then + Success := SDL_GetCurrentDisplayMode(I, @CurrentMode); + if Success = 0 then begin - SetLength(IResolution, Length(IResolution) + 1); - IResolution[High(IResolution)] := IniFile.ReadString('Graphics', 'Resolution', '800x600'); - Resolution := High(IResolution); + DisplayIndex := I; + CurrentRes := BuildResolutionString(CurrentMode.w, CurrentMode.h); + Break end; - {end - else + end; + + // retrieve available display modes, store into separate array + if DisplayIndex >= 0 then begin - while assigned( Modes^ ) do //this should solve the biggest wine problem | THANKS Linnex (11.11.07) + for I := 0 to SDL_GetNumDisplayModes(DisplayIndex) - 1 do begin - Log.LogStatus( 'Found Video Mode : ' + IntToStr(Modes^.w) + 'x' + IntToStr(Modes^.h) , 'Video'); - SetLength(IResolution, Length(IResolution) + 1); - IResolution[High(IResolution)] := IntToStr(Modes^.w div (Screens+1)) + 'x' + IntToStr(Modes^.h); - Inc(Modes); + Success := SDL_GetDisplayMode(DisplayIndex, I, @ModeIter); + if Success <> 0 then continue; + + ResString := BuildResolutionString(ModeIter.w, ModeIter.h); + if GetArrayIndex(IResolutionFullScreen, ResString) < 0 then + begin + Log.LogStatus('Found Video Mode: ' + ResString, 'Video'); + SetLength(IResolutionFullScreen, Length(IResolutionFullScreen) + 1); + IResolutionFullScreen[High(IResolutionFullScreen)] := ResString; + + if (ModeIter.w > MaxMode.w) or (ModeIter.h > ModeIter.h) then + begin + MaxMode := ModeIter; + end; + end; end; + end; + + // if display modes are found, override fallback ones + if Length(IResolutionFullScreen) > 0 then + begin + Log.LogStatus( 'Found resolutions: ' + IntToStr(Length(IResolutionFullScreen)), 'Video'); + IResolution := IResolutionFullScreen; // reverse order - Log.LogStatus( 'Log size of resolution: ' + IntToStr(Length(IResolution)), 'Video'); - for I := 0 to (Length(IResolution) div 2) - 1 do - begin - swap(IResolution[I], IResolution[High(IResolution)-I]); - end; - Resolution := GetArrayIndex(IResolution, IniFile.ReadString('Graphics', 'Resolution', '800x600')); + for I := 0 to (Length(IResolution) div 2) - 1 do swap(IResolution[I], IResolution[High(IResolution)-I]); + end; - if Resolution = -1 then - begin - Resolution := GetArrayIndex(IResolution, '800x600'); - if Resolution = -1 then - Resolution := 0; - end; - end;} + // read fullscreen resolution and verify if possible + ResString := IniFile.ReadString('Graphics', 'ResolutionFullscreen', CurrentRes); + ResolutionFullscreen := GetArrayIndex(IResolutionFullScreen, ResString); + + // Check if there is a resolution configured, try using it + ResString := IniFile.ReadString('Graphics', 'Resolution', ''); + if ResString = '' then + begin + ResString := CurrentRes; // either store desktop resolution or invalid which results into DEFAULT + end; + + // check if stored resolution is valid + Resolution := GetArrayIndex(IResolution, ResString); + + // if resolution cannot be found, check if is larger than max resolution + if (Resolution < 0) and (MaxMode.w > 0) and (MaxMode.h > 0) and + (ParseResolutionString(ResString, ModeIter.w, ModeIter.h)) and + ((ModeIter.w > MaxMode.w) or (ModeIter.h > MaxMode.h)) then + begin + Log.LogInfo(Format('Exceeding resoluton found (%s). Reverting to standard resolution.', [ResString]), 'Video'); + ResString := CurrentRes; + Resolution := GetArrayIndex(IResolution, ResString); + end; + + // append unknown mode to list + if (Resolution = -1) and (Length(ResString) >= 3) then + begin + SetLength(IResolution, Length(IResolution) + 1); + IResolution[High(IResolution)] := ResString; + Resolution := High(IResolution); + + // store also as custom resolution to eventually remove it upon window size change + SetLength(IResolutionCustom, Length(IResolutionCustom) + 1); + IResolutionCustom[High(IResolutionCustom)] := ResString; + end; - // if no modes were set, then failback to 800x600 - // as per http://sourceforge.net/forum/message.php?msg_id=4544965 - // THANKS : linnex at users.sourceforge.net - if Length(IResolution) < 1 then + if (Length(IResolution) = 0) or (Resolution < 0) then begin - Log.LogStatus( 'Found Video Mode : NONE !!! ( Defaulted to 800 x 600 )', 'Video'); - SetLength(IResolution, 1); - IResolution[0] := '800x600'; - Resolution := 0; - Log.LogStatus('SDL_ListModes Defaulted Res To : ' + IResolution[0] , 'Graphics - Resolutions'); - - // Default to fullscreen OFF, in this case ! - FullScreen := 0; + // if no modes were set, then failback to DEFAULT_RESOLUTION (800x600) + // as per http://sourceforge.net/forum/message.php?msg_id=4544965 + // THANKS : linnex at users.sourceforge.net + SetLength(IResolution, Length(IResolution) + 1); + IResolution[High(IResolution)] := DEFAULT_RESOLUTION; + Resolution := GetArrayIndex(IResolution, DEFAULT_RESOLUTION); + if Resolution < 0 then Resolution := 0; + + Log.LogStatus( Format('No video mode found! Default to: %s ', [IResolution[Resolution]]), 'Video'); + FullScreen := 0; // default to fullscreen OFF in this case end; // Depth - Depth := GetArrayIndex(IDepth, IniFile.ReadString('Graphics', 'Depth', '32 bit')); + Depth := ReadArrayIndex(IDepth, IniFile, 'Graphics', 'Depth', IGNORE_INDEX, '32 bit'); end; procedure TIni.Load(); @@ -1281,21 +1379,17 @@ procedure TIni.Load(); Log.LogStatus('Using config : ' + FileName.ToNative, 'Ini'); IniFile := TMemIniFile.Create(FileName.ToNative); - // Name - for I := 0 to 11 do + for I := 0 to IMaxPlayerCount-1 do + begin + // Name Name[I] := IniFile.ReadString('Name', 'P'+IntToStr(I+1), 'Player'+IntToStr(I+1)); - - // Color Player - for I := 0 to 5 do + // Color Player PlayerColor[I] := IniFile.ReadInteger('PlayerColor', 'P'+IntToStr(I+1), I + 1); - - // Avatar Player - for I := 0 to 5 do + // Avatar Player PlayerAvatar[I] := IniFile.ReadString('PlayerAvatar', 'P'+IntToStr(I+1), ''); - - // Level Player - for I := 0 to 5 do + // Level Player PlayerLevel[I] := IniFile.ReadInteger('PlayerLevel', 'P'+IntToStr(I+1), 0); + end; // Color Team for I := 0 to 2 do @@ -1308,26 +1402,28 @@ procedure TIni.Load(); NameTemplate[I] := IniFile.ReadString('NameTemplate', 'Name'+IntToStr(I+1), 'Template'+IntToStr(I+1)); // Players - Players := GetArrayIndex(IPlayers, IniFile.ReadString('Game', 'Players', IPlayers[0])); + Players := ReadArrayIndex(IPlayers, IniFile, 'Game', 'Players', 0); // Difficulty - Difficulty := GetArrayIndex(IDifficulty, IniFile.ReadString('Game', 'Difficulty', 'Easy')); + Difficulty := ReadArrayIndex(IDifficulty, IniFile, 'Game', 'Difficulty', IGNORE_INDEX, 'Easy'); // Language - Language := GetArrayIndex(ILanguage, IniFile.ReadString('Game', 'Language', 'English')); + Language := ReadArrayIndex(ILanguage, IniFile, 'Game', 'Language', IGNORE_INDEX, 'English'); + if Language < 0 then Language := GetArrayIndex(ILanguage, 'English'); // Default to english + if Language < 0 then Language := 0; // Default to first available // SongMenu - SongMenu := GetArrayIndex(ISongMenuMode, IniFile.ReadString('Game', 'SongMenu', ISongMenuMode[Ord(smRoulette)])); + SongMenu := ReadArrayIndex(ISongMenuMode, IniFile, 'Game', 'SongMenu', Ord(smChessboard)); // Tabs - Tabs := GetArrayIndex(ITabs, IniFile.ReadString('Game', 'Tabs', ITabs[0])); + Tabs := ReadArrayIndex(ITabs, IniFile, 'Game', 'Tabs', 0); TabsAtStartup := Tabs; //Tabs at Startup fix // Song Sorting - Sorting := GetArrayIndex(ISorting, IniFile.ReadString('Game', 'Sorting', ISorting[Ord(sEdition)])); + Sorting := ReadArrayIndex(ISorting, IniFile, 'Game', 'Sorting', Ord(sTitle)); // Show Score - ShowScores := GetArrayIndex(IShowScores, IniFile.ReadString('Game', 'ShowScores', 'On')); + ShowScores := ReadArrayIndex(IShowScores, IniFile, 'Game', 'ShowScores', IGNORE_INDEX, 'On'); // Read Users Info (Network) DataBase.ReadUsers; @@ -1346,73 +1442,76 @@ procedure TIni.Load(); SetLength(IShowWebScore, Length(DLLMan.Websites)); for I:= 0 to High(DllMan.Websites) do IShowWebScore[I] := DllMan.Websites[I].Name; - ShowWebScore := GetArrayIndex(IShowWebScore, IniFile.ReadString('Game', 'ShowWebScore', IShowWebScore[0])); + ShowWebScore := ReadArrayIndex(IShowWebScore, IniFile, 'Game', 'ShowWebScore', 0); if (ShowWebScore = -1) then ShowWebScore := 0; end; // Debug - Debug := GetArrayIndex(IDebug, IniFile.ReadString('Game', 'Debug', IDebug[0])); + Debug := ReadArrayIndex(IDebug, IniFile, 'Game', 'Debug', 0); LoadScreenModes(IniFile); LoadWebcamSettings(IniFile); // TextureSize (aka CachedCoverSize) - TextureSize := GetArrayIndex(ITextureSize, IniFile.ReadString('Graphics', 'TextureSize', '256')); + TextureSize := ReadArrayIndex(ITextureSize, IniFile, 'Graphics', 'TextureSize', IGNORE_INDEX, '256'); // SingWindow - SingWindow := GetArrayIndex(ISingWindow, IniFile.ReadString('Graphics', 'SingWindow', 'Big')); + SingWindow := ReadArrayIndex(ISingWindow, IniFile, 'Graphics', 'SingWindow', IGNORE_INDEX, 'Big'); // Oscilloscope - Oscilloscope := GetArrayIndex(IOscilloscope, IniFile.ReadString('Graphics', 'Oscilloscope', IOscilloscope[0])); + Oscilloscope := ReadArrayIndex(IOscilloscope, IniFile, 'Graphics', 'Oscilloscope', 0); // Spectrum - //Spectrum := GetArrayIndex(ISpectrum, IniFile.ReadString('Graphics', 'Spectrum', 'Off')); + //Spectrum := ReadArrayIndex(ISpectrum, IniFile, 'Graphics', 'Spectrum', IGNORE_INDEX, 'Off'); // Spectrograph - //Spectrograph := GetArrayIndex(ISpectrograph, IniFile.ReadString('Graphics', 'Spectrograph', 'Off')); + //Spectrograph := ReadArrayIndex(ISpectrograph, IniFile, 'Graphics', 'Spectrograph', IGNORE_INDEX, 'Off'); // MovieSize - MovieSize := GetArrayIndex(IMovieSize, IniFile.ReadString('Graphics', 'MovieSize', IMovieSize[2])); + MovieSize := ReadArrayIndex(IMovieSize, IniFile, 'Graphics', 'MovieSize', 2); // VideoPreview - VideoPreview := GetArrayIndex(IVideoPreview, IniFile.ReadString('Graphics', 'VideoPreview', IVideoPreview[1])); + VideoPreview := ReadArrayIndex(IVideoPreview, IniFile, 'Graphics', 'VideoPreview', 1); // VideoEnabled - VideoEnabled := GetArrayIndex(IVideoEnabled, IniFile.ReadString('Graphics', 'VideoEnabled', IVideoEnabled[1])); + VideoEnabled := ReadArrayIndex(IVideoEnabled, IniFile, 'Graphics', 'VideoEnabled', 1); // ClickAssist - ClickAssist := GetArrayIndex(IClickAssist, IniFile.ReadString('Sound', 'ClickAssist', 'Off')); + ClickAssist := ReadArrayIndex(IClickAssist, IniFile, 'Sound', 'ClickAssist', IGNORE_INDEX, 'Off'); // BeatClick - BeatClick := GetArrayIndex(IBeatClick, IniFile.ReadString('Sound', 'BeatClick', IBeatClick[0])); + BeatClick := ReadArrayIndex(IBeatClick, IniFile, 'Sound', 'BeatClick', 0); // SavePlayback - SavePlayback := GetArrayIndex(ISavePlayback, IniFile.ReadString('Sound', 'SavePlayback', ISavePlayback[0])); + SavePlayback := ReadArrayIndex(ISavePlayback, IniFile, 'Sound', 'SavePlayback', 0); // AudioOutputBufferSize AudioOutputBufferSizeIndex := ReadArrayIndex(IAudioOutputBufferSize, IniFile, 'Sound', 'AudioOutputBufferSize', 0); //Preview Volume - PreviewVolume := GetArrayIndex(IPreviewVolume, IniFile.ReadString('Sound', 'PreviewVolume', IPreviewVolume[7])); + PreviewVolume := ReadArrayIndex(IPreviewVolume, IniFile, 'Sound', 'PreviewVolume', 7); //Preview Fading - PreviewFading := GetArrayIndex(IPreviewFading, IniFile.ReadString('Sound', 'PreviewFading', IPreviewFading[3])); + PreviewFading := ReadArrayIndex(IPreviewFading, IniFile, 'Sound', 'PreviewFading', 3); //AudioRepeat aka VoicePassthrough - VoicePassthrough := GetArrayIndex(IVoicePassthrough, IniFile.ReadString('Sound', 'VoicePassthrough', IVoicePassthrough[0])); + VoicePassthrough := ReadArrayIndex(IVoicePassthrough, IniFile, 'Sound', 'VoicePassthrough', 0); + + // ReplayGain aka MusicAutoGain + MusicAutoGain := ReadArrayIndex(IMusicAutoGain, IniFile, 'Sound', 'MusicAutoGain', 0); SoundFont := IniFile.ReadString('Sound', 'SoundFont', ''); // Lyrics Font - LyricsFont := GetArrayIndex(ILyricsFont, IniFile.ReadString('Lyrics', 'LyricsFont', ILyricsFont[0])); + LyricsFont := ReadArrayIndex(ILyricsFont, IniFile, 'Lyrics', 'LyricsFont', 2); // Lyrics Effect - LyricsEffect := GetArrayIndex(ILyricsEffect, IniFile.ReadString('Lyrics', 'LyricsEffect', ILyricsEffect[4])); + LyricsEffect := ReadArrayIndex(ILyricsEffect, IniFile, 'Lyrics', 'LyricsEffect', 2); // NoteLines - NoteLines := GetArrayIndex(INoteLines, IniFile.ReadString('Lyrics', 'NoteLines', INoteLines[1])); + NoteLines := ReadArrayIndex(INoteLines, IniFile, 'Lyrics', 'NoteLines', 0); // DefaultEncoding DefaultEncoding := ParseEncoding(IniFile.ReadString('Lyrics', 'Encoding', ''), encAuto); @@ -1422,10 +1521,10 @@ procedure TIni.Load(); LoadInputDeviceCfg(IniFile); // LoadAnimation - LoadAnimation := GetArrayIndex(ILoadAnimation, IniFile.ReadString('Advanced', 'LoadAnimation', 'On')); + LoadAnimation := ReadArrayIndex(ILoadAnimation, IniFile, 'Advanced', 'LoadAnimation', IGNORE_INDEX, 'On'); // ScreenFade - ScreenFade := GetArrayIndex(IScreenFade, IniFile.ReadString('Advanced', 'ScreenFade', 'On')); + ScreenFade := ReadArrayIndex(IScreenFade, IniFile, 'Advanced', 'ScreenFade', IGNORE_INDEX, 'On'); // Visualizations // <mog> this could be of use later.. @@ -1433,73 +1532,77 @@ procedure TIni.Load(); // TVisualizerOption(GetEnumValue(TypeInfo(TVisualizerOption), // IniFile.ReadString('Graphics', 'Visualization', 'Off'))); // || VisualizerOption := TVisualizerOption(GetArrayIndex(IVisualizer, IniFile.ReadString('Graphics', 'Visualization', 'Off'))); - VisualizerOption := GetArrayIndex(IVisualizer, IniFile.ReadString('Graphics', 'Visualization', 'Off')); + VisualizerOption := ReadArrayIndex(IVisualizer, IniFile, 'Graphics', 'Visualization', IGNORE_INDEX, 'Off'); {** * Background music *} - BackgroundMusicOption := GetArrayIndex(IBackgroundMusic, IniFile.ReadString('Sound', 'BackgroundMusic', 'On')); + BackgroundMusicOption := ReadArrayIndex(IBackgroundMusic, IniFile, 'Sound', 'BackgroundMusic', IGNORE_INDEX, 'On'); // EffectSing - EffectSing := GetArrayIndex(IEffectSing, IniFile.ReadString('Advanced', 'EffectSing', 'On')); + EffectSing := ReadArrayIndex(IEffectSing, IniFile, 'Advanced', 'EffectSing', IGNORE_INDEX, 'On'); // AskbeforeDel - AskBeforeDel := GetArrayIndex(IAskbeforeDel, IniFile.ReadString('Advanced', 'AskbeforeDel', 'On')); + AskBeforeDel := ReadArrayIndex(IAskbeforeDel, IniFile, 'Advanced', 'AskbeforeDel', IGNORE_INDEX, 'On'); // OnSongClick - OnSongClick := GetArrayIndex(IOnSongClick, IniFile.ReadString('Advanced', 'OnSongClick', 'Sing')); + OnSongClick := ReadArrayIndex(IOnSongClick, IniFile, 'Advanced', 'OnSongClick', IGNORE_INDEX, 'Sing'); // Linebonus - LineBonus := GetArrayIndex(ILineBonus, IniFile.ReadString('Advanced', 'LineBonus', ILineBonus[1])); + LineBonus := ReadArrayIndex(ILineBonus, IniFile, 'Advanced', 'LineBonus', 1); // PartyPopup - PartyPopup := GetArrayIndex(IPartyPopup, IniFile.ReadString('Advanced', 'PartyPopup', 'On')); + PartyPopup := ReadArrayIndex(IPartyPopup, IniFile, 'Advanced', 'PartyPopup', IGNORE_INDEX, 'On'); // SingScores - SingScores := GetArrayIndex(ISingScores, IniFile.ReadString('Advanced', 'SingScores', 'On')); + SingScores := ReadArrayIndex(ISingScores, IniFile, 'Advanced', 'SingScores', IGNORE_INDEX, 'Off'); // TopScores - TopScores := GetArrayIndex(ITopScores, IniFile.ReadString('Advanced', 'TopScores', 'All')); + TopScores := ReadArrayIndex(ITopScores, IniFile, 'Advanced', 'TopScores', IGNORE_INDEX, 'All'); // SyncTo - SyncTo := GetArrayIndex(ISyncTo, IniFile.ReadString('Advanced', 'SyncTo', ISyncTo[Ord(stMusic)])); + SyncTo := ReadArrayIndex(ISyncTo, IniFile, 'Advanced', 'SyncTo', Ord(stMusic)); // Joypad - Joypad := GetArrayIndex(IJoypad, IniFile.ReadString('Controller', 'Joypad', IJoypad[0])); + Joypad := ReadArrayIndex(IJoypad, IniFile, 'Controller', 'Joypad', 0); // Mouse - Mouse := GetArrayIndex(IMouse, IniFile.ReadString('Controller', 'Mouse', IMouse[2])); + Mouse := ReadArrayIndex(IMouse, IniFile, 'Controller', 'Mouse', 2); + if Mouse < 0 then // try finding legacy option + begin + Mouse := ReadArrayIndex(IMouseLegacy, IniFile, 'Controller', 'Mouse', 2); + end; // SingTimebarMode - SingTimebarMode := GetArrayIndex(ISingTimebarMode, IniFile.ReadString('Advanced', 'SingTimebarMode', 'Remaining')); + SingTimebarMode := ReadArrayIndex(ISingTimebarMode, IniFile, 'Advanced', 'SingTimebarMode', IGNORE_INDEX, 'Remaining'); // JukeboxTimebarMode - JukeboxTimebarMode := GetArrayIndex(IJukeboxTimebarMode, IniFile.ReadString('Advanced', 'JukeboxTimebarMode', 'Current')); + JukeboxTimebarMode := ReadArrayIndex(IJukeboxTimebarMode, IniFile, 'Advanced', 'JukeboxTimebarMode', IGNORE_INDEX, 'Current'); // WebCam WebCamID := IniFile.ReadInteger('Webcam', 'ID', 0); - WebCamResolution := GetArrayIndex(IWebcamResolution, IniFile.ReadString('Webcam', 'Resolution', '320x240')); + WebCamResolution := ReadArrayIndex(IWebcamResolution, IniFile, 'Webcam', 'Resolution', IGNORE_INDEX, '320x240'); if (WebCamResolution = -1) then WebcamResolution := 2; - WebCamFPS := GetArrayIndex(IWebcamFPS, IniFile.ReadString('Webcam', 'FPS', IWebcamFPS[4])); - WebCamFlip := GetArrayIndex(IWebcamFlipTranslated, IniFile.ReadString('Webcam', 'Flip', 'On')); - WebCamBrightness := GetArrayIndex(IWebcamBrightness, IniFile.ReadString('Webcam', 'Brightness', '0')); - WebCamSaturation := GetArrayIndex(IWebcamSaturation, IniFile.ReadString('Webcam', 'Saturation', '0')); - WebCamHue := GetArrayIndex(IWebcamHue, IniFile.ReadString('Webcam', 'Hue', '0')); + WebCamFPS := ReadArrayIndex(IWebcamFPS, IniFile, 'Webcam', 'FPS', 4); + WebCamFlip := ReadArrayIndex(IWebcamFlipTranslated, IniFile, 'Webcam', 'Flip', IGNORE_INDEX, 'On'); + WebCamBrightness := ReadArrayIndex(IWebcamBrightness, IniFile, 'Webcam', 'Brightness', IGNORE_INDEX, '0'); + WebCamSaturation := ReadArrayIndex(IWebcamSaturation, IniFile, 'Webcam', 'Saturation', IGNORE_INDEX, '0'); + WebCamHue := ReadArrayIndex(IWebcamHue, IniFile, 'Webcam', 'Hue', IGNORE_INDEX, '0'); WebCamEffect := IniFile.ReadInteger('Webcam', 'Effect', 0); // Jukebox - JukeboxFont := GetArrayIndex(ILyricsFont, IniFile.ReadString('Jukebox', 'LyricsFont', ILyricsFont[2])); - JukeboxEffect := GetArrayIndex(ILyricsEffect, IniFile.ReadString('Jukebox', 'LyricsEffect', ILyricsEffect[1])); - JukeboxAlpha := GetArrayIndex(ILyricsAlpha, IniFile.ReadString('Jukebox', 'LyricsAlpha', ILyricsAlpha[20])); + JukeboxFont := ReadArrayIndex(ILyricsFont, IniFile, 'Jukebox', 'LyricsFont', 2); + JukeboxEffect := ReadArrayIndex(ILyricsEffect, IniFile, 'Jukebox', 'LyricsEffect', 1); + JukeboxAlpha := ReadArrayIndex(ILyricsAlpha, IniFile, 'Jukebox', 'LyricsAlpha', 20); - JukeboxSongMenu := GetArrayIndex(IJukeboxSongMenu, IniFile.ReadString('Jukebox', 'SongMenu', 'On')); + JukeboxSongMenu := ReadArrayIndex(IJukeboxSongMenu, IniFile, 'Jukebox', 'SongMenu', IGNORE_INDEX, 'On'); - JukeboxSingLineColor := GetArrayIndex(IHexSingColor, IniFile.ReadString('Jukebox', 'SingLineColor', IHexSingColor[0])); + JukeboxSingLineColor := ReadArrayIndex(IHexSingColor, IniFile, 'Jukebox', 'SingLineColor', High(IHexSingColor)); // other color - if (JukeboxSingLineColor = -1) then + if (JukeboxSingLineColor = -1) or (JukeboxSingLineColor = High(IHexSingColor)) then begin JukeboxSingLineColor := High(IHexSingColor); @@ -1511,14 +1614,14 @@ procedure TIni.Load(); Ini.JukeboxSingLineOtherColorB := Round(Col.B); end; - JukeboxActualLineColor := GetArrayIndex(IHexGrayColor, IniFile.ReadString('Jukebox', 'ActualLineColor', IHexGrayColor[5])); + JukeboxActualLineColor := ReadArrayIndex(IHexGrayColor, IniFile, 'Jukebox', 'ActualLineColor', High(IHexGrayColor)); // other color - if (JukeboxActualLineColor = -1) then + if (JukeboxActualLineColor = -1) or (JukeboxActualLineColor = High(IHexGrayColor)) then begin JukeboxActualLineColor := High(IHexGrayColor); - HexColor := IniFile.ReadString('Jukebox', 'ActualLineColor', IHexGrayColor[5]); + HexColor := IniFile.ReadString('Jukebox', 'ActualLineColor', IHexGrayColor[8]); Col := HexToRGB(HexColor); Ini.JukeboxActualLineOtherColorR := Round(Col.R); @@ -1526,13 +1629,13 @@ procedure TIni.Load(); Ini.JukeboxActualLineOtherColorB := Round(Col.B); end; - JukeboxNextLineColor := GetArrayIndex(IHexGrayColor, IniFile.ReadString('Jukebox', 'NextLineColor', IHexGrayColor[3])); + JukeboxNextLineColor := ReadArrayIndex(IHexGrayColor, IniFile, 'Jukebox', 'NextLineColor', High(IHexGrayColor)); // other color - if (JukeboxNextLineColor = -1) then + if (JukeboxNextLineColor = -1) or (JukeboxNextLineColor = High(IHexGrayColor)) then begin JukeboxNextLineColor := High(IHexGrayColor); - HexColor := IniFile.ReadString('Jukebox', 'NextLineColor', IHexGrayColor[3]); + HexColor := IniFile.ReadString('Jukebox', 'NextLineColor', IHexGrayColor[6]); Col := HexToRGB(HexColor); Ini.JukeboxNextLineOtherColorR := Round(Col.R); @@ -1540,7 +1643,7 @@ procedure TIni.Load(); Ini.JukeboxNextLineOtherColorB := Round(Col.B); end; - JukeboxSingLineOutlineColor := GetArrayIndex(IHexOColor, IniFile.ReadString('Jukebox', 'SingLineOColor', IHexOColor[0])); + JukeboxSingLineOutlineColor := ReadArrayIndex(IHexOColor, IniFile, 'Jukebox', 'SingLineOColor', 0); // other color if (JukeboxSingLineOutlineColor = -1) then begin @@ -1554,7 +1657,7 @@ procedure TIni.Load(); Ini.JukeboxSingLineOtherOColorB := Round(Col.B); end; - JukeboxActualLineOutlineColor := GetArrayIndex(IHexOColor, IniFile.ReadString('Jukebox', 'ActualLineOColor', IHexOColor[0])); + JukeboxActualLineOutlineColor := ReadArrayIndex(IHexOColor, IniFile, 'Jukebox', 'ActualLineOColor', 0); // other color if (JukeboxActualLineOutlineColor = -1) then begin @@ -1568,7 +1671,7 @@ procedure TIni.Load(); Ini.JukeboxActualLineOtherOColorB := Round(Col.B); end; - JukeboxNextLineOutlineColor := GetArrayIndex(IHexOColor, IniFile.ReadString('Jukebox', 'NextLineOColor', IHexOColor[0])); + JukeboxNextLineOutlineColor := ReadArrayIndex(IHexOColor, IniFile, 'Jukebox', 'NextLineOColor', 0); // other color if (JukeboxNextLineOutlineColor = -1) then begin @@ -1644,7 +1747,8 @@ procedure TIni.Save; IniFile.WriteString('Graphics', 'Visualization', IVisualizer[VisualizerOption]); // Resolution - IniFile.WriteString('Graphics', 'Resolution', IResolution[Resolution]); + IniFile.WriteString('Graphics', 'Resolution', GetResolution); + IniFile.WriteString('Graphics', 'ResolutionFullscreen', GetResolutionFullscreen); // Depth IniFile.WriteString('Graphics', 'Depth', IDepth[Depth]); @@ -1696,6 +1800,9 @@ procedure TIni.Save; // VoicePasstrough IniFile.WriteString('Sound', 'VoicePassthrough', IVoicePassthrough[VoicePassthrough]); + + // MusicAutoGain + IniFile.WriteString('Sound', 'MusicAutoGain', IMusicAutoGain[MusicAutoGain]); // Lyrics Font IniFile.WriteString('Lyrics', 'LyricsFont', ILyricsFont[LyricsFont]); @@ -1916,7 +2023,7 @@ procedure TIni.SavePlayerColors; IniFile := TIniFile.Create(Filename.ToNative); //Colors for Names Mod - for I := 1 to 6 do + for I := 1 to IMaxPlayerCount do IniFile.WriteString('PlayerColor', 'P' + IntToStr(I), IntToStr(PlayerColor[I-1])); IniFile.Free; @@ -1933,7 +2040,7 @@ procedure TIni.SavePlayerAvatars; IniFile := TIniFile.Create(Filename.ToNative); //Colors for Names Mod - for I := 1 to 6 do + for I := 1 to IMaxPlayerCount do IniFile.WriteString('PlayerAvatar', 'P' + IntToStr(I), PlayerAvatar[I-1]); IniFile.Free; @@ -1949,7 +2056,7 @@ procedure TIni.SavePlayerLevels; begin IniFile := TIniFile.Create(Filename.ToNative); - for I := 1 to 6 do + for I := 1 to IMaxPlayerCount do IniFile.WriteInteger('PlayerLevel', 'P' + IntToStr(I), PlayerLevel[I-1]); IniFile.Free; @@ -2060,4 +2167,144 @@ procedure TIni.SaveJukeboxTimebarMode; end; end; + +function TIni.SetResolution(ResolutionString: string; RemoveCurrent: boolean; NoSave: boolean): boolean; + var + Index: integer; + Dirty: boolean; +begin + Result := false; + Dirty := false; + + // check if current resolution is custom and then remove anyway (no matter what RemoveCurrent is set) + if (Resolution >= 0) then + begin + Index := GetArrayIndex(IResolutionCustom, IResolution[Resolution]); + if Index >= 0 then + begin + StringDeleteFromArray(IResolutionCustom, Index); + StringDeleteFromArray(IResolution, Resolution); + end; + end; + + Index := GetArrayIndex(IResolution, ResolutionString); + if not NoSave and (Resolution <> Index) then Dirty := true; + if (Resolution >= 0) and (RemoveCurrent) then StringDeleteFromArray(IResolution, Resolution); + if Index < 0 then + begin + SetLength(IResolution, Length(IResolution) + 1); + IResolution[High(IResolution)] := ResolutionString; + index := High(IResolution); + Result := true; + + if GetArrayIndex(IResolutionCustom, ResolutionString) < 0 then + begin + SetLength(IResolutionCustom, Length(IResolutionCustom) + 1); + IResolutionCustom[High(IResolutionCustom)] := ResolutionString; + end; + end; + + if SetResolution(index) and Dirty then + begin + Log.LogStatus('Resolution overridden to: ' + ResolutionString, 'Video'); + Save(); + end; +end; + +function TIni.SetResolution(w,h: integer; RemoveCurrent: boolean; NoSave: boolean): boolean; +begin + + // hacky fix to support multiplied resolution (in width) in multiple screen setup (Screens=2 and more) + // TODO: RattleSN4K3: Improve the way multiplied screen resolution is applied and stored (see UGraphics::InitializeScreen; W := W * Screens) + if (Screens > 0) and not ((Params.Split = spmSplit ) or (Split > 0)) then w := w div (Screens+1) // integral div + else if (Params.Screens > 0) and not ((Params.Split = spmSplit ) or (Split > 0)) then w := w div (Params.Screens+1); + + Result := SetResolution(BuildResolutionString(w, h), RemoveCurrent, NoSave); +end; + +function TIni.SetResolution(index: integer): boolean; +begin + Result := false; + if (index >= 0) and (index < Length(IResolution)) then + begin + Resolution := index; + Result := true; + end; +end; + +function TIni.GetResolution(): string; +begin + if Resolution >= 0 then Result := IResolution[Resolution] + else if Length(IResolution) = 0 then Result := DEFAULT_RESOLUTION + else Result := IResolution[0]; +end; + +function TIni.GetResolution(out w,h: integer): string; +begin + Result := GetResolution(); + ParseResolutionString(Result, w, h); + + // hacky fix to support multiplied resolution (in width) in multiple screen setup (Screens=2 and more) + // TODO: RattleSN4K3: Improve the way multiplied screen resolution is applied and stored (see UGraphics::InitializeScreen; W := W * Screens) + if (Screens > 0) and not ((Params.Split = spmSplit ) or (Split > 0)) then w := w * (Screens+1) + else if (Params.Screens > 0) and not ((Params.Split = spmSplit ) or (Split > 0)) then w := w * (Params.Screens+1); +end; + +function TIni.GetResolution(index: integer; out ResolutionString: string): boolean; +begin + Result := false; + if (index >= 0) and (index < Length(IResolution)) then + begin + ResolutionString := IResolution[index]; + Result := true; + end; +end; + +function TIni.GetResolutionFullscreen(): string; +begin + if ResolutionFullscreen >= 0 then Result := IResolutionFullScreen[ResolutionFullscreen] + else if Length(IResolutionFullScreen) = 0 then Result := DEFAULT_RESOLUTION + else Result := IResolutionFullScreen[0]; +end; + +function TIni.GetResolutionFullscreen(out w,h: integer): string; +begin + Result := GetResolutionFullscreen(); + ParseResolutionString(Result, w, h); +end; + +function TIni.GetResolutionFullscreen(index: integer; out ResolutionString: string): boolean; +begin + Result := false; + if (index >= 0) and (index < Length(IResolutionFullScreen)) then + begin + ResolutionString := IResolutionFullScreen[index]; + Result := true; + end; +end; + +procedure TIni.ClearCustomResolutions(); + var + Index, i, custom: integer; + ResString: string; +begin + if Resolution < 0 then Exit; + + // check if current resolution is a custom one + ResString := IResolution[Resolution]; + Index := GetArrayIndex(IResolutionCustom, ResString); + for i := High(IResolutionCustom) downto 0 do + begin + custom := GetArrayIndex(IResolution, IResolutionCustom[i]); + if (custom >= 0) and (Index <> i) then + begin + StringDeleteFromArray(IResolution, custom); + StringDeleteFromArray(IResolutionCustom, i); + end; + end; + + // update index + Resolution := GetArrayIndex(IResolution, ResString); +end; + end. diff --git a/src/base/UJoystick.pas b/src/base/UJoystick.pas index 1c5391cd..6fd70ab2 100644 --- a/src/base/UJoystick.pas +++ b/src/base/UJoystick.pas @@ -1,28 +1,24 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UJoystick.pas $ - * $Id: UJoystick.pas 1485 2008-10-28 20:16:05Z tobigun $ - *} +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} unit UJoystick; interface @@ -34,279 +30,1268 @@ interface {$I switches.inc} uses + Classes, + strutils, + typinfo, // for GetEnumName + fgl, // TGFMap + math, SDL2; +const + + JOYSTICK_MOUSE_REPEAT = 1; + JOYSTICK_MOUSE_DEADZONE = 0.01; + JOYSTICK_MOUSE_DEFAULTSPEED = 550; + + JOYSTICK_AXIS_PRESSED_THRESHOLD = 0.2; + JOYSTICK_AXIS_RELEASED_THRESHOLD = 0.7; + JOYSTICK_AXIS_REPEAT_THRESHOLD = 0.8; + JOYSTICK_AXIS_REPEAT_TIME = 150; // milliseconds to ignore repeated input + JOYSTICK_AXIS_MAX_RANGE = 32767; // SDL ranges -32768 to 32767 + + { Missing SDL header constants } + + SDL_HAT_CENTERED = $0000; + SDL_HAT_UP = $0001; + SDL_HAT_RIGHT = $0002; + SDL_HAT_DOWN = $0004; + SDL_HAT_LEFT = $0008; + SDL_HAT_RIGHTUP = SDL_HAT_RIGHT or SDL_HAT_UP; + SDL_HAT_RIGHTDOWN = SDL_HAT_RIGHT or SDL_HAT_DOWN; + SDL_HAT_LEFTUP = SDL_HAT_LEFT or SDL_HAT_UP; + SDL_HAT_LEFTDOWN = SDL_HAT_LEFT or SDL_HAT_DOWN; + + SDL_PRESSED = 1; + SDL_RELEASED = 0; + + { custom SDL mapping for Axis-mapping } + + // Axis mapping names for legacy Joystick to button/key mapping + SDL_HAT_AXIS_Center = 0; + SDL_HAT_AXIS_X_pos = 1; + SDL_HAT_AXIS_X_neg = 2; + SDL_HAT_AXIS_X = 3; // unused + SDL_HAT_AXIS_Y_pos = 4; + SDL_HAT_AXIS_Y_neg = 8; + SDL_HAT_AXIS_Y = 12; // unused + SDL_HAT_AXIS_X_pos_Y_pos = SDL_HAT_AXIS_X_pos or SDL_HAT_AXIS_Y_pos; // 5 Top Right + SDL_HAT_AXIS_X_pos_Y_neg = SDL_HAT_AXIS_X_pos or SDL_HAT_AXIS_Y_neg; // 9 Bottom Right + SDL_HAT_AXIS_Y_pos_X_neg = SDL_HAT_AXIS_Y_pos or SDL_HAT_AXIS_X_neg; // 6 Bottom Left + SDL_HAT_AXIS_Y_neg_X_neg = SDL_HAT_AXIS_Y_neg or SDL_HAT_AXIS_X_neg; // 10 Top Left + type - TJoyButton = record - State: integer; - Enabled: boolean; - Type_: byte; - Sym: cardinal; + TJoyButtonState = ( bsReleased, bsPressed ); + TJoyControllerType = ( ctJoystick, ctGameController ); + + TJoyMouse = record + X, Y: integer; + DeltaX, DeltaY: double; + Time: LongInt; + IsSet: boolean; + end; + + PControllerDPadState = ^TControllerDPadState; + TControllerDPadState = record + X: boolean; + Y: boolean; + + RawX: integer; + RawY: integer; + end; + + PControllerAxisState = ^TControllerAxisState; + TControllerAxisState = record + Perc: double; + + Time: Cardinal; // used to prevent additional 'repeated' press when moving Axis into one side fast enough + Pressed: boolean; + Repeat_: boolean; + WasRepeat: boolean; + end; + + TControllerDPadIDStateMap = TFPGMap<integer,TControllerDPadState>; + TControllerAxisIDStateMap = TFPGMap<integer,TControllerAxisState>; + + TJoyController = class + private + _DeviceId: integer; + _Name: string; + _Enabled: boolean; + + LastMouseState: TJoyMouse; + MouseRepeatThread: PSDL_Thread; + MouseRepeatThreadFlag: boolean; + MouseMode: boolean; + + protected + + _Type: TJoyControllerType; + DPadStates: TControllerDPadIDStateMap; + AxesStates: TControllerAxisIDStateMap; + + private + function GetDeviceId(): integer; + function GetInstanceId(): integer; + function GetName(): string; + + function GetControllerType(): TJoyControllerType; + function GetControllerAxesCount(): integer; virtual; + function GetControllerHatsCount(): integer; virtual; + function GetControllerButtonCount(): integer; virtual; + + function SimulateKeyboard(Key: TSDL_KeyCode; Pressed: boolean; NoMouseOverride: boolean = false): boolean; virtual; + + procedure SimulateMouseSend(); + function SimulateMouse(ButtonId: byte; Pressed: boolean): boolean; virtual; overload; + function SimulateMouse(Axis: byte; Delta: real): boolean; virtual; overload; + + public + constructor Create(DeviceId: integer; Name: string = ''); virtual; + destructor Destroy(); override; + + property Name: string read GetName; + property DeviceId: integer read GetDeviceId; + property InstanceId: integer read GetInstanceId; + + function IsEnabled(): boolean; + procedure SetEnabled(Enable: boolean); + procedure Enable; + procedure Disable; + + function GetJoystick(): Pointer; virtual; abstract; + function ShouldIgnoreLegacy(): boolean; virtual; + + // actions + function HandleControllerDPad(ControllerId: integer; PadId: integer; X, Y: integer): boolean; + function HandleControllerMotion(ControllerId: integer; Axis: integer; Perc: double; Time: Cardinal): boolean; + function HandleControllerButton(ButtonId: integer; State: TJoyButtonState): boolean; + + procedure SwitchMouseModeFor(ButtonId: integer; State: TJoyButtonState); virtual; abstract; + + // mapping + function TranslateAxisToKey(Axis: integer; Direction: integer; out Key: TSDL_KeyCode): boolean; virtual; + function TranslateAxisToMouseAxis(Axis: integer; Direction: integer; out MouseAxis: byte): boolean; virtual; + function TranslateDPadToKey(Hat: integer; Axis: integer; Positive: boolean; out Key: TSDL_KeyCode): boolean; virtual; + function TranslateButtonToKey(ButtonId: integer; State: TJoyButtonState; out Key: TSDL_KeyCode): boolean; virtual; + function TranslateButtonToMouse(ButtonId: integer; State: TJoyButtonState; out Button: integer): boolean; virtual; + + property ControllerType: TJoyControllerType read GetControllerType; + property Enabled: boolean read IsEnabled; + + property AxesCount: integer read GetControllerAxesCount; + property HatsCount: integer read GetControllerHatsCount; + property ButtonCount: integer read GetControllerButtonCount; + + // TODO: properly track/receive mouse coords in order to use relative mouse + procedure OnMouseMove(X, Y: integer); + end; - TJoyHatState = record - State: Boolean; - LastTick: Cardinal; - Enabled: boolean; - Type_: byte; - Sym: cardinal; + TControllerIDMap = TFPGMap<integer,TJoyController>; + + TJoyControllerJoyStick = class(TJoyController) + private + JoyStick: PSDL_Joystick; + + public + constructor Create(DeviceId: integer; JS: PSDL_Joystick; Name: string = ''); overload; + destructor Destroy(); override; + + function GetJoystick(): Pointer; override; + + private + // mapping + function TranslateAxisToKey(Axis: integer; Direction: integer; out Key: TSDL_KeyCode): boolean; override; + function TranslateAxisToMouseAxis(Axis: integer; Direction: integer; out MouseAxis: byte): boolean; override; + function TranslateDPadToKey(Hat: integer; Axis: integer; Positive: boolean; out Key: TSDL_KeyCode): boolean; override; + function TranslateButtonToKey(ButtonId: integer; State: TJoyButtonState; out Key: TSDL_KeyCode): boolean; override; + function TranslateButtonToMouse(ButtonId: integer; State: TJoyButtonState; out Button: integer): boolean; override; + + procedure SwitchMouseModeFor(ButtonId: integer; State: TJoyButtonState); override; end; + TJoyControllerGameController = class(TJoyController) + private + GameController: PSDL_GameController; + + public + constructor Create(DeviceId: integer; GC: PSDL_GameController; Name: string = ''); overload; + destructor Destroy(); override; - TJoyUnit = record - Button: array[0..15] of TJoyButton; - HatState: Array[0..3] of TJoyHatState; + function GetJoystick(): Pointer; override; + function ShouldIgnoreLegacy(): boolean; override; + + private + // mapping + function TranslateAxisToKey(Axis: integer; Direction: integer; out Key: TSDL_KeyCode): boolean; override; + function TranslateAxisToMouseAxis(Axis: integer; Direction: integer; out MouseAxis: byte): boolean; override; + function TranslateDPadToKey(Hat: integer; Axis: integer; Positive: boolean; out Key: TSDL_KeyCode): boolean; override; + function TranslateButtonToKey(ButtonId: integer; State: TJoyButtonState; out Key: TSDL_KeyCode): boolean; override; + function TranslateButtonToMouse(ButtonId: integer; State: TJoyButtonState; out Button: integer): boolean; override; + + procedure SwitchMouseModeFor(ButtonId: integer; State: TJoyButtonState); override; end; TJoy = class - constructor Create; - procedure Update; + + private + Controllers: TControllerIDMap; + + public + constructor Create; + destructor Destroy; override; + + private + + function AddController(DeviceId: integer; out Error: string): boolean; + function RemoveController(InstanceId: integer): boolean; + function GetControllerByDeviceId(Id: integer; out Controller: TJoyController): boolean; + function GetControllerByInstanceId(Id: integer; out Controller: TJoyController): boolean; + function HasControllerByDeviceId(Id: integer): boolean; + function HasControllerByInstanceId(Id: integer): boolean; + + public + + // events + { A new Game controller has been inserted into the system } + procedure OnControllerAdded(DeviceId: integer); + + { An opened Game controller has been removed } + procedure OnControllerRemoved(InstanceId: integer); + + { The controller mapping was updated } + procedure OnControllerRemapped(InstanceId: integer); + + { Game controller DPad motion } + procedure OnControllerDPad(id: integer; PadId: integer; X, Y: integer; Legacy: boolean = false); + + { Game controller axis motion } + procedure OnControllerMotion(id: integer; Axis: integer; Perc: double; Time: Cardinal; Legacy: boolean = false); + + { Game controller button pressed/released } + procedure OnControllerButton(id: integer; ButtonId: integer; State: TJoyButtonState; Legacy: boolean = false); + + { called when real mouse moved } + procedure OnMouseMove(X, Y: integer); + end; var Joy: TJoy; - JoyUnit: TJoyUnit; - SDL_Joy: PSDL_Joystick; - JoyEvent: TSDL_Event; + +procedure InitializeJoystick; +procedure FinalizeJoyStick; +function HasJoyStick: boolean; + +procedure OnJoystickPollEvent(Event: TSDL_event); + +function ifthen(val:boolean;const iftrue:TJoyButtonState; const iffalse:TJoyButtonState = bsReleased): TJoyButtonState; inline; overload; +function ifthen(val:boolean;const iftrue:TSDL_KeyCode; const iffalse:TSDL_KeyCode = 0): TSDL_KeyCode; inline; overload; + +function MouseRepeatHandlerFunc(Data: Pointer): integer; cdecl;// forward; implementation uses SysUtils, ULog; +procedure InitializeJoystick; +begin + if assigned(Joy) then Exit; + Log.LogStatus('Initialize Joystick', 'Initialization'); + Joy := TJoy.Create; +end; + +procedure FinalizeJoyStick; +begin + if assigned(Joy) then + begin + Log.LogStatus('Uninitialize Joystick', 'Finalization'); + Joy.Destroy; + Joy := nil; + end; +end; + +function HasJoyStick: boolean; +begin + Result := assigned(Joy); +end; + +procedure OnJoystickPollEvent(Event: TSDL_event); +begin + // sanity check + if (Joy = nil) then Exit; + + case Event.type_ of + SDL_JOYAXISMOTION: + with Event.jaxis do + begin + Log.LogDebug(Format('JOYAXISMOTION [%d] Axis:%d Value:%d Time:%d', [which, axis, value, timestamp]), 'TJoy.Polling'); + Joy.OnControllerMotion(which, axis, EnsureRange((1.0*value) / JOYSTICK_AXIS_MAX_RANGE, -1.0, 1.0), timestamp, true); + end; + + SDL_JOYHATMOTION: + with Event.jhat do + begin + Log.LogDebug(Format('JOYHATMOTION [%d] Pad:%d Value:%d Time:%d', [which, hat, value, timestamp]), 'TJoy.Polling'); + Joy.OnControllerDPad(which, hat, ifthen(value and SDL_HAT_LEFT <> 0, -1, ifthen(value and SDL_HAT_RIGHT <> 0, 1, 0)), + ifthen(value and SDL_HAT_DOWN <> 0, -1, ifthen(value and SDL_HAT_UP <> 0, 1, 0)), + true); + end; + SDL_JOYBUTTONUP, SDL_JOYBUTTONDOWN: + with Event.jbutton do + begin + Log.LogDebug(Format('JOYBUTTON [%d] Button:%d State:%d Type:%d Time:%d', [which, button, state, type_, timestamp]), 'TJoy.Polling'); + Joy.OnControllerButton(which, button, ifthen(state = SDL_PRESSED, bsPressed, bsReleased), true); + end; + + SDL_CONTROLLERDEVICEADDED: + begin + Log.LogDebug(Format('CONTROLLERDEVICEADDED [DeviceID=%d]', [Event.cdevice.which]), 'TJoy.Polling'); + Joy.OnControllerAdded(Event.cdevice.which); + end; + SDL_CONTROLLERDEVICEREMOVED: + begin + Log.LogDebug(Format('CONTROLLERDEVICEREMOVED [InstanceID=%d]', [Event.cdevice.which]), 'TJoy.Polling'); + Joy.OnControllerRemoved(Event.cdevice.which); + end; + SDL_CONTROLLERDEVICEREMAPPED: + begin + Log.LogDebug(Format('CONTROLLERDEVICEREMAPPED [InstanceID=%d]', [Event.cdevice.which]), 'TJoy.Polling'); + Joy.OnControllerRemapped(Event.cdevice.which); + end; + + SDL_CONTROLLERAXISMOTION: + with Event.caxis do + begin + Log.LogDebug(Format('CONTROLLERAXISMOTION [%d] Axis:%d Value:%d Time:%d', [which, axis, value, timestamp]), 'TJoy.Polling'); + Joy.OnControllerMotion(which, axis, EnsureRange((1.0*value) / JOYSTICK_AXIS_MAX_RANGE, -1.0, 1.0), timestamp); + end; + SDL_CONTROLLERBUTTONDOWN: + with Event.cbutton do + begin + Log.LogDebug(Format('CONTROLLERBUTTONDOWN [%d] Button:%d State:%d Type:%d Time:%d', [which, button, state, type_, timestamp]), 'TJoy.Polling'); + Joy.OnControllerButton(which, button, ifthen(state = SDL_PRESSED, bsPressed, bsReleased)); + end; + SDL_CONTROLLERBUTTONUP: + with Event.cbutton do + begin + Log.LogDebug(Format('CONTROLLERBUTTONUP [%d] Button:%d State:%d Type:%d Time:%d', [which, button, state, type_, timestamp]), 'TJoy.Polling'); + Joy.OnControllerButton(which, button, ifthen(state = SDL_PRESSED, bsPressed, bsReleased)); + end; + SDL_JOYDEVICEADDED: + begin + Joy := TJoy.Create; + end; + end; // case +end; + +function MouseRepeatHandlerFunc(Data: Pointer): integer; cdecl; +var + JoyC: TJoyController; +begin + JoyC := TJoyController(Data); + while (JoyC <> nil) and (JoyC.MouseRepeatThreadFlag) do + begin + JoyC.SimulateMouseSend(); + Sleep(JOYSTICK_MOUSE_REPEAT); + end; + + Result := 0; +end; + constructor TJoy.Create; var - B: integer; - //N: integer; + Controller: TJoyController; + Error: string; + + N: integer; + I: integer; + BestButtonCount: integer; + BestIndex: integer; begin inherited; - //Old Corvus5 Method - {// joystick support - SDL_JoystickEventState(SDL_IGNORE); - SDL_InitSubSystem(SDL_INIT_JOYSTICK); - if SDL_NumJoysticks <> 1 then - Log.LogStatus('Joystick count <> 1', 'TJoy.Create'); + Controllers := TControllerIDMap.Create; + Controller := nil; - SDL_Joy := SDL_JoystickOpen(0); - if SDL_Joy = nil then - Log.LogError('SDL_JoystickOpen failed', 'TJoy.Create'); + SDL_InitSubSystem( SDL_INIT_JOYSTICK or SDL_INIT_GAMECONTROLLER ); + N := SDL_NumJoysticks; + Log.LogStatus(Format('Joystick count: %d', [N]), 'TJoy.Create'); + for i := 0 to n-1 do + begin + if not AddController(i, Error) then + begin + Log.LogError(Error, 'TJoy.Create'); + end; + end; - if SDL_JoystickNumButtons(SDL_Joy) <> 16 then - Log.LogStatus('Joystick button count <> 16', 'TJoy.Create'); + if Controllers.Count < 1 then + begin + Log.LogStatus('No GameController/Joystick connected.', 'TJoy.Create'); + Exit; + end; -// SDL_JoystickEventState(SDL_ENABLE); - // Events don't work - thay hang the whole application with SDL_JoystickEventState(SDL_ENABLE) + // if only 1 controller, just activate it + if Controllers.Count = 1 then + begin + Controller := Controllers.Data[0]; + Log.LogStatus(Format('Using controller: %s', [Controllers.Data[0].Name]), 'TJoy.Create'); + end; - // clear states - for B := 0 to 15 do - JoyUnit.Button[B].State := 1; - // mapping - JoyUnit.Button[1].Enabled := true; - JoyUnit.Button[1].Type_ := SDL_KEYDOWN; - JoyUnit.Button[1].Sym := SDLK_RETURN; - JoyUnit.Button[2].Enabled := true; - JoyUnit.Button[2].Type_ := SDL_KEYDOWN; - JoyUnit.Button[2].Sym := SDLK_ESCAPE; + if not assigned(Controller) then + begin + // try finding game controller with best button count + BestIndex := -1; + BestButtonCount := 0; + for i := 0 to Controllers.Count -1 do + begin + if Controllers.Data[i].ControllerType = ctGameController then + begin + if Controllers.Data[i].ButtonCount > BestButtonCount then + begin + BestButtonCount := Controllers.Data[i].ButtonCount; + BestIndex := i; + end; + end; + end; - JoyUnit.Button[12].Enabled := true; - JoyUnit.Button[12].Type_ := SDL_KEYDOWN; - JoyUnit.Button[12].Sym := SDLK_LEFT; - JoyUnit.Button[13].Enabled := true; - JoyUnit.Button[13].Type_ := SDL_KEYDOWN; - JoyUnit.Button[13].Sym := SDLK_DOWN; - JoyUnit.Button[14].Enabled := true; - JoyUnit.Button[14].Type_ := SDL_KEYDOWN; - JoyUnit.Button[14].Sym := SDLK_RIGHT; - JoyUnit.Button[15].Enabled := true; - JoyUnit.Button[15].Type_ := SDL_KEYDOWN; - JoyUnit.Button[15].Sym := SDLK_UP; - } - //New Sarutas method - SDL_JoystickEventState(SDL_IGNORE); - SDL_InitSubSystem(SDL_INIT_JOYSTICK); - if SDL_NumJoysticks < 1 then + if BestIndex >= 0 then + begin + Controller := Controllers.Data[BestIndex]; + Log.LogStatus(Format('Using game controller: %s', [Controller.Name]), 'TJoy.Create'); + end; + end; + + // fallback using best legacy joystick + if not assigned(Controller) then + begin + // try finding joystick with best button count + BestIndex := -1; + BestButtonCount := 0; + for i := 0 to Controllers.Count -1 do + begin + if Controllers.Data[i].ControllerType = ctJoystick then + begin + if Controllers.Data[i].ButtonCount > BestButtonCount then + begin + BestButtonCount := Controllers.Data[i].ButtonCount; + BestIndex := i; + end; + end; + end; + + if BestIndex >= 0 then + begin + Controller := Controllers.Data[BestIndex]; + Log.LogStatus(Format('Using legacy Joystick: %s', [Controller.Name]), 'TJoy.Create'); + end; + end; + + if not assigned(Controller) then begin - Log.LogError('No Joystick found'); - exit; + Log.LogWarn('Unable to find a suited controller', 'TJoy.Create'); + Exit; end; + Log.LogStatus(Format('Enable input for controller %s [ID=%d]', [Controller.Name, Controller.DeviceId]), 'TJoy.Create'); + Controller.Enable; +end; + +destructor TJoy.Destroy; +var + i, index: integer; + Controller: TJoyController; +begin + inherited; - SDL_Joy := SDL_JoystickOpen(0); - if SDL_Joy = nil then + if Controllers <> nil then begin - Log.LogError('Could not Init Joystick'); - exit; + + for i := 0 to Controllers.Count - 1 do + if Controllers.Find(Controllers.Keys[i], index) and assigned(Controllers.Data[index]) then + Controllers.Data[index].Destroy(); + + Controllers.Clear; + Controllers.Free; + Controllers := nil; end; - //N := SDL_JoystickNumButtons(SDL_Joy); - //if N < 6 then Log.LogStatus('Joystick button count < 6', 'TJoy.Create'); +end; - for B := 0 to 5 do begin - JoyUnit.Button[B].Enabled := true; - JoyUnit.Button[B].State := 1; - JoyUnit.Button[B].Type_ := SDL_KEYDOWN; +function TJoy.AddController(DeviceId: integer; out Error: string): boolean; +var + JoyStick: PSDL_Joystick; + GameController: PSDL_GameController; + Controller: TJoyController; + s: string; +begin + Result := true; + if SDL_IsGameController(DeviceId) = SDL_TRUE then + begin + s := SDL_GameControllerNameForIndex(DeviceId); + Log.LogStatus(Format('Is a game controller: %s [ID=%d]', [s, DeviceId]), 'TJoy.AddController'); + GameController := SDL_GameControllerOpen(DeviceId); + if GameController = nil then + begin + Error := 'SDL_GameControllerOpen failed'; + Result := false; + end + else + begin + Controller := TJoyControllerGameController.Create(DeviceId, GameController, s); + Controllers.Add(Controller.InstanceId, Controller); + end; + end + else + begin + s := SDL_JoystickNameForIndex(DeviceId); + Log.LogStatus(Format('Is a Joystick: %s [ID=%d]', [s, DeviceId]), 'TJoy.AddController'); + JoyStick := SDL_JoystickOpen(DeviceId); + if JoyStick = nil then + begin + Error := 'SDL_JoystickOpen failed'; + Result := false; + end + else + begin + Controller := TJoyControllerJoyStick.Create(DeviceId, JoyStick, s); + Controllers.Add(Controller.InstanceId, TJoyControllerJoyStick.Create(DeviceId, JoyStick, s)); + end; end; - JoyUnit.Button[0].Sym := SDLK_Return; - JoyUnit.Button[1].Sym := SDLK_Escape; - JoyUnit.Button[2].Sym := SDLK_M; - JoyUnit.Button[3].Sym := SDLK_R; + if Controller <> nil then + begin + Log.LogStatus(Format('Controller@%d %d Buttons %d Axes %d Hats/DPads', [DeviceId, Controller.ButtonCount, Controller.AxesCount, Controller.HatsCount]), 'TJoy.AddController'); + end; +end; - JoyUnit.Button[4].Sym := SDLK_RETURN; - JoyUnit.Button[5].Sym := SDLK_ESCAPE; +function TJoy.RemoveController(InstanceId: integer): boolean; +var Controller: TJoyController; +begin + Result := false; + if GetControllerByInstanceId(InstanceId, Controller) then + begin + Controllers.Remove(Controller.DeviceId); + Controller.Destroy; + Result := true; + end + else Log.LogError(Format('Unable to disconnect controller with Instance ID: %d', [InstanceId]), 'TJoy.RemoveController'); +end; - //Set HatState - for B := 0 to 3 do begin - JoyUnit.HatState[B].Enabled := true; - JoyUnit.HatState[B].State := False; - JoyUnit.HatState[B].Type_ := SDL_KEYDOWN; +function TJoy.GetControllerByInstanceId(Id: integer; out Controller: TJoyController): boolean; +var + index: integer; +begin + Result := false; + if Controllers.Find(Id, index) then + begin + Controller := Controllers.Data[index]; + Result := true; end; - - JoyUnit.HatState[0].Sym := SDLK_UP; - JoyUnit.HatState[1].Sym := SDLK_RIGHT; - JoyUnit.HatState[2].Sym := SDLK_DOWN; - JoyUnit.HatState[3].Sym := SDLK_LEFT; end; -procedure TJoy.Update; +function TJoy.GetControllerByDeviceId(Id: integer; out Controller: TJoyController): boolean; var - B: integer; - State: UInt8; - Tick: Cardinal; - Axes: Smallint; -begin - SDL_JoystickUpdate; - - //Manage Buttons - for B := 0 to 15 do begin - if (JoyUnit.Button[B].Enabled) and (JoyUnit.Button[B].State <> SDL_JoystickGetButton(SDL_Joy, B)) and (JoyUnit.Button[B].State = 0) then begin - JoyEvent.type_ := JoyUnit.Button[B].Type_; - JoyEvent.key.keysym.sym := JoyUnit.Button[B].Sym; - SDL_PushEvent(@JoyEvent); + i: integer; +begin + Result := false; + + for i := 0 to Controllers.Count - 1 do + begin + if (Controllers.Data[i] <> nil) and (Id = Controllers.Data[i].DeviceId) then + begin + Controller := Controllers.Data[i]; + Result := true; + Exit; end; end; +end; +function TJoy.HasControllerByInstanceId(Id: integer): boolean; +var Controller: TJoyController; +begin + Result := GetControllerByInstanceId(Id, Controller); +end; + +function TJoy.HasControllerByDeviceId(Id: integer): boolean; +var Controller: TJoyController; +begin + Result := GetControllerByDeviceId(Id, Controller); +end; - for B := 0 to 15 do begin - JoyUnit.Button[B].State := SDL_JoystickGetButton(SDL_Joy, B); +procedure TJoy.OnControllerAdded(DeviceId: integer); +var Error: string; +begin + if not HasControllerByDeviceId(DeviceId) then + begin + if not AddController(DeviceId, Error) then Log.LogError(Error, 'TJoy.Connect'); end; +end; - //Get Tick - Tick := SDL_GetTicks(); +procedure TJoy.OnControllerRemoved(InstanceId: integer); +begin + RemoveController(InstanceId); +end; - //Get CoolieHat - if (SDL_JoystickNumHats(SDL_Joy)>=1) then - State := SDL_JoystickGetHat(SDL_Joy, 0) - else - State := 0; +procedure TJoy.OnControllerRemapped(InstanceId: integer); +begin + // TODO: TJoy.OnControllerRemapped. Not implemented +end; + +procedure TJoy.OnControllerDPad(id: integer; PadId: integer; X, Y: integer; Legacy: boolean); +var + Controller: TJoyController; +begin - //Get Axis - if (SDL_JoystickNumAxes(SDL_Joy)>=2) then + // ignore unknown or disabled input + if not GetControllerByInstanceId(id, Controller) or not Controller.IsEnabled() then Exit; + + // ignore lecacy events for given controller + if Legacy and Controller.ShouldIgnoreLegacy() then Exit; + + Log.LogInfo(Format('DPad [%d] PadId:%d X: %d Y: %d', [id, PadId, X, Y]), 'TJoy.Input'); + if not Controller.HandleControllerDPad(id, PadId, X, Y) then begin - //Down - Up (X- Axis) - Axes := SDL_JoystickGetAxis(SDL_Joy, 1); - If Axes >= 15000 then - State := State or SDL_HAT_Down - Else If Axes <= -15000 then - State := State or SDL_HAT_UP; + Log.LogWarn(Format('Unable to handle DPad input of ''%s'' [ID:%d]', [Controller.Name, id]), 'TJoy.Input'); + end; +end; + +procedure TJoy.OnControllerMotion(id: integer; Axis: integer; Perc: double; Time: Cardinal; Legacy: boolean); +var + Controller: TJoyController; +begin - //Left - Right (Y- Axis) - Axes := SDL_JoystickGetAxis(SDL_Joy, 0); - If Axes >= 15000 then - State := State or SDL_HAT_Right - Else If Axes <= -15000 then - State := State or SDL_HAT_Left; + // ignore unknown or disabled input + if not GetControllerByInstanceId(id, Controller) or not Controller.IsEnabled() then Exit; + + // ignore lecacy events for given controller + if Legacy and Controller.ShouldIgnoreLegacy() then Exit; + + Log.LogInfo(Format('Motion [%d] Axis:%d Perc: %0.3f', [id, Axis, Perc]), 'TJoy.Input'); + if not Controller.HandleControllerMotion(id, Axis, Perc, Time) then + begin + Log.LogWarn(Format('Unable to handle axis input of ''%s'' [ID:%d]', [Controller.Name, id]), 'TJoy.Input'); end; +end; + +procedure TJoy.OnControllerButton(id: integer; ButtonId: integer; State: TJoyButtonState; Legacy: boolean); +var + Controller: TJoyController; + i, index: integer; +begin - //Manage Hat and joystick Events - if (SDL_JoystickNumHats(SDL_Joy)>=1) OR (SDL_JoystickNumAxes(SDL_Joy)>=2) then + // ignore unknown or disabled input + if not GetControllerByInstanceId(id, Controller) or not Controller.IsEnabled() then Exit; + + // ignore lecacy events for given controller + if Legacy and Controller.ShouldIgnoreLegacy() then Exit; + + Log.LogInfo(Format('Button [%d] Button: %d State: %s', [id, ButtonId, GetEnumName(TypeInfo(TJoyButtonState), Ord(State))]), 'TJoy.Input'); + if not Controller.HandleControllerButton(ButtonId, State) then begin + Log.LogDebug(Format('Unable to handle button input of ''%s'' [ID:%d]', [Controller.Name, id]), 'TJoy.Input'); + end; +end; - //Up Button - If (JoyUnit.HatState[0].Enabled) and ((SDL_HAT_UP AND State) = SDL_HAT_UP) then - begin //IF Button is newly Pressed or if he is Pressed longer than 500 msecs - if (JoyUnit.HatState[0].State = False) OR (JoyUnit.HatState[0].Lasttick < Tick) then - begin - //Set Tick and State - if JoyUnit.HatState[0].State then - JoyUnit.HatState[0].Lasttick := Tick + 200 - else - JoyUnit.HatState[0].Lasttick := Tick + 500; +// workaround for relative mouse +// TODO: implement simulating mouse properly (access to current cached mouse coors) +procedure TJoy.OnMouseMove(X, Y: integer); +var + i, index: integer; +begin + for i := 0 to Controllers.Count - 1 do + if Controllers.Find(Controllers.Keys[i], index) and Controllers.Data[index].IsEnabled() then + Controllers.Data[index].OnMouseMove(X, Y); +end; - JoyUnit.HatState[0].State := True; - JoyEvent.type_ := JoyUnit.HatState[0].Type_; - JoyEvent.key.keysym.sym := JoyUnit.HatState[0].Sym; - SDL_PushEvent(@JoyEvent); - end; - end - else - JoyUnit.HatState[0].State := False; +{ Controllers } +{ ~~~~~~~~~~~~~~~~~~~~~~~} - //Right Button - If (JoyUnit.HatState[1].Enabled) and ((SDL_HAT_RIGHT AND State) = SDL_HAT_RIGHT) then - begin //IF Button is newly Pressed or if he is Pressed longer than 500 msecs - if (JoyUnit.HatState[1].State = False) OR (JoyUnit.HatState[1].Lasttick < Tick) then - begin - //Set Tick and State - if JoyUnit.HatState[1].State then - JoyUnit.HatState[1].Lasttick := Tick + 200 - else - JoyUnit.HatState[1].Lasttick := Tick + 500; - - JoyUnit.HatState[1].State := True; - - JoyEvent.type_ := JoyUnit.HatState[1].Type_; - JoyEvent.key.keysym.sym := JoyUnit.HatState[1].Sym; - SDL_PushEvent(@JoyEvent); - end; - end - else - JoyUnit.HatState[1].State := False; +constructor TJoyController.Create(DeviceId: integer; Name: string); +begin + //inherited; + + DPadStates := TControllerDPadIDStateMap.Create; + AxesStates := TControllerAxisIDStateMap.Create; + + MouseMode := false; + + self._DeviceId := DeviceId; + self._Name := Name; +end; + +destructor TJoyController.Destroy(); +begin + inherited; + + MouseRepeatThread := nil; - //Down button - If (JoyUnit.HatState[2].Enabled) and ((SDL_HAT_DOWN AND State) = SDL_HAT_DOWN) then - begin //IF Button is newly Pressed or if he is Pressed longer than 230 msecs - if (JoyUnit.HatState[2].State = False) OR (JoyUnit.HatState[2].Lasttick < Tick) then + DPadStates.Free; + AxesStates.Free; +end; + +function TJoyController.GetDeviceId(): integer; +begin + Result := _DeviceId; +end; +function TJoyController.GetInstanceId(): integer; +begin + Result := SDL_JoystickInstanceID(GetJoystick()); +end; +function TJoyController.GetName(): string; +begin + Result := _Name; +end; + +function TJoyController.IsEnabled(): boolean; +begin + Result := _Enabled; +end; +procedure TJoyController.Enable; +begin + SetEnabled(true); +end; +procedure TJoyController.Disable; +begin + SetEnabled(false); +end; + +procedure TJoyController.SetEnabled(Enable: boolean); +begin + _Enabled := Enable; +end; + +function TJoyController.GetControllerType(): TJoyControllerType; +begin + Result := _Type +end; + +function TJoyController.ShouldIgnoreLegacy(): boolean; +begin + Result := false; +end; + +// TODO: Move to Joystick manager +function TJoyController.SimulateKeyboard(Key: TSDL_KeyCode; Pressed: boolean; NoMouseOverride: boolean): boolean; +var + JoyEvent: TSDL_Event; + TempName: string; +begin + Result := true; + + Log.LogInfo(Format('Simulate Key: %s Pressed: %d', [SDL_GetScancodeName(SDL_GetScancodeFromKey(Key)), integer(Pressed)]), 'TJoy.Simulate'); + + // switch back to non-mouse mode (alias keyboard simulation) + if not NoMouseOverride then MouseMode := false; + + JoyEvent := Default(TSDL_Event); + JoyEvent.type_ := ifthen(Pressed, SDL_KEYDOWN, SDL_KEYUP); + JoyEvent.key.keysym.sym := Key; + JoyEvent.key.keysym.scancode := SDL_GetScancodeFromKey(Key); + + // always send empty/zero unicode char as workaround. Check UMain.CheckEvents + JoyEvent.key.keysym.unicode := 0; + + SDL_PushEvent(@JoyEvent); +end; + +// TODO: Move to Joystick manager +procedure TJoyController.SimulateMouseSend(); +var + MouseEvent: TSDL_Event; + DiffTime: integer; + Speed: real; +begin + + // directly set mouse which switches button simulation for mouse + MouseMode := true; + + DiffTime := SDL_GetTicks() - LastMouseState.Time; + Speed := (DiffTime / 1000.0) * JOYSTICK_MOUSE_DEFAULTSPEED; + + MouseEvent.type_ := SDL_MOUSEMOTION; + MouseEvent.button.x := LastMouseState.X + Round(LastMouseState.DeltaX * Speed); + MouseEvent.button.y := LastMouseState.Y + Round(LastMouseState.DeltaY * Speed); + SDL_PushEvent(@MouseEvent); +end; + +// TODO: Move to Joystick manager +function TJoyController.SimulateMouse(ButtonId: byte; Pressed: boolean): boolean; +var + JoyEvent: TSDL_Event; +begin + Result := true; + + JoyEvent := Default(TSDL_Event); + JoyEvent.type_ := ifthen(Pressed, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP); + JoyEvent.button.button := ButtonId; + + // current SDL2 event handling requires having a valid position when sending mouse button presses + // TODO: clean up mouse position emulation once SDL2 input handling is handling mouse button and motion input separately + JoyEvent.button.X := LastMouseState.X; + JoyEvent.button.Y := LastMouseState.Y; + + SDL_PushEvent(@JoyEvent); +end; + +// TODO: Move to Joystick manager +function TJoyController.SimulateMouse(Axis: byte; Delta: real): boolean; +var + mouseX, mouseY: PInt; +begin + Result := true; + + if not LastMouseState.IsSet then + begin + SDL_GetMouseState(@mouseX, @mouseY); + LastMouseState.X := integer(mousex); + LastMouseState.Y := integer(mousey); + LastMouseState.Time := SDL_GetTicks(); + end; + + if Axis = 0 then LastMouseState.DeltaX := Delta + else LastMouseState.DeltaY := Delta; + + SimulateMouseSend(); + + // check whether we should stop the thread or re-create it, in order to send repeated simulated mouse events + if (abs(LastMouseState.DeltaX) < JOYSTICK_MOUSE_DEADZONE) and (abs(LastMouseState.DeltaY) < JOYSTICK_MOUSE_DEADZONE) then + begin + if assigned(MouseRepeatThread) then + begin + MouseRepeatThreadFlag := false; + MouseRepeatThread := nil; + end; + end + else if not assigned(MouseRepeatThread) then + begin + MouseRepeatThreadFlag := true; + MouseRepeatThread := SDL_CreateThread(@MouseRepeatHandlerFunc, nil, Self); + end; +end; + +function TJoyController.HandleControllerDPad(ControllerId: integer; PadId: integer; X, Y: integer): boolean; +var + Index: integer; + State: TControllerDPadState; + Key: TSDL_KeyCode; +begin + Result := false; + + State := Default(TControllerDPadState); + if not DPadStates.Find(PadId, index) then DPadStates.Add(PadId, State); + State := DPadStates.Data[index]; + + if (X <> 0) xor State.X then + begin + if TranslateDPadToKey(PadId, ifthen(State.RawX + X > 0, SDL_HAT_AXIS_X_pos, SDL_HAT_AXIS_X_neg), X <> 0, Key) then + SimulateKeyboard(Key, X <> 0); + end; + if (Y <> 0) xor State.Y then + begin + if TranslateDPadToKey(PadId, ifthen(State.RawY + Y > 0, SDL_HAT_AXIS_Y_pos, SDL_HAT_AXIS_Y_neg), Y <> 0, Key) then + SimulateKeyboard(Key, Y <> 0); + end; + + State.X := X <> 0; + State.Y := Y <> 0; + State.RawX := ifthen(State.X, X, 0); + State.RawY := ifthen(State.Y, Y, 0); + DPadStates.Data[index] := State; + Result := true; +end; + +function TJoyController.HandleControllerMotion(ControllerId: integer; Axis: integer; Perc: double; Time: Cardinal): boolean; +var + Index: integer; + State: TControllerAxisState; + MouseAxis: Byte; + Key: TSDL_KeyCode; +begin + Result := false; + + State := Default(TControllerAxisState); + if not AxesStates.Find(Axis, index) then AxesStates.Add(Axis, State); + State := AxesStates.Data[index]; + + if TranslateAxisToMouseAxis(Axis, Sign(Perc), MouseAxis) then begin + SimulateMouse(MouseAxis, Perc); + end + else if TranslateAxisToKey(Axis, Sign(Perc), Key) then + begin + if not State.Pressed and not State.Repeat_ then + begin + if (abs(Perc) > JOYSTICK_AXIS_PRESSED_THRESHOLD) then begin - //Set Tick and State - if JoyUnit.HatState[2].State then - JoyUnit.HatState[2].Lasttick := Tick + 200 - else - JoyUnit.HatState[2].Lasttick := Tick + 500; - - JoyUnit.HatState[2].State := True; - - JoyEvent.type_ := JoyUnit.HatState[2].Type_; - JoyEvent.key.keysym.sym := JoyUnit.HatState[2].Sym; - SDL_PushEvent(@JoyEvent); + State.Pressed := true; + State.Time := Time; + SimulateKeyboard(Key, true); end; end - else - JoyUnit.HatState[2].State := False; + else if not State.Repeat_ then + begin + if (abs(Perc) < JOYSTICK_AXIS_PRESSED_THRESHOLD) then begin + State.Pressed := false; + if not State.WasRepeat then SimulateKeyboard(Key, false); + State.WasRepeat := false; + end else if (abs(Perc) > JOYSTICK_AXIS_REPEAT_THRESHOLD) then begin + State.Repeat_ := true; - //Left Button - If (JoyUnit.HatState[3].Enabled) and ((SDL_HAT_LEFT AND State) = SDL_HAT_LEFT) then - begin //IF Button is newly Pressed or if he is Pressed longer than 230 msecs - if (JoyUnit.HatState[3].State = False) OR (JoyUnit.HatState[3].Lasttick < Tick) then - begin - //Set Tick and State - if JoyUnit.HatState[3].State then - JoyUnit.HatState[3].Lasttick := Tick + 200 - else - JoyUnit.HatState[3].Lasttick := Tick + 500; - - JoyUnit.HatState[3].State := True; - - JoyEvent.type_ := JoyUnit.HatState[3].Type_; - JoyEvent.key.keysym.sym := JoyUnit.HatState[3].Sym; - SDL_PushEvent(@JoyEvent); + if (Time - State.Time > JOYSTICK_AXIS_REPEAT_TIME) then begin + State.Pressed := true; + SimulateKeyboard(Key, true); + end; end; - end - else - JoyUnit.HatState[3].State := False; + end else if {State.Pressed and} (abs(Perc) < JOYSTICK_AXIS_RELEASED_THRESHOLD) then + begin + State.Repeat_ := false; + State.WasRepeat := true; + if State.Pressed then SimulateKeyboard(Key, false); + end; + end; + + State.Perc := Perc; + AxesStates.Data[index] := State; + Result := true; +end; + +function TJoyController.HandleControllerButton(ButtonId: integer; State: TJoyButtonState): boolean; +var + Key: TSDL_KeyCode; + Button: integer; +begin + Result := false; + + SwitchMouseModeFor(ButtonId, State); + if MouseMode then + begin + if TranslateButtonToMouse(ButtonId, State, Button) then begin + Result := SimulateMouse(Button, State = bsPressed); + end else if TranslateButtonToKey(ButtonId, State, Key) then begin + Result := SimulateKeyboard(Key, State = bsPressed, true); + end; + end else if TranslateButtonToKey(ButtonId, State, Key) then begin + Result := SimulateKeyboard(Key, State = bsPressed); + end; +end; + +function TJoyController.GetControllerButtonCount(): integer; +begin + Result := SDL_JoystickNumButtons(GetJoystick()); +end; + +function TJoyController.GetControllerAxesCount(): integer; +begin + Result := SDL_JoystickNumAxes(GetJoystick()); +end; + +function TJoyController.GetControllerHatsCount(): integer; +begin + Result := SDL_JoystickNumHats(GetJoystick()); +end; + +function TJoyController.TranslateAxisToKey(Axis: integer; Direction: integer; out Key: TSDL_KeyCode): boolean; +begin + Result := false; +end; + +function TJoyController.TranslateAxisToMouseAxis(Axis: integer; Direction: integer; out MouseAxis: byte): boolean; +begin + Result := false; +end; + +function TJoyController.TranslateDPadToKey(Hat: integer; Axis: integer; Positive: boolean; out Key: TSDL_KeyCode): boolean; +begin + Result := false; +end; +function TJoyController.TranslateButtonToKey(ButtonId: integer; State: TJoyButtonState; out Key: TSDL_KeyCode): boolean; +begin + Result := false; +end; +function TJoyController.TranslateButtonToMouse(ButtonId: integer; State: TJoyButtonState; out Button: integer): boolean; +begin + Result := false; +end; + +procedure TJoyController.OnMouseMove(X, Y: integer); +begin + LastMouseState.X := X; + LastMouseState.Y := Y; + //LastMouseState.DeltaX := 0.0; + //LastMouseState.DeltaY := 0.0; + LastMouseState.Time := SDL_GetTicks(); + LastMouseState.IsSet := true; +end; + +constructor TJoyControllerJoyStick.Create(DeviceId: integer; JS: PSDL_Joystick; Name: string); +begin + inherited + Create(DeviceId, Name); + + _Type := ctJoystick; + self.JoyStick := JS; +end; + +destructor TJoyControllerJoyStick.Destroy(); +begin + inherited; + + if assigned(JoyStick) then + begin + SDL_JoystickClose(JoyStick); + JoyStick := nil; + end; +end; + +function TJoyControllerJoyStick.GetJoystick(): Pointer; +begin + Result := JoyStick; +end; + +constructor TJoyControllerGameController.Create(DeviceId: integer; GC: PSDL_GameController; Name: string); +begin + inherited + Create(DeviceId, Name); + + _Type := ctGameController; + self.GameController := GC; +end; + +destructor TJoyControllerGameController.Destroy(); +begin + inherited; + + if assigned(GameController) then + begin + SDL_GameControllerClose(GameController); + GameController := nil; + end; +end; + +function TJoyControllerGameController.GetJoystick(): Pointer; +begin + Result := SDL_GameControllerGetJoystick(GameController); +end; + +function TJoyControllerGameController.ShouldIgnoreLegacy(): boolean; +begin + Result := true; +end; + + +{ Helper } +{ ~~~~~~~~~~~~~~~~~~~~~~~} + +function ifthen(val:boolean;const iftrue:TJoyButtonState; const iffalse:TJoyButtonState = bsReleased): TJoyButtonState; +begin + if val then result:=iftrue else result:=iffalse; +end; + +function ifthen(val:boolean;const iftrue:TSDL_KeyCode; const iffalse:TSDL_KeyCode = 0): TSDL_KeyCode; +begin + if val then result:=iftrue else result:=iffalse; +end; + +{ Key mapping } +{ ~~~~~~~~~~~~~~~~~~~~~~~} + +function TJoyControllerJoyStick.TranslateAxisToKey(Axis: integer; Direction: integer; out Key: TSDL_KeyCode): boolean; +begin + Result := false; +end; + +function TJoyControllerJoyStick.TranslateAxisToMouseAxis(Axis: integer; Direction: integer; out MouseAxis: byte): boolean; +begin + Result := true; + case Axis of + 0, 1: MouseAxis := Axis; + otherwise Result := false; + end; +end; + +function TJoyControllerJoyStick.TranslateDPadToKey(Hat: integer; Axis: integer; Positive: boolean; out Key: TSDL_KeyCode): boolean; +begin + Result := false; + + if Hat = 0 then + begin + case Axis of + SDL_HAT_AXIS_X_pos: Key := SDLK_RIGHT; + SDL_HAT_AXIS_X_neg: Key := SDLK_LEFT; + SDL_HAT_AXIS_Y_pos: Key := SDLK_UP; + SDL_HAT_AXIS_Y_neg: Key := SDLK_DOWN; + otherwise Exit; + end; + Result := true; + end + else if Hat = 1 then + begin + case Axis of + SDL_HAT_AXIS_X_pos: Key := SDLK_KP_6; + SDL_HAT_AXIS_X_neg: Key := SDLK_KP_4; + SDL_HAT_AXIS_Y_pos: Key := SDLK_KP_8; + SDL_HAT_AXIS_Y_neg: Key := SDLK_KP_2; + SDL_HAT_AXIS_X_pos_Y_neg: Key := SDLK_KP_3; + SDL_HAT_AXIS_X_pos_Y_pos: Key := SDLK_KP_9; + SDL_HAT_AXIS_Y_neg_X_neg: Key := SDLK_KP_7; + SDL_HAT_AXIS_Y_pos_X_neg: Key := SDLK_KP_1; + + // TODO: consider invalid buttons presses as NumPad5? + //SDL_HAT_AXIS_X, SDL_HAT_AXIS_Y: Key := SDLK_KP_5; + otherwise Exit; + end; + Result := true; end; +end; + +function TJoyControllerJoyStick.TranslateButtonToMouse(ButtonId: integer; State: TJoyButtonState; out Button: integer): boolean; +begin + Result := true; + case ButtonId of + 0: Button := SDL_BUTTON_LEFT; + 1: Button := SDL_BUTTON_RIGHT; + + // TODO: Mouse wheel + + otherwise Result := false; + end; +end; + +function TJoyControllerJoyStick.TranslateButtonToKey(ButtonId: integer; State: TJoyButtonState; out Key: TSDL_KeyCode): boolean; +begin + Result := true; + + // default configuration with 4 buttons + case ButtonId of + 0: Key := SDLK_RETURN; + 1: Key := SDLK_ESCAPE; + 2: Key := SDLK_m; + 3: Key := SDLK_r; + otherwise Result := false; + end; +end; + +procedure TJoyControllerJoyStick.SwitchMouseModeFor(ButtonId: integer; State: TJoyButtonState); +begin + // no need to do anything in here. + // whether we should switching Mosue mode is handled in DPad tracking, see SimulateKeyboard SimulateMouse + // this method is required for controllers sending the digital pad buttons as Button presses (and not as Hat motion) +end; + +function TJoyControllerGameController.TranslateAxisToKey(Axis: integer; Direction: integer; out Key: TSDL_KeyCode): boolean; +begin + + Result := false; + + if Direction > 0 then + begin + case Axis of + SDL_CONTROLLER_AXIS_RIGHTX: Key := SDLK_RIGHT; + SDL_CONTROLLER_AXIS_RIGHTY: Key := SDLK_UP; + otherwise Exit; + end; + Result := true; + end + + else if Direction < 0 then + begin + case Axis of + SDL_CONTROLLER_AXIS_RIGHTX: Key := SDLK_LEFT; + SDL_CONTROLLER_AXIS_RIGHTY: Key := SDLK_DOWN; + otherwise Exit; + end; + Result := true; + end; +end; + +function TJoyControllerGameController.TranslateAxisToMouseAxis(Axis: integer; Direction: integer; out MouseAxis: byte): boolean; +begin + Result := false; + + case Axis of + SDL_CONTROLLER_AXIS_LEFTX: MouseAxis := 0; + SDL_CONTROLLER_AXIS_LEFTY: MouseAxis := 1; + otherwise Exit; + end; + Result := true; +end; + +function TJoyControllerGameController.TranslateDPadToKey(Hat: integer; Axis: integer; Positive: boolean; out Key: TSDL_KeyCode): boolean; +begin + Result := false; +end; + +function TJoyControllerGameController.TranslateButtonToMouse(ButtonId: integer; State: TJoyButtonState; out Button: integer): boolean; +begin + Result := true; + + case ButtonId of + SDL_CONTROLLER_BUTTON_A: Button := SDL_BUTTON_LEFT; + SDL_CONTROLLER_BUTTON_B: Button := SDL_BUTTON_RIGHT; + SDL_CONTROLLER_BUTTON_LEFTSTICK, + SDL_CONTROLLER_BUTTON_RIGHTSTICK: Button := SDL_BUTTON_MIDDLE; + + // TODO: Mouse wheel + // Button := SDL_BUTTON_WHEELUP + + otherwise Result := false; + end; +end; + +function TJoyControllerGameController.TranslateButtonToKey(ButtonId: integer; State: TJoyButtonState; out Key: TSDL_KeyCode): boolean; +begin + + Result := true; + case ButtonId of + SDL_CONTROLLER_BUTTON_DPAD_UP: Key := SDLK_UP; + SDL_CONTROLLER_BUTTON_DPAD_DOWN: Key := SDLK_DOWN; + SDL_CONTROLLER_BUTTON_DPAD_LEFT: Key := SDLK_LEFT; + SDL_CONTROLLER_BUTTON_DPAD_RIGHT: Key := SDLK_RIGHT; + otherwise Result := false; + end; + + // for mouse mode switching + if Result then + begin + MouseMode := false; + Exit; + end; + + Result := true; + if MouseMode then + begin + case ButtonId of + SDL_CONTROLLER_BUTTON_START: Key := SDLK_RETURN; + SDL_CONTROLLER_BUTTON_BACK: Key := SDLK_ESCAPE; + otherwise Result := false; + end; + end + else + begin + case ButtonId of + SDL_CONTROLLER_BUTTON_A: Key := SDLK_RETURN; + SDL_CONTROLLER_BUTTON_B: Key := SDLK_ESCAPE; + SDL_CONTROLLER_BUTTON_Y: Key := SDLK_m; + SDL_CONTROLLER_BUTTON_X: Key := SDLK_r; + otherwise Result := false; + end; + end; +end; + +procedure TJoyControllerGameController.SwitchMouseModeFor(ButtonId: integer; State: TJoyButtonState); +begin + if MouseMode then + begin + case ButtonId of + SDL_CONTROLLER_BUTTON_DPAD_UP, + SDL_CONTROLLER_BUTTON_DPAD_DOWN, + SDL_CONTROLLER_BUTTON_DPAD_LEFT, + SDL_CONTROLLER_BUTTON_DPAD_RIGHT: + MouseMode := false; + end; + end; end; end. diff --git a/src/base/ULanguage.pas b/src/base/ULanguage.pas index 0f55b58f..18131b1e 100644 --- a/src/base/ULanguage.pas +++ b/src/base/ULanguage.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/ULanguage.pas $ - * $Id: ULanguage.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULanguage; diff --git a/src/base/ULog.pas b/src/base/ULog.pas index 9c7e2b04..85aa3f55 100644 --- a/src/base/ULog.pas +++ b/src/base/ULog.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/ULog.pas $ - * $Id: ULog.pas 3117 2015-08-15 01:23:56Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULog; @@ -66,6 +63,8 @@ interface LOG_LEVEL_DEFAULT = LOG_LEVEL_WARN; LOG_FILE_LEVEL_DEFAULT = LOG_LEVEL_ERROR; + CONSOLE_SCROLLBACK_SIZE = 512; + type TLog = class private @@ -73,12 +72,16 @@ TLog = class LogFileOpened: boolean; BenchmarkFile: TextFile; BenchmarkFileOpened: boolean; + ConsoleBuffer: TStringList; // stores logged messages for in-game console, capped to CONSOLE_SCROLLBACK_SIZE LogLevel: integer; // level of messages written to the log-file LogFileLevel: integer; procedure LogToFile(const Text: string); + + function GetConsoleCount: integer; + public BenchmarkTimeStart: array[0..31] of real; BenchmarkTimeLength: array[0..31] of real;//TDateTime; @@ -119,6 +122,13 @@ TLog = class procedure LogVoice(SoundNr: integer); // buffer procedure LogBuffer(const buf : Pointer; const bufLength : Integer; const filename : IPath); + + // console + property ConsoleCount: integer read GetConsoleCount; + function GetConsole(const index: integer; FromTheBeginning: boolean = false): string; + procedure LogConsole(const Text: string); + procedure ClearConsoleLog; + end; procedure DebugWriteln(const aString: String); @@ -158,6 +168,7 @@ procedure DebugWriteln(const aString: string); constructor TLog.Create; begin + ConsoleBuffer := TStringList.Create; inherited; LogLevel := LOG_LEVEL_DEFAULT; LogFileLevel := LOG_FILE_LEVEL_DEFAULT; @@ -172,6 +183,8 @@ destructor TLog.Destroy; // CloseFile(AnalyzeFile); if LogFileOpened then CloseFile(LogFile); + + ConsoleBuffer.Free; inherited; end; @@ -346,6 +359,7 @@ procedure TLog.LogMsg(const Text: string; Level: integer); if (Level <= LogLevel) then begin DebugWriteLn(LogMsg); + LogConsole(LogMsg); end; // write message to log-file @@ -523,6 +537,28 @@ procedure TLog.LogBuffer(const buf: Pointer; const bufLength: Integer; const fil end; end; +procedure TLog.ClearConsoleLog; +begin + ConsoleBuffer.Clear; +end; + +function TLog.GetConsole(const index: integer; FromTheBeginning: boolean = false): string; +begin + if FromTheBeginning then Result := ConsoleBuffer[index] + else Result := ConsoleBuffer[ConsoleBuffer.Count-1-index]; +end; + +function TLog.GetConsoleCount: integer; +begin + Result := ConsoleBuffer.Count; +end; + +procedure TLog.LogConsole(const Text: string); +begin + ConsoleBuffer.Insert(0, Text); + if ConsoleBuffer.Count > CONSOLE_SCROLLBACK_SIZE then ConsoleBuffer.Capacity:=CONSOLE_SCROLLBACK_SIZE; +end; + end. diff --git a/src/base/ULyrics.pas b/src/base/ULyrics.pas index 8f794676..d4eafb9c 100644 --- a/src/base/ULyrics.pas +++ b/src/base/ULyrics.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/ULyrics.pas $ - * $Id: ULyrics.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULyrics; @@ -36,6 +33,7 @@ interface uses dglOpenGL, UCommon, + UIni, UTexture, UThemes, UMusic; @@ -50,8 +48,8 @@ interface TLyricWord = record X: real; // left corner Width: real; // width - Start: cardinal; // start of the word in quarters (beats) - Length: cardinal; // length of the word in quarters + Start: Longint; // start of the word in quarters (beats) + Length: Longint; // length of the word in quarters Text: UTF8String; // text Freestyle: boolean; // is freestyle? end; @@ -89,8 +87,7 @@ TLyricEngine = class LCounter: integer; // line counter // duet mode - textures for player icons - // FIXME: do not use a fixed player count, use MAX_PLAYERS instead - PlayerIconTex: array[0..5] of TPlayerIconTex; + PlayerIconTex: array[0..UIni.IMaxPlayerCount -1] of TPlayerIconTex; // Some helper procedures for lyric drawing procedure DrawLyrics (Beat: real); @@ -163,8 +160,7 @@ implementation UGraphic, UDisplay, ULog, - math, - UIni; + math; { TLyricLine } @@ -272,7 +268,7 @@ procedure TLyricEngine.LoadTextures; BallTex := Texture.LoadTexture(Skin.GetTextureFileName('Ball'), TEXTURE_TYPE_TRANSPARENT, 0); // duet mode: load player icon - for I := 0 to 5 do + for I := 0 to UIni.IMaxPlayerCount - 1 do begin PlayerIconTex[I][0] := Texture.LoadTexture(Skin.GetTextureFileName('LyricIcon_P' + InttoStr(I+1)), TEXTURE_TYPE_TRANSPARENT, 0); PlayerIconTex[I][1] := Texture.LoadTexture(Skin.GetTextureFileName('LyricIconD_P' + InttoStr(I+1)), TEXTURE_TYPE_TRANSPARENT, 0); diff --git a/src/base/UMain.pas b/src/base/UMain.pas index 62ea64ea..1635bcee 100644 --- a/src/base/UMain.pas +++ b/src/base/UMain.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UMain.pas $ - * $Id: UMain.pas 2631 2010-09-05 15:26:08Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMain; @@ -65,6 +62,7 @@ procedure MainThreadExec(Proc: TMainThreadExecProc; Data: Pointer); implementation uses + math, dglOpenGL, UCommandLine, UCommon, @@ -138,6 +136,7 @@ procedure Main; // initialize SDL // without SDL_INIT_TIMER SDL_GetTicks() might return strange values + SDL_SetHint(SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING, '1'); SDL_Init(SDL_INIT_VIDEO or SDL_INIT_TIMER); //SDL_EnableUnicode(1); //not necessary in SDL2 any more @@ -207,8 +206,7 @@ procedure Main; // Joypad if (Ini.Joypad = 1) or (Params.Joypad) then begin - Log.LogStatus('Initialize Joystick', 'Initialization'); - Joy := TJoy.Create; + InitializeJoystick; end; // Webcam @@ -247,7 +245,7 @@ procedure Main; [BadPlayer])); Display.CurrentScreen^.FadeTo( @ScreenOptionsRecord ); end; - + //------------------------------ // Start Mainloop //------------------------------ @@ -266,11 +264,17 @@ procedure Main; // or at least use the corresponding Free methods Log.LogStatus('Closing DB file', 'Finalization'); - DataBase.Destroy(); + if (DataBase <> nil) then + begin + DataBase.Destroy(); + end; + Log.LogStatus('Finalize Media', 'Finalization'); FinalizeMedia(); + FinalizeJoyStick; + Log.LogStatus('Uninitialize 3D', 'Finalization'); Finalize3D(); @@ -303,11 +307,7 @@ procedure MainLoop; begin TicksBeforeFrame := SDL_GetTicks; - // joypad - if (Ini.Joypad = 1) or (Params.Joypad) then - Joy.Update; - - // keyboard events + // keyboard/mouse/joystick events CheckEvents; // display @@ -330,7 +330,7 @@ procedure MainLoop; J := J+1; if J > 1 then begin - Report := 'Sorry, an error ocurred! Please report this error to the game-developers. Also check the Error.log file in the game folder.' + LineEnding + + Report := 'Sorry, an error ocurred! Please report this error to http://ultrastar-es.org/foro Also check the Error.log file in the game folder.' + LineEnding + 'Stacktrace:' + LineEnding; if E <> nil then begin Report := Report + 'Exception class: ' + E.ClassName + LineEnding + @@ -370,14 +370,18 @@ procedure DoQuit; procedure CheckEvents; var Event: TSDL_event; + SimEvent: TSDL_event; KeyCharUnicode: UCS4Char; s1: UTF8String; mouseDown: boolean; mouseBtn: integer; + mouseX, mouseY: PInt; KeepGoing: boolean; + SuppressKey: boolean; + UpdateMouse: boolean; begin - KeyCharUnicode:=0; KeepGoing := true; + SuppressKey := false; while (SDL_PollEvent(@Event) <> 0) do begin case Event.type_ of @@ -388,10 +392,11 @@ procedure CheckEvents; Display.CheckOK := true; end; - SDL_MOUSEMOTION, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP: + SDL_MOUSEMOTION, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_MOUSEWHEEL: begin if (Ini.Mouse > 0) then begin + UpdateMouse := true; case Event.type_ of SDL_MOUSEBUTTONDOWN: begin @@ -417,10 +422,30 @@ procedure CheckEvents; mouseDown := false; mouseBtn := 0; end; + SDL_MOUSEWHEEL: + begin + UpdateMouse := false; + mouseDown := (Event.wheel.y <> 0); + mouseBtn := SDL_BUTTON_WHEELDOWN; + if (Event.wheel.y > 0) then mouseBtn := SDL_BUTTON_WHEELUP; + + // some menu buttons require proper mouse location for trying to + // react to mouse wheel navigation simulation (see UMenu.ParseMouse) + SDL_GetMouseState(@mouseX, @mouseY); + Event.button.x := longint(mouseX); + Event.button.y := longint(mouseY); + end; end; - Display.MoveCursor(Event.button.X * 800 * Screens / ScreenW, - Event.button.Y * 600 / ScreenH); + if UpdateMouse then + begin + // used to update mouse coords and allow the relative mouse emulated by joystick axis motion + if assigned(Joy) then Joy.OnMouseMove(EnsureRange(Event.button.X, 0, 799), + EnsureRange(Event.button.Y, 0,599)); + + Display.MoveCursor(Event.button.X * 800 * Screens / ScreenW, + Event.button.Y * 600 / ScreenH); + end; if not Assigned(Display.NextScreen) then begin //drop input when changing screens @@ -438,7 +463,7 @@ procedure CheckEvents; KeepGoing := ScreenPopupScoreDownload.ParseMouse(mouseBtn, mouseDown, Event.button.x, Event.button.y) else begin - KeepGoing := Display.CurrentScreen^.ParseMouse(mouseBtn, mouseDown, Event.button.x, Event.button.y); + KeepGoing := Display.ParseMouse(mouseBtn, mouseDown, Event.button.x, Event.button.y); // if screen wants to exit if not KeepGoing then @@ -449,31 +474,10 @@ procedure CheckEvents; end; SDL_WINDOWEVENT://SDL_WINDOWEVENT_RESIZED: begin - if Event.window.event = SDL_WINDOWEVENT_RESIZED then - begin - ScreenW := Event.window.data1; //width - ScreenH := Event.window.data2; //hight - // Note: do NOT call SDL_SetVideoMode on Windows and MacOSX here. - // This would create a new OpenGL render-context and all texture data - // would be invalidated. - // On Linux the mode MUST be reset, otherwise graphics will be corrupted. - // Update: It seems to work now without creating a new OpenGL context. At least - // with Win7 and SDL 1.2.14. Maybe it generally works now with SDL 1.2.14 and we - // can switch it on for windows. - // Important: Unless SDL_SetVideoMode() is called (it is not on Windows), Screen.w - // and Screen.h are not valid after a resize and still contain the old size. Use - // ScreenW and ScreenH instead. - ////// - if boolean( Ini.FullScreen ) then - begin - Screen.W := ScreenW; - Screen.H := ScreenH; - end - else - SDL_SetWindowSize(screen,ScreenW, ScreenH); - {screen := SDL_CreateWindow('UltraStar Deluxe loading...',SDL_WINDOWPOS_UNDEFINED, - SDL_WINDOWPOS_UNDEFINED, ScreenW, ScreenH, SDL_WINDOW_OPENGL or SDL_WINDOW_RESIZABLE);} - end; + case Event.window.event of + SDL_WINDOWEVENT_MOVED: OnWindowMoved(Event.window.data1, Event.window.data2); + SDL_WINDOWEVENT_RESIZED: OnWindowResized(Event.window.data1, Event.window.data2); + end end; SDL_KEYDOWN, SDL_TEXTINPUT: begin @@ -487,45 +491,39 @@ procedure CheckEvents; //if (Event.key.keysym.unicode in [1 .. 26]) then // Event.key.keysym.unicode := Ord('A') + Event.key.keysym.unicode - 1; + // toggle in-game console if allowed + if boolean(Ini.Debug) and ((Event.key.keysym.sym = SInt32('~')) or (Event.key.keysym.sym = SDLK_CARET)) then + begin + Display.ToggleConsole; + end; + + if Event.key.keysym.sym = SDLK_RETURN then + begin + if (SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT) = KMOD_LALT) then + begin + if SwitchVideoMode(Mode_Fullscreen) = Mode_Fullscreen then Ini.FullScreen := 1 + else Ini.FullScreen := 0; + Ini.Save(); + + Break; + end; + end; + // remap the "keypad enter" key to the "standard enter" key - if (Event.key.keysym.sym = SDLK_KP_ENTER) then - Event.key.keysym.sym := SDLK_RETURN; + if (Event.key.keysym.sym = SDLK_KP_ENTER) then Event.key.keysym.sym := SDLK_RETURN; if not Assigned(Display.NextScreen) then begin //drop input when changing screens - { to-do : F11 was used for fullscreen toggle, too here - but we also use the key in screenname and some other - screens. It is droped although fullscreen toggle doesn't - even work on windows. - should we add (Event.key.keysym.sym = SDLK_F11) here - anyway? } + KeyCharUnicode:=0; + if (Event.type_ = SDL_TEXTINPUT) and (Event.text.text <> '') then try - s1:=Event.text.text; KeyCharUnicode:=UnicodeStringToUCS4String(UnicodeString(UTF8String(Event.text.text)))[0]; //KeyCharUnicode:=UnicodeStringToUCS4String(UnicodeString(Event.key.keysym.unicode))[1];//Event.text.text)[0]; except end; - if (Event.key.keysym.sym = SDLK_F11) then // toggle full screen - begin - Ini.FullScreen := integer( not boolean( Ini.FullScreen ) ); - if boolean( Ini.FullScreen ) then - begin - SDL_SetWindowFullscreen(screen, SDL_WINDOW_FULLSCREEN_DESKTOP or SDL_WINDOW_RESIZABLE); - //SDL_SetVideoMode(ScreenW, ScreenH, (Ini.Depth+1) * 16, SDL_OPENGL or SDL_FULLSCREEN); - end - else - begin - SDL_SetWindowFullscreen(screen, SDL_WINDOW_RESIZABLE); - //SDL_SetVideoMode(ScreenW, ScreenH, (Ini.Depth+1) * 16, SDL_OPENGL or SDL_RESIZABLE); - end; - Ini.Save(); - //Display.SetCursor; - - //glViewPort(0, 0, ScreenW, ScreenH); - end // if print is pressed -> make screenshot and save to screenshot path - else if (Event.key.keysym.sym = SDLK_SYSREQ) or (Event.key.keysym.sym = SDLK_PRINTSCREEN) then + if (Event.key.keysym.sym = SDLK_SYSREQ) or (Event.key.keysym.sym = SDLK_PRINTSCREEN) then Display.SaveScreenShot // if there is a visible popup then let it handle input instead of underlying screen // shoud be done in a way to be sure the topmost popup has preference (maybe error, then check) @@ -541,7 +539,7 @@ procedure CheckEvents; KeepGoing := ScreenPopupSendScore.ParseInput(Event.key.keysym.sym, KeyCharUnicode, true) else if (ScreenPopupScoreDownload <> nil) and (ScreenPopupScoreDownload.Visible) then KeepGoing := ScreenPopupScoreDownload.ParseInput(Event.key.keysym.sym, KeyCharUnicode, true) - else + else if (Display.ShouldHandleInput(Event.key.keysym.sym, KeyCharUnicode, true, SuppressKey)) then begin // check if screen wants to exit KeepGoing := Display.ParseInput(Event.key.keysym.sym, KeyCharUnicode, true); @@ -551,23 +549,60 @@ procedure CheckEvents; DoQuit; end; + + if (not SuppressKey and (Event.key.keysym.sym = SDLK_F11)) then // toggle full screen + begin + if (CurrentWindowMode <> Mode_Fullscreen) then // only switch borderless fullscreen in windowed mode + begin + if SwitchVideoMode(Mode_Borderless) = Mode_Borderless then + begin + Ini.FullScreen := 2; + end + else + begin + Ini.FullScreen := 0; + end; + Ini.Save(); + end; + + //Display.SetCursor; + + //glViewPort(0, 0, ScreenW, ScreenH); + end; end; end; - SDL_JOYAXISMOTION: + SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, + SDL_CONTROLLERBUTTONDOWN, SDL_CONTROLLERBUTTONUP, SDL_CONTROLLERAXISMOTION, + SDL_JOYAXISMOTION, SDL_JOYBALLMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, + SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED, SDL_JOYHATMOTION: begin - // not implemented - end; - SDL_JOYBUTTONDOWN: - begin - // not implemented + OnJoystickPollEvent(Event); end; MAINTHREAD_EXEC_EVENT: with Event.user do begin TMainThreadExecProc(data1)(data2); end; + + otherwise + begin + ; + end; end; // case end; // while + + if Display.NeedsCursorUpdate() then + begin + + + // push a generated event onto the queue in order to simulate a mouse movement + // the next tick will poll the motion event and handle it just like a real input + SDL_GetMouseState(@mouseX, @mouseY); + SimEvent.user.type_ := SDL_MOUSEMOTION; + SimEvent.button.x := longint(mouseX); + SimEvent.button.y := longint(mouseY); + SDL_PushEvent(@SimEvent); + end; end; procedure MainThreadExec(Proc: TMainThreadExecProc; Data: Pointer); diff --git a/src/base/UMusic.pas b/src/base/UMusic.pas index 38a9cc07..d5f1664a 100644 --- a/src/base/UMusic.pas +++ b/src/base/UMusic.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UMusic.pas $ - * $Id: UMusic.pas 3103 2014-11-22 23:21:19Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMusic; @@ -42,7 +39,7 @@ interface UWebcam; type - TNoteType = (ntFreestyle, ntNormal, ntGolden); + TNoteType = (ntFreestyle, ntNormal, ntGolden, ntRap, ntRapGolden); TPos = record CP: integer; @@ -77,7 +74,7 @@ TRectCoords = record // 0 means this notetype is not rated at all // 2 means a hit of this notetype will be rated w/ twice as much // points as a hit of a notetype w/ ScoreFactor 1 - ScoreFactor: array[TNoteType] of integer = (0, 1, 2); + ScoreFactor: array[TNoteType] of integer = (0, 1, 2, 1, 2); type (** @@ -97,6 +94,13 @@ TLineFragment = record IsMedley: boolean; //just for editor IsStartPreview: boolean; //just for editor + private + function GetEnd:integer; + + public + property End_:integer read GetEnd; + + end; (** @@ -116,6 +120,22 @@ TLine = record TotalNotes: integer; // value of all notes in the line LastLine: boolean; Note: array of TLineFragment; + + private + function GetLength(): integer; + + public + { Returns whether the line has a valid length. } + function HasLength(): boolean; overload; + { Returns whether the line has a valid length and passes length. } + function HasLength(out Len: Integer): boolean; overload; + { Returns whether the line has a valid length and passes length. Output converted to Real } + function HasLength(out Len: real): boolean; overload; + { Returns whether the line has a valid length and passes length. Output converted to Double } + function HasLength(out Len: double): boolean; overload; + + property Length_: integer read GetLength; + end; (** @@ -167,9 +187,9 @@ TLines = record 2, 2, // asfU16LSB, asfS16LSB 2, 2, // asfU16MSB, asfS16MSB 2, 2, // asfU16, asfS16 - 3, // asfS24 4, // asfS32 - 4 // asfFloat + 4, // asfFloat + 8 // asfDouble ); const @@ -221,6 +241,23 @@ TVoiceRemoval = class(TSoundEffect) procedure Callback(Buffer: PByteArray; BufSize: integer); override; end; + TSoundFX = class + public + EngineData: Pointer; // can be used for engine-specific data + procedure Init(); virtual; abstract; + procedure Removed(); virtual; abstract; + + class function CanEnable: boolean; virtual; abstract; static; + + function GetType: DWORD; virtual; abstract; + function GetPriority: LongInt; virtual; abstract; + function GetName: string; virtual; abstract; + + end; + + TReplayGain = class(TSoundFX) + end; + type TAudioProcessingStream = class; TOnCloseHandler = procedure(Stream: TAudioProcessingStream); @@ -313,6 +350,9 @@ TAudioPlaybackStream = class(TAudioProcessingStream) procedure AddSoundEffect(Effect: TSoundEffect); virtual; abstract; procedure RemoveSoundEffect(Effect: TSoundEffect); virtual; abstract; + procedure AddSoundFX(FX: TSoundFX); virtual; abstract; + procedure RemoveSoundFX(FX: TSoundFX); virtual; abstract; + procedure SetSyncSource(SyncSource: TSyncSource); function GetSourceStream(): TAudioSourceStream; @@ -1258,5 +1298,48 @@ procedure TAudioVoiceStream.SetLoop(Enabled: boolean); begin end; +{ TLineFragment } + +function TLineFragment.GetEnd(): integer; +begin + Result := Start+Length; +end; + +{ TLine } + +function TLine.HasLength(): boolean; +var tempi: integer; +begin + Result := HasLength(tempi); +end; + +function TLine.HasLength(out Len: integer): boolean; +begin + Result := false; + if Length(Note) >= 0 then + begin + Result := true; + Len := End_ - Note[0].Start; + end; +end; + +function TLine.HasLength(out Len: real): boolean; +var tempi: integer; +begin + Result := HasLength(tempi); + Len := tempi; +end; + +function TLine.HasLength(out Len: double): boolean; +var tempi: integer; +begin + Result := HasLength(tempi); + Len := tempi; +end; + +function TLine.GetLength(): integer; +begin + Result := ifthen(Length(Note) < 0, 0, End_ - Note[0].Start); +end; end. diff --git a/src/base/UNote.pas b/src/base/UNote.pas index 9ef9e844..444f37fe 100644 --- a/src/base/UNote.pas +++ b/src/base/UNote.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UNote; @@ -43,7 +40,7 @@ interface ULog, ULyrics, URecord, - UScreenSing, + UScreenSingController, UScreenJukebox, USong, UTime; @@ -128,11 +125,11 @@ TMedleyPlaylist = record MAX_SONG_SCORE = 10000; // max. achievable points per song MAX_SONG_LINE_BONUS = 1000; // max. achievable line bonus per song -procedure Sing(Screen: TScreenSing); -procedure NewSentence(CP: integer; Screen: TScreenSing); -procedure NewBeatClick(Screen: TScreenSing); // executed when on then new beat for click -procedure NewBeatDetect(Screen: TScreenSing); // executed when on then new beat for detection -procedure NewNote(CP: integer; Screen: TScreenSing); // detect note +procedure Sing(Screen: TScreenSingController); +procedure NewSentence(CP: integer; Screen: TScreenSingController); +procedure NewBeatClick(Screen: TScreenSingController); // executed when on then new beat for click +procedure NewBeatDetect(Screen: TScreenSingController); // executed when on then new beat for detection +procedure NewNote(CP: integer; Screen: TScreenSingController); // detect note function GetMidBeat(Time: real): real; function GetTimeFromBeat(Beat: integer; SelfSong: TSong = nil): real; @@ -298,7 +295,7 @@ function GetTimeFromBeat(Beat: integer; SelfSong: TSong = nil): real; end; end; -procedure Sing(Screen: TScreenSing); +procedure Sing(Screen: TScreenSingController); var Count: integer; CountGr: integer; @@ -369,7 +366,7 @@ procedure SingJukebox(Screen: TScreenJukebox); Screen.onSentenceChange(Lines[0].Current); end; -procedure NewSentence(CP: integer; Screen: TScreenSing); +procedure NewSentence(CP: integer; Screen: TScreenSingController); var I: integer; begin @@ -423,7 +420,7 @@ procedure NewBeatClick; end; end; -procedure NewBeatDetect(Screen: TScreenSing); +procedure NewBeatDetect(Screen: TScreenSingController); var MaxCP, CP, SentenceEnd: integer; I, J: cardinal; @@ -468,7 +465,7 @@ procedure NewBeatDetect(Screen: TScreenSing); end; end; -procedure NewNote(CP: integer; Screen: TScreenSing); +procedure NewNote(CP: integer; Screen: TScreenSingController); var LineFragmentIndex: integer; CurrentLineFragment: PLineFragment; @@ -541,7 +538,7 @@ procedure NewNote(CP: integer; Screen: TScreenSing); CurrentSound := AudioInputProcessor.Sound[PlayerIndex]; // at the beginning of the song there is no previous note - if (Length(CurrentPlayer.Note) > 0) then + if (Length(CurrentPlayer.Note) > 0) and (CurrentPlayer.HighNote > -1) then LastPlayerNote := @CurrentPlayer.Note[CurrentPlayer.HighNote] else LastPlayerNote := nil; diff --git a/src/base/UParty.pas b/src/base/UParty.pas index 1ed56165..6d733542 100644 --- a/src/base/UParty.pas +++ b/src/base/UParty.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UParty.pas $ - * $Id: UParty.pas 2581 2010-07-18 10:33:05Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UParty; diff --git a/src/base/UPartyTournament.pas b/src/base/UPartyTournament.pas index f8a6d0a5..1a0546d5 100644 --- a/src/base/UPartyTournament.pas +++ b/src/base/UPartyTournament.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UParty.pas $ - * $Id: UParty.pas 2581 2010-07-18 10:33:05Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UPartyTournament; diff --git a/src/base/UPath.pas b/src/base/UPath.pas index f6fda63b..211f7e25 100644 --- a/src/base/UPath.pas +++ b/src/base/UPath.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UPath; @@ -359,10 +356,6 @@ TUnicodeIniStream = class() function DeleteEmptyDir(): boolean; function Rename(const NewName: IPath): boolean; function CopyFile(const Target: IPath; FailIfExists: boolean): boolean; - - // TODO: Dirwatch stuff - // AddFileChangeListener(Listener: TFileChangeListener); - {** * Internal string representation. For debugging only. *} @@ -1131,7 +1124,7 @@ constructor TTextFileStream.Create(Filename: IPath; Mode: word); inherited Create(); fMode := Mode; fFilename := Filename; - fLineBreak := sLineBreak; + fLineBreak := AnsiString(#13#10); //Windows-Style Linebreak. Older USDX versions don't support other formats. end; function TTextFileStream.ReadLine(var Line: UTF8String): boolean; diff --git a/src/base/UPathUtils.pas b/src/base/UPathUtils.pas index d4bc378b..35d9b7a2 100644 --- a/src/base/UPathUtils.pas +++ b/src/base/UPathUtils.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UPathUtils; diff --git a/src/base/UPlatform.pas b/src/base/UPlatform.pas index e4f6932d..d7a2c14b 100644 --- a/src/base/UPlatform.pas +++ b/src/base/UPlatform.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UPlatform.pas $ - * $Id: UPlatform.pas 2424 2010-05-28 22:35:34Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UPlatform; diff --git a/src/base/UPlatformLinux.pas b/src/base/UPlatformLinux.pas index cdce2e43..ffbb1bba 100644 --- a/src/base/UPlatformLinux.pas +++ b/src/base/UPlatformLinux.pas @@ -1,28 +1,25 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UPlatformLinux.pas $ - * $Id: UPlatformLinux.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} - + unit UPlatformLinux; interface @@ -78,7 +75,7 @@ procedure TPlatformLinux.Init; * within the game folder. In this case resources (themes, language-files) * reside in the directory of the executable. * - It is global if the game was installed (e.g. to /usr/bin) and - * the resources are in a separate folder (e.g. /usr/share/ultrastardx) + * the resources are in a separate folder (e.g. /usr/share/WorldParty) * which name is stored in the INSTALL_DATADIR constant in paths.inc. * * Sets UseLocalDirs to true if the game is executed locally, false otherwise. @@ -118,7 +115,7 @@ function TPlatformLinux.GetGameUserPath: IPath; if UseLocalDirs then Result := GetExecutionDir() else - Result := GetHomeDir().Append('.ultrastardx', pdAppend); + Result := GetHomeDir().Append('.WorldParty', pdAppend); end; {** diff --git a/src/base/UPlatformMacOSX.pas b/src/base/UPlatformMacOSX.pas index ad1ee81c..927f22bf 100644 --- a/src/base/UPlatformMacOSX.pas +++ b/src/base/UPlatformMacOSX.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UPlatformMacOSX.pas $ - * $Id: UPlatformMacOSX.pas 3018 2013-12-06 21:48:55Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UPlatformMacOSX; diff --git a/src/base/UPlatformWindows.pas b/src/base/UPlatformWindows.pas index 43e54f08..6665f1b0 100644 --- a/src/base/UPlatformWindows.pas +++ b/src/base/UPlatformWindows.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UPlatformWindows.pas $ - * $Id: UPlatformWindows.pas 2344 2010-05-08 15:02:05Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UPlatformWindows; @@ -37,6 +34,7 @@ interface {$WARN SYMBOL_PLATFORM OFF} uses + Windows, Classes, UPlatform, UPath; @@ -57,12 +55,14 @@ TPlatformWindows = class(TPlatform) function GetGameUserPath: IPath; override; end; + function GetConsoleWindow: THandle; stdcall; external kernel32 name 'GetConsoleWindow'; + function HasConsole: Boolean; + implementation uses SysUtils, ShlObj, - Windows, UConfig; procedure TPlatformWindows.Init; @@ -142,7 +142,7 @@ function TPlatformWindows.GetSpecialPath(CSIDL: integer): IPath; * - XP: USDX was installed to %ProgramFiles% and the user is not an admin. * - USDX is started from CD * - Behavior: - * - The config files are in a separate folder (e.g. %APPDATA%\ultrastardx) + * - The config files are in a separate folder (e.g. %APPDATA%\WorldParty) * * On windows, resources (themes, language-files) * reside in the directory of the executable in any case @@ -203,7 +203,12 @@ function TPlatformWindows.GetGameUserPath: IPath; if UseLocalDirs then Result := GetExecutionDir() else - Result := GetSpecialPath(CSIDL_APPDATA).Append('ultrastardx', pdAppend); + Result := GetSpecialPath(CSIDL_APPDATA).Append('WorldParty', pdAppend); +end; + +function HasConsole: Boolean; +begin + Result := GetConsoleWindow <> 0; end; end. diff --git a/src/base/UPlaylist.pas b/src/base/UPlaylist.pas index 8c25fda6..424cc39b 100644 --- a/src/base/UPlaylist.pas +++ b/src/base/UPlaylist.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UPlaylist.pas $ - * $Id: UPlaylist.pas 2199 2010-03-14 20:56:20Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UPlaylist; diff --git a/src/base/URecord.pas b/src/base/URecord.pas index 65132bf4..db902b50 100644 --- a/src/base/URecord.pas +++ b/src/base/URecord.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/URecord.pas $ - * $Id: URecord.pas 2814 2011-04-06 23:31:15Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit URecord; @@ -548,7 +545,7 @@ constructor TAudioInputProcessor.Create; i: integer; begin inherited; - SetLength(Sound, 6 {max players});//Ini.Players+1); + SetLength(Sound, UIni.IMaxPlayerCount); for i := 0 to High(Sound) do Sound[i] := TCaptureBuffer.Create; end; @@ -637,12 +634,10 @@ procedure TAudioInputProcessor.UpdateInputDeviceConfig; end; function TAudioInputProcessor.ValidateSettings: integer; -const - MAX_PLAYER_COUNT = 6; // FIXME: there should be a global variable for this var I, J: integer; PlayerID: integer; - PlayerMap: array [0 .. MAX_PLAYER_COUNT - 1] of boolean; + PlayerMap: array [0 .. UIni.IMaxPlayerCount - 1] of boolean; InputDevice: TAudioInputDevice; InputDeviceCfg: PInputDeviceConfig; begin diff --git a/src/base/URingBuffer.pas b/src/base/URingBuffer.pas index 5288ba30..6522da97 100644 --- a/src/base/URingBuffer.pas +++ b/src/base/URingBuffer.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/URingBuffer.pas $ - * $Id: URingBuffer.pas 1584 2009-02-04 17:45:38Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit URingBuffer; diff --git a/src/base/USingNotes.pas b/src/base/USingNotes.pas deleted file mode 100644 index f2719ae5..00000000 --- a/src/base/USingNotes.pas +++ /dev/null @@ -1,42 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/USingNotes.pas $ - * $Id: USingNotes.pas 1406 2008-09-23 21:43:52Z k-m_schindler $ - *} - -unit USingNotes; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -{ Dummy Unit atm - For further explanation - Placeholder for Class that will handle the Notes Drawing} - -implementation - -end. diff --git a/src/base/USingScores.pas b/src/base/USingScores.pas index fab38596..add41e3b 100644 --- a/src/base/USingScores.pas +++ b/src/base/USingScores.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/USingScores.pas $ - * $Id: USingScores.pas 2293 2010-04-23 22:39:26Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit USingScores; diff --git a/src/base/USkins.pas b/src/base/USkins.pas index bdefe8ba..74ea470e 100644 --- a/src/base/USkins.pas +++ b/src/base/USkins.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/USkins.pas $ - * $Id: USkins.pas 3137 2015-09-14 00:11:19Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit USkins; diff --git a/src/base/USong.pas b/src/base/USong.pas index 4531e6e0..dc3ffa90 100644 --- a/src/base/USong.pas +++ b/src/base/USong.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/USong.pas $ - * $Id: USong.pas 3135 2015-09-12 00:48:54Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit USong; @@ -157,6 +154,7 @@ TSong = class Encoding: TEncoding; PreviewStart: real; // in seconds + HasPreview: boolean; // set if a valid PreviewStart was read CalcMedley: boolean; // if true => do not calc medley for that song Medley: TMedley; // medley params @@ -448,7 +446,7 @@ function TSong.ParseLyricCharParam(const Line: RawByteString; var LinePos: integ LinePos := OldLinePos; raise EUSDXParseException.Create('Character expected'); end - else if (Length(Str) > 1) then + else if (Length(Str) > 1) and (Str[1] <> 'P') then begin Log.LogWarn(Format('"%s" in line %d: %s', [FileName.ToNative, FileLineNo, 'character expected but found "' + Str + '"']), @@ -1251,7 +1249,10 @@ function TSong.ReadTXTHeader(SongFile: TTextFileStream; ReadCustomTags: Boolean) begin self.PreviewStart := StrToFloatI18n( Value ); if (self.PreviewStart>0) then + begin MedleyFlags := MedleyFlags or 1; + HasPreview := true; + end; end // MedleyStartBeat diff --git a/src/base/USongs.pas b/src/base/USongs.pas index cd05cf03..5d59a7bc 100644 --- a/src/base/USongs.pas +++ b/src/base/USongs.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/USongs.pas $ - * $Id: USongs.pas 3103 2014-11-22 23:21:19Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit USongs; @@ -44,7 +41,6 @@ interface Classes, {$IFDEF MSWINDOWS} Windows, - DirWatch, LazUTF8Classes, {$ELSE} {$IFNDEF DARWIN} @@ -95,9 +91,6 @@ TSongs = class(TThread) fNotify, fWatch: longint; fParseSongDirectory: boolean; fProcessing: boolean; - {$ifdef MSWINDOWS} - fDirWatch: TDirectoryWatch; - {$endif} procedure int_LoadSongList; procedure DoDirChanged(Sender: TObject); protected @@ -180,21 +173,6 @@ constructor TSongs.Create(); SongList := TList.Create(); - // FIXME: threaded loading does not work this way. - // It will just cause crashes but nothing else at the moment. -(* - {$ifdef MSWINDOWS} - fDirWatch := TDirectoryWatch.create(nil); - fDirWatch.OnChange := DoDirChanged; - fDirWatch.Directory := SongPath; - fDirWatch.WatchSubDirs := true; - fDirWatch.active := true; - {$ENDIF} - - // now we can start the thread - Resume(); -*) - // until it is fixed, simply load the song-list int_LoadSongList(); end; @@ -302,7 +280,8 @@ procedure TSongs.FindFilesByExtension(const Dir: IPath; const Ext: IPath; Recurs end else begin - if (Ext.Equals(FileName.GetExtension(), true)) then + // do not load files which either have wrong extension or start with a point + if (Ext.Equals(FileName.GetExtension(), true) and not (FileName.ToUTF8()[1] = '.')) then begin SetLength(Files, Length(Files)+1); Files[High(Files)] := Dir.Append(FileName); diff --git a/src/base/UTextEncoding.pas b/src/base/UTextEncoding.pas index 8a165cd4..12690f98 100644 --- a/src/base/UTextEncoding.pas +++ b/src/base/UTextEncoding.pas @@ -1,28 +1,25 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} - + unit UTextEncoding; interface diff --git a/src/base/UTexture.pas b/src/base/UTexture.pas index 703ba1f0..a9849fac 100644 --- a/src/base/UTexture.pas +++ b/src/base/UTexture.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UTexture.pas $ - * $Id: UTexture.pas 3150 2015-10-20 00:07:57Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UTexture; diff --git a/src/base/UThemes.pas b/src/base/UThemes.pas index 22395658..7a65d443 100644 --- a/src/base/UThemes.pas +++ b/src/base/UThemes.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UThemes.pas $ - * $Id: UThemes.pas 3131 2015-09-07 00:11:32Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UThemes; @@ -39,6 +36,7 @@ interface Classes, UCommon, ULog, + UIni, UTexture, UPath; type @@ -66,6 +64,18 @@ TThemeBackground = record Alpha: 1.0 ); + OPTIONS_DESC_INDEX_BACK = 0; + OPTIONS_DESC_INDEX_GAME = 1; + OPTIONS_DESC_INDEX_GRAPHICS = 2; + OPTIONS_DESC_INDEX_SOUND = 3; + OPTIONS_DESC_INDEX_LYRICS = 4; + OPTIONS_DESC_INDEX_THEMES = 5; + OPTIONS_DESC_INDEX_RECORD = 6; + OPTIONS_DESC_INDEX_ADVANCED = 7; + OPTIONS_DESC_INDEX_NETWORK = 8; + OPTIONS_DESC_INDEX_WEBCAM = 9; + OPTIONS_DESC_INDEX_JUKEBOX = 10; + type TThemePosition = record @@ -243,10 +253,9 @@ TThemeMain = class(TThemeBasic) ButtonMulti: TThemeButton; ButtonJukebox: TThemeButton; ButtonStat: TThemeButton; - ButtonEditor: TThemeButton; ButtonOptions: TThemeButton; - ButtonAbout: TThemeButton; ButtonExit: TThemeButton; + ButtonAbout: TThemeButton; TextDescription: TThemeText; TextDescriptionLong: TThemeText; @@ -265,9 +274,9 @@ TThemeName = class(TThemeBasic) PlayerAvatar: TThemeButton; - PlayerSelect: array [0..5] of TThemeStatic; - PlayerSelectText: array [0..5] of TThemeText; - PlayerSelectAvatar: array [0..5] of TThemeStatic; + PlayerSelect: array [0..UIni.IMaxPlayerCount-1] of TThemeStatic; + PlayerSelectText: array [0..UIni.IMaxPlayerCount-1] of TThemeText; + PlayerSelectAvatar: array [0..UIni.IMaxPlayerCount-1] of TThemeStatic; PlayerSelectCurrent: TThemeButton; SelectPlayersCount: TThemeSelectSlide; @@ -275,12 +284,6 @@ TThemeName = class(TThemeBasic) SelectPlayerLevel: TThemeSelectSlide; end; - TThemeLevel = class(TThemeBasic) - ButtonEasy: TThemeButton; - ButtonMedium: TThemeButton; - ButtonHard: TThemeButton; - end; - TThemeSong = class(TThemeBasic) TextArtist: TThemeText; TextTitle: TThemeText; @@ -764,40 +767,38 @@ TThemeScore = class(TThemeBasic) TextArtistTitle: TThemeText; - PlayerStatic: array[1..6] of AThemeStatic; - PlayerTexts: array[1..6] of AThemeText; + PlayerStatic: array[1..UIni.IMaxPlayerCount] of AThemeStatic; + PlayerTexts: array[1..UIni.IMaxPlayerCount] of AThemeText; - TextName: array[1..6] of TThemeText; - TextScore: array[1..6] of TThemeText; + TextName: array[1..UIni.IMaxPlayerCount] of TThemeText; + TextScore: array[1..UIni.IMaxPlayerCount] of TThemeText; - AvatarStatic: array[1..6] of TThemeStatic; + AvatarStatic: array[1..UIni.IMaxPlayerCount] of TThemeStatic; - TextNotes: array[1..6] of TThemeText; - TextNotesScore: array[1..6] of TThemeText; - TextLineBonus: array[1..6] of TThemeText; - TextLineBonusScore: array[1..6] of TThemeText; - TextGoldenNotes: array[1..6] of TThemeText; - TextGoldenNotesScore: array[1..6] of TThemeText; - TextTotal: array[1..6] of TThemeText; - TextTotalScore: array[1..6] of TThemeText; + TextNotes: array[1..UIni.IMaxPlayerCount] of TThemeText; + TextNotesScore: array[1..UIni.IMaxPlayerCount] of TThemeText; + TextLineBonus: array[1..UIni.IMaxPlayerCount] of TThemeText; + TextLineBonusScore: array[1..UIni.IMaxPlayerCount] of TThemeText; + TextGoldenNotes: array[1..UIni.IMaxPlayerCount] of TThemeText; + TextGoldenNotesScore: array[1..UIni.IMaxPlayerCount] of TThemeText; + TextTotal: array[1..UIni.IMaxPlayerCount] of TThemeText; + TextTotalScore: array[1..UIni.IMaxPlayerCount] of TThemeText; - StaticBoxLightest: array[1..6] of TThemeStatic; - StaticBoxLight: array[1..6] of TThemeStatic; - StaticBoxDark: array[1..6] of TThemeStatic; + StaticBoxLightest: array[1..UIni.IMaxPlayerCount] of TThemeStatic; + StaticBoxLight: array[1..UIni.IMaxPlayerCount] of TThemeStatic; + StaticBoxDark: array[1..UIni.IMaxPlayerCount] of TThemeStatic; - StaticRatings: array[1..6] of TThemeStatic; + StaticRatings: array[1..UIni.IMaxPlayerCount] of TThemeStatic; - StaticBackLevel: array[1..6] of TThemeStatic; - StaticBackLevelRound: array[1..6] of TThemeStatic; - StaticLevel: array[1..6] of TThemeStatic; - StaticLevelRound: array[1..6] of TThemeStatic; + StaticBackLevel: array[1..UIni.IMaxPlayerCount] of TThemeStatic; + StaticBackLevelRound: array[1..UIni.IMaxPlayerCount] of TThemeStatic; + StaticLevel: array[1..UIni.IMaxPlayerCount] of TThemeStatic; + StaticLevelRound: array[1..UIni.IMaxPlayerCount] of TThemeStatic; - ButtonSend: array[1..3] of TThemeButton; + ButtonSend: array[1..UIni.IMaxPlayerCount] of TThemeButton; StaticNavigate: TThemeStatic; TextNavigate: TThemeText; - -// Description: array[0..5] of string;} end; TThemeTop5 = class(TThemeBasic) @@ -856,6 +857,7 @@ TThemeOptionsSound = class(TThemeBasic) SelectSlidePreviewVolume: TThemeSelectSlide; SelectSlidePreviewFading: TThemeSelectSlide; SelectSlideVoicePassthrough: TThemeSelectSlide; + SelectSlideMusicAutoGain: TThemeSelectSlide; ButtonExit: TThemeButton; end; @@ -887,7 +889,7 @@ TThemeOptionsAdvanced = class(TThemeBasic) SelectLoadAnimation: TThemeSelectSlide; SelectEffectSing: TThemeSelectSlide; SelectScreenFade: TThemeSelectSlide; - SelectLineBonus: TThemeSelectSlide; + SelectJoypad: TThemeSelectSlide; SelectAskbeforeDel: TThemeSelectSlide; SelectOnSongClick: TThemeSelectSlide; SelectPartyPopup: TThemeSelectSlide; @@ -1247,12 +1249,20 @@ TThemePartyTournamentWin = class(TThemeBasic) //About TThemeAboutMain = class(TThemeBasic) + ButtonDevelopers: TThemeButton; ButtonCredits: TThemeButton; ButtonExit: TThemeButton; TextOverview: TThemeText; end; + //Developers + TThemeDevelopers = class(TThemeBasic) + ButtonExit: TThemeButton; + + TextOverview: TThemeText; + end; + //Stats Screens TThemeStatMain = class(TThemeBasic) ButtonScores: TThemeButton; @@ -1308,7 +1318,6 @@ TTheme = class Loading: TThemeLoading; Main: TThemeMain; Name: TThemeName; - Level: TThemeLevel; Song: TThemeSong; Sing: TThemeSing; LyricBar: TThemeLyricBar; @@ -1358,6 +1367,7 @@ TTheme = class // About AboutMain: TThemeAboutMain; + Developers: TThemeDevelopers; //Stats Screens: StatMain: TThemeStatMain; @@ -1442,7 +1452,6 @@ implementation uses ULanguage, USkins, - UIni, UPathUtils, UFileSystem, TextGL, @@ -1480,7 +1489,6 @@ constructor TTheme.Create; Loading := TThemeLoading.Create; Main := TThemeMain.Create; Name := TThemeName.Create; - Level := TThemeLevel.Create; Song := TThemeSong.Create; Sing := TThemeSing.Create; Score := TThemeScore.Create; @@ -1508,6 +1516,7 @@ constructor TTheme.Create; SongMenu := TThemeSongMenu.Create; SongJumpto := TThemeSongJumpto.Create; + //Party Screens PartyNewRound := TThemePartyNewRound.Create; PartyWin := TThemePartyWin.Create; @@ -1524,7 +1533,8 @@ constructor TTheme.Create; // About AboutMain := TThemeAboutMain.Create; - + Developers := TThemeDevelopers.Create; + //Stats Screens: StatMain := TThemeStatMain.Create; StatDetail := TThemeStatDetail.Create; @@ -1650,7 +1660,6 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; // Loading ThemeLoadBasic(Loading, 'Loading'); ThemeLoadText(Loading.TextLoading, 'LoadingTextLoading'); - ThemeLoadStatic(Loading.StaticAnimation, 'LoadingStaticAnimation'); // Main ThemeLoadBasic(Main, 'Main'); @@ -1661,10 +1670,9 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; ThemeLoadButton(Main.ButtonMulti, 'MainButtonMulti'); ThemeLoadButton(Main.ButtonJukebox, 'MainButtonJukebox'); ThemeLoadButton(Main.ButtonStat, 'MainButtonStats'); - ThemeLoadButton(Main.ButtonEditor, 'MainButtonEditor'); ThemeLoadButton(Main.ButtonOptions, 'MainButtonOptions'); - ThemeLoadButton(Main.ButtonAbout, 'MainButtonAbout'); ThemeLoadButton(Main.ButtonExit, 'MainButtonExit'); + ThemeLoadButton(Main.ButtonAbout, 'MainButtonAbout'); //Main Desc Text Translation Start @@ -1676,14 +1684,12 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; Main.DescriptionLong[2] := Language.Translate('SING_JUKEBOX_DESC'); Main.Description[3] := Language.Translate('SING_STATS'); Main.DescriptionLong[3] := Language.Translate('SING_STATS_DESC'); - Main.Description[4] := Language.Translate('SING_EDITOR'); - Main.DescriptionLong[4] := Language.Translate('SING_EDITOR_DESC'); - Main.Description[5] := Language.Translate('SING_GAME_OPTIONS'); - Main.DescriptionLong[5] := Language.Translate('SING_GAME_OPTIONS_DESC'); + Main.Description[4] := Language.Translate('SING_GAME_OPTIONS'); + Main.DescriptionLong[4] := Language.Translate('SING_GAME_OPTIONS_DESC'); + Main.Description[5] := Language.Translate('SING_EXIT'); + Main.DescriptionLong[5] := Language.Translate('SING_EXIT_DESC'); Main.Description[6] := Language.Translate('SING_ABOUT'); - Main.DescriptionLong[6] := Language.Translate('SING_ABOUT_DESC'); - Main.Description[7] := Language.Translate('SING_EXIT'); - Main.DescriptionLong[7] := Language.Translate('SING_EXIT_DESC'); + Main.DescriptionLong[6] := Language.Translate('SING_ABOUT_DESC'); //Main Desc Text Translation End @@ -1705,22 +1711,15 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; ThemeLoadSelectSlide(Name.SelectPlayerColor, 'NameSelectPlayerColor'); ThemeLoadSelectSlide(Name.SelectPlayerLevel, 'NameSelectPlayerLevel'); - for I := 0 to 5 do + for I := 0 to UIni.IMaxPlayerCount-1 do begin - ThemeLoadStatic(Name.PlayerSelect[I], 'NamePlayerSelectStatic' + IntToStr(I + 1)); - ThemeLoadText(Name.PlayerSelectText[I], 'NamePlayerSelectStatic' + IntToStr(I + 1) + 'Text'); - ThemeLoadStatic(Name.PlayerSelectAvatar[I], 'NamePlayerSelectStatic' + IntToStr(I + 1) + 'Avatar'); + ThemeLoadStatic(Name.PlayerSelect[I], 'NamePlayerSelectStatic' + IntToStr((I + 1))); + ThemeLoadText(Name.PlayerSelectText[I], 'NamePlayerSelectStatic' + IntToStr((I + 1)) + 'Text'); + ThemeLoadStatic(Name.PlayerSelectAvatar[I], 'NamePlayerSelectStatic' + IntToStr((I + 1)) + 'Avatar'); end; ThemeLoadButton(Name.PlayerSelectCurrent, 'NamePlayerSelectCurrent'); - // Level - ThemeLoadBasic(Level, 'Level'); - - ThemeLoadButton(Level.ButtonEasy, 'LevelButtonEasy'); - ThemeLoadButton(Level.ButtonMedium, 'LevelButtonMedium'); - ThemeLoadButton(Level.ButtonHard, 'LevelButtonHard'); - //Song ThemeSongLoad(); @@ -2185,6 +2184,7 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; ThemeLoadButton(Options.ButtonGame, 'OptionsButtonGame'); ThemeLoadButton(Options.ButtonGraphics, 'OptionsButtonGraphics'); ThemeLoadButton(Options.ButtonSound, 'OptionsButtonSound'); + ThemeLoadButton(Options.ButtonLyrics, 'OptionsButtonLyrics'); ThemeLoadButton(Options.ButtonThemes, 'OptionsButtonThemes'); ThemeLoadButton(Options.ButtonRecord, 'OptionsButtonRecord'); @@ -2194,20 +2194,21 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; ThemeLoadButton(Options.ButtonJukebox, 'OptionsButtonJukebox'); ThemeLoadButton(Options.ButtonExit, 'OptionsButtonExit'); - Options.Description[0] := Language.Translate('SING_OPTIONS_GAME_DESC'); - Options.Description[1] := Language.Translate('SING_OPTIONS_GRAPHICS_DESC'); - Options.Description[2] := Language.Translate('SING_OPTIONS_SOUND_DESC'); - Options.Description[3] := Language.Translate('SING_OPTIONS_LYRICS_DESC'); - Options.Description[4] := Language.Translate('SING_OPTIONS_THEMES_DESC'); - Options.Description[5] := Language.Translate('SING_OPTIONS_RECORD_DESC'); - Options.Description[6] := Language.Translate('SING_OPTIONS_ADVANCED_DESC'); - Options.Description[7] := Language.Translate('SING_OPTIONS_NETWORK_DESC'); - Options.Description[8] := Language.Translate('SING_OPTIONS_WEBCAM_DESC'); - Options.Description[9] := Language.Translate('SING_OPTIONS_JUKEBOX_DESC'); - Options.Description[10] := Language.Translate('SING_OPTIONS_EXIT'); + // Note: always update the indexes constant on top of this unit when changing the order (see OPTIONS_DESC_INDEX_*) + Options.Description[OPTIONS_DESC_INDEX_BACK] := Language.Translate('SING_OPTIONS_EXIT'); + Options.Description[OPTIONS_DESC_INDEX_GAME] := Language.Translate('SING_OPTIONS_GAME_DESC'); + Options.Description[OPTIONS_DESC_INDEX_GRAPHICS] := Language.Translate('SING_OPTIONS_GRAPHICS_DESC'); + Options.Description[OPTIONS_DESC_INDEX_SOUND] := Language.Translate('SING_OPTIONS_SOUND_DESC'); + Options.Description[OPTIONS_DESC_INDEX_LYRICS] := Language.Translate('SING_OPTIONS_LYRICS_DESC'); + Options.Description[OPTIONS_DESC_INDEX_THEMES] := Language.Translate('SING_OPTIONS_THEMES_DESC'); + Options.Description[OPTIONS_DESC_INDEX_RECORD] := Language.Translate('SING_OPTIONS_RECORD_DESC'); + Options.Description[OPTIONS_DESC_INDEX_ADVANCED] := Language.Translate('SING_OPTIONS_ADVANCED_DESC'); + Options.Description[OPTIONS_DESC_INDEX_NETWORK] := Language.Translate('SING_OPTIONS_NETWORK_DESC'); + Options.Description[OPTIONS_DESC_INDEX_WEBCAM] := Language.Translate('SING_OPTIONS_WEBCAM_DESC'); + Options.Description[OPTIONS_DESC_INDEX_JUKEBOX] := Language.Translate('SING_OPTIONS_JUKEBOX_DESC'); ThemeLoadText(Options.TextDescription, 'OptionsTextDescription'); - Options.TextDescription.Text := Options.Description[0]; + Options.TextDescription.Text := Options.Description[OPTIONS_DESC_INDEX_GAME]; // Select default first menu button 'Game' // Options Game ThemeLoadBasic(OptionsGame, 'OptionsGame'); @@ -2236,14 +2237,13 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; ThemeLoadBasic(OptionsSound, 'OptionsSound'); ThemeLoadSelectSlide(OptionsSound.SelectBackgroundMusic, 'OptionsSoundSelectBackgroundMusic'); - //ThemeLoadSelectSlide(OptionsSound.SelectMicBoost, 'OptionsSoundSelectMicBoost'); ThemeLoadSelectSlide(OptionsSound.SelectClickAssist, 'OptionsSoundSelectClickAssist'); ThemeLoadSelectSlide(OptionsSound.SelectBeatClick, 'OptionsSoundSelectBeatClick'); - //ThemeLoadSelectSlide(OptionsSound.SelectThreshold, 'OptionsSoundSelectThreshold'); //Song Preview ThemeLoadSelectSlide(OptionsSound.SelectSlidePreviewVolume, 'OptionsSoundSelectSlidePreviewVolume'); ThemeLoadSelectSlide(OptionsSound.SelectSlidePreviewFading, 'OptionsSoundSelectSlidePreviewFading'); ThemeLoadSelectSlide(OptionsSound.SelectSlideVoicePassthrough, 'OptionsSoundSelectVoicePassthrough'); + ThemeLoadSelectSlide(OptionsSound.SelectSlideMusicAutoGain, 'OptionsSoundSelectSlideMusicAutoGain'); ThemeLoadButton(OptionsSound.ButtonExit, 'OptionsSoundButtonExit'); @@ -2270,8 +2270,8 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; ThemeLoadSelectSlide(OptionsRecord.SelectSlideCard, 'OptionsRecordSelectSlideCard'); ThemeLoadSelectSlide(OptionsRecord.SelectSlideInput, 'OptionsRecordSelectSlideInput'); ThemeLoadSelectSlide(OptionsRecord.SelectSlideChannel, 'OptionsRecordSelectSlideChannel'); - ThemeLoadSelectSlide(OptionsRecord.SelectThreshold, 'OptionsSoundSelectThreshold'); //basisbit TODO - ThemeLoadSelectSlide(OptionsRecord.SelectMicBoost, 'OptionsSoundSelectMicBoost'); + ThemeLoadSelectSlide(OptionsRecord.SelectThreshold, 'OptionsRecordSelectThreshold'); + ThemeLoadSelectSlide(OptionsRecord.SelectMicBoost, 'OptionsRecordSelectMicBoost'); ThemeLoadButton(OptionsRecord.ButtonExit, 'OptionsRecordButtonExit'); //Options Advanced @@ -2280,7 +2280,7 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; ThemeLoadSelectSlide(OptionsAdvanced.SelectLoadAnimation, 'OptionsAdvancedSelectLoadAnimation'); ThemeLoadSelectSlide(OptionsAdvanced.SelectScreenFade, 'OptionsAdvancedSelectScreenFade'); ThemeLoadSelectSlide(OptionsAdvanced.SelectEffectSing, 'OptionsAdvancedSelectEffectSing'); - ThemeLoadSelectSlide(OptionsAdvanced.SelectLineBonus, 'OptionsAdvancedSelectLineBonus'); + ThemeLoadSelectSlide(OptionsAdvanced.SelectJoypad, 'OptionsAdvancedSelectJoypad'); ThemeLoadSelectSlide(OptionsAdvanced.SelectOnSongClick, 'OptionsAdvancedSelectSlideOnSongClick'); ThemeLoadSelectSlide(OptionsAdvanced.SelectAskbeforeDel, 'OptionsAdvancedSelectAskbeforeDel'); ThemeLoadSelectSlide(OptionsAdvanced.SelectPartyPopup, 'OptionsAdvancedSelectPartyPopup'); @@ -2561,9 +2561,14 @@ function TTheme.LoadTheme(ThemeNum: integer; sColor: integer): boolean; // About ThemeLoadBasic(AboutMain, 'AboutMain'); + ThemeLoadButton(AboutMain.ButtonDevelopers, 'AboutMainButtonDevelopers'); ThemeLoadButton(AboutMain.ButtonCredits, 'AboutMainButtonCredits'); ThemeLoadButton(AboutMain.ButtonExit, 'AboutMainButtonExit'); ThemeLoadText (AboutMain.TextOverview, 'AboutMainTextOverview'); + + ThemeLoadBasic(Developers, 'Developers'); + ThemeLoadButton(Developers.ButtonExit, 'DevelopersButtonExit'); + ThemeLoadText (Developers.TextOverview, 'DevelopersTextOverview'); // Stats ThemeLoadBasic(StatMain, 'StatMain'); @@ -3843,7 +3848,6 @@ procedure TTheme.ThemeSave(const FileName: string); ThemeSaveText(Main.TextDescriptionLong, 'MainTextDescriptionLong'); ThemeSaveButton(Main.ButtonSolo, 'MainButtonSolo'); - ThemeSaveButton(Main.ButtonEditor, 'MainButtonEditor'); ThemeSaveButton(Main.ButtonOptions, 'MainButtonOptions'); ThemeSaveButton(Main.ButtonExit, 'MainButtonExit'); @@ -3851,11 +3855,6 @@ procedure TTheme.ThemeSave(const FileName: string); //ThemeSaveButton(Name.PlayerName, 'NameButtonPlayer'); - ThemeSaveBasic(Level, 'Level'); - ThemeSaveButton(Level.ButtonEasy, 'LevelButtonEasy'); - ThemeSaveButton(Level.ButtonMedium, 'LevelButtonMedium'); - ThemeSaveButton(Level.ButtonHard, 'LevelButtonHard'); - ThemeSaveBasic(Song, 'Song'); ThemeSaveText(Song.TextArtist, 'SongTextArtist'); ThemeSaveText(Song.TextTitle, 'SongTextTitle'); @@ -4440,9 +4439,6 @@ procedure TTheme.CreateThemeObjects(); freeandnil(Name); Name := TThemeName.Create; - freeandnil(Level); - Level := TThemeLevel.Create; - freeandnil(Song); Song := TThemeSong.Create; @@ -4457,6 +4453,9 @@ procedure TTheme.CreateThemeObjects(); freeandnil(AboutMain); AboutMain := TThemeAboutMain.Create; + + freeandnil(Developers); + Developers := TThemeDevelopers.Create; freeandnil(Score); Score := TThemeScore.Create; diff --git a/src/base/UTime.pas b/src/base/UTime.pas index 746be25a..534c778e 100644 --- a/src/base/UTime.pas +++ b/src/base/UTime.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/base/UTime.pas $ - * $Id: UTime.pas 3103 2014-11-22 23:21:19Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UTime; diff --git a/src/base/UUnicodeUtils.pas b/src/base/UUnicodeUtils.pas index 750bd28e..fcb9194d 100644 --- a/src/base/UUnicodeUtils.pas +++ b/src/base/UUnicodeUtils.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UUnicodeUtils; diff --git a/src/base/UWebcam.pas b/src/base/UWebcam.pas index 2249af4c..79038596 100644 --- a/src/base/UWebcam.pas +++ b/src/base/UWebcam.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UPlaylist.pas $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UWebcam; diff --git a/src/base/UXMLSong.pas b/src/base/UXMLSong.pas index a8080c68..30988228 100644 --- a/src/base/UXMLSong.pas +++ b/src/base/UXMLSong.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/base/UXMLSong.pas $ - * $Id: UXMLSong.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UXMLSong; diff --git a/src/base/uunicodestringhelper.pas b/src/base/uunicodestringhelper.pas index d798243e..ff805cb9 100644 --- a/src/base/uunicodestringhelper.pas +++ b/src/base/uunicodestringhelper.pas @@ -1,3 +1,25 @@ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} + unit UUnicodeStringHelper; {$mode objfpc} diff --git a/src/config-darwin.inc b/src/config-darwin.inc index b3a942f8..f77fd3cc 100644 --- a/src/config-darwin.inc +++ b/src/config-darwin.inc @@ -1,7 +1,4 @@ -{***************************************************************** - * Configuration file for ultrastardx 1.1 - * src/config-darwin.inc. Generated from config.inc.in by configure. - *****************************************************************} + {* Libraries *} diff --git a/src/config-win.inc b/src/config-win.inc index 4527550e..a5087055 100644 --- a/src/config-win.inc +++ b/src/config-win.inc @@ -1,6 +1,24 @@ -{***************************************************************** - * Configuration file for UltraStar Deluxe 1.3 - *****************************************************************} +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} {* Libraries *} @@ -14,12 +32,12 @@ {$IFEND} {$DEFINE HaveFFmpeg} -//the required DLLs can be downloaded here: https://ffmpeg.zeranoe.com/builds/win32/shared/ffmpeg-20150814-git-affbecb-win32-shared.7z +//the required DLLs can be downloaded here: https://ffmpeg.zeranoe.com/builds/win32/shared/ {$IF Defined(HaveFFmpeg)} {$MACRO ON} {$IFNDEF FFMPEG_DIR} {$IF (4 > 0) or (2 > 0)} - {$DEFINE FFMPEG_DIR := 'ffmpeg-2.8'} + {$DEFINE FFMPEG_DIR := 'ffmpeg-3.1'} {$DEFINE FF_API_OLD_DECODE_AUDIO} {$ELSE} {$DEFINE FFMPEG_DIR := 'ffmpeg'} @@ -27,30 +45,38 @@ {$IFEND} {$ENDIF} {$IF Defined(IncludeConstants)} - FFMPEG_VERSION_INT = 2008000; - av__codec = 'avcodec-56'; - LIBAVCODEC_VERSION_MAJOR = 56; - LIBAVCODEC_VERSION_MINOR = 60; - LIBAVCODEC_VERSION_RELEASE = 100; + FFMPEG_VERSION_INT = 3001000; + av__codec = 'avcodec-57'; + LIBAVCODEC_VERSION_MAJOR = 57; + LIBAVCODEC_VERSION_MINOR = 48; + LIBAVCODEC_VERSION_RELEASE = 101; - av__format = 'avformat-56'; - LIBAVFORMAT_VERSION_MAJOR = 56; - LIBAVFORMAT_VERSION_MINOR = 40; - LIBAVFORMAT_VERSION_RELEASE = 101; + av__format = 'avformat-57'; + LIBAVFORMAT_VERSION_MAJOR = 57; + LIBAVFORMAT_VERSION_MINOR = 41; + LIBAVFORMAT_VERSION_RELEASE = 100; - av__util = 'avutil-54'; - LIBAVUTIL_VERSION_MAJOR = 54; - LIBAVUTIL_VERSION_MINOR = 31; + av__util = 'avutil-55'; + LIBAVUTIL_VERSION_MAJOR = 55; + LIBAVUTIL_VERSION_MINOR = 28; LIBAVUTIL_VERSION_RELEASE = 100; {$IFEND} {$IFEND} +{$DEFINE HaveSWResample} +{$IF Defined(HaveSWScale) and Defined(IncludeConstants)} + sw__resample = 'swresample-2'; + LIBSWRESAMPLE_VERSION_MAJOR = 2; + LIBSWRESAMPLE_VERSION_MINOR = 1; + LIBSWRESAMPLE_VERSION_RELEASE = 100; +{$IFEND} + {$DEFINE HaveSWScale} {$IF Defined(HaveSWScale) and Defined(IncludeConstants)} - sw__scale = 'swscale-3'; - LIBSWSCALE_VERSION_MAJOR = 3; + sw__scale = 'swscale-4'; + LIBSWSCALE_VERSION_MAJOR = 4; LIBSWSCALE_VERSION_MINOR = 1; - LIBSWSCALE_VERSION_RELEASE = 101; + LIBSWSCALE_VERSION_RELEASE = 100; {$IFEND} {$DEFINE HaveProjectM} diff --git a/src/config.inc.in b/src/config.inc.in index 6654029c..99b8df82 100644 --- a/src/config.inc.in +++ b/src/config.inc.in @@ -1,3 +1,25 @@ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} + {***************************************************************** * Configuration file for @PACKAGE_STRING@ * @configure_input@ @@ -54,6 +76,15 @@ LIBSWSCALE_VERSION_RELEASE = @libswscale_VERSION_RELEASE@; {$IFEND} +{* libswresample was introduced with FFmpeg 0.9 *} +{$@DEFINE_HAVE_SWRESAMPLE@ HaveSWResample} +{$IF Defined(HaveSWResample) and Defined(IncludeConstants)} + sw__resample = 'libswresample'; + LIBSWRESAMPLE_VERSION_MAJOR = @libswresample_VERSION_MAJOR@; + LIBSWRESAMPLE_VERSION_MINOR = @libswresample_VERSION_MINOR@; + LIBSWRESAMPLE_VERSION_RELEASE = @libswresample_VERSION_RELEASE@; +{$IFEND} + {$@DEFINE_HAVE_PROJECTM@ HaveProjectM} {$IF Defined(HaveProjectM) and Defined(IncludeConstants)} ProjectM_DataDir = '@libprojectM_DATADIR@'; diff --git a/src/encoding/Auto.inc b/src/encoding/Auto.inc index 0bfa52cf..4b453976 100644 --- a/src/encoding/Auto.inc +++ b/src/encoding/Auto.inc @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} // Auto diff --git a/src/encoding/CP1250.inc b/src/encoding/CP1250.inc index 5628156e..dd84c87f 100644 --- a/src/encoding/CP1250.inc +++ b/src/encoding/CP1250.inc @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} {* diff --git a/src/encoding/CP1252.inc b/src/encoding/CP1252.inc index f7d3f8ea..fb5cc764 100644 --- a/src/encoding/CP1252.inc +++ b/src/encoding/CP1252.inc @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} {* diff --git a/src/encoding/Locale.inc b/src/encoding/Locale.inc index a3cdcebc..b21c191d 100644 --- a/src/encoding/Locale.inc +++ b/src/encoding/Locale.inc @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} {* diff --git a/src/encoding/UTF8.inc b/src/encoding/UTF8.inc index 43eacfbd..131b04ee 100644 --- a/src/encoding/UTF8.inc +++ b/src/encoding/UTF8.inc @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} {* diff --git a/src/lib/OpenGL/glext.pas b/src/lib/OpenGL/glext.pas deleted file mode 100644 index ed54bafe..00000000 --- a/src/lib/OpenGL/glext.pas +++ /dev/null @@ -1,9576 +0,0 @@ -unit glext; -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} -{ - $Id: glext.pas,v 1.6 2007/05/20 20:28:31 savage Exp $ - -} -(************************************************** - * OpenGL extension loading library * - * Generated by MetaGLext, written by Tom Nuydens * - * (tom@delphi3d.net -- http://www.delphi3d.net * - **************************************************) - -{ - $Log: glext.pas,v $ - Revision 1.6 2007/05/20 20:28:31 savage - Initial Changes to Handle 64 Bits - - Revision 1.5 2006/01/11 22:39:02 drellis - Updated to Support Up to OpenGL 2.0 - - Revision 1.4 2005/01/05 00:28:40 savage - Forgot to wrap a couple of Load_WGL function calls with an IFDEF WIN32. Fixed so now compiles under Linux as well. - - Revision 1.3 2004/08/24 19:33:06 savage - Removed declarations of SDL_GL_GetProcAddress as the correct ones are in sdl.pas. - - Revision 1.2 2004/08/09 00:38:01 savage - Updated to Tom's latest version. May contains bugs, but I hope not. - - Revision 1.1 2004/03/30 21:53:54 savage - Moved to it's own folder. - - Revision 1.6 2004/03/28 00:28:43 savage - Fixed some glSecondaryColor definitions... - - Revision 1.5 2004/02/20 17:18:16 savage - Forgot to prefix function pointer with @ for FPC and other Pascal compilers. - - Revision 1.4 2004/02/20 17:09:55 savage - Code tidied up in gl, glu and glut, while extensions in glext.pas are now loaded using SDL_GL_GetProcAddress, thus making it more cross-platform compatible, but now more tied to SDL. - - Revision 1.3 2004/02/14 22:36:29 savage - Fixed inconsistencies of using LoadLibrary and LoadModule. - Now all units make use of LoadModule rather than LoadLibrary and other dynamic proc procedures. - - Revision 1.2 2004/02/14 00:09:19 savage - Changed uses to now make use of moduleloader.pas rather than dllfuncs.pas - - Revision 1.1 2004/02/05 00:08:19 savage - Module 1.0 release - - Revision 1.7 2003/06/02 12:32:13 savage - Modified Sources to avoid warnings with Delphi by moving CVS Logging to the top of the header files. Hopefully CVS Logging still works. - -} - -interface - - -uses - SysUtils, -{$IFDEF __GPC__} - gpc, -{$ENDIF} - -{$IFDEF WINDOWS} - Windows, -{$ENDIF} - //moduleloader, - gl; - -// Test if the given extension name is present in the given extension string. -function glext_ExtensionSupported(const extension: PChar; const searchIn: PChar): Boolean; - -// Load a Specific Extension -function glext_LoadExtension(ext: String): Boolean; -// Some types that were introduced by extensions: -type - GLintptrARB = Integer; - PGLintptrARB = ^GLintptrARB; - - GLsizeiptrARB = Integer; - PGLsizeiptrARB = ^GLsizeiptrARB; - - GLcharARB = Char; - PGLcharARB = ^GLcharARB; - - GLhandleARB = Cardinal; - PGLhandleARB = ^GLhandleARB; - - GLintptr = Integer; - PGLintptr = ^GLintptr; - - GLsizeiptr = Integer; - PGLsizeiptr = ^GLsizeiptr; - - GLchar = Char; - PGLchar = ^GLchar; - -//***** GL_version_1_2 *****// -const - GL_UNSIGNED_BYTE_3_3_2 = $8032; - GL_UNSIGNED_SHORT_4_4_4_4 = $8033; - GL_UNSIGNED_SHORT_5_5_5_1 = $8034; - GL_UNSIGNED_INT_8_8_8_8 = $8035; - GL_UNSIGNED_INT_10_10_10_2 = $8036; - GL_RESCALE_NORMAL = $803A; - GL_UNSIGNED_BYTE_2_3_3_REV = $8362; - GL_UNSIGNED_SHORT_5_6_5 = $8363; - GL_UNSIGNED_SHORT_5_6_5_REV = $8364; - GL_UNSIGNED_SHORT_4_4_4_4_REV = $8365; - GL_UNSIGNED_SHORT_1_5_5_5_REV = $8366; - GL_UNSIGNED_INT_8_8_8_8_REV = $8367; - GL_UNSIGNED_INT_2_10_10_10_REV = $8368; - GL_BGR = $80E0; - GL_BGRA = $80E1; - GL_MAX_ELEMENTS_VERTICES = $80E8; - GL_MAX_ELEMENTS_INDICES = $80E9; - GL_CLAMP_TO_EDGE = $812F; - GL_TEXTURE_MIN_LOD = $813A; - GL_TEXTURE_MAX_LOD = $813B; - GL_TEXTURE_BASE_LEVEL = $813C; - GL_TEXTURE_MAX_LEVEL = $813D; - GL_LIGHT_MODEL_COLOR_CONTROL = $81F8; - GL_SINGLE_COLOR = $81F9; - GL_SEPARATE_SPECULAR_COLOR = $81FA; - GL_SMOOTH_POINT_SIZE_RANGE = $0B12; - GL_SMOOTH_POINT_SIZE_GRANULARITY = $0B13; - GL_SMOOTH_LINE_WIDTH_RANGE = $0B22; - GL_SMOOTH_LINE_WIDTH_GRANULARITY = $0B23; - GL_ALIASED_POINT_SIZE_RANGE = $846D; - GL_ALIASED_LINE_WIDTH_RANGE = $846E; - GL_PACK_SKIP_IMAGES = $806B; - GL_PACK_IMAGE_HEIGHT = $806C; - GL_UNPACK_SKIP_IMAGES = $806D; - GL_UNPACK_IMAGE_HEIGHT = $806E; - GL_TEXTURE_3D = $806F; - GL_PROXY_TEXTURE_3D = $8070; - GL_TEXTURE_DEPTH = $8071; - GL_TEXTURE_WRAP_R = $8072; - GL_MAX_3D_TEXTURE_SIZE = $8073; -var - glDrawRangeElements: procedure(mode: GLenum; start: GLuint; _end: GLuint; count: GLsizei; _type: GLenum; const indices: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexImage3D: procedure(target: GLenum; level: GLint; internalformat: GLint; width: GLsizei; height: GLsizei; depth: GLsizei; border: GLint; format: GLenum; _type: GLenum; const pixels: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexSubImage3D: procedure(target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; width: GLsizei; height: GLsizei; depth: GLsizei; format: GLenum; _type: GLenum; const pixels: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyTexSubImage3D: procedure(target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; x: GLint; y: GLint; width: GLsizei; height: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_version_1_2: Boolean; - -//***** GL_ARB_imaging *****// -const - GL_CONSTANT_COLOR = $8001; - GL_ONE_MINUS_CONSTANT_COLOR = $8002; - GL_CONSTANT_ALPHA = $8003; - GL_ONE_MINUS_CONSTANT_ALPHA = $8004; - GL_BLEND_COLOR = $8005; - GL_FUNC_ADD = $8006; - GL_MIN = $8007; - GL_MAX = $8008; - GL_BLEND_EQUATION = $8009; - GL_FUNC_SUBTRACT = $800A; - GL_FUNC_REVERSE_SUBTRACT = $800B; - GL_CONVOLUTION_1D = $8010; - GL_CONVOLUTION_2D = $8011; - GL_SEPARABLE_2D = $8012; - GL_CONVOLUTION_BORDER_MODE = $8013; - GL_CONVOLUTION_FILTER_SCALE = $8014; - GL_CONVOLUTION_FILTER_BIAS = $8015; - GL_REDUCE = $8016; - GL_CONVOLUTION_FORMAT = $8017; - GL_CONVOLUTION_WIDTH = $8018; - GL_CONVOLUTION_HEIGHT = $8019; - GL_MAX_CONVOLUTION_WIDTH = $801A; - GL_MAX_CONVOLUTION_HEIGHT = $801B; - GL_POST_CONVOLUTION_RED_SCALE = $801C; - GL_POST_CONVOLUTION_GREEN_SCALE = $801D; - GL_POST_CONVOLUTION_BLUE_SCALE = $801E; - GL_POST_CONVOLUTION_ALPHA_SCALE = $801F; - GL_POST_CONVOLUTION_RED_BIAS = $8020; - GL_POST_CONVOLUTION_GREEN_BIAS = $8021; - GL_POST_CONVOLUTION_BLUE_BIAS = $8022; - GL_POST_CONVOLUTION_ALPHA_BIAS = $8023; - GL_HISTOGRAM = $8024; - GL_PROXY_HISTOGRAM = $8025; - GL_HISTOGRAM_WIDTH = $8026; - GL_HISTOGRAM_FORMAT = $8027; - GL_HISTOGRAM_RED_SIZE = $8028; - GL_HISTOGRAM_GREEN_SIZE = $8029; - GL_HISTOGRAM_BLUE_SIZE = $802A; - GL_HISTOGRAM_ALPHA_SIZE = $802B; - GL_HISTOGRAM_LUMINANCE_SIZE = $802C; - GL_HISTOGRAM_SINK = $802D; - GL_MINMAX = $802E; - GL_MINMAX_FORMAT = $802F; - GL_MINMAX_SINK = $8030; - GL_TABLE_TOO_LARGE = $8031; - GL_COLOR_MATRIX = $80B1; - GL_COLOR_MATRIX_STACK_DEPTH = $80B2; - GL_MAX_COLOR_MATRIX_STACK_DEPTH = $80B3; - GL_POST_COLOR_MATRIX_RED_SCALE = $80B4; - GL_POST_COLOR_MATRIX_GREEN_SCALE = $80B5; - GL_POST_COLOR_MATRIX_BLUE_SCALE = $80B6; - GL_POST_COLOR_MATRIX_ALPHA_SCALE = $80B7; - GL_POST_COLOR_MATRIX_RED_BIAS = $80B8; - GL_POST_COLOR_MATRIX_GREEN_BIAS = $80B9; - GL_POST_COLOR_MATRIX_BLUE_BIAS = $80BA; - GL_POST_COLOR_MATIX_ALPHA_BIAS = $80BB; - GL_COLOR_TABLE = $80D0; - GL_POST_CONVOLUTION_COLOR_TABLE = $80D1; - GL_POST_COLOR_MATRIX_COLOR_TABLE = $80D2; - GL_PROXY_COLOR_TABLE = $80D3; - GL_PROXY_POST_CONVOLUTION_COLOR_TABLE = $80D4; - GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE = $80D5; - GL_COLOR_TABLE_SCALE = $80D6; - GL_COLOR_TABLE_BIAS = $80D7; - GL_COLOR_TABLE_FORMAT = $80D8; - GL_COLOR_TABLE_WIDTH = $80D9; - GL_COLOR_TABLE_RED_SIZE = $80DA; - GL_COLOR_TABLE_GREEN_SIZE = $80DB; - GL_COLOR_TABLE_BLUE_SIZE = $80DC; - GL_COLOR_TABLE_ALPHA_SIZE = $80DD; - GL_COLOR_TABLE_LUMINANCE_SIZE = $80DE; - GL_COLOR_TABLE_INTENSITY_SIZE = $80DF; - GL_IGNORE_BORDER = $8150; - GL_CONSTANT_BORDER = $8151; - GL_WRAP_BORDER = $8152; - GL_REPLICATE_BORDER = $8153; - GL_CONVOLUTION_BORDER_COLOR = $8154; -var - glColorTable: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; format: GLenum; _type: GLenum; const table: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorTableParameterfv: procedure(target: GLenum; pname: GLenum; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorTableParameteriv: procedure(target: GLenum; pname: GLenum; const params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyColorTable: procedure(target: GLenum; internalformat: GLenum; x: GLint; y: GLint; width: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetColorTable: procedure(target: GLenum; format: GLenum; _type: GLenum; table: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetColorTableParameterfv: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetColorTableParameteriv: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorSubTable: procedure(target: GLenum; start: GLsizei; count: GLsizei; format: GLenum; _type: GLenum; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyColorSubTable: procedure(target: GLenum; start: GLsizei; x: GLint; y: GLint; width: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionFilter1D: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; format: GLenum; _type: GLenum; const image: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionFilter2D: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum; const image: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionParameterf: procedure(target: GLenum; pname: GLenum; params: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionParameterfv: procedure(target: GLenum; pname: GLenum; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionParameteri: procedure(target: GLenum; pname: GLenum; params: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionParameteriv: procedure(target: GLenum; pname: GLenum; const params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyConvolutionFilter1D: procedure(target: GLenum; internalformat: GLenum; x: GLint; y: GLint; width: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyConvolutionFilter2D: procedure(target: GLenum; internalformat: GLenum; x: GLint; y: GLint; width: GLsizei; height: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetConvolutionFilter: procedure(target: GLenum; format: GLenum; _type: GLenum; image: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetConvolutionParameterfv: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetConvolutionParameteriv: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetSeparableFilter: procedure(target: GLenum; format: GLenum; _type: GLenum; row: PGLvoid; column: PGLvoid; span: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSeparableFilter2D: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum; const row: PGLvoid; const column: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetHistogram: procedure(target: GLenum; reset: GLboolean; format: GLenum; _type: GLenum; values: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetHistogramParameterfv: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetHistogramParameteriv: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMinmax: procedure(target: GLenum; reset: GLboolean; format: GLenum; _type: GLenum; values: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMinmaxParameterfv: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMinmaxParameteriv: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glHistogram: procedure(target: GLenum; width: GLsizei; internalformat: GLenum; sink: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMinmax: procedure(target: GLenum; internalformat: GLenum; sink: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glResetHistogram: procedure(target: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glResetMinmax: procedure(target: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBlendEquation: procedure(mode: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBlendColor: procedure(red: GLclampf; green: GLclampf; blue: GLclampf; alpha: GLclampf); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_imaging: Boolean; - -//***** GL_version_1_3 *****// -const - GL_TEXTURE0 = $84C0; - GL_TEXTURE1 = $84C1; - GL_TEXTURE2 = $84C2; - GL_TEXTURE3 = $84C3; - GL_TEXTURE4 = $84C4; - GL_TEXTURE5 = $84C5; - GL_TEXTURE6 = $84C6; - GL_TEXTURE7 = $84C7; - GL_TEXTURE8 = $84C8; - GL_TEXTURE9 = $84C9; - GL_TEXTURE10 = $84CA; - GL_TEXTURE11 = $84CB; - GL_TEXTURE12 = $84CC; - GL_TEXTURE13 = $84CD; - GL_TEXTURE14 = $84CE; - GL_TEXTURE15 = $84CF; - GL_TEXTURE16 = $84D0; - GL_TEXTURE17 = $84D1; - GL_TEXTURE18 = $84D2; - GL_TEXTURE19 = $84D3; - GL_TEXTURE20 = $84D4; - GL_TEXTURE21 = $84D5; - GL_TEXTURE22 = $84D6; - GL_TEXTURE23 = $84D7; - GL_TEXTURE24 = $84D8; - GL_TEXTURE25 = $84D9; - GL_TEXTURE26 = $84DA; - GL_TEXTURE27 = $84DB; - GL_TEXTURE28 = $84DC; - GL_TEXTURE29 = $84DD; - GL_TEXTURE30 = $84DE; - GL_TEXTURE31 = $84DF; - GL_ACTIVE_TEXTURE = $84E0; - GL_CLIENT_ACTIVE_TEXTURE = $84E1; - GL_MAX_TEXTURE_UNITS = $84E2; - GL_TRANSPOSE_MODELVIEW_MATRIX = $84E3; - GL_TRANSPOSE_PROJECTION_MATRIX = $84E4; - GL_TRANSPOSE_TEXTURE_MATRIX = $84E5; - GL_TRANSPOSE_COLOR_MATRIX = $84E6; - GL_MULTISAMPLE = $809D; - GL_SAMPLE_ALPHA_TO_COVERAGE = $809E; - GL_SAMPLE_ALPHA_TO_ONE = $809F; - GL_SAMPLE_COVERAGE = $80A0; - GL_SAMPLE_BUFFERS = $80A8; - GL_SAMPLES = $80A9; - GL_SAMPLE_COVERAGE_VALUE = $80AA; - GL_SAMPLE_COVERAGE_INVERT = $80AB; - GL_MULTISAMPLE_BIT = $20000000; - GL_NORMAL_MAP = $8511; - GL_REFLECTION_MAP = $8512; - GL_TEXTURE_CUBE_MAP = $8513; - GL_TEXTURE_BINDING_CUBE_MAP = $8514; - GL_TEXTURE_CUBE_MAP_POSITIVE_X = $8515; - GL_TEXTURE_CUBE_MAP_NEGATIVE_X = $8516; - GL_TEXTURE_CUBE_MAP_POSITIVE_Y = $8517; - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = $8518; - GL_TEXTURE_CUBE_MAP_POSITIVE_Z = $8519; - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = $851A; - GL_PROXY_TEXTURE_CUBE_MAP = $851B; - GL_MAX_CUBE_MAP_TEXTURE_SIZE = $851C; - GL_COMPRESSED_ALPHA = $84E9; - GL_COMPRESSED_LUMINANCE = $84EA; - GL_COMPRESSED_LUMINANCE_ALPHA = $84EB; - GL_COMPRESSED_INTENSITY = $84EC; - GL_COMPRESSED_RGB = $84ED; - GL_COMPRESSED_RGBA = $84EE; - GL_TEXTURE_COMPRESSION_HINT = $84EF; - GL_TEXTURE_COMPRESSED_IMAGE_SIZE = $86A0; - GL_TEXTURE_COMPRESSED = $86A1; - GL_NUM_COMPRESSED_TEXTURE_FORMATS = $86A2; - GL_COMPRESSED_TEXTURE_FORMATS = $86A3; - GL_CLAMP_TO_BORDER = $812D; - GL_CLAMP_TO_BORDER_SGIS = $812D; - GL_COMBINE = $8570; - GL_COMBINE_RGB = $8571; - GL_COMBINE_ALPHA = $8572; - GL_SOURCE0_RGB = $8580; - GL_SOURCE1_RGB = $8581; - GL_SOURCE2_RGB = $8582; - GL_SOURCE0_ALPHA = $8588; - GL_SOURCE1_ALPHA = $8589; - GL_SOURCE2_ALPHA = $858A; - GL_OPERAND0_RGB = $8590; - GL_OPERAND1_RGB = $8591; - GL_OPERAND2_RGB = $8592; - GL_OPERAND0_ALPHA = $8598; - GL_OPERAND1_ALPHA = $8599; - GL_OPERAND2_ALPHA = $859A; - GL_RGB_SCALE = $8573; - GL_ADD_SIGNED = $8574; - GL_INTERPOLATE = $8575; - GL_SUBTRACT = $84E7; - GL_CONSTANT = $8576; - GL_PRIMARY_COLOR = $8577; - GL_PREVIOUS = $8578; - GL_DOT3_RGB = $86AE; - GL_DOT3_RGBA = $86AF; -var - glActiveTexture: procedure(texture: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glClientActiveTexture: procedure(texture: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1d: procedure(target: GLenum; s: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1dv: procedure(target: GLenum; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1f: procedure(target: GLenum; s: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1fv: procedure(target: GLenum; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1i: procedure(target: GLenum; s: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1iv: procedure(target: GLenum; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1s: procedure(target: GLenum; s: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1sv: procedure(target: GLenum; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2d: procedure(target: GLenum; s: GLdouble; t: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2dv: procedure(target: GLenum; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2f: procedure(target: GLenum; s: GLfloat; t: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2fv: procedure(target: GLenum; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2i: procedure(target: GLenum; s: GLint; t: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2iv: procedure(target: GLenum; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2s: procedure(target: GLenum; s: GLshort; t: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2sv: procedure(target: GLenum; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3d: procedure(target: GLenum; s: GLdouble; t: GLdouble; r: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3dv: procedure(target: GLenum; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3f: procedure(target: GLenum; s: GLfloat; t: GLfloat; r: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3fv: procedure(target: GLenum; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3i: procedure(target: GLenum; s: GLint; t: GLint; r: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3iv: procedure(target: GLenum; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3s: procedure(target: GLenum; s: GLshort; t: GLshort; r: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3sv: procedure(target: GLenum; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4d: procedure(target: GLenum; s: GLdouble; t: GLdouble; r: GLdouble; q: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4dv: procedure(target: GLenum; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4f: procedure(target: GLenum; s: GLfloat; t: GLfloat; r: GLfloat; q: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4fv: procedure(target: GLenum; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4i: procedure(target: GLenum; s: GLint; t: GLint; r: GLint; q: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4iv: procedure(target: GLenum; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4s: procedure(target: GLenum; s: GLshort; t: GLshort; r: GLshort; q: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4sv: procedure(target: GLenum; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glLoadTransposeMatrixf: procedure(const m: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glLoadTransposeMatrixd: procedure(const m: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultTransposeMatrixf: procedure(const m: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultTransposeMatrixd: procedure(const m: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSampleCoverage: procedure(value: GLclampf; invert: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexImage3D: procedure(target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; height: GLsizei; depth: GLsizei; border: GLint; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexImage2D: procedure(target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; height: GLsizei; border: GLint; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexImage1D: procedure(target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; border: GLint; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexSubImage3D: procedure(target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; width: GLsizei; height: GLsizei; depth: GLsizei; format: GLenum; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexSubImage2D: procedure(target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; width: GLsizei; height: GLsizei; format: GLenum; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexSubImage1D: procedure(target: GLenum; level: GLint; xoffset: GLint; width: GLsizei; format: GLenum; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetCompressedTexImage: procedure(target: GLenum; level: GLint; img: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_version_1_3: Boolean; - -//***** GL_ARB_multitexture *****// -const - GL_TEXTURE0_ARB = $84C0; - GL_TEXTURE1_ARB = $84C1; - GL_TEXTURE2_ARB = $84C2; - GL_TEXTURE3_ARB = $84C3; - GL_TEXTURE4_ARB = $84C4; - GL_TEXTURE5_ARB = $84C5; - GL_TEXTURE6_ARB = $84C6; - GL_TEXTURE7_ARB = $84C7; - GL_TEXTURE8_ARB = $84C8; - GL_TEXTURE9_ARB = $84C9; - GL_TEXTURE10_ARB = $84CA; - GL_TEXTURE11_ARB = $84CB; - GL_TEXTURE12_ARB = $84CC; - GL_TEXTURE13_ARB = $84CD; - GL_TEXTURE14_ARB = $84CE; - GL_TEXTURE15_ARB = $84CF; - GL_TEXTURE16_ARB = $84D0; - GL_TEXTURE17_ARB = $84D1; - GL_TEXTURE18_ARB = $84D2; - GL_TEXTURE19_ARB = $84D3; - GL_TEXTURE20_ARB = $84D4; - GL_TEXTURE21_ARB = $84D5; - GL_TEXTURE22_ARB = $84D6; - GL_TEXTURE23_ARB = $84D7; - GL_TEXTURE24_ARB = $84D8; - GL_TEXTURE25_ARB = $84D9; - GL_TEXTURE26_ARB = $84DA; - GL_TEXTURE27_ARB = $84DB; - GL_TEXTURE28_ARB = $84DC; - GL_TEXTURE29_ARB = $84DD; - GL_TEXTURE30_ARB = $84DE; - GL_TEXTURE31_ARB = $84DF; - GL_ACTIVE_TEXTURE_ARB = $84E0; - GL_CLIENT_ACTIVE_TEXTURE_ARB = $84E1; - GL_MAX_TEXTURE_UNITS_ARB = $84E2; -var - glActiveTextureARB: procedure(texture: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glClientActiveTextureARB: procedure(texture: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1dARB: procedure(target: GLenum; s: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1dvARB: procedure(target: GLenum; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1fARB: procedure(target: GLenum; s: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1fvARB: procedure(target: GLenum; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1iARB: procedure(target: GLenum; s: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1ivARB: procedure(target: GLenum; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1sARB: procedure(target: GLenum; s: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1svARB: procedure(target: GLenum; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2dARB: procedure(target: GLenum; s: GLdouble; t: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2dvARB: procedure(target: GLenum; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2fARB: procedure(target: GLenum; s: GLfloat; t: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2fvARB: procedure(target: GLenum; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2iARB: procedure(target: GLenum; s: GLint; t: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2ivARB: procedure(target: GLenum; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2sARB: procedure(target: GLenum; s: GLshort; t: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2svARB: procedure(target: GLenum; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3dARB: procedure(target: GLenum; s: GLdouble; t: GLdouble; r: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3dvARB: procedure(target: GLenum; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3fARB: procedure(target: GLenum; s: GLfloat; t: GLfloat; r: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3fvARB: procedure(target: GLenum; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3iARB: procedure(target: GLenum; s: GLint; t: GLint; r: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3ivARB: procedure(target: GLenum; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3sARB: procedure(target: GLenum; s: GLshort; t: GLshort; r: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3svARB: procedure(target: GLenum; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4dARB: procedure(target: GLenum; s: GLdouble; t: GLdouble; r: GLdouble; q: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4dvARB: procedure(target: GLenum; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4fARB: procedure(target: GLenum; s: GLfloat; t: GLfloat; r: GLfloat; q: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4fvARB: procedure(target: GLenum; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4iARB: procedure(target: GLenum; s: GLint; t: GLint; r: GLint; q: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4ivARB: procedure(target: GLenum; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4sARB: procedure(target: GLenum; s: GLshort; t: GLshort; r: GLshort; q: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4svARB: procedure(target: GLenum; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_multitexture: Boolean; - -//***** GL_ARB_transpose_matrix *****// -const - GL_TRANSPOSE_MODELVIEW_MATRIX_ARB = $84E3; - GL_TRANSPOSE_PROJECTION_MATRIX_ARB = $84E4; - GL_TRANSPOSE_TEXTURE_MATRIX_ARB = $84E5; - GL_TRANSPOSE_COLOR_MATRIX_ARB = $84E6; -var - glLoadTransposeMatrixfARB: procedure(m: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glLoadTransposeMatrixdARB: procedure(m: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultTransposeMatrixfARB: procedure(m: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultTransposeMatrixdARB: procedure(m: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_transpose_matrix: Boolean; - -//***** GL_ARB_multisample *****// -const - WGL_SAMPLE_BUFFERS_ARB = $2041; - WGL_SAMPLES_ARB = $2042; - GL_MULTISAMPLE_ARB = $809D; - GL_SAMPLE_ALPHA_TO_COVERAGE_ARB = $809E; - GL_SAMPLE_ALPHA_TO_ONE_ARB = $809F; - GL_SAMPLE_COVERAGE_ARB = $80A0; - GL_MULTISAMPLE_BIT_ARB = $20000000; - GL_SAMPLE_BUFFERS_ARB = $80A8; - GL_SAMPLES_ARB = $80A9; - GL_SAMPLE_COVERAGE_VALUE_ARB = $80AA; - GL_SAMPLE_COVERAGE_INVERT_ARB = $80AB; -var - glSampleCoverageARB: procedure(value: GLclampf; invert: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_multisample: Boolean; - -//***** GL_ARB_texture_env_add *****// - -function Load_GL_ARB_texture_env_add: Boolean; - -{$IFDEF WINDOWS} -//***** WGL_ARB_extensions_string *****// -var - wglGetExtensionsStringARB: function(hdc: HDC): Pchar; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_ARB_extensions_string: Boolean; - -//***** WGL_ARB_buffer_region *****// -const - WGL_FRONT_COLOR_BUFFER_BIT_ARB = $0001; - WGL_BACK_COLOR_BUFFER_BIT_ARB = $0002; - WGL_DEPTH_BUFFER_BIT_ARB = $0004; - WGL_STENCIL_BUFFER_BIT_ARB = $0008; -var - wglCreateBufferRegionARB: function(hDC: HDC; iLayerPlane: GLint; uType: GLuint): THandle; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglDeleteBufferRegionARB: procedure(hRegion: THandle); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglSaveBufferRegionARB: function(hRegion: THandle; x: GLint; y: GLint; width: GLint; height: GLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglRestoreBufferRegionARB: function(hRegion: THandle; x: GLint; y: GLint; width: GLint; height: GLint; xSrc: GLint; ySrc: GLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_ARB_buffer_region: Boolean; -{$ENDIF} - -//***** GL_ARB_texture_cube_map *****// -const - GL_NORMAL_MAP_ARB = $8511; - GL_REFLECTION_MAP_ARB = $8512; - GL_TEXTURE_CUBE_MAP_ARB = $8513; - GL_TEXTURE_BINDING_CUBE_MAP_ARB = $8514; - GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = $8515; - GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = $8516; - GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = $8517; - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = $8518; - GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = $8519; - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = $851A; - GL_PROXY_TEXTURE_CUBE_MAP_ARB = $851B; - GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB = $851C; - -function Load_GL_ARB_texture_cube_map: Boolean; - -//***** GL_ARB_depth_texture *****// -const - GL_DEPTH_COMPONENT16_ARB = $81A5; - GL_DEPTH_COMPONENT24_ARB = $81A6; - GL_DEPTH_COMPONENT32_ARB = $81A7; - GL_TEXTURE_DEPTH_SIZE_ARB = $884A; - GL_DEPTH_TEXTURE_MODE_ARB = $884B; - -function Load_GL_ARB_depth_texture: Boolean; - -//***** GL_ARB_point_parameters *****// -const - GL_POINT_SIZE_MIN_ARB = $8126; - GL_POINT_SIZE_MAX_ARB = $8127; - GL_POINT_FADE_THRESHOLD_SIZE_ARB = $8128; - GL_POINT_DISTANCE_ATTENUATION_ARB = $8129; -var - glPointParameterfARB: procedure(pname: GLenum; param: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPointParameterfvARB: procedure(pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_point_parameters: Boolean; - -//***** GL_ARB_shadow *****// -const - GL_TEXTURE_COMPARE_MODE_ARB = $884C; - GL_TEXTURE_COMPARE_FUNC_ARB = $884D; - GL_COMPARE_R_TO_TEXTURE_ARB = $884E; - -function Load_GL_ARB_shadow: Boolean; - -//***** GL_ARB_shadow_ambient *****// -const - GL_TEXTURE_COMPARE_FAIL_VALUE_ARB = $80BF; - -function Load_GL_ARB_shadow_ambient: Boolean; - -//***** GL_ARB_texture_border_clamp *****// -const - GL_CLAMP_TO_BORDER_ARB = $812D; - -function Load_GL_ARB_texture_border_clamp: Boolean; - -//***** GL_ARB_texture_compression *****// -const - GL_COMPRESSED_ALPHA_ARB = $84E9; - GL_COMPRESSED_LUMINANCE_ARB = $84EA; - GL_COMPRESSED_LUMINANCE_ALPHA_ARB = $84EB; - GL_COMPRESSED_INTENSITY_ARB = $84EC; - GL_COMPRESSED_RGB_ARB = $84ED; - GL_COMPRESSED_RGBA_ARB = $84EE; - GL_TEXTURE_COMPRESSION_HINT_ARB = $84EF; - GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB = $86A0; - GL_TEXTURE_COMPRESSED_ARB = $86A1; - GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB = $86A2; - GL_COMPRESSED_TEXTURE_FORMATS_ARB = $86A3; -var - glCompressedTexImage3DARB: procedure(target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; height: GLsizei; depth: GLsizei; border: GLint; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexImage2DARB: procedure(target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; height: GLsizei; border: GLint; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexImage1DARB: procedure(target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; border: GLint; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexSubImage3DARB: procedure(target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; width: GLsizei; height: GLsizei; depth: GLsizei; format: GLenum; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexSubImage2DARB: procedure(target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; width: GLsizei; height: GLsizei; format: GLenum; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompressedTexSubImage1DARB: procedure(target: GLenum; level: GLint; xoffset: GLint; width: GLsizei; format: GLenum; imageSize: GLsizei; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetCompressedTexImageARB: procedure(target: GLenum; lod: GLint; img: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_texture_compression: Boolean; - -//***** GL_ARB_texture_env_combine *****// -const - GL_COMBINE_ARB = $8570; - GL_COMBINE_RGB_ARB = $8571; - GL_COMBINE_ALPHA_ARB = $8572; - GL_SOURCE0_RGB_ARB = $8580; - GL_SOURCE1_RGB_ARB = $8581; - GL_SOURCE2_RGB_ARB = $8582; - GL_SOURCE0_ALPHA_ARB = $8588; - GL_SOURCE1_ALPHA_ARB = $8589; - GL_SOURCE2_ALPHA_ARB = $858A; - GL_OPERAND0_RGB_ARB = $8590; - GL_OPERAND1_RGB_ARB = $8591; - GL_OPERAND2_RGB_ARB = $8592; - GL_OPERAND0_ALPHA_ARB = $8598; - GL_OPERAND1_ALPHA_ARB = $8599; - GL_OPERAND2_ALPHA_ARB = $859A; - GL_RGB_SCALE_ARB = $8573; - GL_ADD_SIGNED_ARB = $8574; - GL_INTERPOLATE_ARB = $8575; - GL_SUBTRACT_ARB = $84E7; - GL_CONSTANT_ARB = $8576; - GL_PRIMARY_COLOR_ARB = $8577; - GL_PREVIOUS_ARB = $8578; - -function Load_GL_ARB_texture_env_combine: Boolean; - -//***** GL_ARB_texture_env_crossbar *****// - -function Load_GL_ARB_texture_env_crossbar: Boolean; - -//***** GL_ARB_texture_env_dot3 *****// -const - GL_DOT3_RGB_ARB = $86AE; - GL_DOT3_RGBA_ARB = $86AF; - -function Load_GL_ARB_texture_env_dot3: Boolean; - -//***** GL_ARB_texture_mirrored_repeat *****// -const - GL_MIRRORED_REPEAT_ARB = $8370; - -function Load_GL_ARB_texture_mirrored_repeat: Boolean; - -//***** GL_ARB_vertex_blend *****// -const - GL_MAX_VERTEX_UNITS_ARB = $86A4; - GL_ACTIVE_VERTEX_UNITS_ARB = $86A5; - GL_WEIGHT_SUM_UNITY_ARB = $86A6; - GL_VERTEX_BLEND_ARB = $86A7; - GL_MODELVIEW0_ARB = $1700; - GL_MODELVIEW1_ARB = $850A; - GL_MODELVIEW2_ARB = $8722; - GL_MODELVIEW3_ARB = $8723; - GL_MODELVIEW4_ARB = $8724; - GL_MODELVIEW5_ARB = $8725; - GL_MODELVIEW6_ARB = $8726; - GL_MODELVIEW7_ARB = $8727; - GL_MODELVIEW8_ARB = $8728; - GL_MODELVIEW9_ARB = $8729; - GL_MODELVIEW10_ARB = $872A; - GL_MODELVIEW11_ARB = $872B; - GL_MODELVIEW12_ARB = $872C; - GL_MODELVIEW13_ARB = $872D; - GL_MODELVIEW14_ARB = $872E; - GL_MODELVIEW15_ARB = $872F; - GL_MODELVIEW16_ARB = $8730; - GL_MODELVIEW17_ARB = $8731; - GL_MODELVIEW18_ARB = $8732; - GL_MODELVIEW19_ARB = $8733; - GL_MODELVIEW20_ARB = $8734; - GL_MODELVIEW21_ARB = $8735; - GL_MODELVIEW22_ARB = $8736; - GL_MODELVIEW23_ARB = $8737; - GL_MODELVIEW24_ARB = $8738; - GL_MODELVIEW25_ARB = $8739; - GL_MODELVIEW26_ARB = $873A; - GL_MODELVIEW27_ARB = $873B; - GL_MODELVIEW28_ARB = $873C; - GL_MODELVIEW29_ARB = $873D; - GL_MODELVIEW30_ARB = $873E; - GL_MODELVIEW31_ARB = $873F; - GL_CURRENT_WEIGHT_ARB = $86A8; - GL_WEIGHT_ARRAY_TYPE_ARB = $86A9; - GL_WEIGHT_ARRAY_STRIDE_ARB = $86AA; - GL_WEIGHT_ARRAY_SIZE_ARB = $86AB; - GL_WEIGHT_ARRAY_POINTER_ARB = $86AC; - GL_WEIGHT_ARRAY_ARB = $86AD; -var - glWeightbvARB: procedure(size: GLint; weights: PGLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightsvARB: procedure(size: GLint; weights: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightivARB: procedure(size: GLint; weights: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightfvARB: procedure(size: GLint; weights: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightdvARB: procedure(size: GLint; weights: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightvARB: procedure(size: GLint; weights: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightubvARB: procedure(size: GLint; weights: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightusvARB: procedure(size: GLint; weights: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightuivARB: procedure(size: GLint; weights: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWeightPointerARB: procedure(size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexBlendARB: procedure(count: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_vertex_blend: Boolean; - -//***** GL_ARB_vertex_program *****// -const - GL_VERTEX_PROGRAM_ARB = $8620; - GL_VERTEX_PROGRAM_POINT_SIZE_ARB = $8642; - GL_VERTEX_PROGRAM_TWO_SIDE_ARB = $8643; - GL_COLOR_SUM_ARB = $8458; - GL_PROGRAM_FORMAT_ASCII_ARB = $8875; - GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB = $8622; - GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB = $8623; - GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB = $8624; - GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB = $8625; - GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB = $886A; - GL_CURRENT_VERTEX_ATTRIB_ARB = $8626; - GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB = $8645; - GL_PROGRAM_LENGTH_ARB = $8627; - GL_PROGRAM_FORMAT_ARB = $8876; - GL_PROGRAM_BINDING_ARB = $8677; - GL_PROGRAM_INSTRUCTIONS_ARB = $88A0; - GL_MAX_PROGRAM_INSTRUCTIONS_ARB = $88A1; - GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB = $88A2; - GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB = $88A3; - GL_PROGRAM_TEMPORARIES_ARB = $88A4; - GL_MAX_PROGRAM_TEMPORARIES_ARB = $88A5; - GL_PROGRAM_NATIVE_TEMPORARIES_ARB = $88A6; - GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB = $88A7; - GL_PROGRAM_PARAMETERS_ARB = $88A8; - GL_MAX_PROGRAM_PARAMETERS_ARB = $88A9; - GL_PROGRAM_NATIVE_PARAMETERS_ARB = $88AA; - GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB = $88AB; - GL_PROGRAM_ATTRIBS_ARB = $88AC; - GL_MAX_PROGRAM_ATTRIBS_ARB = $88AD; - GL_PROGRAM_NATIVE_ATTRIBS_ARB = $88AE; - GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB = $88AF; - GL_PROGRAM_ADDRESS_REGISTERS_ARB = $88B0; - GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB = $88B1; - GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = $88B2; - GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = $88B3; - GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB = $88B4; - GL_MAX_PROGRAM_ENV_PARAMETERS_ARB = $88B5; - GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB = $88B6; - GL_PROGRAM_STRING_ARB = $8628; - GL_PROGRAM_ERROR_POSITION_ARB = $864B; - GL_CURRENT_MATRIX_ARB = $8641; - GL_TRANSPOSE_CURRENT_MATRIX_ARB = $88B7; - GL_CURRENT_MATRIX_STACK_DEPTH_ARB = $8640; - GL_MAX_VERTEX_ATTRIBS_ARB = $8869; - GL_MAX_PROGRAM_MATRICES_ARB = $862F; - GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB = $862E; - GL_PROGRAM_ERROR_STRING_ARB = $8874; - GL_MATRIX0_ARB = $88C0; - GL_MATRIX1_ARB = $88C1; - GL_MATRIX2_ARB = $88C2; - GL_MATRIX3_ARB = $88C3; - GL_MATRIX4_ARB = $88C4; - GL_MATRIX5_ARB = $88C5; - GL_MATRIX6_ARB = $88C6; - GL_MATRIX7_ARB = $88C7; - GL_MATRIX8_ARB = $88C8; - GL_MATRIX9_ARB = $88C9; - GL_MATRIX10_ARB = $88CA; - GL_MATRIX11_ARB = $88CB; - GL_MATRIX12_ARB = $88CC; - GL_MATRIX13_ARB = $88CD; - GL_MATRIX14_ARB = $88CE; - GL_MATRIX15_ARB = $88CF; - GL_MATRIX16_ARB = $88D0; - GL_MATRIX17_ARB = $88D1; - GL_MATRIX18_ARB = $88D2; - GL_MATRIX19_ARB = $88D3; - GL_MATRIX20_ARB = $88D4; - GL_MATRIX21_ARB = $88D5; - GL_MATRIX22_ARB = $88D6; - GL_MATRIX23_ARB = $88D7; - GL_MATRIX24_ARB = $88D8; - GL_MATRIX25_ARB = $88D9; - GL_MATRIX26_ARB = $88DA; - GL_MATRIX27_ARB = $88DB; - GL_MATRIX28_ARB = $88DC; - GL_MATRIX29_ARB = $88DD; - GL_MATRIX30_ARB = $88DE; - GL_MATRIX31_ARB = $88DF; -var - glVertexAttrib1sARB: procedure(index: GLuint; x: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1fARB: procedure(index: GLuint; x: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1dARB: procedure(index: GLuint; x: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2sARB: procedure(index: GLuint; x: GLshort; y: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2fARB: procedure(index: GLuint; x: GLfloat; y: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2dARB: procedure(index: GLuint; x: GLdouble; y: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3sARB: procedure(index: GLuint; x: GLshort; y: GLshort; z: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3fARB: procedure(index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3dARB: procedure(index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4sARB: procedure(index: GLuint; x: GLshort; y: GLshort; z: GLshort; w: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4fARB: procedure(index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4dARB: procedure(index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4NubARB: procedure(index: GLuint; x: GLubyte; y: GLubyte; z: GLubyte; w: GLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1svARB: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1fvARB: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1dvARB: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2svARB: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2fvARB: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2dvARB: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3svARB: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3fvARB: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3dvARB: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4bvARB: procedure(index: GLuint; const v: PGLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4svARB: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4ivARB: procedure(index: GLuint; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4ubvARB: procedure(index: GLuint; const v: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4usvARB: procedure(index: GLuint; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4uivARB: procedure(index: GLuint; const v: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4fvARB: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4dvARB: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4NbvARB: procedure(index: GLuint; const v: PGLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4NsvARB: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4NivARB: procedure(index: GLuint; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4NubvARB: procedure(index: GLuint; const v: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4NusvARB: procedure(index: GLuint; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4NuivARB: procedure(index: GLuint; const v: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribPointerARB: procedure(index: GLuint; size: GLint; _type: GLenum; normalized: GLboolean; stride: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEnableVertexAttribArrayARB: procedure(index: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDisableVertexAttribArrayARB: procedure(index: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramStringARB: procedure(target: GLenum; format: GLenum; len: GLsizei; const _string: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindProgramARB: procedure(target: GLenum; _program: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteProgramsARB: procedure(n: GLsizei; const programs: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenProgramsARB: procedure(n: GLsizei; programs: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramEnvParameter4dARB: procedure(target: GLenum; index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramEnvParameter4dvARB: procedure(target: GLenum; index: GLuint; const params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramEnvParameter4fARB: procedure(target: GLenum; index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramEnvParameter4fvARB: procedure(target: GLenum; index: GLuint; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramLocalParameter4dARB: procedure(target: GLenum; index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramLocalParameter4dvARB: procedure(target: GLenum; index: GLuint; const params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramLocalParameter4fARB: procedure(target: GLenum; index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramLocalParameter4fvARB: procedure(target: GLenum; index: GLuint; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramEnvParameterdvARB: procedure(target: GLenum; index: GLuint; params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramEnvParameterfvARB: procedure(target: GLenum; index: GLuint; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramLocalParameterdvARB: procedure(target: GLenum; index: GLuint; params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramLocalParameterfvARB: procedure(target: GLenum; index: GLuint; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramivARB: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramStringARB: procedure(target: GLenum; pname: GLenum; _string: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribdvARB: procedure(index: GLuint; pname: GLenum; params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribfvARB: procedure(index: GLuint; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribivARB: procedure(index: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribPointervARB: procedure(index: GLuint; pname: GLenum; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsProgramARB: function(_program: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_vertex_program: Boolean; - -//***** GL_ARB_window_pos *****// -var - glWindowPos2dARB: procedure(x: GLdouble; y: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2fARB: procedure(x: GLfloat; y: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2iARB: procedure(x: GLint; y: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2sARB: procedure(x: GLshort; y: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2dvARB: procedure(const p: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2fvARB: procedure(const p: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2ivARB: procedure(const p: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2svARB: procedure(const p: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3dARB: procedure(x: GLdouble; y: GLdouble; z: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3fARB: procedure(x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3iARB: procedure(x: GLint; y: GLint; z: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3sARB: procedure(x: GLshort; y: GLshort; z: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3dvARB: procedure(const p: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3fvARB: procedure(const p: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3ivARB: procedure(const p: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3svARB: procedure(const p: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_window_pos: Boolean; - -//***** GL_EXT_422_pixels *****// -const - GL_422_EXT = $80CC; - GL_422_REV_EXT = $80CD; - GL_422_AVERAGE_EXT = $80CE; - GL_422_REV_AVERAGE_EXT = $80CF; - -function Load_GL_EXT_422_pixels: Boolean; - -//***** GL_EXT_abgr *****// -const - GL_ABGR_EXT = $8000; - -function Load_GL_EXT_abgr: Boolean; - -//***** GL_EXT_bgra *****// -const - GL_BGR_EXT = $80E0; - GL_BGRA_EXT = $80E1; - -function Load_GL_EXT_bgra: Boolean; - -//***** GL_EXT_blend_color *****// -const - GL_CONSTANT_COLOR_EXT = $8001; - GL_ONE_MINUS_CONSTANT_COLOR_EXT = $8002; - GL_CONSTANT_ALPHA_EXT = $8003; - GL_ONE_MINUS_CONSTANT_ALPHA_EXT = $8004; - GL_BLEND_COLOR_EXT = $8005; -var - glBlendColorEXT: procedure(red: GLclampf; green: GLclampf; blue: GLclampf; alpha: GLclampf); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_blend_color: Boolean; - -//***** GL_EXT_blend_func_separate *****// -const - GL_BLEND_DST_RGB_EXT = $80C8; - GL_BLEND_SRC_RGB_EXT = $80C9; - GL_BLEND_DST_ALPHA_EXT = $80CA; - GL_BLEND_SRC_ALPHA_EXT = $80CB; -var - glBlendFuncSeparateEXT: procedure(sfactorRGB: GLenum; dfactorRGB: GLenum; sfactorAlpha: GLenum; dfactorAlpha: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_blend_func_separate: Boolean; - -//***** GL_EXT_blend_logic_op *****// - -function Load_GL_EXT_blend_logic_op: Boolean; - -//***** GL_EXT_blend_minmax *****// -const - GL_FUNC_ADD_EXT = $8006; - GL_MIN_EXT = $8007; - GL_MAX_EXT = $8008; - GL_BLEND_EQUATION_EXT = $8009; -var - glBlendEquationEXT: procedure(mode: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_blend_minmax: Boolean; - -//***** GL_EXT_blend_subtract *****// -const - GL_FUNC_SUBTRACT_EXT = $800A; - GL_FUNC_REVERSE_SUBTRACT_EXT = $800B; - -function Load_GL_EXT_blend_subtract: Boolean; - -//***** GL_EXT_clip_volume_hint *****// -const - GL_CLIP_VOLUME_CLIPPING_HINT_EXT = $80F0; - -function Load_GL_EXT_clip_volume_hint: Boolean; - -//***** GL_EXT_color_subtable *****// -var - glColorSubTableEXT: procedure(target: GLenum; start: GLsizei; count: GLsizei; format: GLenum; _type: GLenum; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyColorSubTableEXT: procedure(target: GLenum; start: GLsizei; x: GLint; y: GLint; width: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_color_subtable: Boolean; - -//***** GL_EXT_compiled_vertex_array *****// -const - GL_ARRAY_ELEMENT_LOCK_FIRST_EXT = $81A8; - GL_ARRAY_ELEMENT_LOCK_COUNT_EXT = $81A9; -var - glLockArraysEXT: procedure(first: GLint; count: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUnlockArraysEXT: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_compiled_vertex_array: Boolean; - -//***** GL_EXT_convolution *****// -const - GL_CONVOLUTION_1D_EXT = $8010; - GL_CONVOLUTION_2D_EXT = $8011; - GL_SEPARABLE_2D_EXT = $8012; - GL_CONVOLUTION_BORDER_MODE_EXT = $8013; - GL_CONVOLUTION_FILTER_SCALE_EXT = $8014; - GL_CONVOLUTION_FILTER_BIAS_EXT = $8015; - GL_REDUCE_EXT = $8016; - GL_CONVOLUTION_FORMAT_EXT = $8017; - GL_CONVOLUTION_WIDTH_EXT = $8018; - GL_CONVOLUTION_HEIGHT_EXT = $8019; - GL_MAX_CONVOLUTION_WIDTH_EXT = $801A; - GL_MAX_CONVOLUTION_HEIGHT_EXT = $801B; - GL_POST_CONVOLUTION_RED_SCALE_EXT = $801C; - GL_POST_CONVOLUTION_GREEN_SCALE_EXT = $801D; - GL_POST_CONVOLUTION_BLUE_SCALE_EXT = $801E; - GL_POST_CONVOLUTION_ALPHA_SCALE_EXT = $801F; - GL_POST_CONVOLUTION_RED_BIAS_EXT = $8020; - GL_POST_CONVOLUTION_GREEN_BIAS_EXT = $8021; - GL_POST_CONVOLUTION_BLUE_BIAS_EXT = $8022; - GL_POST_CONVOLUTION_ALPHA_BIAS_EXT = $8023; -var - glConvolutionFilter1DEXT: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; format: GLenum; _type: GLenum; const image: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionFilter2DEXT: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum; const image: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyConvolutionFilter1DEXT: procedure(target: GLenum; internalformat: GLenum; x: GLint; y: GLint; width: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyConvolutionFilter2DEXT: procedure(target: GLenum; internalformat: GLenum; x: GLint; y: GLint; width: GLsizei; height: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetConvolutionFilterEXT: procedure(target: GLenum; format: GLenum; _type: GLenum; image: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSeparableFilter2DEXT: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum; const row: PGLvoid; const column: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetSeparableFilterEXT: procedure(target: GLenum; format: GLenum; _type: GLenum; row: PGLvoid; column: PGLvoid; span: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionParameteriEXT: procedure(target: GLenum; pname: GLenum; param: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionParameterivEXT: procedure(target: GLenum; pname: GLenum; const params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionParameterfEXT: procedure(target: GLenum; pname: GLenum; param: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glConvolutionParameterfvEXT: procedure(target: GLenum; pname: GLenum; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetConvolutionParameterivEXT: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetConvolutionParameterfvEXT: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_convolution: Boolean; - -//***** GL_EXT_histogram *****// -const - GL_HISTOGRAM_EXT = $8024; - GL_PROXY_HISTOGRAM_EXT = $8025; - GL_HISTOGRAM_WIDTH_EXT = $8026; - GL_HISTOGRAM_FORMAT_EXT = $8027; - GL_HISTOGRAM_RED_SIZE_EXT = $8028; - GL_HISTOGRAM_GREEN_SIZE_EXT = $8029; - GL_HISTOGRAM_BLUE_SIZE_EXT = $802A; - GL_HISTOGRAM_ALPHA_SIZE_EXT = $802B; - GL_HISTOGRAM_LUMINANCE_SIZE_EXT = $802C; - GL_HISTOGRAM_SINK_EXT = $802D; - GL_MINMAX_EXT = $802E; - GL_MINMAX_FORMAT_EXT = $802F; - GL_MINMAX_SINK_EXT = $8030; -var - glHistogramEXT: procedure(target: GLenum; width: GLsizei; internalformat: GLenum; sink: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glResetHistogramEXT: procedure(target: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetHistogramEXT: procedure(target: GLenum; reset: GLboolean; format: GLenum; _type: GLenum; values: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetHistogramParameterivEXT: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetHistogramParameterfvEXT: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMinmaxEXT: procedure(target: GLenum; internalformat: GLenum; sink: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glResetMinmaxEXT: procedure(target: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMinmaxEXT: procedure(target: GLenum; reset: GLboolean; format: GLenum; _type: GLenum; values: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMinmaxParameterivEXT: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMinmaxParameterfvEXT: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_histogram: Boolean; - -//***** GL_EXT_multi_draw_arrays *****// -var - glMultiDrawArraysEXT: procedure(mode: GLenum; first: PGLint; count: PGLsizei; primcount: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiDrawElementsEXT: procedure(mode: GLenum; count: PGLsizei; _type: GLenum; const indices: PGLvoid; primcount: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_multi_draw_arrays: Boolean; - -//***** GL_EXT_packed_pixels *****// -const - GL_UNSIGNED_BYTE_3_3_2_EXT = $8032; - GL_UNSIGNED_SHORT_4_4_4_4_EXT = $8033; - GL_UNSIGNED_SHORT_5_5_5_1_EXT = $8034; - GL_UNSIGNED_INT_8_8_8_8_EXT = $8035; - GL_UNSIGNED_INT_10_10_10_2_EXT = $8036; - -function Load_GL_EXT_packed_pixels: Boolean; - -//***** GL_EXT_paletted_texture *****// -const - GL_COLOR_INDEX1_EXT = $80E2; - GL_COLOR_INDEX2_EXT = $80E3; - GL_COLOR_INDEX4_EXT = $80E4; - GL_COLOR_INDEX8_EXT = $80E5; - GL_COLOR_INDEX12_EXT = $80E6; - GL_COLOR_INDEX16_EXT = $80E7; - GL_COLOR_TABLE_FORMAT_EXT = $80D8; - GL_COLOR_TABLE_WIDTH_EXT = $80D9; - GL_COLOR_TABLE_RED_SIZE_EXT = $80DA; - GL_COLOR_TABLE_GREEN_SIZE_EXT = $80DB; - GL_COLOR_TABLE_BLUE_SIZE_EXT = $80DC; - GL_COLOR_TABLE_ALPHA_SIZE_EXT = $80DD; - GL_COLOR_TABLE_LUMINANCE_SIZE_EXT = $80DE; - GL_COLOR_TABLE_INTENSITY_SIZE_EXT = $80DF; - GL_TEXTURE_INDEX_SIZE_EXT = $80ED; - GL_TEXTURE_1D = $0DE0; - GL_TEXTURE_2D = $0DE1; - GL_TEXTURE_3D_EXT = $806F; - // GL_TEXTURE_CUBE_MAP_ARB { already defined } - GL_PROXY_TEXTURE_1D = $8063; - GL_PROXY_TEXTURE_2D = $8064; - GL_PROXY_TEXTURE_3D_EXT = $8070; - // GL_PROXY_TEXTURE_CUBE_MAP_ARB { already defined } - // GL_TEXTURE_1D { already defined } - // GL_TEXTURE_2D { already defined } - // GL_TEXTURE_3D_EXT { already defined } - // GL_TEXTURE_CUBE_MAP_ARB { already defined } -var - glColorTableEXT: procedure(target: GLenum; internalFormat: GLenum; width: GLsizei; format: GLenum; _type: GLenum; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - // glColorSubTableEXT { already defined } - glGetColorTableEXT: procedure(target: GLenum; format: GLenum; _type: GLenum; data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetColorTableParameterivEXT: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetColorTableParameterfvEXT: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_paletted_texture: Boolean; - -//***** GL_EXT_point_parameters *****// -const - GL_POINT_SIZE_MIN_EXT = $8126; - GL_POINT_SIZE_MAX_EXT = $8127; - GL_POINT_FADE_THRESHOLD_SIZE_EXT = $8128; - GL_DISTANCE_ATTENUATION_EXT = $8129; -var - glPointParameterfEXT: procedure(pname: GLenum; param: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPointParameterfvEXT: procedure(pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_point_parameters: Boolean; - -//***** GL_EXT_polygon_offset *****// -const - GL_POLYGON_OFFSET_EXT = $8037; - GL_POLYGON_OFFSET_FACTOR_EXT = $8038; - GL_POLYGON_OFFSET_BIAS_EXT = $8039; -var - glPolygonOffsetEXT: procedure(factor: GLfloat; bias: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_polygon_offset: Boolean; - -//***** GL_EXT_separate_specular_color *****// -const - GL_LIGHT_MODEL_COLOR_CONTROL_EXT = $81F8; - GL_SINGLE_COLOR_EXT = $81F9; - GL_SEPARATE_SPECULAR_COLOR_EXT = $81FA; - -function Load_GL_EXT_separate_specular_color: Boolean; - -//***** GL_EXT_shadow_funcs *****// - -function Load_GL_EXT_shadow_funcs: Boolean; - -//***** GL_EXT_shared_texture_palette *****// -const - GL_SHARED_TEXTURE_PALETTE_EXT = $81FB; - -function Load_GL_EXT_shared_texture_palette: Boolean; - -//***** GL_EXT_stencil_two_side *****// -const - GL_STENCIL_TEST_TWO_SIDE_EXT = $8910; - GL_ACTIVE_STENCIL_FACE_EXT = $8911; -var - glActiveStencilFaceEXT: procedure(face: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_stencil_two_side: Boolean; - -//***** GL_EXT_stencil_wrap *****// -const - GL_INCR_WRAP_EXT = $8507; - GL_DECR_WRAP_EXT = $8508; - -function Load_GL_EXT_stencil_wrap: Boolean; - -//***** GL_EXT_subtexture *****// -var - glTexSubImage1DEXT: procedure(target: GLenum; level: GLint; xoffset: GLint; width: GLsizei; format: GLenum; _type: GLenum; const pixels: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexSubImage2DEXT: procedure(target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; width: GLsizei; height: GLsizei; format: GLenum; _type: GLenum; const pixels: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexSubImage3DEXT: procedure(target: GLenum; level: GLint; xoffset: GLint; yoffset: GLint; zoffset: GLint; width: GLsizei; height: GLsizei; depth: GLsizei; format: GLenum; _type: GLenum; const pixels: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_subtexture: Boolean; - -//***** GL_EXT_texture3D *****// -const - GL_PACK_SKIP_IMAGES_EXT = $806B; - GL_PACK_IMAGE_HEIGHT_EXT = $806C; - GL_UNPACK_SKIP_IMAGES_EXT = $806D; - GL_UNPACK_IMAGE_HEIGHT_EXT = $806E; - // GL_TEXTURE_3D_EXT { already defined } - // GL_PROXY_TEXTURE_3D_EXT { already defined } - GL_TEXTURE_DEPTH_EXT = $8071; - GL_TEXTURE_WRAP_R_EXT = $8072; - GL_MAX_3D_TEXTURE_SIZE_EXT = $8073; -var - glTexImage3DEXT: procedure(target: GLenum; level: GLint; internalformat: GLenum; width: GLsizei; height: GLsizei; depth: GLsizei; border: GLint; format: GLenum; _type: GLenum; const pixels: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_texture3D: Boolean; - -//***** GL_EXT_texture_compression_s3tc *****// -const - GL_COMPRESSED_RGB_S3TC_DXT1_EXT = $83F0; - GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = $83F1; - GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = $83F2; - GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = $83F3; - -function Load_GL_EXT_texture_compression_s3tc: Boolean; - -//***** GL_EXT_texture_env_add *****// - -function Load_GL_EXT_texture_env_add: Boolean; - -//***** GL_EXT_texture_env_combine *****// -const - GL_COMBINE_EXT = $8570; - GL_COMBINE_RGB_EXT = $8571; - GL_COMBINE_ALPHA_EXT = $8572; - GL_SOURCE0_RGB_EXT = $8580; - GL_SOURCE1_RGB_EXT = $8581; - GL_SOURCE2_RGB_EXT = $8582; - GL_SOURCE0_ALPHA_EXT = $8588; - GL_SOURCE1_ALPHA_EXT = $8589; - GL_SOURCE2_ALPHA_EXT = $858A; - GL_OPERAND0_RGB_EXT = $8590; - GL_OPERAND1_RGB_EXT = $8591; - GL_OPERAND2_RGB_EXT = $8592; - GL_OPERAND0_ALPHA_EXT = $8598; - GL_OPERAND1_ALPHA_EXT = $8599; - GL_OPERAND2_ALPHA_EXT = $859A; - GL_RGB_SCALE_EXT = $8573; - GL_ADD_SIGNED_EXT = $8574; - GL_INTERPOLATE_EXT = $8575; - GL_CONSTANT_EXT = $8576; - GL_PRIMARY_COLOR_EXT = $8577; - GL_PREVIOUS_EXT = $8578; - -function Load_GL_EXT_texture_env_combine: Boolean; - -//***** GL_EXT_texture_env_dot3 *****// -const - GL_DOT3_RGB_EXT = $8740; - GL_DOT3_RGBA_EXT = $8741; - -function Load_GL_EXT_texture_env_dot3: Boolean; - -//***** GL_EXT_texture_filter_anisotropic *****// -const - GL_TEXTURE_MAX_ANISOTROPY_EXT = $84FE; - GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = $84FF; - -function Load_GL_EXT_texture_filter_anisotropic: Boolean; - -//***** GL_EXT_texture_lod_bias *****// -const - GL_TEXTURE_FILTER_CONTROL_EXT = $8500; - GL_TEXTURE_LOD_BIAS_EXT = $8501; - GL_MAX_TEXTURE_LOD_BIAS_EXT = $84FD; - -function Load_GL_EXT_texture_lod_bias: Boolean; - -//***** GL_EXT_texture_object *****// -const - GL_TEXTURE_PRIORITY_EXT = $8066; - GL_TEXTURE_RESIDENT_EXT = $8067; - GL_TEXTURE_1D_BINDING_EXT = $8068; - GL_TEXTURE_2D_BINDING_EXT = $8069; - GL_TEXTURE_3D_BINDING_EXT = $806A; -var - glGenTexturesEXT: procedure(n: GLsizei; textures: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteTexturesEXT: procedure(n: GLsizei; const textures: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindTextureEXT: procedure(target: GLenum; texture: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPrioritizeTexturesEXT: procedure(n: GLsizei; const textures: PGLuint; const priorities: PGLclampf); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glAreTexturesResidentEXT: function(n: GLsizei; const textures: PGLuint; residences: PGLboolean): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsTextureEXT: function(texture: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_texture_object: Boolean; - -//***** GL_EXT_vertex_array *****// -const - GL_VERTEX_ARRAY_EXT = $8074; - GL_NORMAL_ARRAY_EXT = $8075; - GL_COLOR_ARRAY_EXT = $8076; - GL_INDEX_ARRAY_EXT = $8077; - GL_TEXTURE_COORD_ARRAY_EXT = $8078; - GL_EDGE_FLAG_ARRAY_EXT = $8079; - GL_DOUBLE_EXT = $140A; - GL_VERTEX_ARRAY_SIZE_EXT = $807A; - GL_VERTEX_ARRAY_TYPE_EXT = $807B; - GL_VERTEX_ARRAY_STRIDE_EXT = $807C; - GL_VERTEX_ARRAY_COUNT_EXT = $807D; - GL_NORMAL_ARRAY_TYPE_EXT = $807E; - GL_NORMAL_ARRAY_STRIDE_EXT = $807F; - GL_NORMAL_ARRAY_COUNT_EXT = $8080; - GL_COLOR_ARRAY_SIZE_EXT = $8081; - GL_COLOR_ARRAY_TYPE_EXT = $8082; - GL_COLOR_ARRAY_STRIDE_EXT = $8083; - GL_COLOR_ARRAY_COUNT_EXT = $8084; - GL_INDEX_ARRAY_TYPE_EXT = $8085; - GL_INDEX_ARRAY_STRIDE_EXT = $8086; - GL_INDEX_ARRAY_COUNT_EXT = $8087; - GL_TEXTURE_COORD_ARRAY_SIZE_EXT = $8088; - GL_TEXTURE_COORD_ARRAY_TYPE_EXT = $8089; - GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = $808A; - GL_TEXTURE_COORD_ARRAY_COUNT_EXT = $808B; - GL_EDGE_FLAG_ARRAY_STRIDE_EXT = $808C; - GL_EDGE_FLAG_ARRAY_COUNT_EXT = $808D; - GL_VERTEX_ARRAY_POINTER_EXT = $808E; - GL_NORMAL_ARRAY_POINTER_EXT = $808F; - GL_COLOR_ARRAY_POINTER_EXT = $8090; - GL_INDEX_ARRAY_POINTER_EXT = $8091; - GL_TEXTURE_COORD_ARRAY_POINTER_EXT = $8092; - GL_EDGE_FLAG_ARRAY_POINTER_EXT = $8093; -var - glArrayElementEXT: procedure(i: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDrawArraysEXT: procedure(mode: GLenum; first: GLint; count: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexPointerEXT: procedure(size: GLint; _type: GLenum; stride: GLsizei; count: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalPointerEXT: procedure(_type: GLenum; stride: GLsizei; count: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorPointerEXT: procedure(size: GLint; _type: GLenum; stride: GLsizei; count: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIndexPointerEXT: procedure(_type: GLenum; stride: GLsizei; count: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoordPointerEXT: procedure(size: GLint; _type: GLenum; stride: GLsizei; count: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEdgeFlagPointerEXT: procedure(stride: GLsizei; count: GLsizei; const pointer: PGLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetPointervEXT: procedure(pname: GLenum; params: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_vertex_array: Boolean; - -//***** GL_EXT_vertex_shader *****// -const - GL_VERTEX_SHADER_EXT = $8780; - GL_VARIANT_VALUE_EXT = $87E4; - GL_VARIANT_DATATYPE_EXT = $87E5; - GL_VARIANT_ARRAY_STRIDE_EXT = $87E6; - GL_VARIANT_ARRAY_TYPE_EXT = $87E7; - GL_VARIANT_ARRAY_EXT = $87E8; - GL_VARIANT_ARRAY_POINTER_EXT = $87E9; - GL_INVARIANT_VALUE_EXT = $87EA; - GL_INVARIANT_DATATYPE_EXT = $87EB; - GL_LOCAL_CONSTANT_VALUE_EXT = $87EC; - GL_LOCAL_CONSTANT_DATATYPE_EXT = $87ED; - GL_OP_INDEX_EXT = $8782; - GL_OP_NEGATE_EXT = $8783; - GL_OP_DOT3_EXT = $8784; - GL_OP_DOT4_EXT = $8785; - GL_OP_MUL_EXT = $8786; - GL_OP_ADD_EXT = $8787; - GL_OP_MADD_EXT = $8788; - GL_OP_FRAC_EXT = $8789; - GL_OP_MAX_EXT = $878A; - GL_OP_MIN_EXT = $878B; - GL_OP_SET_GE_EXT = $878C; - GL_OP_SET_LT_EXT = $878D; - GL_OP_CLAMP_EXT = $878E; - GL_OP_FLOOR_EXT = $878F; - GL_OP_ROUND_EXT = $8790; - GL_OP_EXP_BASE_2_EXT = $8791; - GL_OP_LOG_BASE_2_EXT = $8792; - GL_OP_POWER_EXT = $8793; - GL_OP_RECIP_EXT = $8794; - GL_OP_RECIP_SQRT_EXT = $8795; - GL_OP_SUB_EXT = $8796; - GL_OP_CROSS_PRODUCT_EXT = $8797; - GL_OP_MULTIPLY_MATRIX_EXT = $8798; - GL_OP_MOV_EXT = $8799; - GL_OUTPUT_VERTEX_EXT = $879A; - GL_OUTPUT_COLOR0_EXT = $879B; - GL_OUTPUT_COLOR1_EXT = $879C; - GL_OUTPUT_TEXTURE_COORD0_EXT = $879D; - GL_OUTPUT_TEXTURE_COORD1_EXT = $879E; - GL_OUTPUT_TEXTURE_COORD2_EXT = $879F; - GL_OUTPUT_TEXTURE_COORD3_EXT = $87A0; - GL_OUTPUT_TEXTURE_COORD4_EXT = $87A1; - GL_OUTPUT_TEXTURE_COORD5_EXT = $87A2; - GL_OUTPUT_TEXTURE_COORD6_EXT = $87A3; - GL_OUTPUT_TEXTURE_COORD7_EXT = $87A4; - GL_OUTPUT_TEXTURE_COORD8_EXT = $87A5; - GL_OUTPUT_TEXTURE_COORD9_EXT = $87A6; - GL_OUTPUT_TEXTURE_COORD10_EXT = $87A7; - GL_OUTPUT_TEXTURE_COORD11_EXT = $87A8; - GL_OUTPUT_TEXTURE_COORD12_EXT = $87A9; - GL_OUTPUT_TEXTURE_COORD13_EXT = $87AA; - GL_OUTPUT_TEXTURE_COORD14_EXT = $87AB; - GL_OUTPUT_TEXTURE_COORD15_EXT = $87AC; - GL_OUTPUT_TEXTURE_COORD16_EXT = $87AD; - GL_OUTPUT_TEXTURE_COORD17_EXT = $87AE; - GL_OUTPUT_TEXTURE_COORD18_EXT = $87AF; - GL_OUTPUT_TEXTURE_COORD19_EXT = $87B0; - GL_OUTPUT_TEXTURE_COORD20_EXT = $87B1; - GL_OUTPUT_TEXTURE_COORD21_EXT = $87B2; - GL_OUTPUT_TEXTURE_COORD22_EXT = $87B3; - GL_OUTPUT_TEXTURE_COORD23_EXT = $87B4; - GL_OUTPUT_TEXTURE_COORD24_EXT = $87B5; - GL_OUTPUT_TEXTURE_COORD25_EXT = $87B6; - GL_OUTPUT_TEXTURE_COORD26_EXT = $87B7; - GL_OUTPUT_TEXTURE_COORD27_EXT = $87B8; - GL_OUTPUT_TEXTURE_COORD28_EXT = $87B9; - GL_OUTPUT_TEXTURE_COORD29_EXT = $87BA; - GL_OUTPUT_TEXTURE_COORD30_EXT = $87BB; - GL_OUTPUT_TEXTURE_COORD31_EXT = $87BC; - GL_OUTPUT_FOG_EXT = $87BD; - GL_SCALAR_EXT = $87BE; - GL_VECTOR_EXT = $87BF; - GL_MATRIX_EXT = $87C0; - GL_VARIANT_EXT = $87C1; - GL_INVARIANT_EXT = $87C2; - GL_LOCAL_CONSTANT_EXT = $87C3; - GL_LOCAL_EXT = $87C4; - GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT = $87C5; - GL_MAX_VERTEX_SHADER_VARIANTS_EXT = $87C6; - GL_MAX_VERTEX_SHADER_INVARIANTS_EXT = $87C7; - GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = $87C8; - GL_MAX_VERTEX_SHADER_LOCALS_EXT = $87C9; - GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT = $87CA; - GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT = $87CB; - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = $87CC; - GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT = $87CD; - GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT = $87CE; - GL_VERTEX_SHADER_INSTRUCTIONS_EXT = $87CF; - GL_VERTEX_SHADER_VARIANTS_EXT = $87D0; - GL_VERTEX_SHADER_INVARIANTS_EXT = $87D1; - GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = $87D2; - GL_VERTEX_SHADER_LOCALS_EXT = $87D3; - GL_VERTEX_SHADER_BINDING_EXT = $8781; - GL_VERTEX_SHADER_OPTIMIZED_EXT = $87D4; - GL_X_EXT = $87D5; - GL_Y_EXT = $87D6; - GL_Z_EXT = $87D7; - GL_W_EXT = $87D8; - GL_NEGATIVE_X_EXT = $87D9; - GL_NEGATIVE_Y_EXT = $87DA; - GL_NEGATIVE_Z_EXT = $87DB; - GL_NEGATIVE_W_EXT = $87DC; - GL_ZERO_EXT = $87DD; - GL_ONE_EXT = $87DE; - GL_NEGATIVE_ONE_EXT = $87DF; - GL_NORMALIZED_RANGE_EXT = $87E0; - GL_FULL_RANGE_EXT = $87E1; - GL_CURRENT_VERTEX_EXT = $87E2; - GL_MVP_MATRIX_EXT = $87E3; -var - glBeginVertexShaderEXT: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEndVertexShaderEXT: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindVertexShaderEXT: procedure(id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenVertexShadersEXT: function(range: GLuint): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteVertexShaderEXT: procedure(id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glShaderOp1EXT: procedure(op: GLenum; res: GLuint; arg1: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glShaderOp2EXT: procedure(op: GLenum; res: GLuint; arg1: GLuint; arg2: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glShaderOp3EXT: procedure(op: GLenum; res: GLuint; arg1: GLuint; arg2: GLuint; arg3: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSwizzleEXT: procedure(res: GLuint; _in: GLuint; outX: GLenum; outY: GLenum; outZ: GLenum; outW: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWriteMaskEXT: procedure(res: GLuint; _in: GLuint; outX: GLenum; outY: GLenum; outZ: GLenum; outW: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glInsertComponentEXT: procedure(res: GLuint; src: GLuint; num: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glExtractComponentEXT: procedure(res: GLuint; src: GLuint; num: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenSymbolsEXT: function(datatype: GLenum; storagetype: GLenum; range: GLenum; components: GLuint): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSetInvariantEXT: procedure(id: GLuint; _type: GLenum; addr: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSetLocalConstantEXT: procedure(id: GLuint; _type: GLenum; addr: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantbvEXT: procedure(id: GLuint; addr: PGLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantsvEXT: procedure(id: GLuint; addr: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantivEXT: procedure(id: GLuint; addr: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantfvEXT: procedure(id: GLuint; addr: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantdvEXT: procedure(id: GLuint; addr: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantubvEXT: procedure(id: GLuint; addr: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantusvEXT: procedure(id: GLuint; addr: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantuivEXT: procedure(id: GLuint; addr: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantPointerEXT: procedure(id: GLuint; _type: GLenum; stride: GLuint; addr: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEnableVariantClientStateEXT: procedure(id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDisableVariantClientStateEXT: procedure(id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindLightParameterEXT: function(light: GLenum; value: GLenum): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindMaterialParameterEXT: function(face: GLenum; value: GLenum): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindTexGenParameterEXT: function(_unit: GLenum; coord: GLenum; value: GLenum): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindTextureUnitParameterEXT: function(_unit: GLenum; value: GLenum): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindParameterEXT: function(value: GLenum): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsVariantEnabledEXT: function(id: GLuint; cap: GLenum): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVariantBooleanvEXT: procedure(id: GLuint; value: GLenum; data: PGLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVariantIntegervEXT: procedure(id: GLuint; value: GLenum; data: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVariantFloatvEXT: procedure(id: GLuint; value: GLenum; data: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVariantPointervEXT: procedure(id: GLuint; value: GLenum; data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetInvariantBooleanvEXT: procedure(id: GLuint; value: GLenum; data: PGLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetInvariantIntegervEXT: procedure(id: GLuint; value: GLenum; data: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetInvariantFloatvEXT: procedure(id: GLuint; value: GLenum; data: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetLocalConstantBooleanvEXT: procedure(id: GLuint; value: GLenum; data: PGLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetLocalConstantIntegervEXT: procedure(id: GLuint; value: GLenum; data: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetLocalConstantFloatvEXT: procedure(id: GLuint; value: GLenum; data: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_vertex_shader: Boolean; - -//***** GL_EXT_vertex_weighting *****// -const - GL_VERTEX_WEIGHTING_EXT = $8509; - GL_MODELVIEW0_EXT = $1700; - GL_MODELVIEW1_EXT = $850A; - GL_MODELVIEW0_MATRIX_EXT = $0BA6; - GL_MODELVIEW1_MATRIX_EXT = $8506; - GL_CURRENT_VERTEX_WEIGHT_EXT = $850B; - GL_VERTEX_WEIGHT_ARRAY_EXT = $850C; - GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT = $850D; - GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT = $850E; - GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT = $850F; - GL_MODELVIEW0_STACK_DEPTH_EXT = $0BA3; - GL_MODELVIEW1_STACK_DEPTH_EXT = $8502; - GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT = $8510; -var - glVertexWeightfEXT: procedure(weight: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexWeightfvEXT: procedure(weight: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexWeightPointerEXT: procedure(size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_vertex_weighting: Boolean; - -//***** GL_HP_occlusion_test *****// -const - GL_OCCLUSION_TEST_HP = $8165; - GL_OCCLUSION_TEST_RESULT_HP = $8166; - -function Load_GL_HP_occlusion_test: Boolean; - -//***** GL_NV_blend_square *****// - -function Load_GL_NV_blend_square: Boolean; - -//***** GL_NV_copy_depth_to_color *****// -const - GL_DEPTH_STENCIL_TO_RGBA_NV = $886E; - GL_DEPTH_STENCIL_TO_BGRA_NV = $886F; - -function Load_GL_NV_copy_depth_to_color: Boolean; - -//***** GL_NV_depth_clamp *****// -const - GL_DEPTH_CLAMP_NV = $864F; - -function Load_GL_NV_depth_clamp: Boolean; - -//***** GL_NV_evaluators *****// -const - GL_EVAL_2D_NV = $86C0; - GL_EVAL_TRIANGULAR_2D_NV = $86C1; - GL_MAP_TESSELLATION_NV = $86C2; - GL_MAP_ATTRIB_U_ORDER_NV = $86C3; - GL_MAP_ATTRIB_V_ORDER_NV = $86C4; - GL_EVAL_FRACTIONAL_TESSELLATION_NV = $86C5; - GL_EVAL_VERTEX_ATTRIB0_NV = $86C6; - GL_EVAL_VERTEX_ATTRIB1_NV = $86C7; - GL_EVAL_VERTEX_ATTRIB2_NV = $86C8; - GL_EVAL_VERTEX_ATTRIB3_NV = $86C9; - GL_EVAL_VERTEX_ATTRIB4_NV = $86CA; - GL_EVAL_VERTEX_ATTRIB5_NV = $86CB; - GL_EVAL_VERTEX_ATTRIB6_NV = $86CC; - GL_EVAL_VERTEX_ATTRIB7_NV = $86CD; - GL_EVAL_VERTEX_ATTRIB8_NV = $86CE; - GL_EVAL_VERTEX_ATTRIB9_NV = $86CF; - GL_EVAL_VERTEX_ATTRIB10_NV = $86D0; - GL_EVAL_VERTEX_ATTRIB11_NV = $86D1; - GL_EVAL_VERTEX_ATTRIB12_NV = $86D2; - GL_EVAL_VERTEX_ATTRIB13_NV = $86D3; - GL_EVAL_VERTEX_ATTRIB14_NV = $86D4; - GL_EVAL_VERTEX_ATTRIB15_NV = $86D5; - GL_MAX_MAP_TESSELLATION_NV = $86D6; - GL_MAX_RATIONAL_EVAL_ORDER_NV = $86D7; -var - glMapControlPointsNV: procedure(target: GLenum; index: GLuint; _type: GLenum; ustride: GLsizei; vstride: GLsizei; uorder: GLint; vorder: GLint; _packed: GLboolean; const points: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMapParameterivNV: procedure(target: GLenum; pname: GLenum; const params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMapParameterfvNV: procedure(target: GLenum; pname: GLenum; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMapControlPointsNV: procedure(target: GLenum; index: GLuint; _type: GLenum; ustride: GLsizei; vstride: GLsizei; _packed: GLboolean; points: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMapParameterivNV: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMapParameterfvNV: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMapAttribParameterivNV: procedure(target: GLenum; index: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetMapAttribParameterfvNV: procedure(target: GLenum; index: GLuint; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEvalMapsNV: procedure(target: GLenum; mode: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_evaluators: Boolean; - -//***** GL_NV_fence *****// -const - GL_ALL_COMPLETED_NV = $84F2; - GL_FENCE_STATUS_NV = $84F3; - GL_FENCE_CONDITION_NV = $84F4; -var - glGenFencesNV: procedure(n: GLsizei; fences: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteFencesNV: procedure(n: GLsizei; const fences: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSetFenceNV: procedure(fence: GLuint; condition: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTestFenceNV: function(fence: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFinishFenceNV: procedure(fence: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsFenceNV: function(fence: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetFenceivNV: procedure(fence: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_fence: Boolean; - -//***** GL_NV_fog_distance *****// -const - GL_FOG_DISTANCE_MODE_NV = $855A; - GL_EYE_RADIAL_NV = $855B; - GL_EYE_PLANE_ABSOLUTE_NV = $855C; - -function Load_GL_NV_fog_distance: Boolean; - -//***** GL_NV_light_max_exponent *****// -const - GL_MAX_SHININESS_NV = $8504; - GL_MAX_SPOT_EXPONENT_NV = $8505; - -function Load_GL_NV_light_max_exponent: Boolean; - -//***** GL_NV_multisample_filter_hint *****// -const - GL_MULTISAMPLE_FILTER_HINT_NV = $8534; - -function Load_GL_NV_multisample_filter_hint: Boolean; - -//***** GL_NV_occlusion_query *****// - // GL_OCCLUSION_TEST_HP { already defined } - // GL_OCCLUSION_TEST_RESULT_HP { already defined } -const - GL_PIXEL_COUNTER_BITS_NV = $8864; - GL_CURRENT_OCCLUSION_QUERY_ID_NV = $8865; - GL_PIXEL_COUNT_NV = $8866; - GL_PIXEL_COUNT_AVAILABLE_NV = $8867; -var - glGenOcclusionQueriesNV: procedure(n: GLsizei; ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteOcclusionQueriesNV: procedure(n: GLsizei; const ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsOcclusionQueryNV: function(id: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBeginOcclusionQueryNV: procedure(id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEndOcclusionQueryNV: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetOcclusionQueryivNV: procedure(id: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetOcclusionQueryuivNV: procedure(id: GLuint; pname: GLenum; params: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_occlusion_query: Boolean; - -//***** GL_NV_packed_depth_stencil *****// -const - GL_DEPTH_STENCIL_NV = $84F9; - GL_UNSIGNED_INT_24_8_NV = $84FA; - -function Load_GL_NV_packed_depth_stencil: Boolean; - -//***** GL_NV_point_sprite *****// -const - GL_POINT_SPRITE_NV = $8861; - GL_COORD_REPLACE_NV = $8862; - GL_POINT_SPRITE_R_MODE_NV = $8863; -var - glPointParameteriNV: procedure(pname: GLenum; param: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPointParameterivNV: procedure(pname: GLenum; const params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_point_sprite: Boolean; - -//***** GL_NV_register_combiners *****// -const - GL_REGISTER_COMBINERS_NV = $8522; - GL_COMBINER0_NV = $8550; - GL_COMBINER1_NV = $8551; - GL_COMBINER2_NV = $8552; - GL_COMBINER3_NV = $8553; - GL_COMBINER4_NV = $8554; - GL_COMBINER5_NV = $8555; - GL_COMBINER6_NV = $8556; - GL_COMBINER7_NV = $8557; - GL_VARIABLE_A_NV = $8523; - GL_VARIABLE_B_NV = $8524; - GL_VARIABLE_C_NV = $8525; - GL_VARIABLE_D_NV = $8526; - GL_VARIABLE_E_NV = $8527; - GL_VARIABLE_F_NV = $8528; - GL_VARIABLE_G_NV = $8529; - GL_CONSTANT_COLOR0_NV = $852A; - GL_CONSTANT_COLOR1_NV = $852B; - GL_PRIMARY_COLOR_NV = $852C; - GL_SECONDARY_COLOR_NV = $852D; - GL_SPARE0_NV = $852E; - GL_SPARE1_NV = $852F; - GL_UNSIGNED_IDENTITY_NV = $8536; - GL_UNSIGNED_INVERT_NV = $8537; - GL_EXPAND_NORMAL_NV = $8538; - GL_EXPAND_NEGATE_NV = $8539; - GL_HALF_BIAS_NORMAL_NV = $853A; - GL_HALF_BIAS_NEGATE_NV = $853B; - GL_SIGNED_IDENTITY_NV = $853C; - GL_SIGNED_NEGATE_NV = $853D; - GL_E_TIMES_F_NV = $8531; - GL_SPARE0_PLUS_SECONDARY_COLOR_NV = $8532; - GL_SCALE_BY_TWO_NV = $853E; - GL_SCALE_BY_FOUR_NV = $853F; - GL_SCALE_BY_ONE_HALF_NV = $8540; - GL_BIAS_BY_NEGATIVE_ONE_HALF_NV = $8541; - GL_DISCARD_NV = $8530; - GL_COMBINER_INPUT_NV = $8542; - GL_COMBINER_MAPPING_NV = $8543; - GL_COMBINER_COMPONENT_USAGE_NV = $8544; - GL_COMBINER_AB_DOT_PRODUCT_NV = $8545; - GL_COMBINER_CD_DOT_PRODUCT_NV = $8546; - GL_COMBINER_MUX_SUM_NV = $8547; - GL_COMBINER_SCALE_NV = $8548; - GL_COMBINER_BIAS_NV = $8549; - GL_COMBINER_AB_OUTPUT_NV = $854A; - GL_COMBINER_CD_OUTPUT_NV = $854B; - GL_COMBINER_SUM_OUTPUT_NV = $854C; - GL_NUM_GENERAL_COMBINERS_NV = $854E; - GL_COLOR_SUM_CLAMP_NV = $854F; - GL_MAX_GENERAL_COMBINERS_NV = $854D; -var - glCombinerParameterfvNV: procedure(pname: GLenum; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCombinerParameterivNV: procedure(pname: GLenum; const params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCombinerParameterfNV: procedure(pname: GLenum; param: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCombinerParameteriNV: procedure(pname: GLenum; param: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCombinerInputNV: procedure(stage: GLenum; portion: GLenum; variable: GLenum; input: GLenum; mapping: GLenum; componentUsage: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCombinerOutputNV: procedure(stage: GLenum; portion: GLenum; abOutput: GLenum; cdOutput: GLenum; sumOutput: GLenum; scale: GLenum; bias: GLenum; abDotProduct: GLboolean; cdDotProduct: GLboolean; muxSum: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFinalCombinerInputNV: procedure(variable: GLenum; input: GLenum; mapping: GLenum; componentUsage: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetCombinerInputParameterfvNV: procedure(stage: GLenum; portion: GLenum; variable: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetCombinerInputParameterivNV: procedure(stage: GLenum; portion: GLenum; variable: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetCombinerOutputParameterfvNV: procedure(stage: GLenum; portion: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetCombinerOutputParameterivNV: procedure(stage: GLenum; portion: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetFinalCombinerInputParameterfvNV: procedure(variable: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetFinalCombinerInputParameterivNV: procedure(variable: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_register_combiners: Boolean; - -//***** GL_NV_register_combiners2 *****// -const - GL_PER_STAGE_CONSTANTS_NV = $8535; -var - glCombinerStageParameterfvNV: procedure(stage: GLenum; pname: GLenum; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetCombinerStageParameterfvNV: procedure(stage: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_register_combiners2: Boolean; - -//***** GL_NV_texgen_emboss *****// -const - GL_EMBOSS_MAP_NV = $855F; - GL_EMBOSS_LIGHT_NV = $855D; - GL_EMBOSS_CONSTANT_NV = $855E; - -function Load_GL_NV_texgen_emboss: Boolean; - -//***** GL_NV_texgen_reflection *****// -const - GL_NORMAL_MAP_NV = $8511; - GL_REFLECTION_MAP_NV = $8512; - -function Load_GL_NV_texgen_reflection: Boolean; - -//***** GL_NV_texture_compression_vtc *****// - // GL_COMPRESSED_RGB_S3TC_DXT1_EXT { already defined } - // GL_COMPRESSED_RGBA_S3TC_DXT1_EXT { already defined } - // GL_COMPRESSED_RGBA_S3TC_DXT3_EXT { already defined } - // GL_COMPRESSED_RGBA_S3TC_DXT5_EXT { already defined } - -function Load_GL_NV_texture_compression_vtc: Boolean; - -//***** GL_NV_texture_env_combine4 *****// -const - GL_COMBINE4_NV = $8503; - GL_SOURCE3_RGB_NV = $8583; - GL_SOURCE3_ALPHA_NV = $858B; - GL_OPERAND3_RGB_NV = $8593; - GL_OPERAND3_ALPHA_NV = $859B; - -function Load_GL_NV_texture_env_combine4: Boolean; - -//***** GL_NV_texture_rectangle *****// -const - GL_TEXTURE_RECTANGLE_NV = $84F5; - GL_TEXTURE_BINDING_RECTANGLE_NV = $84F6; - GL_PROXY_TEXTURE_RECTANGLE_NV = $84F7; - GL_MAX_RECTANGLE_TEXTURE_SIZE_NV = $84F8; - -function Load_GL_NV_texture_rectangle: Boolean; - -//***** GL_NV_texture_shader *****// -const - GL_TEXTURE_SHADER_NV = $86DE; - GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV = $86D9; - GL_SHADER_OPERATION_NV = $86DF; - GL_CULL_MODES_NV = $86E0; - GL_OFFSET_TEXTURE_MATRIX_NV = $86E1; - GL_OFFSET_TEXTURE_SCALE_NV = $86E2; - GL_OFFSET_TEXTURE_BIAS_NV = $86E3; - GL_PREVIOUS_TEXTURE_INPUT_NV = $86E4; - GL_CONST_EYE_NV = $86E5; - GL_SHADER_CONSISTENT_NV = $86DD; - GL_PASS_THROUGH_NV = $86E6; - GL_CULL_FRAGMENT_NV = $86E7; - GL_OFFSET_TEXTURE_2D_NV = $86E8; - GL_OFFSET_TEXTURE_RECTANGLE_NV = $864C; - GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV = $864D; - GL_DEPENDENT_AR_TEXTURE_2D_NV = $86E9; - GL_DEPENDENT_GB_TEXTURE_2D_NV = $86EA; - GL_DOT_PRODUCT_NV = $86EC; - GL_DOT_PRODUCT_DEPTH_REPLACE_NV = $86ED; - GL_DOT_PRODUCT_TEXTURE_2D_NV = $86EE; - GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV = $864E; - GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV = $86F0; - GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV = $86F1; - GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV = $86F2; - GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV = $86F3; - GL_HILO_NV = $86F4; - GL_DSDT_NV = $86F5; - GL_DSDT_MAG_NV = $86F6; - GL_DSDT_MAG_VIB_NV = $86F7; - GL_UNSIGNED_INT_S8_S8_8_8_NV = $86DA; - GL_UNSIGNED_INT_8_8_S8_S8_REV_NV = $86DB; - GL_SIGNED_RGBA_NV = $86FB; - GL_SIGNED_RGBA8_NV = $86FC; - GL_SIGNED_RGB_NV = $86FE; - GL_SIGNED_RGB8_NV = $86FF; - GL_SIGNED_LUMINANCE_NV = $8701; - GL_SIGNED_LUMINANCE8_NV = $8702; - GL_SIGNED_LUMINANCE_ALPHA_NV = $8703; - GL_SIGNED_LUMINANCE8_ALPHA8_NV = $8704; - GL_SIGNED_ALPHA_NV = $8705; - GL_SIGNED_ALPHA8_NV = $8706; - GL_SIGNED_INTENSITY_NV = $8707; - GL_SIGNED_INTENSITY8_NV = $8708; - GL_SIGNED_RGB_UNSIGNED_ALPHA_NV = $870C; - GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV = $870D; - GL_HILO16_NV = $86F8; - GL_SIGNED_HILO_NV = $86F9; - GL_SIGNED_HILO16_NV = $86FA; - GL_DSDT8_NV = $8709; - GL_DSDT8_MAG8_NV = $870A; - GL_DSDT_MAG_INTENSITY_NV = $86DC; - GL_DSDT8_MAG8_INTENSITY8_NV = $870B; - GL_HI_SCALE_NV = $870E; - GL_LO_SCALE_NV = $870F; - GL_DS_SCALE_NV = $8710; - GL_DT_SCALE_NV = $8711; - GL_MAGNITUDE_SCALE_NV = $8712; - GL_VIBRANCE_SCALE_NV = $8713; - GL_HI_BIAS_NV = $8714; - GL_LO_BIAS_NV = $8715; - GL_DS_BIAS_NV = $8716; - GL_DT_BIAS_NV = $8717; - GL_MAGNITUDE_BIAS_NV = $8718; - GL_VIBRANCE_BIAS_NV = $8719; - GL_TEXTURE_BORDER_VALUES_NV = $871A; - GL_TEXTURE_HI_SIZE_NV = $871B; - GL_TEXTURE_LO_SIZE_NV = $871C; - GL_TEXTURE_DS_SIZE_NV = $871D; - GL_TEXTURE_DT_SIZE_NV = $871E; - GL_TEXTURE_MAG_SIZE_NV = $871F; - -function Load_GL_NV_texture_shader: Boolean; - -//***** GL_NV_texture_shader2 *****// -const - GL_DOT_PRODUCT_TEXTURE_3D_NV = $86EF; - // GL_HILO_NV { already defined } - // GL_DSDT_NV { already defined } - // GL_DSDT_MAG_NV { already defined } - // GL_DSDT_MAG_VIB_NV { already defined } - // GL_UNSIGNED_INT_S8_S8_8_8_NV { already defined } - // GL_UNSIGNED_INT_8_8_S8_S8_REV_NV { already defined } - // GL_SIGNED_RGBA_NV { already defined } - // GL_SIGNED_RGBA8_NV { already defined } - // GL_SIGNED_RGB_NV { already defined } - // GL_SIGNED_RGB8_NV { already defined } - // GL_SIGNED_LUMINANCE_NV { already defined } - // GL_SIGNED_LUMINANCE8_NV { already defined } - // GL_SIGNED_LUMINANCE_ALPHA_NV { already defined } - // GL_SIGNED_LUMINANCE8_ALPHA8_NV { already defined } - // GL_SIGNED_ALPHA_NV { already defined } - // GL_SIGNED_ALPHA8_NV { already defined } - // GL_SIGNED_INTENSITY_NV { already defined } - // GL_SIGNED_INTENSITY8_NV { already defined } - // GL_SIGNED_RGB_UNSIGNED_ALPHA_NV { already defined } - // GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV { already defined } - // GL_HILO16_NV { already defined } - // GL_SIGNED_HILO_NV { already defined } - // GL_SIGNED_HILO16_NV { already defined } - // GL_DSDT8_NV { already defined } - // GL_DSDT8_MAG8_NV { already defined } - // GL_DSDT_MAG_INTENSITY_NV { already defined } - // GL_DSDT8_MAG8_INTENSITY8_NV { already defined } - -function Load_GL_NV_texture_shader2: Boolean; - -//***** GL_NV_texture_shader3 *****// -const - GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV = $8850; - GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV = $8851; - GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV = $8852; - GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV = $8853; - GL_OFFSET_HILO_TEXTURE_2D_NV = $8854; - GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV = $8855; - GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV = $8856; - GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV = $8857; - GL_DEPENDENT_HILO_TEXTURE_2D_NV = $8858; - GL_DEPENDENT_RGB_TEXTURE_3D_NV = $8859; - GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV = $885A; - GL_DOT_PRODUCT_PASS_THROUGH_NV = $885B; - GL_DOT_PRODUCT_TEXTURE_1D_NV = $885C; - GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV = $885D; - GL_HILO8_NV = $885E; - GL_SIGNED_HILO8_NV = $885F; - GL_FORCE_BLUE_TO_ONE_NV = $8860; - -function Load_GL_NV_texture_shader3: Boolean; - -//***** GL_NV_vertex_array_range *****// -const - GL_VERTEX_ARRAY_RANGE_NV = $851D; - GL_VERTEX_ARRAY_RANGE_LENGTH_NV = $851E; - GL_VERTEX_ARRAY_RANGE_VALID_NV = $851F; - GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV = $8520; - GL_VERTEX_ARRAY_RANGE_POINTER_NV = $8521; -var - glVertexArrayRangeNV: procedure(length: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFlushVertexArrayRangeNV: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} -{$IFDEF WINDOWS} - wglAllocateMemoryNV: function(size: GLsizei; readFrequency: GLfloat; writeFrequency: GLfloat; priority: GLfloat): PGLvoid; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglFreeMemoryNV: procedure(pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} -{$ENDIF} - -function Load_GL_NV_vertex_array_range: Boolean; - -//***** GL_NV_vertex_array_range2 *****// -const - GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV = $8533; - -function Load_GL_NV_vertex_array_range2: Boolean; - -//***** GL_NV_vertex_program *****// -const - GL_VERTEX_PROGRAM_NV = $8620; - GL_VERTEX_PROGRAM_POINT_SIZE_NV = $8642; - GL_VERTEX_PROGRAM_TWO_SIDE_NV = $8643; - GL_VERTEX_STATE_PROGRAM_NV = $8621; - GL_ATTRIB_ARRAY_SIZE_NV = $8623; - GL_ATTRIB_ARRAY_STRIDE_NV = $8624; - GL_ATTRIB_ARRAY_TYPE_NV = $8625; - GL_CURRENT_ATTRIB_NV = $8626; - GL_PROGRAM_PARAMETER_NV = $8644; - GL_ATTRIB_ARRAY_POINTER_NV = $8645; - GL_PROGRAM_TARGET_NV = $8646; - GL_PROGRAM_LENGTH_NV = $8627; - GL_PROGRAM_RESIDENT_NV = $8647; - GL_PROGRAM_STRING_NV = $8628; - GL_TRACK_MATRIX_NV = $8648; - GL_TRACK_MATRIX_TRANSFORM_NV = $8649; - GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV = $862E; - GL_MAX_TRACK_MATRICES_NV = $862F; - GL_CURRENT_MATRIX_STACK_DEPTH_NV = $8640; - GL_CURRENT_MATRIX_NV = $8641; - GL_VERTEX_PROGRAM_BINDING_NV = $864A; - GL_PROGRAM_ERROR_POSITION_NV = $864B; - GL_MODELVIEW_PROJECTION_NV = $8629; - GL_MATRIX0_NV = $8630; - GL_MATRIX1_NV = $8631; - GL_MATRIX2_NV = $8632; - GL_MATRIX3_NV = $8633; - GL_MATRIX4_NV = $8634; - GL_MATRIX5_NV = $8635; - GL_MATRIX6_NV = $8636; - GL_MATRIX7_NV = $8637; - GL_IDENTITY_NV = $862A; - GL_INVERSE_NV = $862B; - GL_TRANSPOSE_NV = $862C; - GL_INVERSE_TRANSPOSE_NV = $862D; - GL_VERTEX_ATTRIB_ARRAY0_NV = $8650; - GL_VERTEX_ATTRIB_ARRAY1_NV = $8651; - GL_VERTEX_ATTRIB_ARRAY2_NV = $8652; - GL_VERTEX_ATTRIB_ARRAY3_NV = $8653; - GL_VERTEX_ATTRIB_ARRAY4_NV = $8654; - GL_VERTEX_ATTRIB_ARRAY5_NV = $8655; - GL_VERTEX_ATTRIB_ARRAY6_NV = $8656; - GL_VERTEX_ATTRIB_ARRAY7_NV = $8657; - GL_VERTEX_ATTRIB_ARRAY8_NV = $8658; - GL_VERTEX_ATTRIB_ARRAY9_NV = $8659; - GL_VERTEX_ATTRIB_ARRAY10_NV = $865A; - GL_VERTEX_ATTRIB_ARRAY11_NV = $865B; - GL_VERTEX_ATTRIB_ARRAY12_NV = $865C; - GL_VERTEX_ATTRIB_ARRAY13_NV = $865D; - GL_VERTEX_ATTRIB_ARRAY14_NV = $865E; - GL_VERTEX_ATTRIB_ARRAY15_NV = $865F; - GL_MAP1_VERTEX_ATTRIB0_4_NV = $8660; - GL_MAP1_VERTEX_ATTRIB1_4_NV = $8661; - GL_MAP1_VERTEX_ATTRIB2_4_NV = $8662; - GL_MAP1_VERTEX_ATTRIB3_4_NV = $8663; - GL_MAP1_VERTEX_ATTRIB4_4_NV = $8664; - GL_MAP1_VERTEX_ATTRIB5_4_NV = $8665; - GL_MAP1_VERTEX_ATTRIB6_4_NV = $8666; - GL_MAP1_VERTEX_ATTRIB7_4_NV = $8667; - GL_MAP1_VERTEX_ATTRIB8_4_NV = $8668; - GL_MAP1_VERTEX_ATTRIB9_4_NV = $8669; - GL_MAP1_VERTEX_ATTRIB10_4_NV = $866A; - GL_MAP1_VERTEX_ATTRIB11_4_NV = $866B; - GL_MAP1_VERTEX_ATTRIB12_4_NV = $866C; - GL_MAP1_VERTEX_ATTRIB13_4_NV = $866D; - GL_MAP1_VERTEX_ATTRIB14_4_NV = $866E; - GL_MAP1_VERTEX_ATTRIB15_4_NV = $866F; - GL_MAP2_VERTEX_ATTRIB0_4_NV = $8670; - GL_MAP2_VERTEX_ATTRIB1_4_NV = $8671; - GL_MAP2_VERTEX_ATTRIB2_4_NV = $8672; - GL_MAP2_VERTEX_ATTRIB3_4_NV = $8673; - GL_MAP2_VERTEX_ATTRIB4_4_NV = $8674; - GL_MAP2_VERTEX_ATTRIB5_4_NV = $8675; - GL_MAP2_VERTEX_ATTRIB6_4_NV = $8676; - GL_MAP2_VERTEX_ATTRIB7_4_NV = $8677; - GL_MAP2_VERTEX_ATTRIB8_4_NV = $8678; - GL_MAP2_VERTEX_ATTRIB9_4_NV = $8679; - GL_MAP2_VERTEX_ATTRIB10_4_NV = $867A; - GL_MAP2_VERTEX_ATTRIB11_4_NV = $867B; - GL_MAP2_VERTEX_ATTRIB12_4_NV = $867C; - GL_MAP2_VERTEX_ATTRIB13_4_NV = $867D; - GL_MAP2_VERTEX_ATTRIB14_4_NV = $867E; - GL_MAP2_VERTEX_ATTRIB15_4_NV = $867F; -var - glBindProgramNV: procedure(target: GLenum; id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteProgramsNV: procedure(n: GLsizei; const ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glExecuteProgramNV: procedure(target: GLenum; id: GLuint; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenProgramsNV: procedure(n: GLsizei; ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glAreProgramsResidentNV: function(n: GLsizei; const ids: PGLuint; residences: PGLboolean): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glRequestResidentProgramsNV: procedure(n: GLsizei; ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramParameterfvNV: procedure(target: GLenum; index: GLuint; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramParameterdvNV: procedure(target: GLenum; index: GLuint; pname: GLenum; params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramivNV: procedure(id: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramStringNV: procedure(id: GLuint; pname: GLenum; _program: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetTrackMatrixivNV: procedure(target: GLenum; address: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribdvNV: procedure(index: GLuint; pname: GLenum; params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribfvNV: procedure(index: GLuint; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribivNV: procedure(index: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribPointervNV: procedure(index: GLuint; pname: GLenum; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsProgramNV: function(id: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glLoadProgramNV: procedure(target: GLenum; id: GLuint; len: GLsizei; const _program: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramParameter4fNV: procedure(target: GLenum; index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramParameter4fvNV: procedure(target: GLenum; index: GLuint; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramParameters4dvNV: procedure(target: GLenum; index: GLuint; num: GLuint; const params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramParameters4fvNV: procedure(target: GLenum; index: GLuint; num: GLuint; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTrackMatrixNV: procedure(target: GLenum; address: GLuint; matrix: GLenum; transform: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribPointerNV: procedure(index: GLuint; size: GLint; _type: GLenum; stride: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1sNV: procedure(index: GLuint; x: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1fNV: procedure(index: GLuint; x: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1dNV: procedure(index: GLuint; x: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2sNV: procedure(index: GLuint; x: GLshort; y: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2fNV: procedure(index: GLuint; x: GLfloat; y: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2dNV: procedure(index: GLuint; x: GLdouble; y: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3sNV: procedure(index: GLuint; x: GLshort; y: GLshort; z: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3fNV: procedure(index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3dNV: procedure(index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4sNV: procedure(index: GLuint; x: GLshort; y: GLshort; z: GLshort; w: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4fNV: procedure(index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4dNV: procedure(index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4ubNV: procedure(index: GLuint; x: GLubyte; y: GLubyte; z: GLubyte; w: GLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1svNV: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1fvNV: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1dvNV: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2svNV: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2fvNV: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2dvNV: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3svNV: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3fvNV: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3dvNV: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4svNV: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4fvNV: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4dvNV: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4ubvNV: procedure(index: GLuint; const v: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs1svNV: procedure(index: GLuint; n: GLsizei; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs1fvNV: procedure(index: GLuint; n: GLsizei; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs1dvNV: procedure(index: GLuint; n: GLsizei; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs2svNV: procedure(index: GLuint; n: GLsizei; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs2fvNV: procedure(index: GLuint; n: GLsizei; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs2dvNV: procedure(index: GLuint; n: GLsizei; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs3svNV: procedure(index: GLuint; n: GLsizei; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs3fvNV: procedure(index: GLuint; n: GLsizei; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs3dvNV: procedure(index: GLuint; n: GLsizei; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs4svNV: procedure(index: GLuint; n: GLsizei; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs4fvNV: procedure(index: GLuint; n: GLsizei; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs4dvNV: procedure(index: GLuint; n: GLsizei; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs4ubvNV: procedure(index: GLuint; n: GLsizei; const v: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_vertex_program: Boolean; - -//***** GL_NV_vertex_program1_1 *****// - -function Load_GL_NV_vertex_program1_1: Boolean; - -//***** GL_ATI_element_array *****// -const - GL_ELEMENT_ARRAY_ATI = $8768; - GL_ELEMENT_ARRAY_TYPE_ATI = $8769; - GL_ELEMENT_ARRAY_POINTER_ATI = $876A; -var - glElementPointerATI: procedure(_type: GLenum; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDrawElementArrayATI: procedure(mode: GLenum; count: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDrawRangeElementArrayATI: procedure(mode: GLenum; start: GLuint; _end: GLuint; count: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_element_array: Boolean; - -//***** GL_ATI_envmap_bumpmap *****// -const - GL_BUMP_ROT_MATRIX_ATI = $8775; - GL_BUMP_ROT_MATRIX_SIZE_ATI = $8776; - GL_BUMP_NUM_TEX_UNITS_ATI = $8777; - GL_BUMP_TEX_UNITS_ATI = $8778; - GL_DUDV_ATI = $8779; - GL_DU8DV8_ATI = $877A; - GL_BUMP_ENVMAP_ATI = $877B; - GL_BUMP_TARGET_ATI = $877C; -var - glTexBumpParameterivATI: procedure(pname: GLenum; param: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexBumpParameterfvATI: procedure(pname: GLenum; param: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetTexBumpParameterivATI: procedure(pname: GLenum; param: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetTexBumpParameterfvATI: procedure(pname: GLenum; param: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_envmap_bumpmap: Boolean; - -//***** GL_ATI_fragment_shader *****// -const - GL_FRAGMENT_SHADER_ATI = $8920; - GL_REG_0_ATI = $8921; - GL_REG_1_ATI = $8922; - GL_REG_2_ATI = $8923; - GL_REG_3_ATI = $8924; - GL_REG_4_ATI = $8925; - GL_REG_5_ATI = $8926; - GL_CON_0_ATI = $8941; - GL_CON_1_ATI = $8942; - GL_CON_2_ATI = $8943; - GL_CON_3_ATI = $8944; - GL_CON_4_ATI = $8945; - GL_CON_5_ATI = $8946; - GL_CON_6_ATI = $8947; - GL_CON_7_ATI = $8948; - GL_MOV_ATI = $8961; - GL_ADD_ATI = $8963; - GL_MUL_ATI = $8964; - GL_SUB_ATI = $8965; - GL_DOT3_ATI = $8966; - GL_DOT4_ATI = $8967; - GL_MAD_ATI = $8968; - GL_LERP_ATI = $8969; - GL_CND_ATI = $896A; - GL_CND0_ATI = $896B; - GL_DOT2_ADD_ATI = $896C; - GL_SECONDARY_INTERPOLATOR_ATI = $896D; - GL_SWIZZLE_STR_ATI = $8976; - GL_SWIZZLE_STQ_ATI = $8977; - GL_SWIZZLE_STR_DR_ATI = $8978; - GL_SWIZZLE_STQ_DQ_ATI = $8979; - GL_RED_BIT_ATI = $0001; - GL_GREEN_BIT_ATI = $0002; - GL_BLUE_BIT_ATI = $0004; - GL_2X_BIT_ATI = $0001; - GL_4X_BIT_ATI = $0002; - GL_8X_BIT_ATI = $0004; - GL_HALF_BIT_ATI = $0008; - GL_QUARTER_BIT_ATI = $0010; - GL_EIGHTH_BIT_ATI = $0020; - GL_SATURATE_BIT_ATI = $0040; - // GL_2X_BIT_ATI { already defined } - GL_COMP_BIT_ATI = $0002; - GL_NEGATE_BIT_ATI = $0004; - GL_BIAS_BIT_ATI = $0008; -var - glGenFragmentShadersATI: function(range: GLuint): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindFragmentShaderATI: procedure(id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteFragmentShaderATI: procedure(id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBeginFragmentShaderATI: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEndFragmentShaderATI: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPassTexCoordATI: procedure(dst: GLuint; coord: GLuint; swizzle: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSampleMapATI: procedure(dst: GLuint; interp: GLuint; swizzle: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorFragmentOp1ATI: procedure(op: GLenum; dst: GLuint; dstMask: GLuint; dstMod: GLuint; arg1: GLuint; arg1Rep: GLuint; arg1Mod: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorFragmentOp2ATI: procedure(op: GLenum; dst: GLuint; dstMask: GLuint; dstMod: GLuint; arg1: GLuint; arg1Rep: GLuint; arg1Mod: GLuint; arg2: GLuint; arg2Rep: GLuint; arg2Mod: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorFragmentOp3ATI: procedure(op: GLenum; dst: GLuint; dstMask: GLuint; dstMod: GLuint; arg1: GLuint; arg1Rep: GLuint; arg1Mod: GLuint; arg2: GLuint; arg2Rep: GLuint; arg2Mod: GLuint; arg3: GLuint; arg3Rep: GLuint; arg3Mod: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glAlphaFragmentOp1ATI: procedure(op: GLenum; dst: GLuint; dstMod: GLuint; arg1: GLuint; arg1Rep: GLuint; arg1Mod: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glAlphaFragmentOp2ATI: procedure(op: GLenum; dst: GLuint; dstMod: GLuint; arg1: GLuint; arg1Rep: GLuint; arg1Mod: GLuint; arg2: GLuint; arg2Rep: GLuint; arg2Mod: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glAlphaFragmentOp3ATI: procedure(op: GLenum; dst: GLuint; dstMod: GLuint; arg1: GLuint; arg1Rep: GLuint; arg1Mod: GLuint; arg2: GLuint; arg2Rep: GLuint; arg2Mod: GLuint; arg3: GLuint; arg3Rep: GLuint; arg3Mod: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSetFragmentShaderConstantATI: procedure(dst: GLuint; const value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_fragment_shader: Boolean; - -//***** GL_ATI_pn_triangles *****// -const - GL_PN_TRIANGLES_ATI = $87F0; - GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI = $87F1; - GL_PN_TRIANGLES_POINT_MODE_ATI = $87F2; - GL_PN_TRIANGLES_NORMAL_MODE_ATI = $87F3; - GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI = $87F4; - GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI = $87F5; - GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI = $87F6; - GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI = $87F7; - GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI = $87F8; -var - glPNTrianglesiATI: procedure(pname: GLenum; param: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPNTrianglesfATI: procedure(pname: GLenum; param: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_pn_triangles: Boolean; - -//***** GL_ATI_texture_mirror_once *****// -const - GL_MIRROR_CLAMP_ATI = $8742; - GL_MIRROR_CLAMP_TO_EDGE_ATI = $8743; - -function Load_GL_ATI_texture_mirror_once: Boolean; - -//***** GL_ATI_vertex_array_object *****// -const - GL_STATIC_ATI = $8760; - GL_DYNAMIC_ATI = $8761; - GL_PRESERVE_ATI = $8762; - GL_DISCARD_ATI = $8763; - GL_OBJECT_BUFFER_SIZE_ATI = $8764; - GL_OBJECT_BUFFER_USAGE_ATI = $8765; - GL_ARRAY_OBJECT_BUFFER_ATI = $8766; - GL_ARRAY_OBJECT_OFFSET_ATI = $8767; -var - glNewObjectBufferATI: function(size: GLsizei; const pointer: PGLvoid; usage: GLenum): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsObjectBufferATI: function(buffer: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUpdateObjectBufferATI: procedure(buffer: GLuint; offset: GLuint; size: GLsizei; const pointer: PGLvoid; preserve: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetObjectBufferfvATI: procedure(buffer: GLuint; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetObjectBufferivATI: procedure(buffer: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteObjectBufferATI: procedure(buffer: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glArrayObjectATI: procedure(_array: GLenum; size: GLint; _type: GLenum; stride: GLsizei; buffer: GLuint; offset: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetArrayObjectfvATI: procedure(_array: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetArrayObjectivATI: procedure(_array: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVariantArrayObjectATI: procedure(id: GLuint; _type: GLenum; stride: GLsizei; buffer: GLuint; offset: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVariantArrayObjectfvATI: procedure(id: GLuint; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVariantArrayObjectivATI: procedure(id: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_vertex_array_object: Boolean; - -//***** GL_ATI_vertex_streams *****// -const - GL_MAX_VERTEX_STREAMS_ATI = $876B; - GL_VERTEX_STREAM0_ATI = $876C; - GL_VERTEX_STREAM1_ATI = $876D; - GL_VERTEX_STREAM2_ATI = $876E; - GL_VERTEX_STREAM3_ATI = $876F; - GL_VERTEX_STREAM4_ATI = $8770; - GL_VERTEX_STREAM5_ATI = $8771; - GL_VERTEX_STREAM6_ATI = $8772; - GL_VERTEX_STREAM7_ATI = $8773; - GL_VERTEX_SOURCE_ATI = $8774; -var - glVertexStream1s: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream1i: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream1f: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream1d: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream1sv: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream1iv: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream1fv: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream1dv: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream2s: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream2i: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream2f: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream2d: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream2sv: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream2iv: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream2fv: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream2dv: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream3s: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream3i: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream3f: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream3d: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream3sv: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream3iv: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream3fv: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream3dv: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream4s: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream4i: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream4f: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream4d: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream4sv: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream4iv: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream4fv: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexStream4dv: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3b: procedure(stream: GLenum; coords: GLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3s: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3i: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3f: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3d: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3bv: procedure(stream: GLenum; coords: GLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3sv: procedure(stream: GLenum; coords: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3iv: procedure(stream: GLenum; coords: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3fv: procedure(stream: GLenum; coords: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalStream3dv: procedure(stream: GLenum; coords: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glClientActiveVertexStream: procedure(stream: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexBlendEnvi: procedure(pname: GLenum; param: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexBlendEnvf: procedure(pname: GLenum; param: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_vertex_streams: Boolean; - -{$IFDEF WINDOWS} -//***** WGL_I3D_image_buffer *****// -const - WGL_IMAGE_BUFFER_MIN_ACCESS_I3D = $0001; - WGL_IMAGE_BUFFER_LOCK_I3D = $0002; -var - wglCreateImageBufferI3D: function(hDC: HDC; dwSize: DWORD; uFlags: UINT): PGLvoid; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglDestroyImageBufferI3D: function(hDC: HDC; pAddress: PGLvoid): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglAssociateImageBufferEventsI3D: function(hdc: HDC; pEvent: PHandle; pAddress: PGLvoid; pSize: PDWORD; count: UINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglReleaseImageBufferEventsI3D: function(hdc: HDC; pAddress: PGLvoid; count: UINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_I3D_image_buffer: Boolean; - -//***** WGL_I3D_swap_frame_lock *****// -var - wglEnableFrameLockI3D: function(): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglDisableFrameLockI3D: function(): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglIsEnabledFrameLockI3D: function(pFlag: PBOOL): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglQueryFrameLockMasterI3D: function(pFlag: PBOOL): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_I3D_swap_frame_lock: Boolean; - -//***** WGL_I3D_swap_frame_usage *****// -var - wglGetFrameUsageI3D: function(pUsage: PGLfloat): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglBeginFrameTrackingI3D: function(): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglEndFrameTrackingI3D: function(): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglQueryFrameTrackingI3D: function(pFrameCount: PDWORD; pMissedFrames: PDWORD; pLastMissedUsage: PGLfloat): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_I3D_swap_frame_usage: Boolean; -{$ENDIF} - -//***** GL_3DFX_texture_compression_FXT1 *****// -const - GL_COMPRESSED_RGB_FXT1_3DFX = $86B0; - GL_COMPRESSED_RGBA_FXT1_3DFX = $86B1; - -function Load_GL_3DFX_texture_compression_FXT1: Boolean; - -//***** GL_IBM_cull_vertex *****// -const - GL_CULL_VERTEX_IBM = $1928A; - -function Load_GL_IBM_cull_vertex: Boolean; - -//***** GL_IBM_multimode_draw_arrays *****// -var - glMultiModeDrawArraysIBM: procedure(mode: PGLenum; first: PGLint; count: PGLsizei; primcount: GLsizei; modestride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiModeDrawElementsIBM: procedure(mode: PGLenum; count: PGLsizei; _type: GLenum; const indices: PGLvoid; primcount: GLsizei; modestride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_IBM_multimode_draw_arrays: Boolean; - -//***** GL_IBM_raster_pos_clip *****// -const - GL_RASTER_POSITION_UNCLIPPED_IBM = $19262; - -function Load_GL_IBM_raster_pos_clip: Boolean; - -//***** GL_IBM_texture_mirrored_repeat *****// -const - GL_MIRRORED_REPEAT_IBM = $8370; - -function Load_GL_IBM_texture_mirrored_repeat: Boolean; - -//***** GL_IBM_vertex_array_lists *****// -const - GL_VERTEX_ARRAY_LIST_IBM = $1929E; - GL_NORMAL_ARRAY_LIST_IBM = $1929F; - GL_COLOR_ARRAY_LIST_IBM = $192A0; - GL_INDEX_ARRAY_LIST_IBM = $192A1; - GL_TEXTURE_COORD_ARRAY_LIST_IBM = $192A2; - GL_EDGE_FLAG_ARRAY_LIST_IBM = $192A3; - GL_FOG_COORDINATE_ARRAY_LIST_IBM = $192A4; - GL_SECONDARY_COLOR_ARRAY_LIST_IBM = $192A5; - GL_VERTEX_ARRAY_LIST_STRIDE_IBM = $192A8; - GL_NORMAL_ARRAY_LIST_STRIDE_IBM = $192A9; - GL_COLOR_ARRAY_LIST_STRIDE_IBM = $192AA; - GL_INDEX_ARRAY_LIST_STRIDE_IBM = $192AB; - GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM = $192AC; - GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM = $192AD; - GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM = $192AE; - GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM = $192AF; -var - glColorPointerListIBM: procedure(size: GLint; _type: GLenum; stride: GLint; const pointer: PGLvoid; ptrstride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColorPointerListIBM: procedure(size: GLint; _type: GLenum; stride: GLint; const pointer: PGLvoid; ptrstride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEdgeFlagPointerListIBM: procedure(stride: GLint; const pointer: PGLboolean; ptrstride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordPointerListIBM: procedure(_type: GLenum; stride: GLint; const pointer: PGLvoid; ptrstride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormalPointerListIBM: procedure(_type: GLenum; stride: GLint; const pointer: PGLvoid; ptrstride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoordPointerListIBM: procedure(size: GLint; _type: GLenum; stride: GLint; const pointer: PGLvoid; ptrstride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexPointerListIBM: procedure(size: GLint; _type: GLenum; stride: GLint; const pointer: PGLvoid; ptrstride: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_IBM_vertex_array_lists: Boolean; - -//***** GL_MESA_resize_buffers *****// -var - glResizeBuffersMESA: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_MESA_resize_buffers: Boolean; - -//***** GL_MESA_window_pos *****// -var - glWindowPos2dMESA: procedure(x: GLdouble; y: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2fMESA: procedure(x: GLfloat; y: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2iMESA: procedure(x: GLint; y: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2sMESA: procedure(x: GLshort; y: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2ivMESA: procedure(const p: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2svMESA: procedure(const p: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2fvMESA: procedure(const p: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2dvMESA: procedure(const p: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3iMESA: procedure(x: GLint; y: GLint; z: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3sMESA: procedure(x: GLshort; y: GLshort; z: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3fMESA: procedure(x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3dMESA: procedure(x: GLdouble; y: GLdouble; z: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3ivMESA: procedure(const p: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3svMESA: procedure(const p: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3fvMESA: procedure(const p: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3dvMESA: procedure(const p: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos4iMESA: procedure(x: GLint; y: GLint; z: GLint; w: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos4sMESA: procedure(x: GLshort; y: GLshort; z: GLshort; w: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos4fMESA: procedure(x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos4dMESA: procedure(x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos4ivMESA: procedure(const p: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos4svMESA: procedure(const p: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos4fvMESA: procedure(const p: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos4dvMESA: procedure(const p: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_MESA_window_pos: Boolean; - -//***** GL_OML_interlace *****// -const - GL_INTERLACE_OML = $8980; - GL_INTERLACE_READ_OML = $8981; - -function Load_GL_OML_interlace: Boolean; - -//***** GL_OML_resample *****// -const - GL_PACK_RESAMPLE_OML = $8984; - GL_UNPACK_RESAMPLE_OML = $8985; - GL_RESAMPLE_REPLICATE_OML = $8986; - GL_RESAMPLE_ZERO_FILL_OML = $8987; - GL_RESAMPLE_AVERAGE_OML = $8988; - GL_RESAMPLE_DECIMATE_OML = $8989; - // GL_RESAMPLE_AVERAGE_OML { already defined } - -function Load_GL_OML_resample: Boolean; - -//***** GL_OML_subsample *****// -const - GL_FORMAT_SUBSAMPLE_24_24_OML = $8982; - GL_FORMAT_SUBSAMPLE_244_244_OML = $8983; - -function Load_GL_OML_subsample: Boolean; - -//***** GL_SGIS_generate_mipmap *****// -const - GL_GENERATE_MIPMAP_SGIS = $8191; - GL_GENERATE_MIPMAP_HINT_SGIS = $8192; - -function Load_GL_SGIS_generate_mipmap: Boolean; - -//***** GL_SGIS_multisample *****// -const - GLX_SAMPLE_BUFFERS_SGIS = $186A0; - GLX_SAMPLES_SGIS = $186A1; - GL_MULTISAMPLE_SGIS = $809D; - GL_SAMPLE_ALPHA_TO_MASK_SGIS = $809E; - GL_SAMPLE_ALPHA_TO_ONE_SGIS = $809F; - GL_SAMPLE_MASK_SGIS = $80A0; - GL_MULTISAMPLE_BIT_EXT = $20000000; - GL_1PASS_SGIS = $80A1; - GL_2PASS_0_SGIS = $80A2; - GL_2PASS_1_SGIS = $80A3; - GL_4PASS_0_SGIS = $80A4; - GL_4PASS_1_SGIS = $80A5; - GL_4PASS_2_SGIS = $80A6; - GL_4PASS_3_SGIS = $80A7; - GL_SAMPLE_BUFFERS_SGIS = $80A8; - GL_SAMPLES_SGIS = $80A9; - GL_SAMPLE_MASK_VALUE_SGIS = $80AA; - GL_SAMPLE_MASK_INVERT_SGIS = $80AB; - GL_SAMPLE_PATTERN_SGIS = $80AC; -var - glSampleMaskSGIS: procedure(value: GLclampf; invert: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSamplePatternSGIS: procedure(pattern: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_SGIS_multisample: Boolean; - -//***** GL_SGIS_pixel_texture *****// -const - GL_PIXEL_TEXTURE_SGIS = $8353; - GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS = $8354; - GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS = $8355; - GL_PIXEL_GROUP_COLOR_SGIS = $8356; -var - glPixelTexGenParameteriSGIS: procedure(pname: GLenum; param: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPixelTexGenParameterfSGIS: procedure(pname: GLenum; param: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetPixelTexGenParameterivSGIS: procedure(pname: GLenum; params: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetPixelTexGenParameterfvSGIS: procedure(pname: GLenum; params: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_SGIS_pixel_texture: Boolean; - -//***** GL_SGIS_texture_border_clamp *****// - // GL_CLAMP_TO_BORDER_SGIS { already defined } - -function Load_GL_SGIS_texture_border_clamp: Boolean; - -//***** GL_SGIS_texture_color_mask *****// -const - GL_TEXTURE_COLOR_WRITEMASK_SGIS = $81EF; -var - glTextureColorMaskSGIS: procedure(r: GLboolean; g: GLboolean; b: GLboolean; a: GLboolean); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_SGIS_texture_color_mask: Boolean; - -//***** GL_SGIS_texture_edge_clamp *****// -const - GL_CLAMP_TO_EDGE_SGIS = $812F; - -function Load_GL_SGIS_texture_edge_clamp: Boolean; - -//***** GL_SGIS_texture_lod *****// -const - GL_TEXTURE_MIN_LOD_SGIS = $813A; - GL_TEXTURE_MAX_LOD_SGIS = $813B; - GL_TEXTURE_BASE_LEVEL_SGIS = $813C; - GL_TEXTURE_MAX_LEVEL_SGIS = $813D; - -function Load_GL_SGIS_texture_lod: Boolean; - -//***** GL_SGIS_depth_texture *****// -const - GL_DEPTH_COMPONENT16_SGIX = $81A5; - GL_DEPTH_COMPONENT24_SGIX = $81A6; - GL_DEPTH_COMPONENT32_SGIX = $81A7; - -function Load_GL_SGIS_depth_texture: Boolean; - -//***** GL_SGIX_fog_offset *****// -const - GL_FOG_OFFSET_SGIX = $8198; - GL_FOG_OFFSET_VALUE_SGIX = $8199; - -function Load_GL_SGIX_fog_offset: Boolean; - -//***** GL_SGIX_interlace *****// -const - GL_INTERLACE_SGIX = $8094; - -function Load_GL_SGIX_interlace: Boolean; - -//***** GL_SGIX_shadow_ambient *****// -const - GL_SHADOW_AMBIENT_SGIX = $80BF; - -function Load_GL_SGIX_shadow_ambient: Boolean; - -//***** GL_SGI_color_matrix *****// -const - GL_COLOR_MATRIX_SGI = $80B1; - GL_COLOR_MATRIX_STACK_DEPTH_SGI = $80B2; - GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI = $80B3; - GL_POST_COLOR_MATRIX_RED_SCALE_SGI = $80B4; - GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI = $80B5; - GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI = $80B6; - GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI = $80B7; - GL_POST_COLOR_MATRIX_RED_BIAS_SGI = $80B8; - GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI = $80B9; - GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI = $80BA; - GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI = $80BB; - -function Load_GL_SGI_color_matrix: Boolean; - -//***** GL_SGI_color_table *****// -const - GL_COLOR_TABLE_SGI = $80D0; - GL_POST_CONVOLUTION_COLOR_TABLE_SGI = $80D1; - GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI = $80D2; - GL_PROXY_COLOR_TABLE_SGI = $80D3; - GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI = $80D4; - GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI = $80D5; - GL_COLOR_TABLE_SCALE_SGI = $80D6; - GL_COLOR_TABLE_BIAS_SGI = $80D7; - GL_COLOR_TABLE_FORMAT_SGI = $80D8; - GL_COLOR_TABLE_WIDTH_SGI = $80D9; - GL_COLOR_TABLE_RED_SIZE_SGI = $80DA; - GL_COLOR_TABLE_GREEN_SIZE_SGI = $80DB; - GL_COLOR_TABLE_BLUE_SIZE_SGI = $80DC; - GL_COLOR_TABLE_ALPHA_SIZE_SGI = $80DD; - GL_COLOR_TABLE_LUMINANCE_SIZE_SGI = $80DE; - GL_COLOR_TABLE_INTENSITY_SIZE_SGI = $80DF; -var - glColorTableSGI: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; format: GLenum; _type: GLenum; const table: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCopyColorTableSGI: procedure(target: GLenum; internalformat: GLenum; x: GLint; y: GLint; width: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorTableParameterivSGI: procedure(target: GLenum; pname: GLenum; const params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColorTableParameterfvSGI: procedure(target: GLenum; pname: GLenum; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetColorTableSGI: procedure(target: GLenum; format: GLenum; _type: GLenum; table: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetColorTableParameterivSGI: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetColorTableParameterfvSGI: procedure(target: GLenum; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_SGI_color_table: Boolean; - -//***** GL_SGI_texture_color_table *****// -const - GL_TEXTURE_COLOR_TABLE_SGI = $80BC; - GL_PROXY_TEXTURE_COLOR_TABLE_SGI = $80BD; - -function Load_GL_SGI_texture_color_table: Boolean; - -//***** GL_SUN_vertex *****// -var - glColor4ubVertex2fSUN: procedure(r: GLubyte; g: GLubyte; b: GLubyte; a: GLubyte; x: GLfloat; y: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor4ubVertex2fvSUN: procedure(const c: PGLubyte; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor4ubVertex3fSUN: procedure(r: GLubyte; g: GLubyte; b: GLubyte; a: GLubyte; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor4ubVertex3fvSUN: procedure(const c: PGLubyte; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor3fVertex3fSUN: procedure(r: GLfloat; g: GLfloat; b: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor3fVertex3fvSUN: procedure(const c: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormal3fVertex3fSUN: procedure(nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormal3fVertex3fvSUN: procedure(const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor4fNormal3fVertex3fSUN: procedure(r: GLfloat; g: GLfloat; b: GLfloat; a: GLfloat; nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor4fNormal3fVertex3fvSUN: procedure(const c: PGLfloat; const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fVertex3fSUN: procedure(s: GLfloat; t: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fVertex3fvSUN: procedure(const tc: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord4fVertex4fSUN: procedure(s: GLfloat; t: GLfloat; p: GLfloat; q: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord4fVertex4fvSUN: procedure(const tc: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fColor4ubVertex3fSUN: procedure(s: GLfloat; t: GLfloat; r: GLubyte; g: GLubyte; b: GLubyte; a: GLubyte; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fColor4ubVertex3fvSUN: procedure(const tc: PGLfloat; const c: PGLubyte; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fColor3fVertex3fSUN: procedure(s: GLfloat; t: GLfloat; r: GLfloat; g: GLfloat; b: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fColor3fVertex3fvSUN: procedure(const tc: PGLfloat; const c: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fNormal3fVertex3fSUN: procedure(s: GLfloat; t: GLfloat; nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fNormal3fVertex3fvSUN: procedure(const tc: PGLfloat; const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fColor4fNormal3fVertex3fSUN: procedure(s: GLfloat; t: GLfloat; r: GLfloat; g: GLfloat; b: GLfloat; a: GLfloat; nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2fColor4fNormal3fVertex3fvSUN: procedure(const tc: PGLfloat; const c: PGLfloat; const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord4fColor4fNormal3fVertex4fSUN: procedure(s: GLfloat; t: GLfloat; p: GLfloat; q: GLfloat; r: GLfloat; g: GLfloat; b: GLfloat; a: GLfloat; nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord4fColor4fNormal3fVertex4fvSUN: procedure(const tc: PGLfloat; const c: PGLfloat; const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiVertex3fSUN: procedure(rc: GLuint; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiVertex3fvSUN: procedure(const rc: PGLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiColor4ubVertex3fSUN: procedure(rc: GLuint; r: GLubyte; g: GLubyte; b: GLubyte; a: GLubyte; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiColor4ubVertex3fvSUN: procedure(const rc: PGLuint; const c: PGLubyte; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiColor3fVertex3fSUN: procedure(rc: GLuint; r: GLfloat; g: GLfloat; b: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiColor3fVertex3fvSUN: procedure(const rc: PGLuint; const c: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiNormal3fVertex3fSUN: procedure(rc: GLuint; nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiNormal3fVertex3fvSUN: procedure(const rc: PGLuint; const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiColor4fNormal3fVertex3fSUN: procedure(rc: GLuint; r: GLfloat; g: GLfloat; b: GLfloat; a: GLfloat; nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiColor4fNormal3fVertex3fvSUN: procedure(const rc: PGLuint; const c: PGLfloat; const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiTexCoord2fVertex3fSUN: procedure(rc: GLuint; s: GLfloat; t: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiTexCoord2fVertex3fvSUN: procedure(const rc: PGLuint; const tc: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN: procedure(rc: GLuint; s: GLfloat; t: GLfloat; nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN: procedure(const rc: PGLuint; const tc: PGLfloat; const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN: procedure(rc: GLuint; s: GLfloat; t: GLfloat; r: GLfloat; g: GLfloat; b: GLfloat; a: GLfloat; nx: GLfloat; ny: GLfloat; nz: GLfloat; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN: procedure(const rc: PGLuint; const tc: PGLfloat; const c: PGLfloat; const n: PGLfloat; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_SUN_vertex: Boolean; - -//***** GL_ARB_fragment_program *****// -const - GL_FRAGMENT_PROGRAM_ARB = $8804; - // GL_PROGRAM_FORMAT_ASCII_ARB { already defined } - // GL_PROGRAM_LENGTH_ARB { already defined } - // GL_PROGRAM_FORMAT_ARB { already defined } - // GL_PROGRAM_BINDING_ARB { already defined } - // GL_PROGRAM_INSTRUCTIONS_ARB { already defined } - // GL_MAX_PROGRAM_INSTRUCTIONS_ARB { already defined } - // GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB { already defined } - // GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB { already defined } - // GL_PROGRAM_TEMPORARIES_ARB { already defined } - // GL_MAX_PROGRAM_TEMPORARIES_ARB { already defined } - // GL_PROGRAM_NATIVE_TEMPORARIES_ARB { already defined } - // GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB { already defined } - // GL_PROGRAM_PARAMETERS_ARB { already defined } - // GL_MAX_PROGRAM_PARAMETERS_ARB { already defined } - // GL_PROGRAM_NATIVE_PARAMETERS_ARB { already defined } - // GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB { already defined } - // GL_PROGRAM_ATTRIBS_ARB { already defined } - // GL_MAX_PROGRAM_ATTRIBS_ARB { already defined } - // GL_PROGRAM_NATIVE_ATTRIBS_ARB { already defined } - // GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB { already defined } - // GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB { already defined } - // GL_MAX_PROGRAM_ENV_PARAMETERS_ARB { already defined } - // GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB { already defined } - GL_PROGRAM_ALU_INSTRUCTIONS_ARB = $8805; - GL_PROGRAM_TEX_INSTRUCTIONS_ARB = $8806; - GL_PROGRAM_TEX_INDIRECTIONS_ARB = $8807; - GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = $8808; - GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = $8809; - GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = $880A; - GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB = $880B; - GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB = $880C; - GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB = $880D; - GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = $880E; - GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = $880F; - GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = $8810; - // GL_PROGRAM_STRING_ARB { already defined } - // GL_PROGRAM_ERROR_POSITION_ARB { already defined } - // GL_CURRENT_MATRIX_ARB { already defined } - // GL_TRANSPOSE_CURRENT_MATRIX_ARB { already defined } - // GL_CURRENT_MATRIX_STACK_DEPTH_ARB { already defined } - // GL_MAX_PROGRAM_MATRICES_ARB { already defined } - // GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB { already defined } - GL_MAX_TEXTURE_COORDS_ARB = $8871; - GL_MAX_TEXTURE_IMAGE_UNITS_ARB = $8872; - // GL_PROGRAM_ERROR_STRING_ARB { already defined } - // GL_MATRIX0_ARB { already defined } - // GL_MATRIX1_ARB { already defined } - // GL_MATRIX2_ARB { already defined } - // GL_MATRIX3_ARB { already defined } - // GL_MATRIX4_ARB { already defined } - // GL_MATRIX5_ARB { already defined } - // GL_MATRIX6_ARB { already defined } - // GL_MATRIX7_ARB { already defined } - // GL_MATRIX8_ARB { already defined } - // GL_MATRIX9_ARB { already defined } - // GL_MATRIX10_ARB { already defined } - // GL_MATRIX11_ARB { already defined } - // GL_MATRIX12_ARB { already defined } - // GL_MATRIX13_ARB { already defined } - // GL_MATRIX14_ARB { already defined } - // GL_MATRIX15_ARB { already defined } - // GL_MATRIX16_ARB { already defined } - // GL_MATRIX17_ARB { already defined } - // GL_MATRIX18_ARB { already defined } - // GL_MATRIX19_ARB { already defined } - // GL_MATRIX20_ARB { already defined } - // GL_MATRIX21_ARB { already defined } - // GL_MATRIX22_ARB { already defined } - // GL_MATRIX23_ARB { already defined } - // GL_MATRIX24_ARB { already defined } - // GL_MATRIX25_ARB { already defined } - // GL_MATRIX26_ARB { already defined } - // GL_MATRIX27_ARB { already defined } - // GL_MATRIX28_ARB { already defined } - // GL_MATRIX29_ARB { already defined } - // GL_MATRIX30_ARB { already defined } - // GL_MATRIX31_ARB { already defined } - // glProgramStringARB { already defined } - // glBindProgramARB { already defined } - // glDeleteProgramsARB { already defined } - // glGenProgramsARB { already defined } - // glProgramEnvParameter4dARB { already defined } - // glProgramEnvParameter4dvARB { already defined } - // glProgramEnvParameter4fARB { already defined } - // glProgramEnvParameter4fvARB { already defined } - // glProgramLocalParameter4dARB { already defined } - // glProgramLocalParameter4dvARB { already defined } - // glProgramLocalParameter4fARB { already defined } - // glProgramLocalParameter4fvARB { already defined } - // glGetProgramEnvParameterdvARB { already defined } - // glGetProgramEnvParameterfvARB { already defined } - // glGetProgramLocalParameterdvARB { already defined } - // glGetProgramLocalParameterfvARB { already defined } - // glGetProgramivARB { already defined } - // glGetProgramStringARB { already defined } - // glIsProgramARB { already defined } - -function Load_GL_ARB_fragment_program: Boolean; - -//***** GL_ATI_text_fragment_shader *****// -const - GL_TEXT_FRAGMENT_SHADER_ATI = $8200; - -function Load_GL_ATI_text_fragment_shader: Boolean; - -//***** GL_APPLE_client_storage *****// -const - GL_UNPACK_CLIENT_STORAGE_APPLE = $85B2; - -function Load_GL_APPLE_client_storage: Boolean; - -//***** GL_APPLE_element_array *****// -const - GL_ELEMENT_ARRAY_APPLE = $8768; - GL_ELEMENT_ARRAY_TYPE_APPLE = $8769; - GL_ELEMENT_ARRAY_POINTER_APPLE = $876A; -var - glElementPointerAPPLE: procedure(_type: GLenum; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDrawElementArrayAPPLE: procedure(mode: GLenum; first: GLint; count: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDrawRangeElementArrayAPPLE: procedure(mode: GLenum; start: GLuint; _end: GLuint; first: GLint; count: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiDrawElementArrayAPPLE: procedure(mode: GLenum; const first: PGLint; const count: PGLsizei; primcount: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiDrawRangeElementArrayAPPLE: procedure(mode: GLenum; start: GLuint; _end: GLuint; const first: PGLint; const count: PGLsizei; primcount: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_APPLE_element_array: Boolean; - -//***** GL_APPLE_fence *****// -const - GL_DRAW_PIXELS_APPLE = $8A0A; - GL_FENCE_APPLE = $8A0B; -var - glGenFencesAPPLE: procedure(n: GLsizei; fences: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteFencesAPPLE: procedure(n: GLsizei; const fences: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSetFenceAPPLE: procedure(fence: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsFenceAPPLE: function(fence: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTestFenceAPPLE: function(fence: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFinishFenceAPPLE: procedure(fence: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTestObjectAPPLE: function(_object: GLenum; name: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFinishObjectAPPLE: procedure(_object: GLenum; name: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_APPLE_fence: Boolean; - -//***** GL_APPLE_vertex_array_object *****// -const - GL_VERTEX_ARRAY_BINDING_APPLE = $85B5; -var - glBindVertexArrayAPPLE: procedure(_array: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteVertexArraysAPPLE: procedure(n: GLsizei; const arrays: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenVertexArraysAPPLE: procedure(n: GLsizei; const arrays: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsVertexArrayAPPLE: function(_array: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_APPLE_vertex_array_object: Boolean; - -//***** GL_APPLE_vertex_array_range *****// -const - GL_VERTEX_ARRAY_RANGE_APPLE = $851D; - GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE = $851E; - GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_APPLE = $8520; - GL_VERTEX_ARRAY_RANGE_POINTER_APPLE = $8521; - GL_VERTEX_ARRAY_STORAGE_HINT_APPLE = $851F; - GL_STORAGE_CACHED_APPLE = $85BE; - GL_STORAGE_SHARED_APPLE = $85BF; -var - glVertexArrayRangeAPPLE: procedure(length: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFlushVertexArrayRangeAPPLE: procedure(length: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexArrayParameteriAPPLE: procedure(pname: GLenum; param: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_APPLE_vertex_array_range: Boolean; - -{$IFDEF WINDOWS} -//***** WGL_ARB_pixel_format *****// -const - WGL_NUMBER_PIXEL_FORMATS_ARB = $2000; - WGL_DRAW_TO_WINDOW_ARB = $2001; - WGL_DRAW_TO_BITMAP_ARB = $2002; - WGL_ACCELERATION_ARB = $2003; - WGL_NEED_PALETTE_ARB = $2004; - WGL_NEED_SYSTEM_PALETTE_ARB = $2005; - WGL_SWAP_LAYER_BUFFERS_ARB = $2006; - WGL_SWAP_METHOD_ARB = $2007; - WGL_NUMBER_OVERLAYS_ARB = $2008; - WGL_NUMBER_UNDERLAYS_ARB = $2009; - WGL_TRANSPARENT_ARB = $200A; - WGL_TRANSPARENT_RED_VALUE_ARB = $2037; - WGL_TRANSPARENT_GREEN_VALUE_ARB = $2038; - WGL_TRANSPARENT_BLUE_VALUE_ARB = $2039; - WGL_TRANSPARENT_ALPHA_VALUE_ARB = $203A; - WGL_TRANSPARENT_INDEX_VALUE_ARB = $203B; - WGL_SHARE_DEPTH_ARB = $200C; - WGL_SHARE_STENCIL_ARB = $200D; - WGL_SHARE_ACCUM_ARB = $200E; - WGL_SUPPORT_GDI_ARB = $200F; - WGL_SUPPORT_OPENGL_ARB = $2010; - WGL_DOUBLE_BUFFER_ARB = $2011; - WGL_STEREO_ARB = $2012; - WGL_PIXEL_TYPE_ARB = $2013; - WGL_COLOR_BITS_ARB = $2014; - WGL_RED_BITS_ARB = $2015; - WGL_RED_SHIFT_ARB = $2016; - WGL_GREEN_BITS_ARB = $2017; - WGL_GREEN_SHIFT_ARB = $2018; - WGL_BLUE_BITS_ARB = $2019; - WGL_BLUE_SHIFT_ARB = $201A; - WGL_ALPHA_BITS_ARB = $201B; - WGL_ALPHA_SHIFT_ARB = $201C; - WGL_ACCUM_BITS_ARB = $201D; - WGL_ACCUM_RED_BITS_ARB = $201E; - WGL_ACCUM_GREEN_BITS_ARB = $201F; - WGL_ACCUM_BLUE_BITS_ARB = $2020; - WGL_ACCUM_ALPHA_BITS_ARB = $2021; - WGL_DEPTH_BITS_ARB = $2022; - WGL_STENCIL_BITS_ARB = $2023; - WGL_AUX_BUFFERS_ARB = $2024; - WGL_NO_ACCELERATION_ARB = $2025; - WGL_GENERIC_ACCELERATION_ARB = $2026; - WGL_FULL_ACCELERATION_ARB = $2027; - WGL_SWAP_EXCHANGE_ARB = $2028; - WGL_SWAP_COPY_ARB = $2029; - WGL_SWAP_UNDEFINED_ARB = $202A; - WGL_TYPE_RGBA_ARB = $202B; - WGL_TYPE_COLORINDEX_ARB = $202C; -var - wglGetPixelFormatAttribivARB: function(hdc: HDC; iPixelFormat: GLint; iLayerPlane: GLint; nAttributes: GLuint; const piAttributes: PGLint; piValues: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetPixelFormatAttribfvARB: function(hdc: HDC; iPixelFormat: GLint; iLayerPlane: GLint; nAttributes: GLuint; const piAttributes: PGLint; pfValues: PGLfloat): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglChoosePixelFormatARB: function(hdc: HDC; const piAttribIList: PGLint; const pfAttribFList: PGLfloat; nMaxFormats: GLuint; piFormats: PGLint; nNumFormats: PGLuint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_ARB_pixel_format: Boolean; - -//***** WGL_ARB_make_current_read *****// -const - WGL_ERROR_INVALID_PIXEL_TYPE_ARB = $2043; - WGL_ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB = $2054; -var - wglMakeContextCurrentARB: function(hDrawDC: HDC; hReadDC: HDC; hglrc: HGLRC): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetCurrentReadDCARB: function(): HDC; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_ARB_make_current_read: Boolean; - -//***** WGL_ARB_pbuffer *****// -const - WGL_DRAW_TO_PBUFFER_ARB = $202D; - // WGL_DRAW_TO_PBUFFER_ARB { already defined } - WGL_MAX_PBUFFER_PIXELS_ARB = $202E; - WGL_MAX_PBUFFER_WIDTH_ARB = $202F; - WGL_MAX_PBUFFER_HEIGHT_ARB = $2030; - WGL_PBUFFER_LARGEST_ARB = $2033; - WGL_PBUFFER_WIDTH_ARB = $2034; - WGL_PBUFFER_HEIGHT_ARB = $2035; - WGL_PBUFFER_LOST_ARB = $2036; -var - wglCreatePbufferARB: function(hDC: HDC; iPixelFormat: GLint; iWidth: GLint; iHeight: GLint; const piAttribList: PGLint): THandle; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetPbufferDCARB: function(hPbuffer: THandle): HDC; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglReleasePbufferDCARB: function(hPbuffer: THandle; hDC: HDC): GLint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglDestroyPbufferARB: function(hPbuffer: THandle): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglQueryPbufferARB: function(hPbuffer: THandle; iAttribute: GLint; piValue: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_ARB_pbuffer: Boolean; - -//***** WGL_EXT_swap_control *****// -var - wglSwapIntervalEXT: function(interval: GLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetSwapIntervalEXT: function(): GLint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_EXT_swap_control: Boolean; - -//***** WGL_ARB_render_texture *****// -const - WGL_BIND_TO_TEXTURE_RGB_ARB = $2070; - WGL_BIND_TO_TEXTURE_RGBA_ARB = $2071; - WGL_TEXTURE_FORMAT_ARB = $2072; - WGL_TEXTURE_TARGET_ARB = $2073; - WGL_MIPMAP_TEXTURE_ARB = $2074; - WGL_TEXTURE_RGB_ARB = $2075; - WGL_TEXTURE_RGBA_ARB = $2076; - WGL_NO_TEXTURE_ARB = $2077; - WGL_TEXTURE_CUBE_MAP_ARB = $2078; - WGL_TEXTURE_1D_ARB = $2079; - WGL_TEXTURE_2D_ARB = $207A; - // WGL_NO_TEXTURE_ARB { already defined } - WGL_MIPMAP_LEVEL_ARB = $207B; - WGL_CUBE_MAP_FACE_ARB = $207C; - WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = $207D; - WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = $207E; - WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = $207F; - WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = $2080; - WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = $2081; - WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = $2082; - WGL_FRONT_LEFT_ARB = $2083; - WGL_FRONT_RIGHT_ARB = $2084; - WGL_BACK_LEFT_ARB = $2085; - WGL_BACK_RIGHT_ARB = $2086; - WGL_AUX0_ARB = $2087; - WGL_AUX1_ARB = $2088; - WGL_AUX2_ARB = $2089; - WGL_AUX3_ARB = $208A; - WGL_AUX4_ARB = $208B; - WGL_AUX5_ARB = $208C; - WGL_AUX6_ARB = $208D; - WGL_AUX7_ARB = $208E; - WGL_AUX8_ARB = $208F; - WGL_AUX9_ARB = $2090; -var - wglBindTexImageARB: function(hPbuffer: THandle; iBuffer: GLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglReleaseTexImageARB: function(hPbuffer: THandle; iBuffer: GLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglSetPbufferAttribARB: function(hPbuffer: THandle; const piAttribList: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_ARB_render_texture: Boolean; - -//***** WGL_EXT_extensions_string *****// -var - wglGetExtensionsStringEXT: function(): Pchar; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_EXT_extensions_string: Boolean; - -//***** WGL_EXT_make_current_read *****// -var - wglMakeContextCurrentEXT: function(hDrawDC: HDC; hReadDC: HDC; hglrc: HGLRC): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetCurrentReadDCEXT: function(): HDC; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_EXT_make_current_read: Boolean; - -//***** WGL_EXT_pbuffer *****// -const - WGL_DRAW_TO_PBUFFER_EXT = $202D; - WGL_MAX_PBUFFER_PIXELS_EXT = $202E; - WGL_MAX_PBUFFER_WIDTH_EXT = $202F; - WGL_MAX_PBUFFER_HEIGHT_EXT = $2030; - WGL_OPTIMAL_PBUFFER_WIDTH_EXT = $2031; - WGL_OPTIMAL_PBUFFER_HEIGHT_EXT = $2032; - WGL_PBUFFER_LARGEST_EXT = $2033; - WGL_PBUFFER_WIDTH_EXT = $2034; - WGL_PBUFFER_HEIGHT_EXT = $2035; -var - wglCreatePbufferEXT: function(hDC: HDC; iPixelFormat: GLint; iWidth: GLint; iHeight: GLint; const piAttribList: PGLint): THandle; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetPbufferDCEXT: function(hPbuffer: THandle): HDC; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglReleasePbufferDCEXT: function(hPbuffer: THandle; hDC: HDC): GLint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglDestroyPbufferEXT: function(hPbuffer: THandle): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglQueryPbufferEXT: function(hPbuffer: THandle; iAttribute: GLint; piValue: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_EXT_pbuffer: Boolean; - -//***** WGL_EXT_pixel_format *****// -const - WGL_NUMBER_PIXEL_FORMATS_EXT = $2000; - WGL_DRAW_TO_WINDOW_EXT = $2001; - WGL_DRAW_TO_BITMAP_EXT = $2002; - WGL_ACCELERATION_EXT = $2003; - WGL_NEED_PALETTE_EXT = $2004; - WGL_NEED_SYSTEM_PALETTE_EXT = $2005; - WGL_SWAP_LAYER_BUFFERS_EXT = $2006; - WGL_SWAP_METHOD_EXT = $2007; - WGL_NUMBER_OVERLAYS_EXT = $2008; - WGL_NUMBER_UNDERLAYS_EXT = $2009; - WGL_TRANSPARENT_EXT = $200A; - WGL_TRANSPARENT_VALUE_EXT = $200B; - WGL_SHARE_DEPTH_EXT = $200C; - WGL_SHARE_STENCIL_EXT = $200D; - WGL_SHARE_ACCUM_EXT = $200E; - WGL_SUPPORT_GDI_EXT = $200F; - WGL_SUPPORT_OPENGL_EXT = $2010; - WGL_DOUBLE_BUFFER_EXT = $2011; - WGL_STEREO_EXT = $2012; - WGL_PIXEL_TYPE_EXT = $2013; - WGL_COLOR_BITS_EXT = $2014; - WGL_RED_BITS_EXT = $2015; - WGL_RED_SHIFT_EXT = $2016; - WGL_GREEN_BITS_EXT = $2017; - WGL_GREEN_SHIFT_EXT = $2018; - WGL_BLUE_BITS_EXT = $2019; - WGL_BLUE_SHIFT_EXT = $201A; - WGL_ALPHA_BITS_EXT = $201B; - WGL_ALPHA_SHIFT_EXT = $201C; - WGL_ACCUM_BITS_EXT = $201D; - WGL_ACCUM_RED_BITS_EXT = $201E; - WGL_ACCUM_GREEN_BITS_EXT = $201F; - WGL_ACCUM_BLUE_BITS_EXT = $2020; - WGL_ACCUM_ALPHA_BITS_EXT = $2021; - WGL_DEPTH_BITS_EXT = $2022; - WGL_STENCIL_BITS_EXT = $2023; - WGL_AUX_BUFFERS_EXT = $2024; - WGL_NO_ACCELERATION_EXT = $2025; - WGL_GENERIC_ACCELERATION_EXT = $2026; - WGL_FULL_ACCELERATION_EXT = $2027; - WGL_SWAP_EXCHANGE_EXT = $2028; - WGL_SWAP_COPY_EXT = $2029; - WGL_SWAP_UNDEFINED_EXT = $202A; - WGL_TYPE_RGBA_EXT = $202B; - WGL_TYPE_COLORINDEX_EXT = $202C; -var - wglGetPixelFormatAttribivEXT: function(hdc: HDC; iPixelFormat: GLint; iLayerPlane: GLint; nAttributes: GLuint; piAttributes: PGLint; piValues: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetPixelFormatAttribfvEXT: function(hdc: HDC; iPixelFormat: GLint; iLayerPlane: GLint; nAttributes: GLuint; piAttributes: PGLint; pfValues: PGLfloat): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglChoosePixelFormatEXT: function(hdc: HDC; const piAttribIList: PGLint; const pfAttribFList: PGLfloat; nMaxFormats: GLuint; piFormats: PGLint; nNumFormats: PGLuint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_EXT_pixel_format: Boolean; - -//***** WGL_I3D_digital_video_control *****// -const - WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D = $2050; - WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D = $2051; - WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D = $2052; - WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D = $2053; -var - wglGetDigitalVideoParametersI3D: function(hDC: HDC; iAttribute: GLint; piValue: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglSetDigitalVideoParametersI3D: function(hDC: HDC; iAttribute: GLint; const piValue: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_I3D_digital_video_control: Boolean; - -//***** WGL_I3D_gamma *****// -const - WGL_GAMMA_TABLE_SIZE_I3D = $204E; - WGL_GAMMA_EXCLUDE_DESKTOP_I3D = $204F; - // WGL_GAMMA_EXCLUDE_DESKTOP_I3D { already defined } -var - wglGetGammaTableParametersI3D: function(hDC: HDC; iAttribute: GLint; piValue: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglSetGammaTableParametersI3D: function(hDC: HDC; iAttribute: GLint; const piValue: PGLint): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetGammaTableI3D: function(hDC: HDC; iEntries: GLint; puRed: PGLUSHORT; puGreen: PGLUSHORT; puBlue: PGLUSHORT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglSetGammaTableI3D: function(hDC: HDC; iEntries: GLint; const puRed: PGLUSHORT; const puGreen: PGLUSHORT; const puBlue: PGLUSHORT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_I3D_gamma: Boolean; - -//***** WGL_I3D_genlock *****// -const - WGL_GENLOCK_SOURCE_MULTIVIEW_I3D = $2044; - WGL_GENLOCK_SOURCE_EXTERNAL_SYNC_I3D = $2045; - WGL_GENLOCK_SOURCE_EXTERNAL_FIELD_I3D = $2046; - WGL_GENLOCK_SOURCE_EXTERNAL_TTL_I3D = $2047; - WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D = $2048; - WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D = $2049; - WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D = $204A; - WGL_GENLOCK_SOURCE_EDGE_RISING_I3D = $204B; - WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D = $204C; -var - wglEnableGenlockI3D: function(hDC: HDC): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglDisableGenlockI3D: function(hDC: HDC): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglIsEnabledGenlockI3D: function(hDC: HDC; pFlag: PBOOL): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGenlockSourceI3D: function(hDC: HDC; uSource: GLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetGenlockSourceI3D: function(hDC: HDC; uSource: PGLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGenlockSourceEdgeI3D: function(hDC: HDC; uEdge: GLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetGenlockSourceEdgeI3D: function(hDC: HDC; uEdge: PGLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGenlockSampleRateI3D: function(hDC: HDC; uRate: GLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetGenlockSampleRateI3D: function(hDC: HDC; uRate: PGLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGenlockSourceDelayI3D: function(hDC: HDC; uDelay: GLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglGetGenlockSourceDelayI3D: function(hDC: HDC; uDelay: PGLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - wglQueryGenlockMaxSourceDelayI3D: function(hDC: HDC; uMaxLineDelay: PGLUINT; uMaxPixelDelay: PGLUINT): BOOL; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_WGL_I3D_genlock: Boolean; -{$ENDIF} - -//***** GL_ARB_matrix_palette *****// -const - GL_MATRIX_PALETTE_ARB = $8840; - GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB = $8841; - GL_MAX_PALETTE_MATRICES_ARB = $8842; - GL_CURRENT_PALETTE_MATRIX_ARB = $8843; - GL_MATRIX_INDEX_ARRAY_ARB = $8844; - GL_CURRENT_MATRIX_INDEX_ARB = $8845; - GL_MATRIX_INDEX_ARRAY_SIZE_ARB = $8846; - GL_MATRIX_INDEX_ARRAY_TYPE_ARB = $8847; - GL_MATRIX_INDEX_ARRAY_STRIDE_ARB = $8848; - GL_MATRIX_INDEX_ARRAY_POINTER_ARB = $8849; -var - glCurrentPaletteMatrixARB: procedure(index: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMatrixIndexubvARB: procedure(size: GLint; indices: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMatrixIndexusvARB: procedure(size: GLint; indices: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMatrixIndexuivARB: procedure(size: GLint; indices: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMatrixIndexPointerARB: procedure(size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_matrix_palette: Boolean; - -//***** GL_NV_element_array *****// -const - GL_ELEMENT_ARRAY_TYPE_NV = $8769; - GL_ELEMENT_ARRAY_POINTER_NV = $876A; -var - glElementPointerNV: procedure(_type: GLenum; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDrawElementArrayNV: procedure(mode: GLenum; first: GLint; count: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDrawRangeElementArrayNV: procedure(mode: GLenum; start: GLuint; _end: GLuint; first: GLint; count: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiDrawElementArrayNV: procedure(mode: GLenum; const first: PGLint; const count: PGLsizei; primcount: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiDrawRangeElementArrayNV: procedure(mode: GLenum; start: GLuint; _end: GLuint; const first: PGLint; const count: PGLsizei; primcount: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_element_array: Boolean; - -//***** GL_NV_float_buffer *****// -const - GL_FLOAT_R_NV = $8880; - GL_FLOAT_RG_NV = $8881; - GL_FLOAT_RGB_NV = $8882; - GL_FLOAT_RGBA_NV = $8883; - GL_FLOAT_R16_NV = $8884; - GL_FLOAT_R32_NV = $8885; - GL_FLOAT_RG16_NV = $8886; - GL_FLOAT_RG32_NV = $8887; - GL_FLOAT_RGB16_NV = $8888; - GL_FLOAT_RGB32_NV = $8889; - GL_FLOAT_RGBA16_NV = $888A; - GL_FLOAT_RGBA32_NV = $888B; - GL_TEXTURE_FLOAT_COMPONENTS_NV = $888C; - GL_FLOAT_CLEAR_COLOR_VALUE_NV = $888D; - GL_FLOAT_RGBA_MODE_NV = $888E; -{$IFDEF WINDOWS} - WGL_FLOAT_COMPONENTS_NV = $20B0; - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV = $20B1; - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV = $20B2; - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV = $20B3; - WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV = $20B4; - WGL_TEXTURE_FLOAT_R_NV = $20B5; - WGL_TEXTURE_FLOAT_RG_NV = $20B6; - WGL_TEXTURE_FLOAT_RGB_NV = $20B7; - WGL_TEXTURE_FLOAT_RGBA_NV = $20B8; -{$ENDIF} - -function Load_GL_NV_float_buffer: Boolean; - -//***** GL_NV_fragment_program *****// -const - GL_FRAGMENT_PROGRAM_NV = $8870; - GL_MAX_TEXTURE_COORDS_NV = $8871; - GL_MAX_TEXTURE_IMAGE_UNITS_NV = $8872; - GL_FRAGMENT_PROGRAM_BINDING_NV = $8873; - GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV = $8868; - GL_PROGRAM_ERROR_STRING_NV = $8874; -var - glProgramNamedParameter4fNV: procedure(id: GLuint; len: GLsizei; const name: PGLubyte; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glProgramNamedParameter4dNV: procedure(id: GLuint; len: GLsizei; const name: PGLubyte; x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramNamedParameterfvNV: procedure(id: GLuint; len: GLsizei; const name: PGLubyte; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramNamedParameterdvNV: procedure(id: GLuint; len: GLsizei; const name: PGLubyte; params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - // glProgramLocalParameter4dARB { already defined } - // glProgramLocalParameter4dvARB { already defined } - // glProgramLocalParameter4fARB { already defined } - // glProgramLocalParameter4fvARB { already defined } - // glGetProgramLocalParameterdvARB { already defined } - // glGetProgramLocalParameterfvARB { already defined } - -function Load_GL_NV_fragment_program: Boolean; - -//***** GL_NV_primitive_restart *****// -const - GL_PRIMITIVE_RESTART_NV = $8558; - GL_PRIMITIVE_RESTART_INDEX_NV = $8559; -var - glPrimitiveRestartNV: procedure(); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPrimitiveRestartIndexNV: procedure(index: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_primitive_restart: Boolean; - -//***** GL_NV_vertex_program2 *****// - -function Load_GL_NV_vertex_program2: Boolean; - -{$IFDEF WINDOWS} -//***** WGL_NV_render_texture_rectangle *****// -const - WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV = $20A0; - WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = $20A1; - WGL_TEXTURE_RECTANGLE_NV = $20A2; - -function Load_WGL_NV_render_texture_rectangle: Boolean; -{$ENDIF} - -//***** GL_NV_pixel_data_range *****// -const - GL_WRITE_PIXEL_DATA_RANGE_NV = $8878; - GL_READ_PIXEL_DATA_RANGE_NV = $8879; - GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV = $887A; - GL_READ_PIXEL_DATA_RANGE_LENGTH_NV = $887B; - GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV = $887C; - GL_READ_PIXEL_DATA_RANGE_POINTER_NV = $887D; -var - glPixelDataRangeNV: procedure(target: GLenum; length: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFlushPixelDataRangeNV: procedure(target: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - // wglAllocateMemoryNV { already defined } - // wglFreeMemoryNV { already defined } - -function Load_GL_NV_pixel_data_range: Boolean; - -//***** GL_EXT_texture_rectangle *****// -const - GL_TEXTURE_RECTANGLE_EXT = $84F5; - GL_TEXTURE_BINDING_RECTANGLE_EXT = $84F6; - GL_PROXY_TEXTURE_RECTANGLE_EXT = $84F7; - GL_MAX_RECTANGLE_TEXTURE_SIZE_EXT = $84F8; - -function Load_GL_EXT_texture_rectangle: Boolean; - -//***** GL_S3_s3tc *****// -const - GL_RGB_S3TC = $83A0; - GL_RGB4_S3TC = $83A1; - GL_RGBA_S3TC = $83A2; - GL_RGBA4_S3TC = $83A3; - -function Load_GL_S3_s3tc: Boolean; - -//***** GL_ATI_draw_buffers *****// -const - GL_MAX_DRAW_BUFFERS_ATI = $8824; - GL_DRAW_BUFFER0_ATI = $8825; - GL_DRAW_BUFFER1_ATI = $8826; - GL_DRAW_BUFFER2_ATI = $8827; - GL_DRAW_BUFFER3_ATI = $8828; - GL_DRAW_BUFFER4_ATI = $8829; - GL_DRAW_BUFFER5_ATI = $882A; - GL_DRAW_BUFFER6_ATI = $882B; - GL_DRAW_BUFFER7_ATI = $882C; - GL_DRAW_BUFFER8_ATI = $882D; - GL_DRAW_BUFFER9_ATI = $882E; - GL_DRAW_BUFFER10_ATI = $882F; - GL_DRAW_BUFFER11_ATI = $8830; - GL_DRAW_BUFFER12_ATI = $8831; - GL_DRAW_BUFFER13_ATI = $8832; - GL_DRAW_BUFFER14_ATI = $8833; - GL_DRAW_BUFFER15_ATI = $8834; -var - glDrawBuffersATI: procedure(n: GLsizei; const bufs: PGLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_draw_buffers: Boolean; - -{$IFDEF WINDOWS} -//***** WGL_ATI_pixel_format_float *****// -const - WGL_RGBA_FLOAT_MODE_ATI = $8820; - WGL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI = $8835; - WGL_TYPE_RGBA_FLOAT_ATI = $21A0; - -function Load_WGL_ATI_pixel_format_float: Boolean; -{$ENDIF} - -//***** GL_ATI_texture_env_combine3 *****// -const - GL_MODULATE_ADD_ATI = $8744; - GL_MODULATE_SIGNED_ADD_ATI = $8745; - GL_MODULATE_SUBTRACT_ATI = $8746; - -function Load_GL_ATI_texture_env_combine3: Boolean; - -//***** GL_ATI_texture_float *****// -const - GL_RGBA_FLOAT32_ATI = $8814; - GL_RGB_FLOAT32_ATI = $8815; - GL_ALPHA_FLOAT32_ATI = $8816; - GL_INTENSITY_FLOAT32_ATI = $8817; - GL_LUMINANCE_FLOAT32_ATI = $8818; - GL_LUMINANCE_ALPHA_FLOAT32_ATI = $8819; - GL_RGBA_FLOAT16_ATI = $881A; - GL_RGB_FLOAT16_ATI = $881B; - GL_ALPHA_FLOAT16_ATI = $881C; - GL_INTENSITY_FLOAT16_ATI = $881D; - GL_LUMINANCE_FLOAT16_ATI = $881E; - GL_LUMINANCE_ALPHA_FLOAT16_ATI = $881F; - -function Load_GL_ATI_texture_float: Boolean; - -//***** GL_NV_texture_expand_normal *****// -const - GL_TEXTURE_UNSIGNED_REMAP_MODE_NV = $888F; - -function Load_GL_NV_texture_expand_normal: Boolean; - -//***** GL_NV_half_float *****// -const - GL_HALF_FLOAT_NV = $140B; -var - glVertex2hNV: procedure(x: GLushort; y: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertex2hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertex3hNV: procedure(x: GLushort; y: GLushort; z: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertex3hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertex4hNV: procedure(x: GLushort; y: GLushort; z: GLushort; w: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertex4hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormal3hNV: procedure(nx: GLushort; ny: GLushort; nz: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glNormal3hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor3hNV: procedure(red: GLushort; green: GLushort; blue: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor3hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor4hNV: procedure(red: GLushort; green: GLushort; blue: GLushort; alpha: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glColor4hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord1hNV: procedure(s: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord1hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2hNV: procedure(s: GLushort; t: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord2hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord3hNV: procedure(s: GLushort; t: GLushort; r: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord3hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord4hNV: procedure(s: GLushort; t: GLushort; r: GLushort; q: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glTexCoord4hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1hNV: procedure(target: GLenum; s: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord1hvNV: procedure(target: GLenum; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2hNV: procedure(target: GLenum; s: GLushort; t: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord2hvNV: procedure(target: GLenum; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3hNV: procedure(target: GLenum; s: GLushort; t: GLushort; r: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord3hvNV: procedure(target: GLenum; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4hNV: procedure(target: GLenum; s: GLushort; t: GLushort; r: GLushort; q: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiTexCoord4hvNV: procedure(target: GLenum; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordhNV: procedure(fog: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordhvNV: procedure(const fog: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3hNV: procedure(red: GLushort; green: GLushort; blue: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3hvNV: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexWeighthNV: procedure(weight: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexWeighthvNV: procedure(const weight: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1hNV: procedure(index: GLuint; x: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1hvNV: procedure(index: GLuint; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2hNV: procedure(index: GLuint; x: GLushort; y: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2hvNV: procedure(index: GLuint; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3hNV: procedure(index: GLuint; x: GLushort; y: GLushort; z: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3hvNV: procedure(index: GLuint; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4hNV: procedure(index: GLuint; x: GLushort; y: GLushort; z: GLushort; w: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4hvNV: procedure(index: GLuint; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs1hvNV: procedure(index: GLuint; n: GLsizei; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs2hvNV: procedure(index: GLuint; n: GLsizei; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs3hvNV: procedure(index: GLuint; n: GLsizei; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribs4hvNV: procedure(index: GLuint; n: GLsizei; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_NV_half_float: Boolean; - -//***** GL_ATI_map_object_buffer *****// -var - glMapObjectBufferATI: function(buffer: GLuint): PGLvoid; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUnmapObjectBufferATI: procedure(buffer: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_map_object_buffer: Boolean; - -//***** GL_ATI_separate_stencil *****// -const - GL_KEEP = $1E00; - GL_ZERO = $0000; - GL_REPLACE = $1E01; - GL_INCR = $1E02; - GL_DECR = $1E03; - GL_INVERT = $150A; - GL_NEVER = $0200; - GL_LESS = $0201; - GL_LEQUAL = $0203; - GL_GREATER = $0204; - GL_GEQUAL = $0206; - GL_EQUAL = $0202; - GL_NOTEQUAL = $0205; - GL_ALWAYS = $0207; - GL_FRONT = $0404; - GL_BACK = $0405; - GL_FRONT_AND_BACK = $0408; - GL_STENCIL_BACK_FUNC_ATI = $8800; - GL_STENCIL_BACK_FAIL_ATI = $8801; - GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI = $8802; - GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI = $8803; -var - glStencilOpSeparateATI: procedure(face: GLenum; sfail: GLenum; dpfail: GLenum; dppass: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glStencilFuncSeparateATI: procedure(frontfunc: GLenum; backfunc: GLenum; ref: GLint; mask: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_separate_stencil: Boolean; - -//***** GL_ATI_vertex_attrib_array_object *****// -var - glVertexAttribArrayObjectATI: procedure(index: GLuint; size: GLint; _type: GLenum; normalized: GLboolean; stride: GLsizei; buffer: GLuint; offset: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribArrayObjectfvATI: procedure(index: GLuint; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribArrayObjectivATI: procedure(index: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ATI_vertex_attrib_array_object: Boolean; - -//***** GL_ARB_vertex_buffer_object *****// -const - GL_ARRAY_BUFFER_ARB = $8892; - GL_ELEMENT_ARRAY_BUFFER_ARB = $8893; - GL_ARRAY_BUFFER_BINDING_ARB = $8894; - GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB = $8895; - GL_VERTEX_ARRAY_BUFFER_BINDING_ARB = $8896; - GL_NORMAL_ARRAY_BUFFER_BINDING_ARB = $8897; - GL_COLOR_ARRAY_BUFFER_BINDING_ARB = $8898; - GL_INDEX_ARRAY_BUFFER_BINDING_ARB = $8899; - GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB = $889A; - GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB = $889B; - GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB = $889C; - GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB = $889D; - GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB = $889E; - GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB = $889F; - GL_STREAM_DRAW_ARB = $88E0; - GL_STREAM_READ_ARB = $88E1; - GL_STREAM_COPY_ARB = $88E2; - GL_STATIC_DRAW_ARB = $88E4; - GL_STATIC_READ_ARB = $88E5; - GL_STATIC_COPY_ARB = $88E6; - GL_DYNAMIC_DRAW_ARB = $88E8; - GL_DYNAMIC_READ_ARB = $88E9; - GL_DYNAMIC_COPY_ARB = $88EA; - GL_READ_ONLY_ARB = $88B8; - GL_WRITE_ONLY_ARB = $88B9; - GL_READ_WRITE_ARB = $88BA; - GL_BUFFER_SIZE_ARB = $8764; - GL_BUFFER_USAGE_ARB = $8765; - GL_BUFFER_ACCESS_ARB = $88BB; - GL_BUFFER_MAPPED_ARB = $88BC; - GL_BUFFER_MAP_POINTER_ARB = $88BD; -var - glBindBufferARB: procedure(target: GLenum; buffer: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteBuffersARB: procedure(n: GLsizei; const buffers: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenBuffersARB: procedure(n: GLsizei; buffers: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsBufferARB: function(buffer: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBufferDataARB: procedure(target: GLenum; size: GLsizeiptrARB; const data: PGLvoid; usage: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBufferSubDataARB: procedure(target: GLenum; offset: GLintptrARB; size: GLsizeiptrARB; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetBufferSubDataARB: procedure(target: GLenum; offset: GLintptrARB; size: GLsizeiptrARB; data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMapBufferARB: function(target: GLenum; access: GLenum): PGLvoid; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUnmapBufferARB: function(target: GLenum): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetBufferParameterivARB: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetBufferPointervARB: procedure(target: GLenum; pname: GLenum; params: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_vertex_buffer_object: Boolean; - -//***** GL_ARB_occlusion_query *****// -const - GL_SAMPLES_PASSED_ARB = $8914; - GL_QUERY_COUNTER_BITS_ARB = $8864; - GL_CURRENT_QUERY_ARB = $8865; - GL_QUERY_RESULT_ARB = $8866; - GL_QUERY_RESULT_AVAILABLE_ARB = $8867; -var - glGenQueriesARB: procedure(n: GLsizei; ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteQueriesARB: procedure(n: GLsizei; const ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsQueryARB: function(id: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBeginQueryARB: procedure(target: GLenum; id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEndQueryARB: procedure(target: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetQueryivARB: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetQueryObjectivARB: procedure(id: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetQueryObjectuivARB: procedure(id: GLuint; pname: GLenum; params: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_occlusion_query: Boolean; - -//***** GL_ARB_shader_objects *****// -const - GL_PROGRAM_OBJECT_ARB = $8B40; - GL_OBJECT_TYPE_ARB = $8B4E; - GL_OBJECT_SUBTYPE_ARB = $8B4F; - GL_OBJECT_DELETE_STATUS_ARB = $8B80; - GL_OBJECT_COMPILE_STATUS_ARB = $8B81; - GL_OBJECT_LINK_STATUS_ARB = $8B82; - GL_OBJECT_VALIDATE_STATUS_ARB = $8B83; - GL_OBJECT_INFO_LOG_LENGTH_ARB = $8B84; - GL_OBJECT_ATTACHED_OBJECTS_ARB = $8B85; - GL_OBJECT_ACTIVE_UNIFORMS_ARB = $8B86; - GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB = $8B87; - GL_OBJECT_SHADER_SOURCE_LENGTH_ARB = $8B88; - GL_SHADER_OBJECT_ARB = $8B48; - GL_FLOAT = $1406; - GL_FLOAT_VEC2_ARB = $8B50; - GL_FLOAT_VEC3_ARB = $8B51; - GL_FLOAT_VEC4_ARB = $8B52; - GL_INT = $1404; - GL_INT_VEC2_ARB = $8B53; - GL_INT_VEC3_ARB = $8B54; - GL_INT_VEC4_ARB = $8B55; - GL_BOOL_ARB = $8B56; - GL_BOOL_VEC2_ARB = $8B57; - GL_BOOL_VEC3_ARB = $8B58; - GL_BOOL_VEC4_ARB = $8B59; - GL_FLOAT_MAT2_ARB = $8B5A; - GL_FLOAT_MAT3_ARB = $8B5B; - GL_FLOAT_MAT4_ARB = $8B5C; -var - glDeleteObjectARB: procedure(obj: GLhandleARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetHandleARB: function(pname: GLenum): GLhandleARB; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDetachObjectARB: procedure(containerObj: GLhandleARB; attachedObj: GLhandleARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCreateShaderObjectARB: function(shaderType: GLenum): GLhandleARB; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glShaderSourceARB: procedure(shaderObj: GLhandleARB; count: GLsizei; const _string: PGLvoid; const length: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompileShaderARB: procedure(shaderObj: GLhandleARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCreateProgramObjectARB: function(): GLhandleARB; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glAttachObjectARB: procedure(containerObj: GLhandleARB; obj: GLhandleARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glLinkProgramARB: procedure(programObj: GLhandleARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUseProgramObjectARB: procedure(programObj: GLhandleARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glValidateProgramARB: procedure(programObj: GLhandleARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform1fARB: procedure(location: GLint; v0: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform2fARB: procedure(location: GLint; v0: GLfloat; v1: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform3fARB: procedure(location: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform4fARB: procedure(location: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat; v3: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform1iARB: procedure(location: GLint; v0: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform2iARB: procedure(location: GLint; v0: GLint; v1: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform3iARB: procedure(location: GLint; v0: GLint; v1: GLint; v2: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform4iARB: procedure(location: GLint; v0: GLint; v1: GLint; v2: GLint; v3: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform1fvARB: procedure(location: GLint; count: GLsizei; value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform2fvARB: procedure(location: GLint; count: GLsizei; value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform3fvARB: procedure(location: GLint; count: GLsizei; value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform4fvARB: procedure(location: GLint; count: GLsizei; value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform1ivARB: procedure(location: GLint; count: GLsizei; value: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform2ivARB: procedure(location: GLint; count: GLsizei; value: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform3ivARB: procedure(location: GLint; count: GLsizei; value: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform4ivARB: procedure(location: GLint; count: GLsizei; value: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniformMatrix2fvARB: procedure(location: GLint; count: GLsizei; transpose: GLboolean; value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniformMatrix3fvARB: procedure(location: GLint; count: GLsizei; transpose: GLboolean; value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniformMatrix4fvARB: procedure(location: GLint; count: GLsizei; transpose: GLboolean; value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetObjectParameterfvARB: procedure(obj: GLhandleARB; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetObjectParameterivARB: procedure(obj: GLhandleARB; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetInfoLogARB: procedure(obj: GLhandleARB; maxLength: GLsizei; length: PGLsizei; infoLog: PGLcharARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetAttachedObjectsARB: procedure(containerObj: GLhandleARB; maxCount: GLsizei; count: PGLsizei; obj: PGLhandleARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetUniformLocationARB: function(programObj: GLhandleARB; const name: PGLcharARB): GLint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetActiveUniformARB: procedure(programObj: GLhandleARB; index: GLuint; maxLength: GLsizei; length: PGLsizei; size: PGLint; _type: PGLenum; name: PGLcharARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetUniformfvARB: procedure(programObj: GLhandleARB; location: GLint; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetUniformivARB: procedure(programObj: GLhandleARB; location: GLint; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetShaderSourceARB: procedure(obj: GLhandleARB; maxLength: GLsizei; length: PGLsizei; source: PGLcharARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_shader_objects: Boolean; - -//***** GL_ARB_vertex_shader *****// -const - GL_VERTEX_SHADER_ARB = $8B31; - GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB = $8B4A; - GL_MAX_VARYING_FLOATS_ARB = $8B4B; - // GL_MAX_VERTEX_ATTRIBS_ARB { already defined } - // GL_MAX_TEXTURE_IMAGE_UNITS_ARB { already defined } - GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB = $8B4C; - GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB = $8B4D; - // GL_MAX_TEXTURE_COORDS_ARB { already defined } - // GL_VERTEX_PROGRAM_POINT_SIZE_ARB { already defined } - // GL_VERTEX_PROGRAM_TWO_SIDE_ARB { already defined } - // GL_OBJECT_TYPE_ARB { already defined } - // GL_OBJECT_SUBTYPE_ARB { already defined } - GL_OBJECT_ACTIVE_ATTRIBUTES_ARB = $8B89; - GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB = $8B8A; - // GL_SHADER_OBJECT_ARB { already defined } - // GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB { already defined } - // GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB { already defined } - // GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB { already defined } - // GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB { already defined } - // GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB { already defined } - // GL_CURRENT_VERTEX_ATTRIB_ARB { already defined } - // GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB { already defined } - // GL_FLOAT { already defined } - // GL_FLOAT_VEC2_ARB { already defined } - // GL_FLOAT_VEC3_ARB { already defined } - // GL_FLOAT_VEC4_ARB { already defined } - // GL_FLOAT_MAT2_ARB { already defined } - // GL_FLOAT_MAT3_ARB { already defined } - // GL_FLOAT_MAT4_ARB { already defined } - // glVertexAttrib1fARB { already defined } - // glVertexAttrib1sARB { already defined } - // glVertexAttrib1dARB { already defined } - // glVertexAttrib2fARB { already defined } - // glVertexAttrib2sARB { already defined } - // glVertexAttrib2dARB { already defined } - // glVertexAttrib3fARB { already defined } - // glVertexAttrib3sARB { already defined } - // glVertexAttrib3dARB { already defined } - // glVertexAttrib4fARB { already defined } - // glVertexAttrib4sARB { already defined } - // glVertexAttrib4dARB { already defined } - // glVertexAttrib4NubARB { already defined } - // glVertexAttrib1fvARB { already defined } - // glVertexAttrib1svARB { already defined } - // glVertexAttrib1dvARB { already defined } - // glVertexAttrib2fvARB { already defined } - // glVertexAttrib2svARB { already defined } - // glVertexAttrib2dvARB { already defined } - // glVertexAttrib3fvARB { already defined } - // glVertexAttrib3svARB { already defined } - // glVertexAttrib3dvARB { already defined } - // glVertexAttrib4fvARB { already defined } - // glVertexAttrib4svARB { already defined } - // glVertexAttrib4dvARB { already defined } - // glVertexAttrib4ivARB { already defined } - // glVertexAttrib4bvARB { already defined } - // glVertexAttrib4ubvARB { already defined } - // glVertexAttrib4usvARB { already defined } - // glVertexAttrib4uivARB { already defined } - // glVertexAttrib4NbvARB { already defined } - // glVertexAttrib4NsvARB { already defined } - // glVertexAttrib4NivARB { already defined } - // glVertexAttrib4NubvARB { already defined } - // glVertexAttrib4NusvARB { already defined } - // glVertexAttrib4NuivARB { already defined } - // glVertexAttribPointerARB { already defined } - // glEnableVertexAttribArrayARB { already defined } - // glDisableVertexAttribArrayARB { already defined } -var - glBindAttribLocationARB: procedure(programObj: GLhandleARB; index: GLuint; const name: PGLcharARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetActiveAttribARB: procedure(programObj: GLhandleARB; index: GLuint; maxLength: GLsizei; length: PGLsizei; size: PGLint; _type: PGLenum; name: PGLcharARB); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetAttribLocationARB: function(programObj: GLhandleARB; const name: PGLcharARB): GLint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - // glGetVertexAttribdvARB { already defined } - // glGetVertexAttribfvARB { already defined } - // glGetVertexAttribivARB { already defined } - // glGetVertexAttribPointervARB { already defined } - -function Load_GL_ARB_vertex_shader: Boolean; - -//***** GL_ARB_fragment_shader *****// -const - GL_FRAGMENT_SHADER_ARB = $8B30; - GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB = $8B49; - // GL_MAX_TEXTURE_COORDS_ARB { already defined } - // GL_MAX_TEXTURE_IMAGE_UNITS_ARB { already defined } - // GL_OBJECT_TYPE_ARB { already defined } - // GL_OBJECT_SUBTYPE_ARB { already defined } - // GL_SHADER_OBJECT_ARB { already defined } - -function Load_GL_ARB_fragment_shader: Boolean; - -//***** GL_ARB_shading_language_100 *****// - -function Load_GL_ARB_shading_language_100: Boolean; - -//***** GL_ARB_texture_non_power_of_two *****// - -function Load_GL_ARB_texture_non_power_of_two: Boolean; - -//***** GL_ARB_point_sprite *****// -const - GL_POINT_SPRITE_ARB = $8861; - GL_COORD_REPLACE_ARB = $8862; - -function Load_GL_ARB_point_sprite: Boolean; - -//***** GL_EXT_depth_bounds_test *****// -const - GL_DEPTH_BOUNDS_TEST_EXT = $8890; - GL_DEPTH_BOUNDS_EXT = $8891; -var - glDepthBoundsEXT: procedure(zmin: GLclampd; zmax: GLclampd); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_depth_bounds_test: Boolean; - -//***** GL_EXT_secondary_color *****// -const - GL_COLOR_SUM_EXT = $8458; - GL_CURRENT_SECONDARY_COLOR_EXT = $8459; - GL_SECONDARY_COLOR_ARRAY_SIZE_EXT = $845A; - GL_SECONDARY_COLOR_ARRAY_TYPE_EXT = $845B; - GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT = $845C; - GL_SECONDARY_COLOR_ARRAY_POINTER_EXT = $845D; - GL_SECONDARY_COLOR_ARRAY_EXT = $845E; -var - glSecondaryColor3bEXT: procedure(r: GLbyte; g: GLbyte; b: GLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3sEXT: procedure(r: GLshort; g: GLshort; b: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3iEXT: procedure(r: GLint; g: GLint; b: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3fEXT: procedure(r: GLfloat; g: GLfloat; b: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3dEXT: procedure(r: GLdouble; g: GLdouble; b: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3ubEXT: procedure(r: GLubyte; g: GLubyte; b: GLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3usEXT: procedure(r: GLushort; g: GLushort; b: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3uiEXT: procedure(r: GLuint; g: GLuint; b: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3bvEXT: procedure(components: PGLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3svEXT: procedure(components: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3ivEXT: procedure(components: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3fvEXT: procedure(components: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3dvEXT: procedure(components: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3ubvEXT: procedure(components: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3usvEXT: procedure(components: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3uivEXT: procedure(components: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColorPointerEXT: procedure(size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_secondary_color: Boolean; - -//***** GL_EXT_texture_mirror_clamp *****// -const - GL_MIRROR_CLAMP_EXT = $8742; - GL_MIRROR_CLAMP_TO_EDGE_EXT = $8743; - GL_MIRROR_CLAMP_TO_BORDER_EXT = $8912; - -function Load_GL_EXT_texture_mirror_clamp: Boolean; - -//***** GL_EXT_blend_equation_separate *****// -const - GL_BLEND_EQUATION_RGB_EXT = $8009; - GL_BLEND_EQUATION_ALPHA_EXT = $883D; -var - glBlendEquationSeparateEXT: procedure(modeRGB: GLenum; modeAlpha: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_blend_equation_separate: Boolean; - -//***** GL_MESA_pack_invert *****// -const - GL_PACK_INVERT_MESA = $8758; - -function Load_GL_MESA_pack_invert: Boolean; - -//***** GL_MESA_ycbcr_texture *****// -const - GL_YCBCR_MESA = $8757; - GL_UNSIGNED_SHORT_8_8_MESA = $85BA; - GL_UNSIGNED_SHORT_8_8_REV_MESA = $85BB; - -function Load_GL_MESA_ycbcr_texture: Boolean; - -//***** GL_ARB_fragment_program_shadow *****// - -function Load_GL_ARB_fragment_program_shadow: Boolean; - -//***** GL_EXT_fog_coord *****// -const - GL_FOG_COORDINATE_SOURCE_EXT = $8450; - GL_FOG_COORDINATE_EXT = $8451; - GL_FRAGMENT_DEPTH_EXT = $8452; - GL_CURRENT_FOG_COORDINATE_EXT = $8453; - GL_FOG_COORDINATE_ARRAY_TYPE_EXT = $8454; - GL_FOG_COORDINATE_ARRAY_STRIDE_EXT = $8455; - GL_FOG_COORDINATE_ARRAY_POINTER_EXT = $8456; - GL_FOG_COORDINATE_ARRAY_EXT = $8457; -var - glFogCoordfEXT: procedure(coord: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoorddEXT: procedure(coord: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordfvEXT: procedure(coord: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoorddvEXT: procedure(coord: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordPointerEXT: procedure(_type: GLenum; stride: GLsizei; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_fog_coord: Boolean; - -//***** GL_NV_fragment_program_option *****// - -function Load_GL_NV_fragment_program_option: Boolean; - -//***** GL_EXT_pixel_buffer_object *****// -const - GL_PIXEL_PACK_BUFFER_EXT = $88EB; - GL_PIXEL_UNPACK_BUFFER_EXT = $88EC; - GL_PIXEL_PACK_BUFFER_BINDING_EXT = $88ED; - GL_PIXEL_UNPACK_BUFFER_BINDING_EXT = $88EF; - -function Load_GL_EXT_pixel_buffer_object: Boolean; - -//***** GL_NV_fragment_program2 *****// -const - GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV = $88F4; - GL_MAX_PROGRAM_CALL_DEPTH_NV = $88F5; - GL_MAX_PROGRAM_IF_DEPTH_NV = $88F6; - GL_MAX_PROGRAM_LOOP_DEPTH_NV = $88F7; - GL_MAX_PROGRAM_LOOP_COUNT_NV = $88F8; - -function Load_GL_NV_fragment_program2: Boolean; - -//***** GL_NV_vertex_program2_option *****// - // GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV { already defined } - // GL_MAX_PROGRAM_CALL_DEPTH_NV { already defined } - -function Load_GL_NV_vertex_program2_option: Boolean; - -//***** GL_NV_vertex_program3 *****// - // GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB { already defined } - -function Load_GL_NV_vertex_program3: Boolean; - -//***** GL_ARB_draw_buffers *****// -const - GL_MAX_DRAW_BUFFERS_ARB = $8824; - GL_DRAW_BUFFER0_ARB = $8825; - GL_DRAW_BUFFER1_ARB = $8826; - GL_DRAW_BUFFER2_ARB = $8827; - GL_DRAW_BUFFER3_ARB = $8828; - GL_DRAW_BUFFER4_ARB = $8829; - GL_DRAW_BUFFER5_ARB = $882A; - GL_DRAW_BUFFER6_ARB = $882B; - GL_DRAW_BUFFER7_ARB = $882C; - GL_DRAW_BUFFER8_ARB = $882D; - GL_DRAW_BUFFER9_ARB = $882E; - GL_DRAW_BUFFER10_ARB = $882F; - GL_DRAW_BUFFER11_ARB = $8830; - GL_DRAW_BUFFER12_ARB = $8831; - GL_DRAW_BUFFER13_ARB = $8832; - GL_DRAW_BUFFER14_ARB = $8833; - GL_DRAW_BUFFER15_ARB = $8834; -var - glDrawBuffersARB: procedure(n: GLsizei; const bufs: PGLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_draw_buffers: Boolean; - -//***** GL_ARB_texture_rectangle *****// -const - GL_TEXTURE_RECTANGLE_ARB = $84F5; - GL_TEXTURE_BINDING_RECTANGLE_ARB = $84F6; - GL_PROXY_TEXTURE_RECTANGLE_ARB = $84F7; - GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB = $84F8; - -function Load_GL_ARB_texture_rectangle: Boolean; - -//***** GL_ARB_color_buffer_float *****// -const - GL_RGBA_FLOAT_MODE_ARB = $8820; - GL_CLAMP_VERTEX_COLOR_ARB = $891A; - GL_CLAMP_FRAGMENT_COLOR_ARB = $891B; - GL_CLAMP_READ_COLOR_ARB = $891C; - GL_FIXED_ONLY_ARB = $891D; - WGL_TYPE_RGBA_FLOAT_ARB = $21A0; -var - glClampColorARB: procedure(target: GLenum; clamp: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_ARB_color_buffer_float: Boolean; - -//***** GL_ARB_half_float_pixel *****// -const - GL_HALF_FLOAT_ARB = $140B; - -function Load_GL_ARB_half_float_pixel: Boolean; - -//***** GL_ARB_texture_float *****// -const - GL_TEXTURE_RED_TYPE_ARB = $8C10; - GL_TEXTURE_GREEN_TYPE_ARB = $8C11; - GL_TEXTURE_BLUE_TYPE_ARB = $8C12; - GL_TEXTURE_ALPHA_TYPE_ARB = $8C13; - GL_TEXTURE_LUMINANCE_TYPE_ARB = $8C14; - GL_TEXTURE_INTENSITY_TYPE_ARB = $8C15; - GL_TEXTURE_DEPTH_TYPE_ARB = $8C16; - GL_UNSIGNED_NORMALIZED_ARB = $8C17; - GL_RGBA32F_ARB = $8814; - GL_RGB32F_ARB = $8815; - GL_ALPHA32F_ARB = $8816; - GL_INTENSITY32F_ARB = $8817; - GL_LUMINANCE32F_ARB = $8818; - GL_LUMINANCE_ALPHA32F_ARB = $8819; - GL_RGBA16F_ARB = $881A; - GL_RGB16F_ARB = $881B; - GL_ALPHA16F_ARB = $881C; - GL_INTENSITY16F_ARB = $881D; - GL_LUMINANCE16F_ARB = $881E; - GL_LUMINANCE_ALPHA16F_ARB = $881F; - -function Load_GL_ARB_texture_float: Boolean; - -//***** GL_EXT_texture_compression_dxt1 *****// - // GL_COMPRESSED_RGB_S3TC_DXT1_EXT { already defined } - // GL_COMPRESSED_RGBA_S3TC_DXT1_EXT { already defined } - -function Load_GL_EXT_texture_compression_dxt1: Boolean; - -//***** GL_ARB_pixel_buffer_object *****// -const - GL_PIXEL_PACK_BUFFER_ARB = $88EB; - GL_PIXEL_UNPACK_BUFFER_ARB = $88EC; - GL_PIXEL_PACK_BUFFER_BINDING_ARB = $88ED; - GL_PIXEL_UNPACK_BUFFER_BINDING_ARB = $88EF; - -function Load_GL_ARB_pixel_buffer_object: Boolean; - -//***** GL_EXT_framebuffer_object *****// -const - GL_FRAMEBUFFER_EXT = $8D40; - GL_RENDERBUFFER_EXT = $8D41; - GL_STENCIL_INDEX_EXT = $8D45; - GL_STENCIL_INDEX1_EXT = $8D46; - GL_STENCIL_INDEX4_EXT = $8D47; - GL_STENCIL_INDEX8_EXT = $8D48; - GL_STENCIL_INDEX16_EXT = $8D49; - GL_RENDERBUFFER_WIDTH_EXT = $8D42; - GL_RENDERBUFFER_HEIGHT_EXT = $8D43; - GL_RENDERBUFFER_INTERNAL_FORMAT_EXT = $8D44; - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT = $8CD0; - GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT = $8CD1; - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT = $8CD2; - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT = $8CD3; - GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT = $8CD4; - GL_COLOR_ATTACHMENT0_EXT = $8CE0; - GL_COLOR_ATTACHMENT1_EXT = $8CE1; - GL_COLOR_ATTACHMENT2_EXT = $8CE2; - GL_COLOR_ATTACHMENT3_EXT = $8CE3; - GL_COLOR_ATTACHMENT4_EXT = $8CE4; - GL_COLOR_ATTACHMENT5_EXT = $8CE5; - GL_COLOR_ATTACHMENT6_EXT = $8CE6; - GL_COLOR_ATTACHMENT7_EXT = $8CE7; - GL_COLOR_ATTACHMENT8_EXT = $8CE8; - GL_COLOR_ATTACHMENT9_EXT = $8CE9; - GL_COLOR_ATTACHMENT10_EXT = $8CEA; - GL_COLOR_ATTACHMENT11_EXT = $8CEB; - GL_COLOR_ATTACHMENT12_EXT = $8CEC; - GL_COLOR_ATTACHMENT13_EXT = $8CED; - GL_COLOR_ATTACHMENT14_EXT = $8CEE; - GL_COLOR_ATTACHMENT15_EXT = $8CEF; - GL_DEPTH_ATTACHMENT_EXT = $8D00; - GL_STENCIL_ATTACHMENT_EXT = $8D20; - GL_FRAMEBUFFER_COMPLETE_EXT = $8CD5; - GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT = $8CD6; - GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT = $8CD7; - GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT = $8CD8; - GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT = $8CD9; - GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT = $8CDA; - GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT = $8CDB; - GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT = $8CDC; - GL_FRAMEBUFFER_UNSUPPORTED_EXT = $8CDD; - GL_FRAMEBUFFER_STATUS_ERROR_EXT = $8CDE; - GL_FRAMEBUFFER_BINDING_EXT = $8CA6; - GL_RENDERBUFFER_BINDING_EXT = $8CA7; - GL_MAX_COLOR_ATTACHMENTS_EXT = $8CDF; - GL_MAX_RENDERBUFFER_SIZE_EXT = $84E8; - GL_INVALID_FRAMEBUFFER_OPERATION_EXT = $0506; -var - glIsRenderbufferEXT: function(renderbuffer: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindRenderbufferEXT: procedure(target: GLenum; renderbuffer: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteRenderbuffersEXT: procedure(n: GLsizei; const renderbuffers: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenRenderbuffersEXT: procedure(n: GLsizei; renderbuffers: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glRenderbufferStorageEXT: procedure(target: GLenum; internalformat: GLenum; width: GLsizei; height: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetRenderbufferParameterivEXT: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsFramebufferEXT: function(framebuffer: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindFramebufferEXT: procedure(target: GLenum; framebuffer: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteFramebuffersEXT: procedure(n: GLsizei; const framebuffers: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenFramebuffersEXT: procedure(n: GLsizei; framebuffers: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCheckFramebufferStatusEXT: function(target: GLenum): GLenum; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFramebufferTexture1DEXT: procedure(target: GLenum; attachment: GLenum; textarget: GLenum; texture: GLuint; level: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFramebufferTexture2DEXT: procedure(target: GLenum; attachment: GLenum; textarget: GLenum; texture: GLuint; level: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFramebufferTexture3DEXT: procedure(target: GLenum; attachment: GLenum; textarget: GLenum; texture: GLuint; level: GLint; zoffset: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFramebufferRenderbufferEXT: procedure(target: GLenum; attachment: GLenum; renderbuffertarget: GLenum; renderbuffer: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetFramebufferAttachmentParameterivEXT: procedure(target: GLenum; attachment: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenerateMipmapEXT: procedure(target: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_EXT_framebuffer_object: Boolean; - -//***** GL_version_1_4 *****// -const - GL_BLEND_DST_RGB = $80C8; - GL_BLEND_SRC_RGB = $80C9; - GL_BLEND_DST_ALPHA = $80CA; - GL_BLEND_SRC_ALPHA = $80CB; - GL_POINT_SIZE_MIN = $8126; - GL_POINT_SIZE_MAX = $8127; - GL_POINT_FADE_THRESHOLD_SIZE = $8128; - GL_POINT_DISTANCE_ATTENUATION = $8129; - GL_GENERATE_MIPMAP = $8191; - GL_GENERATE_MIPMAP_HINT = $8192; - GL_DEPTH_COMPONENT16 = $81A5; - GL_DEPTH_COMPONENT24 = $81A6; - GL_DEPTH_COMPONENT32 = $81A7; - GL_MIRRORED_REPEAT = $8370; - GL_FOG_COORDINATE_SOURCE = $8450; - GL_FOG_COORDINATE = $8451; - GL_FRAGMENT_DEPTH = $8452; - GL_CURRENT_FOG_COORDINATE = $8453; - GL_FOG_COORDINATE_ARRAY_TYPE = $8454; - GL_FOG_COORDINATE_ARRAY_STRIDE = $8455; - GL_FOG_COORDINATE_ARRAY_POINTER = $8456; - GL_FOG_COORDINATE_ARRAY = $8457; - GL_COLOR_SUM = $8458; - GL_CURRENT_SECONDARY_COLOR = $8459; - GL_SECONDARY_COLOR_ARRAY_SIZE = $845A; - GL_SECONDARY_COLOR_ARRAY_TYPE = $845B; - GL_SECONDARY_COLOR_ARRAY_STRIDE = $845C; - GL_SECONDARY_COLOR_ARRAY_POINTER = $845D; - GL_SECONDARY_COLOR_ARRAY = $845E; - GL_MAX_TEXTURE_LOD_BIAS = $84FD; - GL_TEXTURE_FILTER_CONTROL = $8500; - GL_TEXTURE_LOD_BIAS = $8501; - GL_INCR_WRAP = $8507; - GL_DECR_WRAP = $8508; - GL_TEXTURE_DEPTH_SIZE = $884A; - GL_DEPTH_TEXTURE_MODE = $884B; - GL_TEXTURE_COMPARE_MODE = $884C; - GL_TEXTURE_COMPARE_FUNC = $884D; - GL_COMPARE_R_TO_TEXTURE = $884E; -var - glBlendFuncSeparate: procedure(sfactorRGB: GLenum; dfactorRGB: GLenum; sfactorAlpha: GLenum; dfactorAlpha: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordf: procedure(coord: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordfv: procedure(const coord: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordd: procedure(coord: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoorddv: procedure(const coord: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glFogCoordPointer: procedure(_type: GLenum; stride: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiDrawArrays: procedure(mode: GLenum; first: PGLint; count: PGLsizei; primcount: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMultiDrawElements: procedure(mode: GLenum; const count: PGLsizei; _type: GLenum; const indices: PGLvoid; primcount: GLsizei); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPointParameterf: procedure(pname: GLenum; param: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPointParameterfv: procedure(pname: GLenum; const params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPointParameteri: procedure(pname: GLenum; param: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glPointParameteriv: procedure(pname: GLenum; const params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3b: procedure(red: GLbyte; green: GLbyte; blue: GLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3bv: procedure(const v: PGLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3d: procedure(red: GLdouble; green: GLdouble; blue: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3dv: procedure(const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3f: procedure(red: GLfloat; green: GLfloat; blue: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3fv: procedure(const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3i: procedure(red: GLint; green: GLint; blue: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3iv: procedure(const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3s: procedure(red: GLshort; green: GLshort; blue: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3sv: procedure(const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3ub: procedure(red: GLubyte; green: GLubyte; blue: GLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3ubv: procedure(const v: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3ui: procedure(red: GLuint; green: GLuint; blue: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3uiv: procedure(const v: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3us: procedure(red: GLushort; green: GLushort; blue: GLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColor3usv: procedure(const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glSecondaryColorPointer: procedure(size: GLint; _type: GLenum; stride: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2d: procedure(x: GLdouble; y: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2dv: procedure(const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2f: procedure(x: GLfloat; y: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2fv: procedure(const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2i: procedure(x: GLint; y: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2iv: procedure(const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2s: procedure(x: GLshort; y: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos2sv: procedure(const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3d: procedure(x: GLdouble; y: GLdouble; z: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3dv: procedure(const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3f: procedure(x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3fv: procedure(const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3i: procedure(x: GLint; y: GLint; z: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3iv: procedure(const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3s: procedure(x: GLshort; y: GLshort; z: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glWindowPos3sv: procedure(const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_version_1_4: Boolean; - -//***** GL_version_1_5 *****// -const - GL_BUFFER_SIZE = $8764; - GL_BUFFER_USAGE = $8765; - GL_QUERY_COUNTER_BITS = $8864; - GL_CURRENT_QUERY = $8865; - GL_QUERY_RESULT = $8866; - GL_QUERY_RESULT_AVAILABLE = $8867; - GL_ARRAY_BUFFER = $8892; - GL_ELEMENT_ARRAY_BUFFER = $8893; - GL_ARRAY_BUFFER_BINDING = $8894; - GL_ELEMENT_ARRAY_BUFFER_BINDING = $8895; - GL_VERTEX_ARRAY_BUFFER_BINDING = $8896; - GL_NORMAL_ARRAY_BUFFER_BINDING = $8897; - GL_COLOR_ARRAY_BUFFER_BINDING = $8898; - GL_INDEX_ARRAY_BUFFER_BINDING = $8899; - GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = $889A; - GL_EDGE_FLAG_ARRAY_BUFFER_BINDING = $889B; - GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING = $889C; - GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING = $889D; - GL_WEIGHT_ARRAY_BUFFER_BINDING = $889E; - GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = $889F; - GL_READ_ONLY = $88B8; - GL_WRITE_ONLY = $88B9; - GL_READ_WRITE = $88BA; - GL_BUFFER_ACCESS = $88BB; - GL_BUFFER_MAPPED = $88BC; - GL_BUFFER_MAP_POINTER = $88BD; - GL_STREAM_DRAW = $88E0; - GL_STREAM_READ = $88E1; - GL_STREAM_COPY = $88E2; - GL_STATIC_DRAW = $88E4; - GL_STATIC_READ = $88E5; - GL_STATIC_COPY = $88E6; - GL_DYNAMIC_DRAW = $88E8; - GL_DYNAMIC_READ = $88E9; - GL_DYNAMIC_COPY = $88EA; - GL_SAMPLES_PASSED = $8914; - GL_FOG_COORD_SRC = $8450; - GL_FOG_COORD = $8451; - GL_CURRENT_FOG_COORD = $8453; - GL_FOG_COORD_ARRAY_TYPE = $8454; - GL_FOG_COORD_ARRAY_STRIDE = $8455; - GL_FOG_COORD_ARRAY_POINTER = $8456; - GL_FOG_COORD_ARRAY = $8457; - GL_FOG_COORD_ARRAY_BUFFER_BINDING = $889D; - GL_SRC0_RGB = $8580; - GL_SRC1_RGB = $8581; - GL_SRC2_RGB = $8582; - GL_SRC0_ALPHA = $8588; - GL_SRC1_ALPHA = $8589; - GL_SRC2_ALPHA = $858A; -var - glGenQueries: procedure(n: GLsizei; ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteQueries: procedure(n: GLsizei; const ids: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsQuery: function(id: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBeginQuery: procedure(target: GLenum; id: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEndQuery: procedure(target: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetQueryiv: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetQueryObjectiv: procedure(id: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetQueryObjectuiv: procedure(id: GLuint; pname: GLenum; params: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindBuffer: procedure(target: GLenum; buffer: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteBuffers: procedure(n: GLsizei; const buffers: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGenBuffers: procedure(n: GLsizei; buffers: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsBuffer: function(buffer: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBufferData: procedure(target: GLenum; size: GLsizeiptr; const data: PGLvoid; usage: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBufferSubData: procedure(target: GLenum; offset: GLintptr; size: GLsizeiptr; const data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetBufferSubData: procedure(target: GLenum; offset: GLintptr; size: GLsizeiptr; data: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glMapBuffer: function(target: GLenum; access: GLenum): PGLvoid; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUnmapBuffer: function(target: GLenum): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetBufferParameteriv: procedure(target: GLenum; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetBufferPointerv: procedure(target: GLenum; pname: GLenum; params: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_version_1_5: Boolean; - -//***** GL_version_2_0 *****// -const - GL_BLEND_EQUATION_RGB = $8009; - GL_VERTEX_ATTRIB_ARRAY_ENABLED = $8622; - GL_VERTEX_ATTRIB_ARRAY_SIZE = $8623; - GL_VERTEX_ATTRIB_ARRAY_STRIDE = $8624; - GL_VERTEX_ATTRIB_ARRAY_TYPE = $8625; - GL_CURRENT_VERTEX_ATTRIB = $8626; - GL_VERTEX_PROGRAM_POINT_SIZE = $8642; - GL_VERTEX_PROGRAM_TWO_SIDE = $8643; - GL_VERTEX_ATTRIB_ARRAY_POINTER = $8645; - GL_STENCIL_BACK_FUNC = $8800; - GL_STENCIL_BACK_FAIL = $8801; - GL_STENCIL_BACK_PASS_DEPTH_FAIL = $8802; - GL_STENCIL_BACK_PASS_DEPTH_PASS = $8803; - GL_MAX_DRAW_BUFFERS = $8824; - GL_DRAW_BUFFER0 = $8825; - GL_DRAW_BUFFER1 = $8826; - GL_DRAW_BUFFER2 = $8827; - GL_DRAW_BUFFER3 = $8828; - GL_DRAW_BUFFER4 = $8829; - GL_DRAW_BUFFER5 = $882A; - GL_DRAW_BUFFER6 = $882B; - GL_DRAW_BUFFER7 = $882C; - GL_DRAW_BUFFER8 = $882D; - GL_DRAW_BUFFER9 = $882E; - GL_DRAW_BUFFER10 = $882F; - GL_DRAW_BUFFER11 = $8830; - GL_DRAW_BUFFER12 = $8831; - GL_DRAW_BUFFER13 = $8832; - GL_DRAW_BUFFER14 = $8833; - GL_DRAW_BUFFER15 = $8834; - GL_BLEND_EQUATION_ALPHA = $883D; - GL_POINT_SPRITE = $8861; - GL_COORD_REPLACE = $8862; - GL_MAX_VERTEX_ATTRIBS = $8869; - GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = $886A; - GL_MAX_TEXTURE_COORDS = $8871; - GL_MAX_TEXTURE_IMAGE_UNITS = $8872; - GL_FRAGMENT_SHADER = $8B30; - GL_VERTEX_SHADER = $8B31; - GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = $8B49; - GL_MAX_VERTEX_UNIFORM_COMPONENTS = $8B4A; - GL_MAX_VARYING_FLOATS = $8B4B; - GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = $8B4C; - GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = $8B4D; - GL_SHADER_TYPE = $8B4F; - GL_FLOAT_VEC2 = $8B50; - GL_FLOAT_VEC3 = $8B51; - GL_FLOAT_VEC4 = $8B52; - GL_INT_VEC2 = $8B53; - GL_INT_VEC3 = $8B54; - GL_INT_VEC4 = $8B55; - GL_BOOL = $8B56; - GL_BOOL_VEC2 = $8B57; - GL_BOOL_VEC3 = $8B58; - GL_BOOL_VEC4 = $8B59; - GL_FLOAT_MAT2 = $8B5A; - GL_FLOAT_MAT3 = $8B5B; - GL_FLOAT_MAT4 = $8B5C; - GL_SAMPLER_1D = $8B5D; - GL_SAMPLER_2D = $8B5E; - GL_SAMPLER_3D = $8B5F; - GL_SAMPLER_CUBE = $8B60; - GL_SAMPLER_1D_SHADOW = $8B61; - GL_SAMPLER_2D_SHADOW = $8B62; - GL_DELETE_STATUS = $8B80; - GL_COMPILE_STATUS = $8B81; - GL_LINK_STATUS = $8B82; - GL_VALIDATE_STATUS = $8B83; - GL_INFO_LOG_LENGTH = $8B84; - GL_ATTACHED_SHADERS = $8B85; - GL_ACTIVE_UNIFORMS = $8B86; - GL_ACTIVE_UNIFORM_MAX_LENGTH = $8B87; - GL_SHADER_SOURCE_LENGTH = $8B88; - GL_ACTIVE_ATTRIBUTES = $8B89; - GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = $8B8A; - GL_FRAGMENT_SHADER_DERIVATIVE_HINT = $8B8B; - GL_SHADING_LANGUAGE_VERSION = $8B8C; - GL_CURRENT_PROGRAM = $8B8D; - GL_POINT_SPRITE_COORD_ORIGIN = $8CA0; - GL_LOWER_LEFT = $8CA1; - GL_UPPER_LEFT = $8CA2; - GL_STENCIL_BACK_REF = $8CA3; - GL_STENCIL_BACK_VALUE_MASK = $8CA4; - GL_STENCIL_BACK_WRITEMASK = $8CA5; -var - glBlendEquationSeparate: procedure(modeRGB: GLenum; modeAlpha: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDrawBuffers: procedure(n: GLsizei; const bufs: PGLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glStencilOpSeparate: procedure(face: GLenum; sfail: GLenum; dpfail: GLenum; dppass: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glStencilFuncSeparate: procedure(frontfunc: GLenum; backfunc: GLenum; ref: GLint; mask: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glStencilMaskSeparate: procedure(face: GLenum; mask: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glAttachShader: procedure(_program: GLuint; shader: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glBindAttribLocation: procedure(_program: GLuint; index: GLuint; const name: PGLchar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCompileShader: procedure(shader: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCreateProgram: function(): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glCreateShader: function(_type: GLenum): GLuint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteProgram: procedure(_program: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDeleteShader: procedure(shader: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDetachShader: procedure(_program: GLuint; shader: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glDisableVertexAttribArray: procedure(index: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glEnableVertexAttribArray: procedure(index: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetActiveAttrib: procedure(_program: GLuint; index: GLuint; bufSize: GLsizei; length: PGLsizei; size: PGLint; _type: PGLenum; name: PGLchar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetActiveUniform: procedure(_program: GLuint; index: GLuint; bufSize: GLsizei; length: PGLsizei; size: PGLint; _type: PGLenum; name: PGLchar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetAttachedShaders: procedure(_program: GLuint; maxCount: GLsizei; count: PGLsizei; obj: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetAttribLocation: function(_program: GLuint; const name: PGLchar): GLint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramiv: procedure(_program: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetProgramInfoLog: procedure(_program: GLuint; bufSize: GLsizei; length: PGLsizei; infoLog: PGLchar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetShaderiv: procedure(shader: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetShaderInfoLog: procedure(shader: GLuint; bufSize: GLsizei; length: PGLsizei; infoLog: PGLchar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetShaderSource: procedure(shader: GLuint; bufSize: GLsizei; length: PGLsizei; source: PGLchar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetUniformLocation: function(_program: GLuint; const name: PGLchar): GLint; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetUniformfv: procedure(_program: GLuint; location: GLint; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetUniformiv: procedure(_program: GLuint; location: GLint; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribdv: procedure(index: GLuint; pname: GLenum; params: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribfv: procedure(index: GLuint; pname: GLenum; params: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribiv: procedure(index: GLuint; pname: GLenum; params: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glGetVertexAttribPointerv: procedure(index: GLuint; pname: GLenum; pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsProgram: function(_program: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glIsShader: function(shader: GLuint): GLboolean; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glLinkProgram: procedure(_program: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glShaderSource: procedure(shader: GLuint; count: GLsizei; const _string: PGLchar; const length: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUseProgram: procedure(_program: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform1f: procedure(location: GLint; v0: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform2f: procedure(location: GLint; v0: GLfloat; v1: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform3f: procedure(location: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform4f: procedure(location: GLint; v0: GLfloat; v1: GLfloat; v2: GLfloat; v3: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform1i: procedure(location: GLint; v0: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform2i: procedure(location: GLint; v0: GLint; v1: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform3i: procedure(location: GLint; v0: GLint; v1: GLint; v2: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform4i: procedure(location: GLint; v0: GLint; v1: GLint; v2: GLint; v3: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform1fv: procedure(location: GLint; count: GLsizei; const value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform2fv: procedure(location: GLint; count: GLsizei; const value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform3fv: procedure(location: GLint; count: GLsizei; const value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform4fv: procedure(location: GLint; count: GLsizei; const value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform1iv: procedure(location: GLint; count: GLsizei; const value: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform2iv: procedure(location: GLint; count: GLsizei; const value: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform3iv: procedure(location: GLint; count: GLsizei; const value: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniform4iv: procedure(location: GLint; count: GLsizei; const value: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniformMatrix2fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniformMatrix3fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glUniformMatrix4fv: procedure(location: GLint; count: GLsizei; transpose: GLboolean; const value: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glValidateProgram: procedure(_program: GLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1d: procedure(index: GLuint; x: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1dv: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1f: procedure(index: GLuint; x: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1fv: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1s: procedure(index: GLuint; x: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib1sv: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2d: procedure(index: GLuint; x: GLdouble; y: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2dv: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2f: procedure(index: GLuint; x: GLfloat; y: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2fv: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2s: procedure(index: GLuint; x: GLshort; y: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib2sv: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3d: procedure(index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3dv: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3f: procedure(index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3fv: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3s: procedure(index: GLuint; x: GLshort; y: GLshort; z: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib3sv: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4Nbv: procedure(index: GLuint; const v: PGLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4Niv: procedure(index: GLuint; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4Nsv: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4Nub: procedure(index: GLuint; x: GLubyte; y: GLubyte; z: GLubyte; w: GLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4Nubv: procedure(index: GLuint; const v: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4Nuiv: procedure(index: GLuint; const v: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4Nusv: procedure(index: GLuint; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4bv: procedure(index: GLuint; const v: PGLbyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4d: procedure(index: GLuint; x: GLdouble; y: GLdouble; z: GLdouble; w: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4dv: procedure(index: GLuint; const v: PGLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4f: procedure(index: GLuint; x: GLfloat; y: GLfloat; z: GLfloat; w: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4fv: procedure(index: GLuint; const v: PGLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4iv: procedure(index: GLuint; const v: PGLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4s: procedure(index: GLuint; x: GLshort; y: GLshort; z: GLshort; w: GLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4sv: procedure(index: GLuint; const v: PGLshort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4ubv: procedure(index: GLuint; const v: PGLubyte); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4uiv: procedure(index: GLuint; const v: PGLuint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttrib4usv: procedure(index: GLuint; const v: PGLushort); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glVertexAttribPointer: procedure(index: GLuint; size: GLint; _type: GLenum; normalized: GLboolean; stride: GLsizei; const pointer: PGLvoid); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -function Load_GL_version_2_0: Boolean; - -implementation - -uses - sdl2; - -function glext_ExtensionSupported(const extension: PChar; const searchIn: PChar): Boolean; -var - extensions: PChar; - start: PChar; - where, terminator: PChar; -begin - - if (Pos(' ', extension) <> 0) or (extension = '') then - begin - Result := false; - Exit; - end; - - if searchIn = '' then - extensions := glGetString(GL_EXTENSIONS) - else - //StrLCopy(extensions, searchIn, StrLen(searchIn) + 1); - extensions := searchIn; - start := extensions; - while true do - begin - where := StrPos(start, extension); - if where = nil then - Break; - terminator := where + Length(extension); - if (where = start) or ((where - 1)^ = ' ') then - begin - if (terminator^ = ' ') or (terminator^ = #0) then - begin - Result := true; - Exit; - end; - end; - start := terminator; - end; - Result := false; - -end; - -function Load_GL_version_1_2: Boolean; -{var - extstring : PChar;} -begin - Result := true; - - @glCopyTexSubImage3D := SDL_GL_GetProcAddress('glCopyTexSubImage3D'); - if not Assigned(glCopyTexSubImage3D) then Result := false; - @glDrawRangeElements := SDL_GL_GetProcAddress('glDrawRangeElements'); - if not Assigned(glDrawRangeElements) then Result := false; - @glTexImage3D := SDL_GL_GetProcAddress('glTexImage3D'); - if not Assigned(glTexImage3D) then Result := false; - @glTexSubImage3D := SDL_GL_GetProcAddress('glTexSubImage3D'); - if not Assigned(glTexSubImage3D) then Result := false; -end; - -function Load_GL_ARB_imaging: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_imaging', extstring) then - begin - @glColorTable := SDL_GL_GetProcAddress('glColorTable'); - if not Assigned(glColorTable) then Exit; - @glColorTableParameterfv := SDL_GL_GetProcAddress('glColorTableParameterfv'); - if not Assigned(glColorTableParameterfv) then Exit; - @glColorTableParameteriv := SDL_GL_GetProcAddress('glColorTableParameteriv'); - if not Assigned(glColorTableParameteriv) then Exit; - @glCopyColorTable := SDL_GL_GetProcAddress('glCopyColorTable'); - if not Assigned(glCopyColorTable) then Exit; - @glGetColorTable := SDL_GL_GetProcAddress('glGetColorTable'); - if not Assigned(glGetColorTable) then Exit; - @glGetColorTableParameterfv := SDL_GL_GetProcAddress('glGetColorTableParameterfv'); - if not Assigned(glGetColorTableParameterfv) then Exit; - @glGetColorTableParameteriv := SDL_GL_GetProcAddress('glGetColorTableParameteriv'); - if not Assigned(glGetColorTableParameteriv) then Exit; - @glColorSubTable := SDL_GL_GetProcAddress('glColorSubTable'); - if not Assigned(glColorSubTable) then Exit; - @glCopyColorSubTable := SDL_GL_GetProcAddress('glCopyColorSubTable'); - if not Assigned(glCopyColorSubTable) then Exit; - @glConvolutionFilter1D := SDL_GL_GetProcAddress('glConvolutionFilter1D'); - if not Assigned(glConvolutionFilter1D) then Exit; - @glConvolutionFilter2D := SDL_GL_GetProcAddress('glConvolutionFilter2D'); - if not Assigned(glConvolutionFilter2D) then Exit; - @glConvolutionParameterf := SDL_GL_GetProcAddress('glConvolutionParameterf'); - if not Assigned(glConvolutionParameterf) then Exit; - @glConvolutionParameterfv := SDL_GL_GetProcAddress('glConvolutionParameterfv'); - if not Assigned(glConvolutionParameterfv) then Exit; - @glConvolutionParameteri := SDL_GL_GetProcAddress('glConvolutionParameteri'); - if not Assigned(glConvolutionParameteri) then Exit; - @glConvolutionParameteriv := SDL_GL_GetProcAddress('glConvolutionParameteriv'); - if not Assigned(glConvolutionParameteriv) then Exit; - @glCopyConvolutionFilter1D := SDL_GL_GetProcAddress('glCopyConvolutionFilter1D'); - if not Assigned(glCopyConvolutionFilter1D) then Exit; - @glCopyConvolutionFilter2D := SDL_GL_GetProcAddress('glCopyConvolutionFilter2D'); - if not Assigned(glCopyConvolutionFilter2D) then Exit; - @glGetConvolutionFilter := SDL_GL_GetProcAddress('glGetConvolutionFilter'); - if not Assigned(glGetConvolutionFilter) then Exit; - @glGetConvolutionParameterfv := SDL_GL_GetProcAddress('glGetConvolutionParameterfv'); - if not Assigned(glGetConvolutionParameterfv) then Exit; - @glGetConvolutionParameteriv := SDL_GL_GetProcAddress('glGetConvolutionParameteriv'); - if not Assigned(glGetConvolutionParameteriv) then Exit; - @glGetSeparableFilter := SDL_GL_GetProcAddress('glGetSeparableFilter'); - if not Assigned(glGetSeparableFilter) then Exit; - @glSeparableFilter2D := SDL_GL_GetProcAddress('glSeparableFilter2D'); - if not Assigned(glSeparableFilter2D) then Exit; - @glGetHistogram := SDL_GL_GetProcAddress('glGetHistogram'); - if not Assigned(glGetHistogram) then Exit; - @glGetHistogramParameterfv := SDL_GL_GetProcAddress('glGetHistogramParameterfv'); - if not Assigned(glGetHistogramParameterfv) then Exit; - @glGetHistogramParameteriv := SDL_GL_GetProcAddress('glGetHistogramParameteriv'); - if not Assigned(glGetHistogramParameteriv) then Exit; - @glGetMinmax := SDL_GL_GetProcAddress('glGetMinmax'); - if not Assigned(glGetMinmax) then Exit; - @glGetMinmaxParameterfv := SDL_GL_GetProcAddress('glGetMinmaxParameterfv'); - if not Assigned(glGetMinmaxParameterfv) then Exit; - @glGetMinmaxParameteriv := SDL_GL_GetProcAddress('glGetMinmaxParameteriv'); - if not Assigned(glGetMinmaxParameteriv) then Exit; - @glHistogram := SDL_GL_GetProcAddress('glHistogram'); - if not Assigned(glHistogram) then Exit; - @glMinmax := SDL_GL_GetProcAddress('glMinmax'); - if not Assigned(glMinmax) then Exit; - @glResetHistogram := SDL_GL_GetProcAddress('glResetHistogram'); - if not Assigned(glResetHistogram) then Exit; - @glResetMinmax := SDL_GL_GetProcAddress('glResetMinmax'); - if not Assigned(glResetMinmax) then Exit; - @glBlendEquation := SDL_GL_GetProcAddress('glBlendEquation'); - if not Assigned(glBlendEquation) then Exit; - @glBlendColor := SDL_GL_GetProcAddress('glBlendColor'); - if not Assigned(glBlendColor) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_version_1_3: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - @glActiveTexture := SDL_GL_GetProcAddress('glActiveTexture'); - if not Assigned(glActiveTexture) then Exit; - @glClientActiveTexture := SDL_GL_GetProcAddress('glClientActiveTexture'); - if not Assigned(glClientActiveTexture) then Exit; - @glMultiTexCoord1d := SDL_GL_GetProcAddress('glMultiTexCoord1d'); - if not Assigned(glMultiTexCoord1d) then Exit; - @glMultiTexCoord1dv := SDL_GL_GetProcAddress('glMultiTexCoord1dv'); - if not Assigned(glMultiTexCoord1dv) then Exit; - @glMultiTexCoord1f := SDL_GL_GetProcAddress('glMultiTexCoord1f'); - if not Assigned(glMultiTexCoord1f) then Exit; - @glMultiTexCoord1fv := SDL_GL_GetProcAddress('glMultiTexCoord1fv'); - if not Assigned(glMultiTexCoord1fv) then Exit; - @glMultiTexCoord1i := SDL_GL_GetProcAddress('glMultiTexCoord1i'); - if not Assigned(glMultiTexCoord1i) then Exit; - @glMultiTexCoord1iv := SDL_GL_GetProcAddress('glMultiTexCoord1iv'); - if not Assigned(glMultiTexCoord1iv) then Exit; - @glMultiTexCoord1s := SDL_GL_GetProcAddress('glMultiTexCoord1s'); - if not Assigned(glMultiTexCoord1s) then Exit; - @glMultiTexCoord1sv := SDL_GL_GetProcAddress('glMultiTexCoord1sv'); - if not Assigned(glMultiTexCoord1sv) then Exit; - @glMultiTexCoord2d := SDL_GL_GetProcAddress('glMultiTexCoord2d'); - if not Assigned(glMultiTexCoord2d) then Exit; - @glMultiTexCoord2dv := SDL_GL_GetProcAddress('glMultiTexCoord2dv'); - if not Assigned(glMultiTexCoord2dv) then Exit; - @glMultiTexCoord2f := SDL_GL_GetProcAddress('glMultiTexCoord2f'); - if not Assigned(glMultiTexCoord2f) then Exit; - @glMultiTexCoord2fv := SDL_GL_GetProcAddress('glMultiTexCoord2fv'); - if not Assigned(glMultiTexCoord2fv) then Exit; - @glMultiTexCoord2i := SDL_GL_GetProcAddress('glMultiTexCoord2i'); - if not Assigned(glMultiTexCoord2i) then Exit; - @glMultiTexCoord2iv := SDL_GL_GetProcAddress('glMultiTexCoord2iv'); - if not Assigned(glMultiTexCoord2iv) then Exit; - @glMultiTexCoord2s := SDL_GL_GetProcAddress('glMultiTexCoord2s'); - if not Assigned(glMultiTexCoord2s) then Exit; - @glMultiTexCoord2sv := SDL_GL_GetProcAddress('glMultiTexCoord2sv'); - if not Assigned(glMultiTexCoord2sv) then Exit; - @glMultiTexCoord3d := SDL_GL_GetProcAddress('glMultiTexCoord3d'); - if not Assigned(glMultiTexCoord3d) then Exit; - @glMultiTexCoord3dv := SDL_GL_GetProcAddress('glMultiTexCoord3dv'); - if not Assigned(glMultiTexCoord3dv) then Exit; - @glMultiTexCoord3f := SDL_GL_GetProcAddress('glMultiTexCoord3f'); - if not Assigned(glMultiTexCoord3f) then Exit; - @glMultiTexCoord3fv := SDL_GL_GetProcAddress('glMultiTexCoord3fv'); - if not Assigned(glMultiTexCoord3fv) then Exit; - @glMultiTexCoord3i := SDL_GL_GetProcAddress('glMultiTexCoord3i'); - if not Assigned(glMultiTexCoord3i) then Exit; - @glMultiTexCoord3iv := SDL_GL_GetProcAddress('glMultiTexCoord3iv'); - if not Assigned(glMultiTexCoord3iv) then Exit; - @glMultiTexCoord3s := SDL_GL_GetProcAddress('glMultiTexCoord3s'); - if not Assigned(glMultiTexCoord3s) then Exit; - @glMultiTexCoord3sv := SDL_GL_GetProcAddress('glMultiTexCoord3sv'); - if not Assigned(glMultiTexCoord3sv) then Exit; - @glMultiTexCoord4d := SDL_GL_GetProcAddress('glMultiTexCoord4d'); - if not Assigned(glMultiTexCoord4d) then Exit; - @glMultiTexCoord4dv := SDL_GL_GetProcAddress('glMultiTexCoord4dv'); - if not Assigned(glMultiTexCoord4dv) then Exit; - @glMultiTexCoord4f := SDL_GL_GetProcAddress('glMultiTexCoord4f'); - if not Assigned(glMultiTexCoord4f) then Exit; - @glMultiTexCoord4fv := SDL_GL_GetProcAddress('glMultiTexCoord4fv'); - if not Assigned(glMultiTexCoord4fv) then Exit; - @glMultiTexCoord4i := SDL_GL_GetProcAddress('glMultiTexCoord4i'); - if not Assigned(glMultiTexCoord4i) then Exit; - @glMultiTexCoord4iv := SDL_GL_GetProcAddress('glMultiTexCoord4iv'); - if not Assigned(glMultiTexCoord4iv) then Exit; - @glMultiTexCoord4s := SDL_GL_GetProcAddress('glMultiTexCoord4s'); - if not Assigned(glMultiTexCoord4s) then Exit; - @glMultiTexCoord4sv := SDL_GL_GetProcAddress('glMultiTexCoord4sv'); - if not Assigned(glMultiTexCoord4sv) then Exit; - @glLoadTransposeMatrixf := SDL_GL_GetProcAddress('glLoadTransposeMatrixf'); - if not Assigned(glLoadTransposeMatrixf) then Exit; - @glLoadTransposeMatrixd := SDL_GL_GetProcAddress('glLoadTransposeMatrixd'); - if not Assigned(glLoadTransposeMatrixd) then Exit; - @glMultTransposeMatrixf := SDL_GL_GetProcAddress('glMultTransposeMatrixf'); - if not Assigned(glMultTransposeMatrixf) then Exit; - @glMultTransposeMatrixd := SDL_GL_GetProcAddress('glMultTransposeMatrixd'); - if not Assigned(glMultTransposeMatrixd) then Exit; - @glSampleCoverage := SDL_GL_GetProcAddress('glSampleCoverage'); - if not Assigned(glSampleCoverage) then Exit; - @glCompressedTexImage3D := SDL_GL_GetProcAddress('glCompressedTexImage3D'); - if not Assigned(glCompressedTexImage3D) then Exit; - @glCompressedTexImage2D := SDL_GL_GetProcAddress('glCompressedTexImage2D'); - if not Assigned(glCompressedTexImage2D) then Exit; - @glCompressedTexImage1D := SDL_GL_GetProcAddress('glCompressedTexImage1D'); - if not Assigned(glCompressedTexImage1D) then Exit; - @glCompressedTexSubImage3D := SDL_GL_GetProcAddress('glCompressedTexSubImage3D'); - if not Assigned(glCompressedTexSubImage3D) then Exit; - @glCompressedTexSubImage2D := SDL_GL_GetProcAddress('glCompressedTexSubImage2D'); - if not Assigned(glCompressedTexSubImage2D) then Exit; - @glCompressedTexSubImage1D := SDL_GL_GetProcAddress('glCompressedTexSubImage1D'); - if not Assigned(glCompressedTexSubImage1D) then Exit; - @glGetCompressedTexImage := SDL_GL_GetProcAddress('glGetCompressedTexImage'); - if not Assigned(glGetCompressedTexImage) then Exit; - Result := TRUE; - -end; - -function Load_GL_ARB_multitexture: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_multitexture', extstring) then - begin - @glActiveTextureARB := SDL_GL_GetProcAddress('glActiveTextureARB'); - if not Assigned(glActiveTextureARB) then Exit; - @glClientActiveTextureARB := SDL_GL_GetProcAddress('glClientActiveTextureARB'); - if not Assigned(glClientActiveTextureARB) then Exit; - @glMultiTexCoord1dARB := SDL_GL_GetProcAddress('glMultiTexCoord1dARB'); - if not Assigned(glMultiTexCoord1dARB) then Exit; - @glMultiTexCoord1dvARB := SDL_GL_GetProcAddress('glMultiTexCoord1dvARB'); - if not Assigned(glMultiTexCoord1dvARB) then Exit; - @glMultiTexCoord1fARB := SDL_GL_GetProcAddress('glMultiTexCoord1fARB'); - if not Assigned(glMultiTexCoord1fARB) then Exit; - @glMultiTexCoord1fvARB := SDL_GL_GetProcAddress('glMultiTexCoord1fvARB'); - if not Assigned(glMultiTexCoord1fvARB) then Exit; - @glMultiTexCoord1iARB := SDL_GL_GetProcAddress('glMultiTexCoord1iARB'); - if not Assigned(glMultiTexCoord1iARB) then Exit; - @glMultiTexCoord1ivARB := SDL_GL_GetProcAddress('glMultiTexCoord1ivARB'); - if not Assigned(glMultiTexCoord1ivARB) then Exit; - @glMultiTexCoord1sARB := SDL_GL_GetProcAddress('glMultiTexCoord1sARB'); - if not Assigned(glMultiTexCoord1sARB) then Exit; - @glMultiTexCoord1svARB := SDL_GL_GetProcAddress('glMultiTexCoord1svARB'); - if not Assigned(glMultiTexCoord1svARB) then Exit; - @glMultiTexCoord2dARB := SDL_GL_GetProcAddress('glMultiTexCoord2dARB'); - if not Assigned(glMultiTexCoord2dARB) then Exit; - @glMultiTexCoord2dvARB := SDL_GL_GetProcAddress('glMultiTexCoord2dvARB'); - if not Assigned(glMultiTexCoord2dvARB) then Exit; - @glMultiTexCoord2fARB := SDL_GL_GetProcAddress('glMultiTexCoord2fARB'); - if not Assigned(glMultiTexCoord2fARB) then Exit; - @glMultiTexCoord2fvARB := SDL_GL_GetProcAddress('glMultiTexCoord2fvARB'); - if not Assigned(glMultiTexCoord2fvARB) then Exit; - @glMultiTexCoord2iARB := SDL_GL_GetProcAddress('glMultiTexCoord2iARB'); - if not Assigned(glMultiTexCoord2iARB) then Exit; - @glMultiTexCoord2ivARB := SDL_GL_GetProcAddress('glMultiTexCoord2ivARB'); - if not Assigned(glMultiTexCoord2ivARB) then Exit; - @glMultiTexCoord2sARB := SDL_GL_GetProcAddress('glMultiTexCoord2sARB'); - if not Assigned(glMultiTexCoord2sARB) then Exit; - @glMultiTexCoord2svARB := SDL_GL_GetProcAddress('glMultiTexCoord2svARB'); - if not Assigned(glMultiTexCoord2svARB) then Exit; - @glMultiTexCoord3dARB := SDL_GL_GetProcAddress('glMultiTexCoord3dARB'); - if not Assigned(glMultiTexCoord3dARB) then Exit; - @glMultiTexCoord3dvARB := SDL_GL_GetProcAddress('glMultiTexCoord3dvARB'); - if not Assigned(glMultiTexCoord3dvARB) then Exit; - @glMultiTexCoord3fARB := SDL_GL_GetProcAddress('glMultiTexCoord3fARB'); - if not Assigned(glMultiTexCoord3fARB) then Exit; - @glMultiTexCoord3fvARB := SDL_GL_GetProcAddress('glMultiTexCoord3fvARB'); - if not Assigned(glMultiTexCoord3fvARB) then Exit; - @glMultiTexCoord3iARB := SDL_GL_GetProcAddress('glMultiTexCoord3iARB'); - if not Assigned(glMultiTexCoord3iARB) then Exit; - @glMultiTexCoord3ivARB := SDL_GL_GetProcAddress('glMultiTexCoord3ivARB'); - if not Assigned(glMultiTexCoord3ivARB) then Exit; - @glMultiTexCoord3sARB := SDL_GL_GetProcAddress('glMultiTexCoord3sARB'); - if not Assigned(glMultiTexCoord3sARB) then Exit; - @glMultiTexCoord3svARB := SDL_GL_GetProcAddress('glMultiTexCoord3svARB'); - if not Assigned(glMultiTexCoord3svARB) then Exit; - @glMultiTexCoord4dARB := SDL_GL_GetProcAddress('glMultiTexCoord4dARB'); - if not Assigned(glMultiTexCoord4dARB) then Exit; - @glMultiTexCoord4dvARB := SDL_GL_GetProcAddress('glMultiTexCoord4dvARB'); - if not Assigned(glMultiTexCoord4dvARB) then Exit; - @glMultiTexCoord4fARB := SDL_GL_GetProcAddress('glMultiTexCoord4fARB'); - if not Assigned(glMultiTexCoord4fARB) then Exit; - @glMultiTexCoord4fvARB := SDL_GL_GetProcAddress('glMultiTexCoord4fvARB'); - if not Assigned(glMultiTexCoord4fvARB) then Exit; - @glMultiTexCoord4iARB := SDL_GL_GetProcAddress('glMultiTexCoord4iARB'); - if not Assigned(glMultiTexCoord4iARB) then Exit; - @glMultiTexCoord4ivARB := SDL_GL_GetProcAddress('glMultiTexCoord4ivARB'); - if not Assigned(glMultiTexCoord4ivARB) then Exit; - @glMultiTexCoord4sARB := SDL_GL_GetProcAddress('glMultiTexCoord4sARB'); - if not Assigned(glMultiTexCoord4sARB) then Exit; - @glMultiTexCoord4svARB := SDL_GL_GetProcAddress('glMultiTexCoord4svARB'); - if not Assigned(glMultiTexCoord4svARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_transpose_matrix: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_transpose_matrix', extstring) then - begin - @glLoadTransposeMatrixfARB := SDL_GL_GetProcAddress('glLoadTransposeMatrixfARB'); - if not Assigned(glLoadTransposeMatrixfARB) then Exit; - @glLoadTransposeMatrixdARB := SDL_GL_GetProcAddress('glLoadTransposeMatrixdARB'); - if not Assigned(glLoadTransposeMatrixdARB) then Exit; - @glMultTransposeMatrixfARB := SDL_GL_GetProcAddress('glMultTransposeMatrixfARB'); - if not Assigned(glMultTransposeMatrixfARB) then Exit; - @glMultTransposeMatrixdARB := SDL_GL_GetProcAddress('glMultTransposeMatrixdARB'); - if not Assigned(glMultTransposeMatrixdARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_multisample: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_multisample', extstring) then - begin - @glSampleCoverageARB := SDL_GL_GetProcAddress('glSampleCoverageARB'); - if not Assigned(glSampleCoverageARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_env_add: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_env_add', extstring) then - begin - Result := TRUE; - end; - -end; - -{$IFDEF WINDOWS} -function Load_WGL_ARB_extensions_string: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_ARB_extensions_string', extstring) then - begin - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_ARB_buffer_region: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_ARB_buffer_region', extstring) then - begin - @wglCreateBufferRegionARB := SDL_GL_GetProcAddress('wglCreateBufferRegionARB'); - if not Assigned(wglCreateBufferRegionARB) then Exit; - @wglDeleteBufferRegionARB := SDL_GL_GetProcAddress('wglDeleteBufferRegionARB'); - if not Assigned(wglDeleteBufferRegionARB) then Exit; - @wglSaveBufferRegionARB := SDL_GL_GetProcAddress('wglSaveBufferRegionARB'); - if not Assigned(wglSaveBufferRegionARB) then Exit; - @wglRestoreBufferRegionARB := SDL_GL_GetProcAddress('wglRestoreBufferRegionARB'); - if not Assigned(wglRestoreBufferRegionARB) then Exit; - Result := TRUE; - end; - -end; -{$ENDIF} - -function Load_GL_ARB_texture_cube_map: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_cube_map', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_depth_texture: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_depth_texture', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_point_parameters: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_point_parameters', extstring) then - begin - @glPointParameterfARB := SDL_GL_GetProcAddress('glPointParameterfARB'); - if not Assigned(glPointParameterfARB) then Exit; - @glPointParameterfvARB := SDL_GL_GetProcAddress('glPointParameterfvARB'); - if not Assigned(glPointParameterfvARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_shadow: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_shadow', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_shadow_ambient: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_shadow_ambient', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_border_clamp: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_border_clamp', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_compression: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_compression', extstring) then - begin - @glCompressedTexImage3DARB := SDL_GL_GetProcAddress('glCompressedTexImage3DARB'); - if not Assigned(glCompressedTexImage3DARB) then Exit; - @glCompressedTexImage2DARB := SDL_GL_GetProcAddress('glCompressedTexImage2DARB'); - if not Assigned(glCompressedTexImage2DARB) then Exit; - @glCompressedTexImage1DARB := SDL_GL_GetProcAddress('glCompressedTexImage1DARB'); - if not Assigned(glCompressedTexImage1DARB) then Exit; - @glCompressedTexSubImage3DARB := SDL_GL_GetProcAddress('glCompressedTexSubImage3DARB'); - if not Assigned(glCompressedTexSubImage3DARB) then Exit; - @glCompressedTexSubImage2DARB := SDL_GL_GetProcAddress('glCompressedTexSubImage2DARB'); - if not Assigned(glCompressedTexSubImage2DARB) then Exit; - @glCompressedTexSubImage1DARB := SDL_GL_GetProcAddress('glCompressedTexSubImage1DARB'); - if not Assigned(glCompressedTexSubImage1DARB) then Exit; - @glGetCompressedTexImageARB := SDL_GL_GetProcAddress('glGetCompressedTexImageARB'); - if not Assigned(glGetCompressedTexImageARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_env_combine: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_env_combine', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_env_crossbar: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_env_crossbar', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_env_dot3: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_env_dot3', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_mirrored_repeat: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_mirrored_repeat', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_vertex_blend: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_vertex_blend', extstring) then - begin - @glWeightbvARB := SDL_GL_GetProcAddress('glWeightbvARB'); - if not Assigned(glWeightbvARB) then Exit; - @glWeightsvARB := SDL_GL_GetProcAddress('glWeightsvARB'); - if not Assigned(glWeightsvARB) then Exit; - @glWeightivARB := SDL_GL_GetProcAddress('glWeightivARB'); - if not Assigned(glWeightivARB) then Exit; - @glWeightfvARB := SDL_GL_GetProcAddress('glWeightfvARB'); - if not Assigned(glWeightfvARB) then Exit; - @glWeightdvARB := SDL_GL_GetProcAddress('glWeightdvARB'); - if not Assigned(glWeightdvARB) then Exit; - @glWeightvARB := SDL_GL_GetProcAddress('glWeightvARB'); - if not Assigned(glWeightvARB) then Exit; - @glWeightubvARB := SDL_GL_GetProcAddress('glWeightubvARB'); - if not Assigned(glWeightubvARB) then Exit; - @glWeightusvARB := SDL_GL_GetProcAddress('glWeightusvARB'); - if not Assigned(glWeightusvARB) then Exit; - @glWeightuivARB := SDL_GL_GetProcAddress('glWeightuivARB'); - if not Assigned(glWeightuivARB) then Exit; - @glWeightPointerARB := SDL_GL_GetProcAddress('glWeightPointerARB'); - if not Assigned(glWeightPointerARB) then Exit; - @glVertexBlendARB := SDL_GL_GetProcAddress('glVertexBlendARB'); - if not Assigned(glVertexBlendARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_vertex_program: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_vertex_program', extstring) then - begin - @glVertexAttrib1sARB := SDL_GL_GetProcAddress('glVertexAttrib1sARB'); - if not Assigned(glVertexAttrib1sARB) then Exit; - @glVertexAttrib1fARB := SDL_GL_GetProcAddress('glVertexAttrib1fARB'); - if not Assigned(glVertexAttrib1fARB) then Exit; - @glVertexAttrib1dARB := SDL_GL_GetProcAddress('glVertexAttrib1dARB'); - if not Assigned(glVertexAttrib1dARB) then Exit; - @glVertexAttrib2sARB := SDL_GL_GetProcAddress('glVertexAttrib2sARB'); - if not Assigned(glVertexAttrib2sARB) then Exit; - @glVertexAttrib2fARB := SDL_GL_GetProcAddress('glVertexAttrib2fARB'); - if not Assigned(glVertexAttrib2fARB) then Exit; - @glVertexAttrib2dARB := SDL_GL_GetProcAddress('glVertexAttrib2dARB'); - if not Assigned(glVertexAttrib2dARB) then Exit; - @glVertexAttrib3sARB := SDL_GL_GetProcAddress('glVertexAttrib3sARB'); - if not Assigned(glVertexAttrib3sARB) then Exit; - @glVertexAttrib3fARB := SDL_GL_GetProcAddress('glVertexAttrib3fARB'); - if not Assigned(glVertexAttrib3fARB) then Exit; - @glVertexAttrib3dARB := SDL_GL_GetProcAddress('glVertexAttrib3dARB'); - if not Assigned(glVertexAttrib3dARB) then Exit; - @glVertexAttrib4sARB := SDL_GL_GetProcAddress('glVertexAttrib4sARB'); - if not Assigned(glVertexAttrib4sARB) then Exit; - @glVertexAttrib4fARB := SDL_GL_GetProcAddress('glVertexAttrib4fARB'); - if not Assigned(glVertexAttrib4fARB) then Exit; - @glVertexAttrib4dARB := SDL_GL_GetProcAddress('glVertexAttrib4dARB'); - if not Assigned(glVertexAttrib4dARB) then Exit; - @glVertexAttrib4NubARB := SDL_GL_GetProcAddress('glVertexAttrib4NubARB'); - if not Assigned(glVertexAttrib4NubARB) then Exit; - @glVertexAttrib1svARB := SDL_GL_GetProcAddress('glVertexAttrib1svARB'); - if not Assigned(glVertexAttrib1svARB) then Exit; - @glVertexAttrib1fvARB := SDL_GL_GetProcAddress('glVertexAttrib1fvARB'); - if not Assigned(glVertexAttrib1fvARB) then Exit; - @glVertexAttrib1dvARB := SDL_GL_GetProcAddress('glVertexAttrib1dvARB'); - if not Assigned(glVertexAttrib1dvARB) then Exit; - @glVertexAttrib2svARB := SDL_GL_GetProcAddress('glVertexAttrib2svARB'); - if not Assigned(glVertexAttrib2svARB) then Exit; - @glVertexAttrib2fvARB := SDL_GL_GetProcAddress('glVertexAttrib2fvARB'); - if not Assigned(glVertexAttrib2fvARB) then Exit; - @glVertexAttrib2dvARB := SDL_GL_GetProcAddress('glVertexAttrib2dvARB'); - if not Assigned(glVertexAttrib2dvARB) then Exit; - @glVertexAttrib3svARB := SDL_GL_GetProcAddress('glVertexAttrib3svARB'); - if not Assigned(glVertexAttrib3svARB) then Exit; - @glVertexAttrib3fvARB := SDL_GL_GetProcAddress('glVertexAttrib3fvARB'); - if not Assigned(glVertexAttrib3fvARB) then Exit; - @glVertexAttrib3dvARB := SDL_GL_GetProcAddress('glVertexAttrib3dvARB'); - if not Assigned(glVertexAttrib3dvARB) then Exit; - @glVertexAttrib4bvARB := SDL_GL_GetProcAddress('glVertexAttrib4bvARB'); - if not Assigned(glVertexAttrib4bvARB) then Exit; - @glVertexAttrib4svARB := SDL_GL_GetProcAddress('glVertexAttrib4svARB'); - if not Assigned(glVertexAttrib4svARB) then Exit; - @glVertexAttrib4ivARB := SDL_GL_GetProcAddress('glVertexAttrib4ivARB'); - if not Assigned(glVertexAttrib4ivARB) then Exit; - @glVertexAttrib4ubvARB := SDL_GL_GetProcAddress('glVertexAttrib4ubvARB'); - if not Assigned(glVertexAttrib4ubvARB) then Exit; - @glVertexAttrib4usvARB := SDL_GL_GetProcAddress('glVertexAttrib4usvARB'); - if not Assigned(glVertexAttrib4usvARB) then Exit; - @glVertexAttrib4uivARB := SDL_GL_GetProcAddress('glVertexAttrib4uivARB'); - if not Assigned(glVertexAttrib4uivARB) then Exit; - @glVertexAttrib4fvARB := SDL_GL_GetProcAddress('glVertexAttrib4fvARB'); - if not Assigned(glVertexAttrib4fvARB) then Exit; - @glVertexAttrib4dvARB := SDL_GL_GetProcAddress('glVertexAttrib4dvARB'); - if not Assigned(glVertexAttrib4dvARB) then Exit; - @glVertexAttrib4NbvARB := SDL_GL_GetProcAddress('glVertexAttrib4NbvARB'); - if not Assigned(glVertexAttrib4NbvARB) then Exit; - @glVertexAttrib4NsvARB := SDL_GL_GetProcAddress('glVertexAttrib4NsvARB'); - if not Assigned(glVertexAttrib4NsvARB) then Exit; - @glVertexAttrib4NivARB := SDL_GL_GetProcAddress('glVertexAttrib4NivARB'); - if not Assigned(glVertexAttrib4NivARB) then Exit; - @glVertexAttrib4NubvARB := SDL_GL_GetProcAddress('glVertexAttrib4NubvARB'); - if not Assigned(glVertexAttrib4NubvARB) then Exit; - @glVertexAttrib4NusvARB := SDL_GL_GetProcAddress('glVertexAttrib4NusvARB'); - if not Assigned(glVertexAttrib4NusvARB) then Exit; - @glVertexAttrib4NuivARB := SDL_GL_GetProcAddress('glVertexAttrib4NuivARB'); - if not Assigned(glVertexAttrib4NuivARB) then Exit; - @glVertexAttribPointerARB := SDL_GL_GetProcAddress('glVertexAttribPointerARB'); - if not Assigned(glVertexAttribPointerARB) then Exit; - @glEnableVertexAttribArrayARB := SDL_GL_GetProcAddress('glEnableVertexAttribArrayARB'); - if not Assigned(glEnableVertexAttribArrayARB) then Exit; - @glDisableVertexAttribArrayARB := SDL_GL_GetProcAddress('glDisableVertexAttribArrayARB'); - if not Assigned(glDisableVertexAttribArrayARB) then Exit; - @glProgramStringARB := SDL_GL_GetProcAddress('glProgramStringARB'); - if not Assigned(glProgramStringARB) then Exit; - @glBindProgramARB := SDL_GL_GetProcAddress('glBindProgramARB'); - if not Assigned(glBindProgramARB) then Exit; - @glDeleteProgramsARB := SDL_GL_GetProcAddress('glDeleteProgramsARB'); - if not Assigned(glDeleteProgramsARB) then Exit; - @glGenProgramsARB := SDL_GL_GetProcAddress('glGenProgramsARB'); - if not Assigned(glGenProgramsARB) then Exit; - @glProgramEnvParameter4dARB := SDL_GL_GetProcAddress('glProgramEnvParameter4dARB'); - if not Assigned(glProgramEnvParameter4dARB) then Exit; - @glProgramEnvParameter4dvARB := SDL_GL_GetProcAddress('glProgramEnvParameter4dvARB'); - if not Assigned(glProgramEnvParameter4dvARB) then Exit; - @glProgramEnvParameter4fARB := SDL_GL_GetProcAddress('glProgramEnvParameter4fARB'); - if not Assigned(glProgramEnvParameter4fARB) then Exit; - @glProgramEnvParameter4fvARB := SDL_GL_GetProcAddress('glProgramEnvParameter4fvARB'); - if not Assigned(glProgramEnvParameter4fvARB) then Exit; - @glProgramLocalParameter4dARB := SDL_GL_GetProcAddress('glProgramLocalParameter4dARB'); - if not Assigned(glProgramLocalParameter4dARB) then Exit; - @glProgramLocalParameter4dvARB := SDL_GL_GetProcAddress('glProgramLocalParameter4dvARB'); - if not Assigned(glProgramLocalParameter4dvARB) then Exit; - @glProgramLocalParameter4fARB := SDL_GL_GetProcAddress('glProgramLocalParameter4fARB'); - if not Assigned(glProgramLocalParameter4fARB) then Exit; - @glProgramLocalParameter4fvARB := SDL_GL_GetProcAddress('glProgramLocalParameter4fvARB'); - if not Assigned(glProgramLocalParameter4fvARB) then Exit; - @glGetProgramEnvParameterdvARB := SDL_GL_GetProcAddress('glGetProgramEnvParameterdvARB'); - if not Assigned(glGetProgramEnvParameterdvARB) then Exit; - @glGetProgramEnvParameterfvARB := SDL_GL_GetProcAddress('glGetProgramEnvParameterfvARB'); - if not Assigned(glGetProgramEnvParameterfvARB) then Exit; - @glGetProgramLocalParameterdvARB := SDL_GL_GetProcAddress('glGetProgramLocalParameterdvARB'); - if not Assigned(glGetProgramLocalParameterdvARB) then Exit; - @glGetProgramLocalParameterfvARB := SDL_GL_GetProcAddress('glGetProgramLocalParameterfvARB'); - if not Assigned(glGetProgramLocalParameterfvARB) then Exit; - @glGetProgramivARB := SDL_GL_GetProcAddress('glGetProgramivARB'); - if not Assigned(glGetProgramivARB) then Exit; - @glGetProgramStringARB := SDL_GL_GetProcAddress('glGetProgramStringARB'); - if not Assigned(glGetProgramStringARB) then Exit; - @glGetVertexAttribdvARB := SDL_GL_GetProcAddress('glGetVertexAttribdvARB'); - if not Assigned(glGetVertexAttribdvARB) then Exit; - @glGetVertexAttribfvARB := SDL_GL_GetProcAddress('glGetVertexAttribfvARB'); - if not Assigned(glGetVertexAttribfvARB) then Exit; - @glGetVertexAttribivARB := SDL_GL_GetProcAddress('glGetVertexAttribivARB'); - if not Assigned(glGetVertexAttribivARB) then Exit; - @glGetVertexAttribPointervARB := SDL_GL_GetProcAddress('glGetVertexAttribPointervARB'); - if not Assigned(glGetVertexAttribPointervARB) then Exit; - @glIsProgramARB := SDL_GL_GetProcAddress('glIsProgramARB'); - if not Assigned(glIsProgramARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_window_pos: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_window_pos', extstring) then - begin - @glWindowPos2dARB := SDL_GL_GetProcAddress('glWindowPos2dARB'); - if not Assigned(glWindowPos2dARB) then Exit; - @glWindowPos2fARB := SDL_GL_GetProcAddress('glWindowPos2fARB'); - if not Assigned(glWindowPos2fARB) then Exit; - @glWindowPos2iARB := SDL_GL_GetProcAddress('glWindowPos2iARB'); - if not Assigned(glWindowPos2iARB) then Exit; - @glWindowPos2sARB := SDL_GL_GetProcAddress('glWindowPos2sARB'); - if not Assigned(glWindowPos2sARB) then Exit; - @glWindowPos2dvARB := SDL_GL_GetProcAddress('glWindowPos2dvARB'); - if not Assigned(glWindowPos2dvARB) then Exit; - @glWindowPos2fvARB := SDL_GL_GetProcAddress('glWindowPos2fvARB'); - if not Assigned(glWindowPos2fvARB) then Exit; - @glWindowPos2ivARB := SDL_GL_GetProcAddress('glWindowPos2ivARB'); - if not Assigned(glWindowPos2ivARB) then Exit; - @glWindowPos2svARB := SDL_GL_GetProcAddress('glWindowPos2svARB'); - if not Assigned(glWindowPos2svARB) then Exit; - @glWindowPos3dARB := SDL_GL_GetProcAddress('glWindowPos3dARB'); - if not Assigned(glWindowPos3dARB) then Exit; - @glWindowPos3fARB := SDL_GL_GetProcAddress('glWindowPos3fARB'); - if not Assigned(glWindowPos3fARB) then Exit; - @glWindowPos3iARB := SDL_GL_GetProcAddress('glWindowPos3iARB'); - if not Assigned(glWindowPos3iARB) then Exit; - @glWindowPos3sARB := SDL_GL_GetProcAddress('glWindowPos3sARB'); - if not Assigned(glWindowPos3sARB) then Exit; - @glWindowPos3dvARB := SDL_GL_GetProcAddress('glWindowPos3dvARB'); - if not Assigned(glWindowPos3dvARB) then Exit; - @glWindowPos3fvARB := SDL_GL_GetProcAddress('glWindowPos3fvARB'); - if not Assigned(glWindowPos3fvARB) then Exit; - @glWindowPos3ivARB := SDL_GL_GetProcAddress('glWindowPos3ivARB'); - if not Assigned(glWindowPos3ivARB) then Exit; - @glWindowPos3svARB := SDL_GL_GetProcAddress('glWindowPos3svARB'); - if not Assigned(glWindowPos3svARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_422_pixels: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_422_pixels', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_abgr: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_abgr', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_bgra: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_bgra', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_blend_color: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_blend_color', extstring) then - begin - @glBlendColorEXT := SDL_GL_GetProcAddress('glBlendColorEXT'); - if not Assigned(glBlendColorEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_blend_func_separate: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_blend_func_separate', extstring) then - begin - @glBlendFuncSeparateEXT := SDL_GL_GetProcAddress('glBlendFuncSeparateEXT'); - if not Assigned(glBlendFuncSeparateEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_blend_logic_op: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_blend_logic_op', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_blend_minmax: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_blend_minmax', extstring) then - begin - @glBlendEquationEXT := SDL_GL_GetProcAddress('glBlendEquationEXT'); - if not Assigned(glBlendEquationEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_blend_subtract: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_blend_subtract', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_clip_volume_hint: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_clip_volume_hint', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_color_subtable: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_color_subtable', extstring) then - begin - @glColorSubTableEXT := SDL_GL_GetProcAddress('glColorSubTableEXT'); - if not Assigned(glColorSubTableEXT) then Exit; - @glCopyColorSubTableEXT := SDL_GL_GetProcAddress('glCopyColorSubTableEXT'); - if not Assigned(glCopyColorSubTableEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_compiled_vertex_array: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_compiled_vertex_array', extstring) then - begin - @glLockArraysEXT := SDL_GL_GetProcAddress('glLockArraysEXT'); - if not Assigned(glLockArraysEXT) then Exit; - @glUnlockArraysEXT := SDL_GL_GetProcAddress('glUnlockArraysEXT'); - if not Assigned(glUnlockArraysEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_convolution: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_convolution', extstring) then - begin - @glConvolutionFilter1DEXT := SDL_GL_GetProcAddress('glConvolutionFilter1DEXT'); - if not Assigned(glConvolutionFilter1DEXT) then Exit; - @glConvolutionFilter2DEXT := SDL_GL_GetProcAddress('glConvolutionFilter2DEXT'); - if not Assigned(glConvolutionFilter2DEXT) then Exit; - @glCopyConvolutionFilter1DEXT := SDL_GL_GetProcAddress('glCopyConvolutionFilter1DEXT'); - if not Assigned(glCopyConvolutionFilter1DEXT) then Exit; - @glCopyConvolutionFilter2DEXT := SDL_GL_GetProcAddress('glCopyConvolutionFilter2DEXT'); - if not Assigned(glCopyConvolutionFilter2DEXT) then Exit; - @glGetConvolutionFilterEXT := SDL_GL_GetProcAddress('glGetConvolutionFilterEXT'); - if not Assigned(glGetConvolutionFilterEXT) then Exit; - @glSeparableFilter2DEXT := SDL_GL_GetProcAddress('glSeparableFilter2DEXT'); - if not Assigned(glSeparableFilter2DEXT) then Exit; - @glGetSeparableFilterEXT := SDL_GL_GetProcAddress('glGetSeparableFilterEXT'); - if not Assigned(glGetSeparableFilterEXT) then Exit; - @glConvolutionParameteriEXT := SDL_GL_GetProcAddress('glConvolutionParameteriEXT'); - if not Assigned(glConvolutionParameteriEXT) then Exit; - @glConvolutionParameterivEXT := SDL_GL_GetProcAddress('glConvolutionParameterivEXT'); - if not Assigned(glConvolutionParameterivEXT) then Exit; - @glConvolutionParameterfEXT := SDL_GL_GetProcAddress('glConvolutionParameterfEXT'); - if not Assigned(glConvolutionParameterfEXT) then Exit; - @glConvolutionParameterfvEXT := SDL_GL_GetProcAddress('glConvolutionParameterfvEXT'); - if not Assigned(glConvolutionParameterfvEXT) then Exit; - @glGetConvolutionParameterivEXT := SDL_GL_GetProcAddress('glGetConvolutionParameterivEXT'); - if not Assigned(glGetConvolutionParameterivEXT) then Exit; - @glGetConvolutionParameterfvEXT := SDL_GL_GetProcAddress('glGetConvolutionParameterfvEXT'); - if not Assigned(glGetConvolutionParameterfvEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_histogram: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_histogram', extstring) then - begin - @glHistogramEXT := SDL_GL_GetProcAddress('glHistogramEXT'); - if not Assigned(glHistogramEXT) then Exit; - @glResetHistogramEXT := SDL_GL_GetProcAddress('glResetHistogramEXT'); - if not Assigned(glResetHistogramEXT) then Exit; - @glGetHistogramEXT := SDL_GL_GetProcAddress('glGetHistogramEXT'); - if not Assigned(glGetHistogramEXT) then Exit; - @glGetHistogramParameterivEXT := SDL_GL_GetProcAddress('glGetHistogramParameterivEXT'); - if not Assigned(glGetHistogramParameterivEXT) then Exit; - @glGetHistogramParameterfvEXT := SDL_GL_GetProcAddress('glGetHistogramParameterfvEXT'); - if not Assigned(glGetHistogramParameterfvEXT) then Exit; - @glMinmaxEXT := SDL_GL_GetProcAddress('glMinmaxEXT'); - if not Assigned(glMinmaxEXT) then Exit; - @glResetMinmaxEXT := SDL_GL_GetProcAddress('glResetMinmaxEXT'); - if not Assigned(glResetMinmaxEXT) then Exit; - @glGetMinmaxEXT := SDL_GL_GetProcAddress('glGetMinmaxEXT'); - if not Assigned(glGetMinmaxEXT) then Exit; - @glGetMinmaxParameterivEXT := SDL_GL_GetProcAddress('glGetMinmaxParameterivEXT'); - if not Assigned(glGetMinmaxParameterivEXT) then Exit; - @glGetMinmaxParameterfvEXT := SDL_GL_GetProcAddress('glGetMinmaxParameterfvEXT'); - if not Assigned(glGetMinmaxParameterfvEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_multi_draw_arrays: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_multi_draw_arrays', extstring) then - begin - @glMultiDrawArraysEXT := SDL_GL_GetProcAddress('glMultiDrawArraysEXT'); - if not Assigned(glMultiDrawArraysEXT) then Exit; - @glMultiDrawElementsEXT := SDL_GL_GetProcAddress('glMultiDrawElementsEXT'); - if not Assigned(glMultiDrawElementsEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_packed_pixels: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_packed_pixels', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_paletted_texture: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_paletted_texture', extstring) then - begin - @glColorTableEXT := SDL_GL_GetProcAddress('glColorTableEXT'); - if not Assigned(glColorTableEXT) then Exit; - @glColorSubTableEXT := SDL_GL_GetProcAddress('glColorSubTableEXT'); - if not Assigned(glColorSubTableEXT) then Exit; - @glGetColorTableEXT := SDL_GL_GetProcAddress('glGetColorTableEXT'); - if not Assigned(glGetColorTableEXT) then Exit; - @glGetColorTableParameterivEXT := SDL_GL_GetProcAddress('glGetColorTableParameterivEXT'); - if not Assigned(glGetColorTableParameterivEXT) then Exit; - @glGetColorTableParameterfvEXT := SDL_GL_GetProcAddress('glGetColorTableParameterfvEXT'); - if not Assigned(glGetColorTableParameterfvEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_point_parameters: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_point_parameters', extstring) then - begin - @glPointParameterfEXT := SDL_GL_GetProcAddress('glPointParameterfEXT'); - if not Assigned(glPointParameterfEXT) then Exit; - @glPointParameterfvEXT := SDL_GL_GetProcAddress('glPointParameterfvEXT'); - if not Assigned(glPointParameterfvEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_polygon_offset: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_polygon_offset', extstring) then - begin - @glPolygonOffsetEXT := SDL_GL_GetProcAddress('glPolygonOffsetEXT'); - if not Assigned(glPolygonOffsetEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_separate_specular_color: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_separate_specular_color', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_shadow_funcs: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_shadow_funcs', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_shared_texture_palette: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_shared_texture_palette', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_stencil_two_side: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_stencil_two_side', extstring) then - begin - @glActiveStencilFaceEXT := SDL_GL_GetProcAddress('glActiveStencilFaceEXT'); - if not Assigned(glActiveStencilFaceEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_stencil_wrap: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_stencil_wrap', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_subtexture: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_subtexture', extstring) then - begin - @glTexSubImage1DEXT := SDL_GL_GetProcAddress('glTexSubImage1DEXT'); - if not Assigned(glTexSubImage1DEXT) then Exit; - @glTexSubImage2DEXT := SDL_GL_GetProcAddress('glTexSubImage2DEXT'); - if not Assigned(glTexSubImage2DEXT) then Exit; - @glTexSubImage3DEXT := SDL_GL_GetProcAddress('glTexSubImage3DEXT'); - if not Assigned(glTexSubImage3DEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture3D: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture3D', extstring) then - begin - glTexImage3DEXT := SDL_GL_GetProcAddress('glTexImage3DEXT'); - if not Assigned(glTexImage3DEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_compression_s3tc: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_compression_s3tc', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_env_add: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_env_add', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_env_combine: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_env_combine', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_env_dot3: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_env_dot3', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_filter_anisotropic: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_filter_anisotropic', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_lod_bias: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_lod_bias', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_object: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_object', extstring) then - begin - @glGenTexturesEXT := SDL_GL_GetProcAddress('glGenTexturesEXT'); - if not Assigned(glGenTexturesEXT) then Exit; - @glDeleteTexturesEXT := SDL_GL_GetProcAddress('glDeleteTexturesEXT'); - if not Assigned(glDeleteTexturesEXT) then Exit; - @glBindTextureEXT := SDL_GL_GetProcAddress('glBindTextureEXT'); - if not Assigned(glBindTextureEXT) then Exit; - @glPrioritizeTexturesEXT := SDL_GL_GetProcAddress('glPrioritizeTexturesEXT'); - if not Assigned(glPrioritizeTexturesEXT) then Exit; - @glAreTexturesResidentEXT := SDL_GL_GetProcAddress('glAreTexturesResidentEXT'); - if not Assigned(glAreTexturesResidentEXT) then Exit; - @glIsTextureEXT := SDL_GL_GetProcAddress('glIsTextureEXT'); - if not Assigned(glIsTextureEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_vertex_array: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_vertex_array', extstring) then - begin - @glArrayElementEXT := SDL_GL_GetProcAddress('glArrayElementEXT'); - if not Assigned(glArrayElementEXT) then Exit; - @glDrawArraysEXT := SDL_GL_GetProcAddress('glDrawArraysEXT'); - if not Assigned(glDrawArraysEXT) then Exit; - @glVertexPointerEXT := SDL_GL_GetProcAddress('glVertexPointerEXT'); - if not Assigned(glVertexPointerEXT) then Exit; - @glNormalPointerEXT := SDL_GL_GetProcAddress('glNormalPointerEXT'); - if not Assigned(glNormalPointerEXT) then Exit; - @glColorPointerEXT := SDL_GL_GetProcAddress('glColorPointerEXT'); - if not Assigned(glColorPointerEXT) then Exit; - @glIndexPointerEXT := SDL_GL_GetProcAddress('glIndexPointerEXT'); - if not Assigned(glIndexPointerEXT) then Exit; - @glTexCoordPointerEXT := SDL_GL_GetProcAddress('glTexCoordPointerEXT'); - if not Assigned(glTexCoordPointerEXT) then Exit; - @glEdgeFlagPointerEXT := SDL_GL_GetProcAddress('glEdgeFlagPointerEXT'); - if not Assigned(glEdgeFlagPointerEXT) then Exit; - @glGetPointervEXT := SDL_GL_GetProcAddress('glGetPointervEXT'); - if not Assigned(glGetPointervEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_vertex_shader: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_vertex_shader', extstring) then - begin - @glBeginVertexShaderEXT := SDL_GL_GetProcAddress('glBeginVertexShaderEXT'); - if not Assigned(glBeginVertexShaderEXT) then Exit; - @glEndVertexShaderEXT := SDL_GL_GetProcAddress('glEndVertexShaderEXT'); - if not Assigned(glEndVertexShaderEXT) then Exit; - @glBindVertexShaderEXT := SDL_GL_GetProcAddress('glBindVertexShaderEXT'); - if not Assigned(glBindVertexShaderEXT) then Exit; - @glGenVertexShadersEXT := SDL_GL_GetProcAddress('glGenVertexShadersEXT'); - if not Assigned(glGenVertexShadersEXT) then Exit; - @glDeleteVertexShaderEXT := SDL_GL_GetProcAddress('glDeleteVertexShaderEXT'); - if not Assigned(glDeleteVertexShaderEXT) then Exit; - @glShaderOp1EXT := SDL_GL_GetProcAddress('glShaderOp1EXT'); - if not Assigned(glShaderOp1EXT) then Exit; - @glShaderOp2EXT := SDL_GL_GetProcAddress('glShaderOp2EXT'); - if not Assigned(glShaderOp2EXT) then Exit; - @glShaderOp3EXT := SDL_GL_GetProcAddress('glShaderOp3EXT'); - if not Assigned(glShaderOp3EXT) then Exit; - @glSwizzleEXT := SDL_GL_GetProcAddress('glSwizzleEXT'); - if not Assigned(glSwizzleEXT) then Exit; - @glWriteMaskEXT := SDL_GL_GetProcAddress('glWriteMaskEXT'); - if not Assigned(glWriteMaskEXT) then Exit; - @glInsertComponentEXT := SDL_GL_GetProcAddress('glInsertComponentEXT'); - if not Assigned(glInsertComponentEXT) then Exit; - @glExtractComponentEXT := SDL_GL_GetProcAddress('glExtractComponentEXT'); - if not Assigned(glExtractComponentEXT) then Exit; - @glGenSymbolsEXT := SDL_GL_GetProcAddress('glGenSymbolsEXT'); - if not Assigned(glGenSymbolsEXT) then Exit; - @glSetInvariantEXT := SDL_GL_GetProcAddress('glSetInvariantEXT'); - if not Assigned(glSetInvariantEXT) then Exit; - @glSetLocalConstantEXT := SDL_GL_GetProcAddress('glSetLocalConstantEXT'); - if not Assigned(glSetLocalConstantEXT) then Exit; - @glVariantbvEXT := SDL_GL_GetProcAddress('glVariantbvEXT'); - if not Assigned(glVariantbvEXT) then Exit; - @glVariantsvEXT := SDL_GL_GetProcAddress('glVariantsvEXT'); - if not Assigned(glVariantsvEXT) then Exit; - @glVariantivEXT := SDL_GL_GetProcAddress('glVariantivEXT'); - if not Assigned(glVariantivEXT) then Exit; - @glVariantfvEXT := SDL_GL_GetProcAddress('glVariantfvEXT'); - if not Assigned(glVariantfvEXT) then Exit; - @glVariantdvEXT := SDL_GL_GetProcAddress('glVariantdvEXT'); - if not Assigned(glVariantdvEXT) then Exit; - @glVariantubvEXT := SDL_GL_GetProcAddress('glVariantubvEXT'); - if not Assigned(glVariantubvEXT) then Exit; - @glVariantusvEXT := SDL_GL_GetProcAddress('glVariantusvEXT'); - if not Assigned(glVariantusvEXT) then Exit; - @glVariantuivEXT := SDL_GL_GetProcAddress('glVariantuivEXT'); - if not Assigned(glVariantuivEXT) then Exit; - @glVariantPointerEXT := SDL_GL_GetProcAddress('glVariantPointerEXT'); - if not Assigned(glVariantPointerEXT) then Exit; - @glEnableVariantClientStateEXT := SDL_GL_GetProcAddress('glEnableVariantClientStateEXT'); - if not Assigned(glEnableVariantClientStateEXT) then Exit; - @glDisableVariantClientStateEXT := SDL_GL_GetProcAddress('glDisableVariantClientStateEXT'); - if not Assigned(glDisableVariantClientStateEXT) then Exit; - @glBindLightParameterEXT := SDL_GL_GetProcAddress('glBindLightParameterEXT'); - if not Assigned(glBindLightParameterEXT) then Exit; - @glBindMaterialParameterEXT := SDL_GL_GetProcAddress('glBindMaterialParameterEXT'); - if not Assigned(glBindMaterialParameterEXT) then Exit; - @glBindTexGenParameterEXT := SDL_GL_GetProcAddress('glBindTexGenParameterEXT'); - if not Assigned(glBindTexGenParameterEXT) then Exit; - @glBindTextureUnitParameterEXT := SDL_GL_GetProcAddress('glBindTextureUnitParameterEXT'); - if not Assigned(glBindTextureUnitParameterEXT) then Exit; - @glBindParameterEXT := SDL_GL_GetProcAddress('glBindParameterEXT'); - if not Assigned(glBindParameterEXT) then Exit; - @glIsVariantEnabledEXT := SDL_GL_GetProcAddress('glIsVariantEnabledEXT'); - if not Assigned(glIsVariantEnabledEXT) then Exit; - @glGetVariantBooleanvEXT := SDL_GL_GetProcAddress('glGetVariantBooleanvEXT'); - if not Assigned(glGetVariantBooleanvEXT) then Exit; - @glGetVariantIntegervEXT := SDL_GL_GetProcAddress('glGetVariantIntegervEXT'); - if not Assigned(glGetVariantIntegervEXT) then Exit; - @glGetVariantFloatvEXT := SDL_GL_GetProcAddress('glGetVariantFloatvEXT'); - if not Assigned(glGetVariantFloatvEXT) then Exit; - @glGetVariantPointervEXT := SDL_GL_GetProcAddress('glGetVariantPointervEXT'); - if not Assigned(glGetVariantPointervEXT) then Exit; - @glGetInvariantBooleanvEXT := SDL_GL_GetProcAddress('glGetInvariantBooleanvEXT'); - if not Assigned(glGetInvariantBooleanvEXT) then Exit; - @glGetInvariantIntegervEXT := SDL_GL_GetProcAddress('glGetInvariantIntegervEXT'); - if not Assigned(glGetInvariantIntegervEXT) then Exit; - @glGetInvariantFloatvEXT := SDL_GL_GetProcAddress('glGetInvariantFloatvEXT'); - if not Assigned(glGetInvariantFloatvEXT) then Exit; - @glGetLocalConstantBooleanvEXT := SDL_GL_GetProcAddress('glGetLocalConstantBooleanvEXT'); - if not Assigned(glGetLocalConstantBooleanvEXT) then Exit; - @glGetLocalConstantIntegervEXT := SDL_GL_GetProcAddress('glGetLocalConstantIntegervEXT'); - if not Assigned(glGetLocalConstantIntegervEXT) then Exit; - @glGetLocalConstantFloatvEXT := SDL_GL_GetProcAddress('glGetLocalConstantFloatvEXT'); - if not Assigned(glGetLocalConstantFloatvEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_vertex_weighting: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_vertex_weighting', extstring) then - begin - @glVertexWeightfEXT := SDL_GL_GetProcAddress('glVertexWeightfEXT'); - if not Assigned(glVertexWeightfEXT) then Exit; - @glVertexWeightfvEXT := SDL_GL_GetProcAddress('glVertexWeightfvEXT'); - if not Assigned(glVertexWeightfvEXT) then Exit; - @glVertexWeightPointerEXT := SDL_GL_GetProcAddress('glVertexWeightPointerEXT'); - if not Assigned(glVertexWeightPointerEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_HP_occlusion_test: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_HP_occlusion_test', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_blend_square: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_blend_square', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_copy_depth_to_color: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_copy_depth_to_color', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_depth_clamp: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_depth_clamp', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_evaluators: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_evaluators', extstring) then - begin - @glMapControlPointsNV := SDL_GL_GetProcAddress('glMapControlPointsNV'); - if not Assigned(glMapControlPointsNV) then Exit; - @glMapParameterivNV := SDL_GL_GetProcAddress('glMapParameterivNV'); - if not Assigned(glMapParameterivNV) then Exit; - @glMapParameterfvNV := SDL_GL_GetProcAddress('glMapParameterfvNV'); - if not Assigned(glMapParameterfvNV) then Exit; - @glGetMapControlPointsNV := SDL_GL_GetProcAddress('glGetMapControlPointsNV'); - if not Assigned(glGetMapControlPointsNV) then Exit; - @glGetMapParameterivNV := SDL_GL_GetProcAddress('glGetMapParameterivNV'); - if not Assigned(glGetMapParameterivNV) then Exit; - @glGetMapParameterfvNV := SDL_GL_GetProcAddress('glGetMapParameterfvNV'); - if not Assigned(glGetMapParameterfvNV) then Exit; - @glGetMapAttribParameterivNV := SDL_GL_GetProcAddress('glGetMapAttribParameterivNV'); - if not Assigned(glGetMapAttribParameterivNV) then Exit; - @glGetMapAttribParameterfvNV := SDL_GL_GetProcAddress('glGetMapAttribParameterfvNV'); - if not Assigned(glGetMapAttribParameterfvNV) then Exit; - @glEvalMapsNV := SDL_GL_GetProcAddress('glEvalMapsNV'); - if not Assigned(glEvalMapsNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_fence: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_fence', extstring) then - begin - @glGenFencesNV := SDL_GL_GetProcAddress('glGenFencesNV'); - if not Assigned(glGenFencesNV) then Exit; - @glDeleteFencesNV := SDL_GL_GetProcAddress('glDeleteFencesNV'); - if not Assigned(glDeleteFencesNV) then Exit; - @glSetFenceNV := SDL_GL_GetProcAddress('glSetFenceNV'); - if not Assigned(glSetFenceNV) then Exit; - @glTestFenceNV := SDL_GL_GetProcAddress('glTestFenceNV'); - if not Assigned(glTestFenceNV) then Exit; - @glFinishFenceNV := SDL_GL_GetProcAddress('glFinishFenceNV'); - if not Assigned(glFinishFenceNV) then Exit; - @glIsFenceNV := SDL_GL_GetProcAddress('glIsFenceNV'); - if not Assigned(glIsFenceNV) then Exit; - @glGetFenceivNV := SDL_GL_GetProcAddress('glGetFenceivNV'); - if not Assigned(glGetFenceivNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_fog_distance: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_fog_distance', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_light_max_exponent: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_light_max_exponent', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_multisample_filter_hint: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_multisample_filter_hint', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_occlusion_query: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_occlusion_query', extstring) then - begin - @glGenOcclusionQueriesNV := SDL_GL_GetProcAddress('glGenOcclusionQueriesNV'); - if not Assigned(glGenOcclusionQueriesNV) then Exit; - @glDeleteOcclusionQueriesNV := SDL_GL_GetProcAddress('glDeleteOcclusionQueriesNV'); - if not Assigned(glDeleteOcclusionQueriesNV) then Exit; - @glIsOcclusionQueryNV := SDL_GL_GetProcAddress('glIsOcclusionQueryNV'); - if not Assigned(glIsOcclusionQueryNV) then Exit; - @glBeginOcclusionQueryNV := SDL_GL_GetProcAddress('glBeginOcclusionQueryNV'); - if not Assigned(glBeginOcclusionQueryNV) then Exit; - @glEndOcclusionQueryNV := SDL_GL_GetProcAddress('glEndOcclusionQueryNV'); - if not Assigned(glEndOcclusionQueryNV) then Exit; - @glGetOcclusionQueryivNV := SDL_GL_GetProcAddress('glGetOcclusionQueryivNV'); - if not Assigned(glGetOcclusionQueryivNV) then Exit; - @glGetOcclusionQueryuivNV := SDL_GL_GetProcAddress('glGetOcclusionQueryuivNV'); - if not Assigned(glGetOcclusionQueryuivNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_packed_depth_stencil: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_packed_depth_stencil', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_point_sprite: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_point_sprite', extstring) then - begin - @glPointParameteriNV := SDL_GL_GetProcAddress('glPointParameteriNV'); - if not Assigned(glPointParameteriNV) then Exit; - @glPointParameterivNV := SDL_GL_GetProcAddress('glPointParameterivNV'); - if not Assigned(glPointParameterivNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_register_combiners: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_register_combiners', extstring) then - begin - @glCombinerParameterfvNV := SDL_GL_GetProcAddress('glCombinerParameterfvNV'); - if not Assigned(glCombinerParameterfvNV) then Exit; - @glCombinerParameterivNV := SDL_GL_GetProcAddress('glCombinerParameterivNV'); - if not Assigned(glCombinerParameterivNV) then Exit; - @glCombinerParameterfNV := SDL_GL_GetProcAddress('glCombinerParameterfNV'); - if not Assigned(glCombinerParameterfNV) then Exit; - @glCombinerParameteriNV := SDL_GL_GetProcAddress('glCombinerParameteriNV'); - if not Assigned(glCombinerParameteriNV) then Exit; - @glCombinerInputNV := SDL_GL_GetProcAddress('glCombinerInputNV'); - if not Assigned(glCombinerInputNV) then Exit; - @glCombinerOutputNV := SDL_GL_GetProcAddress('glCombinerOutputNV'); - if not Assigned(glCombinerOutputNV) then Exit; - @glFinalCombinerInputNV := SDL_GL_GetProcAddress('glFinalCombinerInputNV'); - if not Assigned(glFinalCombinerInputNV) then Exit; - @glGetCombinerInputParameterfvNV := SDL_GL_GetProcAddress('glGetCombinerInputParameterfvNV'); - if not Assigned(glGetCombinerInputParameterfvNV) then Exit; - @glGetCombinerInputParameterivNV := SDL_GL_GetProcAddress('glGetCombinerInputParameterivNV'); - if not Assigned(glGetCombinerInputParameterivNV) then Exit; - @glGetCombinerOutputParameterfvNV := SDL_GL_GetProcAddress('glGetCombinerOutputParameterfvNV'); - if not Assigned(glGetCombinerOutputParameterfvNV) then Exit; - @glGetCombinerOutputParameterivNV := SDL_GL_GetProcAddress('glGetCombinerOutputParameterivNV'); - if not Assigned(glGetCombinerOutputParameterivNV) then Exit; - @glGetFinalCombinerInputParameterfvNV := SDL_GL_GetProcAddress('glGetFinalCombinerInputParameterfvNV'); - if not Assigned(glGetFinalCombinerInputParameterfvNV) then Exit; - @glGetFinalCombinerInputParameterivNV := SDL_GL_GetProcAddress('glGetFinalCombinerInputParameterivNV'); - if not Assigned(glGetFinalCombinerInputParameterivNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_register_combiners2: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_register_combiners2', extstring) then - begin - @glCombinerStageParameterfvNV := SDL_GL_GetProcAddress('glCombinerStageParameterfvNV'); - if not Assigned(glCombinerStageParameterfvNV) then Exit; - @glGetCombinerStageParameterfvNV := SDL_GL_GetProcAddress('glGetCombinerStageParameterfvNV'); - if not Assigned(glGetCombinerStageParameterfvNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_texgen_emboss: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texgen_emboss', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_texgen_reflection: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texgen_reflection', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_texture_compression_vtc: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texture_compression_vtc', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_texture_env_combine4: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texture_env_combine4', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_texture_rectangle: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texture_rectangle', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_texture_shader: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texture_shader', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_texture_shader2: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texture_shader2', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_texture_shader3: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texture_shader3', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_vertex_array_range: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_vertex_array_range', extstring) then - begin - @glVertexArrayRangeNV := SDL_GL_GetProcAddress('glVertexArrayRangeNV'); - if not Assigned(glVertexArrayRangeNV) then Exit; - @glFlushVertexArrayRangeNV := SDL_GL_GetProcAddress('glFlushVertexArrayRangeNV'); - if not Assigned(glFlushVertexArrayRangeNV) then Exit; - {$IFDEF WINDOWS} - @wglAllocateMemoryNV := SDL_GL_GetProcAddress('wglAllocateMemoryNV'); - if not Assigned(wglAllocateMemoryNV) then Exit; - @wglFreeMemoryNV := SDL_GL_GetProcAddress('wglFreeMemoryNV'); - if not Assigned(wglFreeMemoryNV) then Exit; - {$ENDIF} - Result := TRUE; - end; - -end; - -function Load_GL_NV_vertex_array_range2: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_vertex_array_range2', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_vertex_program: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_vertex_program', extstring) then - begin - @glBindProgramNV := SDL_GL_GetProcAddress('glBindProgramNV'); - if not Assigned(glBindProgramNV) then Exit; - @glDeleteProgramsNV := SDL_GL_GetProcAddress('glDeleteProgramsNV'); - if not Assigned(glDeleteProgramsNV) then Exit; - @glExecuteProgramNV := SDL_GL_GetProcAddress('glExecuteProgramNV'); - if not Assigned(glExecuteProgramNV) then Exit; - @glGenProgramsNV := SDL_GL_GetProcAddress('glGenProgramsNV'); - if not Assigned(glGenProgramsNV) then Exit; - @glAreProgramsResidentNV := SDL_GL_GetProcAddress('glAreProgramsResidentNV'); - if not Assigned(glAreProgramsResidentNV) then Exit; - @glRequestResidentProgramsNV := SDL_GL_GetProcAddress('glRequestResidentProgramsNV'); - if not Assigned(glRequestResidentProgramsNV) then Exit; - @glGetProgramParameterfvNV := SDL_GL_GetProcAddress('glGetProgramParameterfvNV'); - if not Assigned(glGetProgramParameterfvNV) then Exit; - @glGetProgramParameterdvNV := SDL_GL_GetProcAddress('glGetProgramParameterdvNV'); - if not Assigned(glGetProgramParameterdvNV) then Exit; - @glGetProgramivNV := SDL_GL_GetProcAddress('glGetProgramivNV'); - if not Assigned(glGetProgramivNV) then Exit; - @glGetProgramStringNV := SDL_GL_GetProcAddress('glGetProgramStringNV'); - if not Assigned(glGetProgramStringNV) then Exit; - @glGetTrackMatrixivNV := SDL_GL_GetProcAddress('glGetTrackMatrixivNV'); - if not Assigned(glGetTrackMatrixivNV) then Exit; - @glGetVertexAttribdvNV := SDL_GL_GetProcAddress('glGetVertexAttribdvNV'); - if not Assigned(glGetVertexAttribdvNV) then Exit; - @glGetVertexAttribfvNV := SDL_GL_GetProcAddress('glGetVertexAttribfvNV'); - if not Assigned(glGetVertexAttribfvNV) then Exit; - @glGetVertexAttribivNV := SDL_GL_GetProcAddress('glGetVertexAttribivNV'); - if not Assigned(glGetVertexAttribivNV) then Exit; - @glGetVertexAttribPointervNV := SDL_GL_GetProcAddress('glGetVertexAttribPointervNV'); - if not Assigned(glGetVertexAttribPointervNV) then Exit; - @glIsProgramNV := SDL_GL_GetProcAddress('glIsProgramNV'); - if not Assigned(glIsProgramNV) then Exit; - @glLoadProgramNV := SDL_GL_GetProcAddress('glLoadProgramNV'); - if not Assigned(glLoadProgramNV) then Exit; - @glProgramParameter4fNV := SDL_GL_GetProcAddress('glProgramParameter4fNV'); - if not Assigned(glProgramParameter4fNV) then Exit; - @glProgramParameter4fvNV := SDL_GL_GetProcAddress('glProgramParameter4fvNV'); - if not Assigned(glProgramParameter4fvNV) then Exit; - @glProgramParameters4dvNV := SDL_GL_GetProcAddress('glProgramParameters4dvNV'); - if not Assigned(glProgramParameters4dvNV) then Exit; - @glProgramParameters4fvNV := SDL_GL_GetProcAddress('glProgramParameters4fvNV'); - if not Assigned(glProgramParameters4fvNV) then Exit; - @glTrackMatrixNV := SDL_GL_GetProcAddress('glTrackMatrixNV'); - if not Assigned(glTrackMatrixNV) then Exit; - @glVertexAttribPointerNV := SDL_GL_GetProcAddress('glVertexAttribPointerNV'); - if not Assigned(glVertexAttribPointerNV) then Exit; - @glVertexAttrib1sNV := SDL_GL_GetProcAddress('glVertexAttrib1sNV'); - if not Assigned(glVertexAttrib1sNV) then Exit; - @glVertexAttrib1fNV := SDL_GL_GetProcAddress('glVertexAttrib1fNV'); - if not Assigned(glVertexAttrib1fNV) then Exit; - @glVertexAttrib1dNV := SDL_GL_GetProcAddress('glVertexAttrib1dNV'); - if not Assigned(glVertexAttrib1dNV) then Exit; - @glVertexAttrib2sNV := SDL_GL_GetProcAddress('glVertexAttrib2sNV'); - if not Assigned(glVertexAttrib2sNV) then Exit; - @glVertexAttrib2fNV := SDL_GL_GetProcAddress('glVertexAttrib2fNV'); - if not Assigned(glVertexAttrib2fNV) then Exit; - @glVertexAttrib2dNV := SDL_GL_GetProcAddress('glVertexAttrib2dNV'); - if not Assigned(glVertexAttrib2dNV) then Exit; - @glVertexAttrib3sNV := SDL_GL_GetProcAddress('glVertexAttrib3sNV'); - if not Assigned(glVertexAttrib3sNV) then Exit; - @glVertexAttrib3fNV := SDL_GL_GetProcAddress('glVertexAttrib3fNV'); - if not Assigned(glVertexAttrib3fNV) then Exit; - @glVertexAttrib3dNV := SDL_GL_GetProcAddress('glVertexAttrib3dNV'); - if not Assigned(glVertexAttrib3dNV) then Exit; - @glVertexAttrib4sNV := SDL_GL_GetProcAddress('glVertexAttrib4sNV'); - if not Assigned(glVertexAttrib4sNV) then Exit; - @glVertexAttrib4fNV := SDL_GL_GetProcAddress('glVertexAttrib4fNV'); - if not Assigned(glVertexAttrib4fNV) then Exit; - @glVertexAttrib4dNV := SDL_GL_GetProcAddress('glVertexAttrib4dNV'); - if not Assigned(glVertexAttrib4dNV) then Exit; - @glVertexAttrib4ubNV := SDL_GL_GetProcAddress('glVertexAttrib4ubNV'); - if not Assigned(glVertexAttrib4ubNV) then Exit; - @glVertexAttrib1svNV := SDL_GL_GetProcAddress('glVertexAttrib1svNV'); - if not Assigned(glVertexAttrib1svNV) then Exit; - @glVertexAttrib1fvNV := SDL_GL_GetProcAddress('glVertexAttrib1fvNV'); - if not Assigned(glVertexAttrib1fvNV) then Exit; - @glVertexAttrib1dvNV := SDL_GL_GetProcAddress('glVertexAttrib1dvNV'); - if not Assigned(glVertexAttrib1dvNV) then Exit; - @glVertexAttrib2svNV := SDL_GL_GetProcAddress('glVertexAttrib2svNV'); - if not Assigned(glVertexAttrib2svNV) then Exit; - @glVertexAttrib2fvNV := SDL_GL_GetProcAddress('glVertexAttrib2fvNV'); - if not Assigned(glVertexAttrib2fvNV) then Exit; - @glVertexAttrib2dvNV := SDL_GL_GetProcAddress('glVertexAttrib2dvNV'); - if not Assigned(glVertexAttrib2dvNV) then Exit; - @glVertexAttrib3svNV := SDL_GL_GetProcAddress('glVertexAttrib3svNV'); - if not Assigned(glVertexAttrib3svNV) then Exit; - @glVertexAttrib3fvNV := SDL_GL_GetProcAddress('glVertexAttrib3fvNV'); - if not Assigned(glVertexAttrib3fvNV) then Exit; - @glVertexAttrib3dvNV := SDL_GL_GetProcAddress('glVertexAttrib3dvNV'); - if not Assigned(glVertexAttrib3dvNV) then Exit; - @glVertexAttrib4svNV := SDL_GL_GetProcAddress('glVertexAttrib4svNV'); - if not Assigned(glVertexAttrib4svNV) then Exit; - @glVertexAttrib4fvNV := SDL_GL_GetProcAddress('glVertexAttrib4fvNV'); - if not Assigned(glVertexAttrib4fvNV) then Exit; - @glVertexAttrib4dvNV := SDL_GL_GetProcAddress('glVertexAttrib4dvNV'); - if not Assigned(glVertexAttrib4dvNV) then Exit; - @glVertexAttrib4ubvNV := SDL_GL_GetProcAddress('glVertexAttrib4ubvNV'); - if not Assigned(glVertexAttrib4ubvNV) then Exit; - @glVertexAttribs1svNV := SDL_GL_GetProcAddress('glVertexAttribs1svNV'); - if not Assigned(glVertexAttribs1svNV) then Exit; - @glVertexAttribs1fvNV := SDL_GL_GetProcAddress('glVertexAttribs1fvNV'); - if not Assigned(glVertexAttribs1fvNV) then Exit; - @glVertexAttribs1dvNV := SDL_GL_GetProcAddress('glVertexAttribs1dvNV'); - if not Assigned(glVertexAttribs1dvNV) then Exit; - @glVertexAttribs2svNV := SDL_GL_GetProcAddress('glVertexAttribs2svNV'); - if not Assigned(glVertexAttribs2svNV) then Exit; - @glVertexAttribs2fvNV := SDL_GL_GetProcAddress('glVertexAttribs2fvNV'); - if not Assigned(glVertexAttribs2fvNV) then Exit; - @glVertexAttribs2dvNV := SDL_GL_GetProcAddress('glVertexAttribs2dvNV'); - if not Assigned(glVertexAttribs2dvNV) then Exit; - @glVertexAttribs3svNV := SDL_GL_GetProcAddress('glVertexAttribs3svNV'); - if not Assigned(glVertexAttribs3svNV) then Exit; - @glVertexAttribs3fvNV := SDL_GL_GetProcAddress('glVertexAttribs3fvNV'); - if not Assigned(glVertexAttribs3fvNV) then Exit; - @glVertexAttribs3dvNV := SDL_GL_GetProcAddress('glVertexAttribs3dvNV'); - if not Assigned(glVertexAttribs3dvNV) then Exit; - @glVertexAttribs4svNV := SDL_GL_GetProcAddress('glVertexAttribs4svNV'); - if not Assigned(glVertexAttribs4svNV) then Exit; - @glVertexAttribs4fvNV := SDL_GL_GetProcAddress('glVertexAttribs4fvNV'); - if not Assigned(glVertexAttribs4fvNV) then Exit; - @glVertexAttribs4dvNV := SDL_GL_GetProcAddress('glVertexAttribs4dvNV'); - if not Assigned(glVertexAttribs4dvNV) then Exit; - @glVertexAttribs4ubvNV := SDL_GL_GetProcAddress('glVertexAttribs4ubvNV'); - if not Assigned(glVertexAttribs4ubvNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_vertex_program1_1: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_vertex_program1_1', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ATI_element_array: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_element_array', extstring) then - begin - @glElementPointerATI := SDL_GL_GetProcAddress('glElementPointerATI'); - if not Assigned(glElementPointerATI) then Exit; - @glDrawElementArrayATI := SDL_GL_GetProcAddress('glDrawElementArrayATI'); - if not Assigned(glDrawElementArrayATI) then Exit; - @glDrawRangeElementArrayATI := SDL_GL_GetProcAddress('glDrawRangeElementArrayATI'); - if not Assigned(glDrawRangeElementArrayATI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_envmap_bumpmap: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_envmap_bumpmap', extstring) then - begin - @glTexBumpParameterivATI := SDL_GL_GetProcAddress('glTexBumpParameterivATI'); - if not Assigned(glTexBumpParameterivATI) then Exit; - @glTexBumpParameterfvATI := SDL_GL_GetProcAddress('glTexBumpParameterfvATI'); - if not Assigned(glTexBumpParameterfvATI) then Exit; - @glGetTexBumpParameterivATI := SDL_GL_GetProcAddress('glGetTexBumpParameterivATI'); - if not Assigned(glGetTexBumpParameterivATI) then Exit; - @glGetTexBumpParameterfvATI := SDL_GL_GetProcAddress('glGetTexBumpParameterfvATI'); - if not Assigned(glGetTexBumpParameterfvATI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_fragment_shader: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_fragment_shader', extstring) then - begin - @glGenFragmentShadersATI := SDL_GL_GetProcAddress('glGenFragmentShadersATI'); - if not Assigned(glGenFragmentShadersATI) then Exit; - @glBindFragmentShaderATI := SDL_GL_GetProcAddress('glBindFragmentShaderATI'); - if not Assigned(glBindFragmentShaderATI) then Exit; - @glDeleteFragmentShaderATI := SDL_GL_GetProcAddress('glDeleteFragmentShaderATI'); - if not Assigned(glDeleteFragmentShaderATI) then Exit; - @glBeginFragmentShaderATI := SDL_GL_GetProcAddress('glBeginFragmentShaderATI'); - if not Assigned(glBeginFragmentShaderATI) then Exit; - @glEndFragmentShaderATI := SDL_GL_GetProcAddress('glEndFragmentShaderATI'); - if not Assigned(glEndFragmentShaderATI) then Exit; - @glPassTexCoordATI := SDL_GL_GetProcAddress('glPassTexCoordATI'); - if not Assigned(glPassTexCoordATI) then Exit; - @glSampleMapATI := SDL_GL_GetProcAddress('glSampleMapATI'); - if not Assigned(glSampleMapATI) then Exit; - @glColorFragmentOp1ATI := SDL_GL_GetProcAddress('glColorFragmentOp1ATI'); - if not Assigned(glColorFragmentOp1ATI) then Exit; - @glColorFragmentOp2ATI := SDL_GL_GetProcAddress('glColorFragmentOp2ATI'); - if not Assigned(glColorFragmentOp2ATI) then Exit; - @glColorFragmentOp3ATI := SDL_GL_GetProcAddress('glColorFragmentOp3ATI'); - if not Assigned(glColorFragmentOp3ATI) then Exit; - @glAlphaFragmentOp1ATI := SDL_GL_GetProcAddress('glAlphaFragmentOp1ATI'); - if not Assigned(glAlphaFragmentOp1ATI) then Exit; - @glAlphaFragmentOp2ATI := SDL_GL_GetProcAddress('glAlphaFragmentOp2ATI'); - if not Assigned(glAlphaFragmentOp2ATI) then Exit; - @glAlphaFragmentOp3ATI := SDL_GL_GetProcAddress('glAlphaFragmentOp3ATI'); - if not Assigned(glAlphaFragmentOp3ATI) then Exit; - @glSetFragmentShaderConstantATI := SDL_GL_GetProcAddress('glSetFragmentShaderConstantATI'); - if not Assigned(glSetFragmentShaderConstantATI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_pn_triangles: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_pn_triangles', extstring) then - begin - @glPNTrianglesiATI := SDL_GL_GetProcAddress('glPNTrianglesiATI'); - if not Assigned(glPNTrianglesiATI) then Exit; - @glPNTrianglesfATI := SDL_GL_GetProcAddress('glPNTrianglesfATI'); - if not Assigned(glPNTrianglesfATI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_texture_mirror_once: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_texture_mirror_once', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ATI_vertex_array_object: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_vertex_array_object', extstring) then - begin - @glNewObjectBufferATI := SDL_GL_GetProcAddress('glNewObjectBufferATI'); - if not Assigned(glNewObjectBufferATI) then Exit; - @glIsObjectBufferATI := SDL_GL_GetProcAddress('glIsObjectBufferATI'); - if not Assigned(glIsObjectBufferATI) then Exit; - @glUpdateObjectBufferATI := SDL_GL_GetProcAddress('glUpdateObjectBufferATI'); - if not Assigned(glUpdateObjectBufferATI) then Exit; - @glGetObjectBufferfvATI := SDL_GL_GetProcAddress('glGetObjectBufferfvATI'); - if not Assigned(glGetObjectBufferfvATI) then Exit; - @glGetObjectBufferivATI := SDL_GL_GetProcAddress('glGetObjectBufferivATI'); - if not Assigned(glGetObjectBufferivATI) then Exit; - @glDeleteObjectBufferATI := SDL_GL_GetProcAddress('glDeleteObjectBufferATI'); - if not Assigned(glDeleteObjectBufferATI) then Exit; - @glArrayObjectATI := SDL_GL_GetProcAddress('glArrayObjectATI'); - if not Assigned(glArrayObjectATI) then Exit; - @glGetArrayObjectfvATI := SDL_GL_GetProcAddress('glGetArrayObjectfvATI'); - if not Assigned(glGetArrayObjectfvATI) then Exit; - @glGetArrayObjectivATI := SDL_GL_GetProcAddress('glGetArrayObjectivATI'); - if not Assigned(glGetArrayObjectivATI) then Exit; - @glVariantArrayObjectATI := SDL_GL_GetProcAddress('glVariantArrayObjectATI'); - if not Assigned(glVariantArrayObjectATI) then Exit; - @glGetVariantArrayObjectfvATI := SDL_GL_GetProcAddress('glGetVariantArrayObjectfvATI'); - if not Assigned(glGetVariantArrayObjectfvATI) then Exit; - @glGetVariantArrayObjectivATI := SDL_GL_GetProcAddress('glGetVariantArrayObjectivATI'); - if not Assigned(glGetVariantArrayObjectivATI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_vertex_streams: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_vertex_streams', extstring) then - begin - @glVertexStream1s := SDL_GL_GetProcAddress('glVertexStream1s'); - if not Assigned(glVertexStream1s) then Exit; - @glVertexStream1i := SDL_GL_GetProcAddress('glVertexStream1i'); - if not Assigned(glVertexStream1i) then Exit; - @glVertexStream1f := SDL_GL_GetProcAddress('glVertexStream1f'); - if not Assigned(glVertexStream1f) then Exit; - @glVertexStream1d := SDL_GL_GetProcAddress('glVertexStream1d'); - if not Assigned(glVertexStream1d) then Exit; - @glVertexStream1sv := SDL_GL_GetProcAddress('glVertexStream1sv'); - if not Assigned(glVertexStream1sv) then Exit; - @glVertexStream1iv := SDL_GL_GetProcAddress('glVertexStream1iv'); - if not Assigned(glVertexStream1iv) then Exit; - @glVertexStream1fv := SDL_GL_GetProcAddress('glVertexStream1fv'); - if not Assigned(glVertexStream1fv) then Exit; - @glVertexStream1dv := SDL_GL_GetProcAddress('glVertexStream1dv'); - if not Assigned(glVertexStream1dv) then Exit; - @glVertexStream2s := SDL_GL_GetProcAddress('glVertexStream2s'); - if not Assigned(glVertexStream2s) then Exit; - @glVertexStream2i := SDL_GL_GetProcAddress('glVertexStream2i'); - if not Assigned(glVertexStream2i) then Exit; - @glVertexStream2f := SDL_GL_GetProcAddress('glVertexStream2f'); - if not Assigned(glVertexStream2f) then Exit; - @glVertexStream2d := SDL_GL_GetProcAddress('glVertexStream2d'); - if not Assigned(glVertexStream2d) then Exit; - @glVertexStream2sv := SDL_GL_GetProcAddress('glVertexStream2sv'); - if not Assigned(glVertexStream2sv) then Exit; - @glVertexStream2iv := SDL_GL_GetProcAddress('glVertexStream2iv'); - if not Assigned(glVertexStream2iv) then Exit; - @glVertexStream2fv := SDL_GL_GetProcAddress('glVertexStream2fv'); - if not Assigned(glVertexStream2fv) then Exit; - @glVertexStream2dv := SDL_GL_GetProcAddress('glVertexStream2dv'); - if not Assigned(glVertexStream2dv) then Exit; - @glVertexStream3s := SDL_GL_GetProcAddress('glVertexStream3s'); - if not Assigned(glVertexStream3s) then Exit; - @glVertexStream3i := SDL_GL_GetProcAddress('glVertexStream3i'); - if not Assigned(glVertexStream3i) then Exit; - @glVertexStream3f := SDL_GL_GetProcAddress('glVertexStream3f'); - if not Assigned(glVertexStream3f) then Exit; - @glVertexStream3d := SDL_GL_GetProcAddress('glVertexStream3d'); - if not Assigned(glVertexStream3d) then Exit; - @glVertexStream3sv := SDL_GL_GetProcAddress('glVertexStream3sv'); - if not Assigned(glVertexStream3sv) then Exit; - @glVertexStream3iv := SDL_GL_GetProcAddress('glVertexStream3iv'); - if not Assigned(glVertexStream3iv) then Exit; - @glVertexStream3fv := SDL_GL_GetProcAddress('glVertexStream3fv'); - if not Assigned(glVertexStream3fv) then Exit; - @glVertexStream3dv := SDL_GL_GetProcAddress('glVertexStream3dv'); - if not Assigned(glVertexStream3dv) then Exit; - @glVertexStream4s := SDL_GL_GetProcAddress('glVertexStream4s'); - if not Assigned(glVertexStream4s) then Exit; - @glVertexStream4i := SDL_GL_GetProcAddress('glVertexStream4i'); - if not Assigned(glVertexStream4i) then Exit; - @glVertexStream4f := SDL_GL_GetProcAddress('glVertexStream4f'); - if not Assigned(glVertexStream4f) then Exit; - @glVertexStream4d := SDL_GL_GetProcAddress('glVertexStream4d'); - if not Assigned(glVertexStream4d) then Exit; - @glVertexStream4sv := SDL_GL_GetProcAddress('glVertexStream4sv'); - if not Assigned(glVertexStream4sv) then Exit; - @glVertexStream4iv := SDL_GL_GetProcAddress('glVertexStream4iv'); - if not Assigned(glVertexStream4iv) then Exit; - @glVertexStream4fv := SDL_GL_GetProcAddress('glVertexStream4fv'); - if not Assigned(glVertexStream4fv) then Exit; - @glVertexStream4dv := SDL_GL_GetProcAddress('glVertexStream4dv'); - if not Assigned(glVertexStream4dv) then Exit; - @glNormalStream3b := SDL_GL_GetProcAddress('glNormalStream3b'); - if not Assigned(glNormalStream3b) then Exit; - @glNormalStream3s := SDL_GL_GetProcAddress('glNormalStream3s'); - if not Assigned(glNormalStream3s) then Exit; - @glNormalStream3i := SDL_GL_GetProcAddress('glNormalStream3i'); - if not Assigned(glNormalStream3i) then Exit; - @glNormalStream3f := SDL_GL_GetProcAddress('glNormalStream3f'); - if not Assigned(glNormalStream3f) then Exit; - @glNormalStream3d := SDL_GL_GetProcAddress('glNormalStream3d'); - if not Assigned(glNormalStream3d) then Exit; - @glNormalStream3bv := SDL_GL_GetProcAddress('glNormalStream3bv'); - if not Assigned(glNormalStream3bv) then Exit; - @glNormalStream3sv := SDL_GL_GetProcAddress('glNormalStream3sv'); - if not Assigned(glNormalStream3sv) then Exit; - @glNormalStream3iv := SDL_GL_GetProcAddress('glNormalStream3iv'); - if not Assigned(glNormalStream3iv) then Exit; - @glNormalStream3fv := SDL_GL_GetProcAddress('glNormalStream3fv'); - if not Assigned(glNormalStream3fv) then Exit; - @glNormalStream3dv := SDL_GL_GetProcAddress('glNormalStream3dv'); - if not Assigned(glNormalStream3dv) then Exit; - @glClientActiveVertexStream := SDL_GL_GetProcAddress('glClientActiveVertexStream'); - if not Assigned(glClientActiveVertexStream) then Exit; - @glVertexBlendEnvi := SDL_GL_GetProcAddress('glVertexBlendEnvi'); - if not Assigned(glVertexBlendEnvi) then Exit; - @glVertexBlendEnvf := SDL_GL_GetProcAddress('glVertexBlendEnvf'); - if not Assigned(glVertexBlendEnvf) then Exit; - Result := TRUE; - end; - -end; - -{$IFDEF WINDOWS} -function Load_WGL_I3D_image_buffer: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_I3D_image_buffer', extstring) then - begin - @wglCreateImageBufferI3D := SDL_GL_GetProcAddress('wglCreateImageBufferI3D'); - if not Assigned(wglCreateImageBufferI3D) then Exit; - @wglDestroyImageBufferI3D := SDL_GL_GetProcAddress('wglDestroyImageBufferI3D'); - if not Assigned(wglDestroyImageBufferI3D) then Exit; - @wglAssociateImageBufferEventsI3D := SDL_GL_GetProcAddress('wglAssociateImageBufferEventsI3D'); - if not Assigned(wglAssociateImageBufferEventsI3D) then Exit; - @wglReleaseImageBufferEventsI3D := SDL_GL_GetProcAddress('wglReleaseImageBufferEventsI3D'); - if not Assigned(wglReleaseImageBufferEventsI3D) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_I3D_swap_frame_lock: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_I3D_swap_frame_lock', extstring) then - begin - @wglEnableFrameLockI3D := SDL_GL_GetProcAddress('wglEnableFrameLockI3D'); - if not Assigned(wglEnableFrameLockI3D) then Exit; - @wglDisableFrameLockI3D := SDL_GL_GetProcAddress('wglDisableFrameLockI3D'); - if not Assigned(wglDisableFrameLockI3D) then Exit; - @wglIsEnabledFrameLockI3D := SDL_GL_GetProcAddress('wglIsEnabledFrameLockI3D'); - if not Assigned(wglIsEnabledFrameLockI3D) then Exit; - @wglQueryFrameLockMasterI3D := SDL_GL_GetProcAddress('wglQueryFrameLockMasterI3D'); - if not Assigned(wglQueryFrameLockMasterI3D) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_I3D_swap_frame_usage: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_I3D_swap_frame_usage', extstring) then - begin - @wglGetFrameUsageI3D := SDL_GL_GetProcAddress('wglGetFrameUsageI3D'); - if not Assigned(wglGetFrameUsageI3D) then Exit; - @wglBeginFrameTrackingI3D := SDL_GL_GetProcAddress('wglBeginFrameTrackingI3D'); - if not Assigned(wglBeginFrameTrackingI3D) then Exit; - @wglEndFrameTrackingI3D := SDL_GL_GetProcAddress('wglEndFrameTrackingI3D'); - if not Assigned(wglEndFrameTrackingI3D) then Exit; - @wglQueryFrameTrackingI3D := SDL_GL_GetProcAddress('wglQueryFrameTrackingI3D'); - if not Assigned(wglQueryFrameTrackingI3D) then Exit; - Result := TRUE; - end; - -end; -{$ENDIF} - -function Load_GL_3DFX_texture_compression_FXT1: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_3DFX_texture_compression_FXT1', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_IBM_cull_vertex: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_IBM_cull_vertex', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_IBM_multimode_draw_arrays: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_IBM_multimode_draw_arrays', extstring) then - begin - @glMultiModeDrawArraysIBM := SDL_GL_GetProcAddress('glMultiModeDrawArraysIBM'); - if not Assigned(glMultiModeDrawArraysIBM) then Exit; - @glMultiModeDrawElementsIBM := SDL_GL_GetProcAddress('glMultiModeDrawElementsIBM'); - if not Assigned(glMultiModeDrawElementsIBM) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_IBM_raster_pos_clip: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_IBM_raster_pos_clip', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_IBM_texture_mirrored_repeat: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_IBM_texture_mirrored_repeat', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_IBM_vertex_array_lists: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_IBM_vertex_array_lists', extstring) then - begin - @glColorPointerListIBM := SDL_GL_GetProcAddress('glColorPointerListIBM'); - if not Assigned(glColorPointerListIBM) then Exit; - @glSecondaryColorPointerListIBM := SDL_GL_GetProcAddress('glSecondaryColorPointerListIBM'); - if not Assigned(glSecondaryColorPointerListIBM) then Exit; - @glEdgeFlagPointerListIBM := SDL_GL_GetProcAddress('glEdgeFlagPointerListIBM'); - if not Assigned(glEdgeFlagPointerListIBM) then Exit; - @glFogCoordPointerListIBM := SDL_GL_GetProcAddress('glFogCoordPointerListIBM'); - if not Assigned(glFogCoordPointerListIBM) then Exit; - @glNormalPointerListIBM := SDL_GL_GetProcAddress('glNormalPointerListIBM'); - if not Assigned(glNormalPointerListIBM) then Exit; - @glTexCoordPointerListIBM := SDL_GL_GetProcAddress('glTexCoordPointerListIBM'); - if not Assigned(glTexCoordPointerListIBM) then Exit; - @glVertexPointerListIBM := SDL_GL_GetProcAddress('glVertexPointerListIBM'); - if not Assigned(glVertexPointerListIBM) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_MESA_resize_buffers: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_MESA_resize_buffers', extstring) then - begin - @glResizeBuffersMESA := SDL_GL_GetProcAddress('glResizeBuffersMESA'); - if not Assigned(glResizeBuffersMESA) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_MESA_window_pos: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_MESA_window_pos', extstring) then - begin - @glWindowPos2dMESA := SDL_GL_GetProcAddress('glWindowPos2dMESA'); - if not Assigned(glWindowPos2dMESA) then Exit; - @glWindowPos2fMESA := SDL_GL_GetProcAddress('glWindowPos2fMESA'); - if not Assigned(glWindowPos2fMESA) then Exit; - @glWindowPos2iMESA := SDL_GL_GetProcAddress('glWindowPos2iMESA'); - if not Assigned(glWindowPos2iMESA) then Exit; - @glWindowPos2sMESA := SDL_GL_GetProcAddress('glWindowPos2sMESA'); - if not Assigned(glWindowPos2sMESA) then Exit; - @glWindowPos2ivMESA := SDL_GL_GetProcAddress('glWindowPos2ivMESA'); - if not Assigned(glWindowPos2ivMESA) then Exit; - @glWindowPos2svMESA := SDL_GL_GetProcAddress('glWindowPos2svMESA'); - if not Assigned(glWindowPos2svMESA) then Exit; - @glWindowPos2fvMESA := SDL_GL_GetProcAddress('glWindowPos2fvMESA'); - if not Assigned(glWindowPos2fvMESA) then Exit; - @glWindowPos2dvMESA := SDL_GL_GetProcAddress('glWindowPos2dvMESA'); - if not Assigned(glWindowPos2dvMESA) then Exit; - @glWindowPos3iMESA := SDL_GL_GetProcAddress('glWindowPos3iMESA'); - if not Assigned(glWindowPos3iMESA) then Exit; - @glWindowPos3sMESA := SDL_GL_GetProcAddress('glWindowPos3sMESA'); - if not Assigned(glWindowPos3sMESA) then Exit; - @glWindowPos3fMESA := SDL_GL_GetProcAddress('glWindowPos3fMESA'); - if not Assigned(glWindowPos3fMESA) then Exit; - @glWindowPos3dMESA := SDL_GL_GetProcAddress('glWindowPos3dMESA'); - if not Assigned(glWindowPos3dMESA) then Exit; - @glWindowPos3ivMESA := SDL_GL_GetProcAddress('glWindowPos3ivMESA'); - if not Assigned(glWindowPos3ivMESA) then Exit; - @glWindowPos3svMESA := SDL_GL_GetProcAddress('glWindowPos3svMESA'); - if not Assigned(glWindowPos3svMESA) then Exit; - @glWindowPos3fvMESA := SDL_GL_GetProcAddress('glWindowPos3fvMESA'); - if not Assigned(glWindowPos3fvMESA) then Exit; - @glWindowPos3dvMESA := SDL_GL_GetProcAddress('glWindowPos3dvMESA'); - if not Assigned(glWindowPos3dvMESA) then Exit; - @glWindowPos4iMESA := SDL_GL_GetProcAddress('glWindowPos4iMESA'); - if not Assigned(glWindowPos4iMESA) then Exit; - @glWindowPos4sMESA := SDL_GL_GetProcAddress('glWindowPos4sMESA'); - if not Assigned(glWindowPos4sMESA) then Exit; - @glWindowPos4fMESA := SDL_GL_GetProcAddress('glWindowPos4fMESA'); - if not Assigned(glWindowPos4fMESA) then Exit; - @glWindowPos4dMESA := SDL_GL_GetProcAddress('glWindowPos4dMESA'); - if not Assigned(glWindowPos4dMESA) then Exit; - @glWindowPos4ivMESA := SDL_GL_GetProcAddress('glWindowPos4ivMESA'); - if not Assigned(glWindowPos4ivMESA) then Exit; - @glWindowPos4svMESA := SDL_GL_GetProcAddress('glWindowPos4svMESA'); - if not Assigned(glWindowPos4svMESA) then Exit; - @glWindowPos4fvMESA := SDL_GL_GetProcAddress('glWindowPos4fvMESA'); - if not Assigned(glWindowPos4fvMESA) then Exit; - @glWindowPos4dvMESA := SDL_GL_GetProcAddress('glWindowPos4dvMESA'); - if not Assigned(glWindowPos4dvMESA) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_OML_interlace: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_OML_interlace', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_OML_resample: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_OML_resample', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_OML_subsample: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_OML_subsample', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGIS_generate_mipmap: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIS_generate_mipmap', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGIS_multisample: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIS_multisample', extstring) then - begin - @glSampleMaskSGIS := SDL_GL_GetProcAddress('glSampleMaskSGIS'); - if not Assigned(glSampleMaskSGIS) then Exit; - @glSamplePatternSGIS := SDL_GL_GetProcAddress('glSamplePatternSGIS'); - if not Assigned(glSamplePatternSGIS) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_SGIS_pixel_texture: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIS_pixel_texture', extstring) then - begin - @glPixelTexGenParameteriSGIS := SDL_GL_GetProcAddress('glPixelTexGenParameteriSGIS'); - if not Assigned(glPixelTexGenParameteriSGIS) then Exit; - @glPixelTexGenParameterfSGIS := SDL_GL_GetProcAddress('glPixelTexGenParameterfSGIS'); - if not Assigned(glPixelTexGenParameterfSGIS) then Exit; - @glGetPixelTexGenParameterivSGIS := SDL_GL_GetProcAddress('glGetPixelTexGenParameterivSGIS'); - if not Assigned(glGetPixelTexGenParameterivSGIS) then Exit; - @glGetPixelTexGenParameterfvSGIS := SDL_GL_GetProcAddress('glGetPixelTexGenParameterfvSGIS'); - if not Assigned(glGetPixelTexGenParameterfvSGIS) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_SGIS_texture_border_clamp: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIS_texture_border_clamp', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGIS_texture_color_mask: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIS_texture_color_mask', extstring) then - begin - @glTextureColorMaskSGIS := SDL_GL_GetProcAddress('glTextureColorMaskSGIS'); - if not Assigned(glTextureColorMaskSGIS) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_SGIS_texture_edge_clamp: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIS_texture_edge_clamp', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGIS_texture_lod: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIS_texture_lod', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGIS_depth_texture: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIS_depth_texture', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGIX_fog_offset: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIX_fog_offset', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGIX_interlace: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIX_interlace', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGIX_shadow_ambient: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGIX_shadow_ambient', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGI_color_matrix: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGI_color_matrix', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SGI_color_table: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGI_color_table', extstring) then - begin - @glColorTableSGI := SDL_GL_GetProcAddress('glColorTableSGI'); - if not Assigned(glColorTableSGI) then Exit; - @glCopyColorTableSGI := SDL_GL_GetProcAddress('glCopyColorTableSGI'); - if not Assigned(glCopyColorTableSGI) then Exit; - @glColorTableParameterivSGI := SDL_GL_GetProcAddress('glColorTableParameterivSGI'); - if not Assigned(glColorTableParameterivSGI) then Exit; - @glColorTableParameterfvSGI := SDL_GL_GetProcAddress('glColorTableParameterfvSGI'); - if not Assigned(glColorTableParameterfvSGI) then Exit; - @glGetColorTableSGI := SDL_GL_GetProcAddress('glGetColorTableSGI'); - if not Assigned(glGetColorTableSGI) then Exit; - @glGetColorTableParameterivSGI := SDL_GL_GetProcAddress('glGetColorTableParameterivSGI'); - if not Assigned(glGetColorTableParameterivSGI) then Exit; - @glGetColorTableParameterfvSGI := SDL_GL_GetProcAddress('glGetColorTableParameterfvSGI'); - if not Assigned(glGetColorTableParameterfvSGI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_SGI_texture_color_table: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SGI_texture_color_table', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_SUN_vertex: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_SUN_vertex', extstring) then - begin - @glColor4ubVertex2fSUN := SDL_GL_GetProcAddress('glColor4ubVertex2fSUN'); - if not Assigned(glColor4ubVertex2fSUN) then Exit; - @glColor4ubVertex2fvSUN := SDL_GL_GetProcAddress('glColor4ubVertex2fvSUN'); - if not Assigned(glColor4ubVertex2fvSUN) then Exit; - @glColor4ubVertex3fSUN := SDL_GL_GetProcAddress('glColor4ubVertex3fSUN'); - if not Assigned(glColor4ubVertex3fSUN) then Exit; - @glColor4ubVertex3fvSUN := SDL_GL_GetProcAddress('glColor4ubVertex3fvSUN'); - if not Assigned(glColor4ubVertex3fvSUN) then Exit; - @glColor3fVertex3fSUN := SDL_GL_GetProcAddress('glColor3fVertex3fSUN'); - if not Assigned(glColor3fVertex3fSUN) then Exit; - @glColor3fVertex3fvSUN := SDL_GL_GetProcAddress('glColor3fVertex3fvSUN'); - if not Assigned(glColor3fVertex3fvSUN) then Exit; - @glNormal3fVertex3fSUN := SDL_GL_GetProcAddress('glNormal3fVertex3fSUN'); - if not Assigned(glNormal3fVertex3fSUN) then Exit; - @glNormal3fVertex3fvSUN := SDL_GL_GetProcAddress('glNormal3fVertex3fvSUN'); - if not Assigned(glNormal3fVertex3fvSUN) then Exit; - @glColor4fNormal3fVertex3fSUN := SDL_GL_GetProcAddress('glColor4fNormal3fVertex3fSUN'); - if not Assigned(glColor4fNormal3fVertex3fSUN) then Exit; - @glColor4fNormal3fVertex3fvSUN := SDL_GL_GetProcAddress('glColor4fNormal3fVertex3fvSUN'); - if not Assigned(glColor4fNormal3fVertex3fvSUN) then Exit; - @glTexCoord2fVertex3fSUN := SDL_GL_GetProcAddress('glTexCoord2fVertex3fSUN'); - if not Assigned(glTexCoord2fVertex3fSUN) then Exit; - @glTexCoord2fVertex3fvSUN := SDL_GL_GetProcAddress('glTexCoord2fVertex3fvSUN'); - if not Assigned(glTexCoord2fVertex3fvSUN) then Exit; - @glTexCoord4fVertex4fSUN := SDL_GL_GetProcAddress('glTexCoord4fVertex4fSUN'); - if not Assigned(glTexCoord4fVertex4fSUN) then Exit; - @glTexCoord4fVertex4fvSUN := SDL_GL_GetProcAddress('glTexCoord4fVertex4fvSUN'); - if not Assigned(glTexCoord4fVertex4fvSUN) then Exit; - @glTexCoord2fColor4ubVertex3fSUN := SDL_GL_GetProcAddress('glTexCoord2fColor4ubVertex3fSUN'); - if not Assigned(glTexCoord2fColor4ubVertex3fSUN) then Exit; - @glTexCoord2fColor4ubVertex3fvSUN := SDL_GL_GetProcAddress('glTexCoord2fColor4ubVertex3fvSUN'); - if not Assigned(glTexCoord2fColor4ubVertex3fvSUN) then Exit; - @glTexCoord2fColor3fVertex3fSUN := SDL_GL_GetProcAddress('glTexCoord2fColor3fVertex3fSUN'); - if not Assigned(glTexCoord2fColor3fVertex3fSUN) then Exit; - @glTexCoord2fColor3fVertex3fvSUN := SDL_GL_GetProcAddress('glTexCoord2fColor3fVertex3fvSUN'); - if not Assigned(glTexCoord2fColor3fVertex3fvSUN) then Exit; - @glTexCoord2fNormal3fVertex3fSUN := SDL_GL_GetProcAddress('glTexCoord2fNormal3fVertex3fSUN'); - if not Assigned(glTexCoord2fNormal3fVertex3fSUN) then Exit; - @glTexCoord2fNormal3fVertex3fvSUN := SDL_GL_GetProcAddress('glTexCoord2fNormal3fVertex3fvSUN'); - if not Assigned(glTexCoord2fNormal3fVertex3fvSUN) then Exit; - @glTexCoord2fColor4fNormal3fVertex3fSUN := SDL_GL_GetProcAddress('glTexCoord2fColor4fNormal3fVertex3fSUN'); - if not Assigned(glTexCoord2fColor4fNormal3fVertex3fSUN) then Exit; - @glTexCoord2fColor4fNormal3fVertex3fvSUN := SDL_GL_GetProcAddress('glTexCoord2fColor4fNormal3fVertex3fvSUN'); - if not Assigned(glTexCoord2fColor4fNormal3fVertex3fvSUN) then Exit; - @glTexCoord4fColor4fNormal3fVertex4fSUN := SDL_GL_GetProcAddress('glTexCoord4fColor4fNormal3fVertex4fSUN'); - if not Assigned(glTexCoord4fColor4fNormal3fVertex4fSUN) then Exit; - @glTexCoord4fColor4fNormal3fVertex4fvSUN := SDL_GL_GetProcAddress('glTexCoord4fColor4fNormal3fVertex4fvSUN'); - if not Assigned(glTexCoord4fColor4fNormal3fVertex4fvSUN) then Exit; - @glReplacementCodeuiVertex3fSUN := SDL_GL_GetProcAddress('glReplacementCodeuiVertex3fSUN'); - if not Assigned(glReplacementCodeuiVertex3fSUN) then Exit; - @glReplacementCodeuiVertex3fvSUN := SDL_GL_GetProcAddress('glReplacementCodeuiVertex3fvSUN'); - if not Assigned(glReplacementCodeuiVertex3fvSUN) then Exit; - @glReplacementCodeuiColor4ubVertex3fSUN := SDL_GL_GetProcAddress('glReplacementCodeuiColor4ubVertex3fSUN'); - if not Assigned(glReplacementCodeuiColor4ubVertex3fSUN) then Exit; - @glReplacementCodeuiColor4ubVertex3fvSUN := SDL_GL_GetProcAddress('glReplacementCodeuiColor4ubVertex3fvSUN'); - if not Assigned(glReplacementCodeuiColor4ubVertex3fvSUN) then Exit; - @glReplacementCodeuiColor3fVertex3fSUN := SDL_GL_GetProcAddress('glReplacementCodeuiColor3fVertex3fSUN'); - if not Assigned(glReplacementCodeuiColor3fVertex3fSUN) then Exit; - @glReplacementCodeuiColor3fVertex3fvSUN := SDL_GL_GetProcAddress('glReplacementCodeuiColor3fVertex3fvSUN'); - if not Assigned(glReplacementCodeuiColor3fVertex3fvSUN) then Exit; - @glReplacementCodeuiNormal3fVertex3fSUN := SDL_GL_GetProcAddress('glReplacementCodeuiNormal3fVertex3fSUN'); - if not Assigned(glReplacementCodeuiNormal3fVertex3fSUN) then Exit; - @glReplacementCodeuiNormal3fVertex3fvSUN := SDL_GL_GetProcAddress('glReplacementCodeuiNormal3fVertex3fvSUN'); - if not Assigned(glReplacementCodeuiNormal3fVertex3fvSUN) then Exit; - @glReplacementCodeuiColor4fNormal3fVertex3fSUN := SDL_GL_GetProcAddress('glReplacementCodeuiColor4fNormal3fVertex3fSUN'); - if not Assigned(glReplacementCodeuiColor4fNormal3fVertex3fSUN) then Exit; - @glReplacementCodeuiColor4fNormal3fVertex3fvSUN := SDL_GL_GetProcAddress('glReplacementCodeuiColor4fNormal3fVertex3fvSUN'); - if not Assigned(glReplacementCodeuiColor4fNormal3fVertex3fvSUN) then Exit; - @glReplacementCodeuiTexCoord2fVertex3fSUN := SDL_GL_GetProcAddress('glReplacementCodeuiTexCoord2fVertex3fSUN'); - if not Assigned(glReplacementCodeuiTexCoord2fVertex3fSUN) then Exit; - @glReplacementCodeuiTexCoord2fVertex3fvSUN := SDL_GL_GetProcAddress('glReplacementCodeuiTexCoord2fVertex3fvSUN'); - if not Assigned(glReplacementCodeuiTexCoord2fVertex3fvSUN) then Exit; - @glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN := SDL_GL_GetProcAddress('glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN'); - if not Assigned(glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN) then Exit; - @glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN := SDL_GL_GetProcAddress('glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN'); - if not Assigned(glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN) then Exit; - @glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN := SDL_GL_GetProcAddress('glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN'); - if not Assigned(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN) then Exit; - @glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN := SDL_GL_GetProcAddress('glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN'); - if not Assigned(glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_fragment_program: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_fragment_program', extstring) then - begin - @glProgramStringARB := SDL_GL_GetProcAddress('glProgramStringARB'); - if not Assigned(glProgramStringARB) then Exit; - @glBindProgramARB := SDL_GL_GetProcAddress('glBindProgramARB'); - if not Assigned(glBindProgramARB) then Exit; - @glDeleteProgramsARB := SDL_GL_GetProcAddress('glDeleteProgramsARB'); - if not Assigned(glDeleteProgramsARB) then Exit; - @glGenProgramsARB := SDL_GL_GetProcAddress('glGenProgramsARB'); - if not Assigned(glGenProgramsARB) then Exit; - @glProgramEnvParameter4dARB := SDL_GL_GetProcAddress('glProgramEnvParameter4dARB'); - if not Assigned(glProgramEnvParameter4dARB) then Exit; - @glProgramEnvParameter4dvARB := SDL_GL_GetProcAddress('glProgramEnvParameter4dvARB'); - if not Assigned(glProgramEnvParameter4dvARB) then Exit; - @glProgramEnvParameter4fARB := SDL_GL_GetProcAddress('glProgramEnvParameter4fARB'); - if not Assigned(glProgramEnvParameter4fARB) then Exit; - @glProgramEnvParameter4fvARB := SDL_GL_GetProcAddress('glProgramEnvParameter4fvARB'); - if not Assigned(glProgramEnvParameter4fvARB) then Exit; - @glProgramLocalParameter4dARB := SDL_GL_GetProcAddress('glProgramLocalParameter4dARB'); - if not Assigned(glProgramLocalParameter4dARB) then Exit; - @glProgramLocalParameter4dvARB := SDL_GL_GetProcAddress('glProgramLocalParameter4dvARB'); - if not Assigned(glProgramLocalParameter4dvARB) then Exit; - @glProgramLocalParameter4fARB := SDL_GL_GetProcAddress('glProgramLocalParameter4fARB'); - if not Assigned(glProgramLocalParameter4fARB) then Exit; - @glProgramLocalParameter4fvARB := SDL_GL_GetProcAddress('glProgramLocalParameter4fvARB'); - if not Assigned(glProgramLocalParameter4fvARB) then Exit; - @glGetProgramEnvParameterdvARB := SDL_GL_GetProcAddress('glGetProgramEnvParameterdvARB'); - if not Assigned(glGetProgramEnvParameterdvARB) then Exit; - @glGetProgramEnvParameterfvARB := SDL_GL_GetProcAddress('glGetProgramEnvParameterfvARB'); - if not Assigned(glGetProgramEnvParameterfvARB) then Exit; - @glGetProgramLocalParameterdvARB := SDL_GL_GetProcAddress('glGetProgramLocalParameterdvARB'); - if not Assigned(glGetProgramLocalParameterdvARB) then Exit; - @glGetProgramLocalParameterfvARB := SDL_GL_GetProcAddress('glGetProgramLocalParameterfvARB'); - if not Assigned(glGetProgramLocalParameterfvARB) then Exit; - @glGetProgramivARB := SDL_GL_GetProcAddress('glGetProgramivARB'); - if not Assigned(glGetProgramivARB) then Exit; - @glGetProgramStringARB := SDL_GL_GetProcAddress('glGetProgramStringARB'); - if not Assigned(glGetProgramStringARB) then Exit; - @glIsProgramARB := SDL_GL_GetProcAddress('glIsProgramARB'); - if not Assigned(glIsProgramARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_text_fragment_shader: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_text_fragment_shader', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_APPLE_client_storage: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_APPLE_client_storage', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_APPLE_element_array: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_APPLE_element_array', extstring) then - begin - @glElementPointerAPPLE := SDL_GL_GetProcAddress('glElementPointerAPPLE'); - if not Assigned(glElementPointerAPPLE) then Exit; - @glDrawElementArrayAPPLE := SDL_GL_GetProcAddress('glDrawElementArrayAPPLE'); - if not Assigned(glDrawElementArrayAPPLE) then Exit; - @glDrawRangeElementArrayAPPLE := SDL_GL_GetProcAddress('glDrawRangeElementArrayAPPLE'); - if not Assigned(glDrawRangeElementArrayAPPLE) then Exit; - @glMultiDrawElementArrayAPPLE := SDL_GL_GetProcAddress('glMultiDrawElementArrayAPPLE'); - if not Assigned(glMultiDrawElementArrayAPPLE) then Exit; - @glMultiDrawRangeElementArrayAPPLE := SDL_GL_GetProcAddress('glMultiDrawRangeElementArrayAPPLE'); - if not Assigned(glMultiDrawRangeElementArrayAPPLE) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_APPLE_fence: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_APPLE_fence', extstring) then - begin - @glGenFencesAPPLE := SDL_GL_GetProcAddress('glGenFencesAPPLE'); - if not Assigned(glGenFencesAPPLE) then Exit; - @glDeleteFencesAPPLE := SDL_GL_GetProcAddress('glDeleteFencesAPPLE'); - if not Assigned(glDeleteFencesAPPLE) then Exit; - @glSetFenceAPPLE := SDL_GL_GetProcAddress('glSetFenceAPPLE'); - if not Assigned(glSetFenceAPPLE) then Exit; - @glIsFenceAPPLE := SDL_GL_GetProcAddress('glIsFenceAPPLE'); - if not Assigned(glIsFenceAPPLE) then Exit; - @glTestFenceAPPLE := SDL_GL_GetProcAddress('glTestFenceAPPLE'); - if not Assigned(glTestFenceAPPLE) then Exit; - @glFinishFenceAPPLE := SDL_GL_GetProcAddress('glFinishFenceAPPLE'); - if not Assigned(glFinishFenceAPPLE) then Exit; - @glTestObjectAPPLE := SDL_GL_GetProcAddress('glTestObjectAPPLE'); - if not Assigned(glTestObjectAPPLE) then Exit; - @glFinishObjectAPPLE := SDL_GL_GetProcAddress('glFinishObjectAPPLE'); - if not Assigned(glFinishObjectAPPLE) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_APPLE_vertex_array_object: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_APPLE_vertex_array_object', extstring) then - begin - @glBindVertexArrayAPPLE := SDL_GL_GetProcAddress('glBindVertexArrayAPPLE'); - if not Assigned(glBindVertexArrayAPPLE) then Exit; - @glDeleteVertexArraysAPPLE := SDL_GL_GetProcAddress('glDeleteVertexArraysAPPLE'); - if not Assigned(glDeleteVertexArraysAPPLE) then Exit; - @glGenVertexArraysAPPLE := SDL_GL_GetProcAddress('glGenVertexArraysAPPLE'); - if not Assigned(glGenVertexArraysAPPLE) then Exit; - @glIsVertexArrayAPPLE := SDL_GL_GetProcAddress('glIsVertexArrayAPPLE'); - if not Assigned(glIsVertexArrayAPPLE) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_APPLE_vertex_array_range: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_APPLE_vertex_array_range', extstring) then - begin - @glVertexArrayRangeAPPLE := SDL_GL_GetProcAddress('glVertexArrayRangeAPPLE'); - if not Assigned(glVertexArrayRangeAPPLE) then Exit; - @glFlushVertexArrayRangeAPPLE := SDL_GL_GetProcAddress('glFlushVertexArrayRangeAPPLE'); - if not Assigned(glFlushVertexArrayRangeAPPLE) then Exit; - @glVertexArrayParameteriAPPLE := SDL_GL_GetProcAddress('glVertexArrayParameteriAPPLE'); - if not Assigned(glVertexArrayParameteriAPPLE) then Exit; - Result := TRUE; - end; - -end; - -{$IFDEF WINDOWS} -function Load_WGL_ARB_pixel_format: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_ARB_pixel_format', extstring) then - begin - @wglGetPixelFormatAttribivARB := SDL_GL_GetProcAddress('wglGetPixelFormatAttribivARB'); - if not Assigned(wglGetPixelFormatAttribivARB) then Exit; - @wglGetPixelFormatAttribfvARB := SDL_GL_GetProcAddress('wglGetPixelFormatAttribfvARB'); - if not Assigned(wglGetPixelFormatAttribfvARB) then Exit; - @wglChoosePixelFormatARB := SDL_GL_GetProcAddress('wglChoosePixelFormatARB'); - if not Assigned(wglChoosePixelFormatARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_ARB_make_current_read: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_ARB_make_current_read', extstring) then - begin - @wglMakeContextCurrentARB := SDL_GL_GetProcAddress('wglMakeContextCurrentARB'); - if not Assigned(wglMakeContextCurrentARB) then Exit; - @wglGetCurrentReadDCARB := SDL_GL_GetProcAddress('wglGetCurrentReadDCARB'); - if not Assigned(wglGetCurrentReadDCARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_ARB_pbuffer: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_ARB_pbuffer', extstring) then - begin - @wglCreatePbufferARB := SDL_GL_GetProcAddress('wglCreatePbufferARB'); - if not Assigned(wglCreatePbufferARB) then Exit; - @wglGetPbufferDCARB := SDL_GL_GetProcAddress('wglGetPbufferDCARB'); - if not Assigned(wglGetPbufferDCARB) then Exit; - @wglReleasePbufferDCARB := SDL_GL_GetProcAddress('wglReleasePbufferDCARB'); - if not Assigned(wglReleasePbufferDCARB) then Exit; - @wglDestroyPbufferARB := SDL_GL_GetProcAddress('wglDestroyPbufferARB'); - if not Assigned(wglDestroyPbufferARB) then Exit; - @wglQueryPbufferARB := SDL_GL_GetProcAddress('wglQueryPbufferARB'); - if not Assigned(wglQueryPbufferARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_EXT_swap_control: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_EXT_swap_control', extstring) then - begin - @wglSwapIntervalEXT := SDL_GL_GetProcAddress('wglSwapIntervalEXT'); - if not Assigned(wglSwapIntervalEXT) then Exit; - @wglGetSwapIntervalEXT := SDL_GL_GetProcAddress('wglGetSwapIntervalEXT'); - if not Assigned(wglGetSwapIntervalEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_ARB_render_texture: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_ARB_render_texture', extstring) then - begin - @wglBindTexImageARB := SDL_GL_GetProcAddress('wglBindTexImageARB'); - if not Assigned(wglBindTexImageARB) then Exit; - @wglReleaseTexImageARB := SDL_GL_GetProcAddress('wglReleaseTexImageARB'); - if not Assigned(wglReleaseTexImageARB) then Exit; - @wglSetPbufferAttribARB := SDL_GL_GetProcAddress('wglSetPbufferAttribARB'); - if not Assigned(wglSetPbufferAttribARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_EXT_extensions_string: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_EXT_extensions_string', extstring) then - begin - @wglGetExtensionsStringEXT := SDL_GL_GetProcAddress('wglGetExtensionsStringEXT'); - if not Assigned(wglGetExtensionsStringEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_EXT_make_current_read: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_EXT_make_current_read', extstring) then - begin - @wglMakeContextCurrentEXT := SDL_GL_GetProcAddress('wglMakeContextCurrentEXT'); - if not Assigned(wglMakeContextCurrentEXT) then Exit; - @wglGetCurrentReadDCEXT := SDL_GL_GetProcAddress('wglGetCurrentReadDCEXT'); - if not Assigned(wglGetCurrentReadDCEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_EXT_pbuffer: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_EXT_pbuffer', extstring) then - begin - @wglCreatePbufferEXT := SDL_GL_GetProcAddress('wglCreatePbufferEXT'); - if not Assigned(wglCreatePbufferEXT) then Exit; - @wglGetPbufferDCEXT := SDL_GL_GetProcAddress('wglGetPbufferDCEXT'); - if not Assigned(wglGetPbufferDCEXT) then Exit; - @wglReleasePbufferDCEXT := SDL_GL_GetProcAddress('wglReleasePbufferDCEXT'); - if not Assigned(wglReleasePbufferDCEXT) then Exit; - @wglDestroyPbufferEXT := SDL_GL_GetProcAddress('wglDestroyPbufferEXT'); - if not Assigned(wglDestroyPbufferEXT) then Exit; - @wglQueryPbufferEXT := SDL_GL_GetProcAddress('wglQueryPbufferEXT'); - if not Assigned(wglQueryPbufferEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_EXT_pixel_format: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_EXT_pixel_format', extstring) then - begin - @wglGetPixelFormatAttribivEXT := SDL_GL_GetProcAddress('wglGetPixelFormatAttribivEXT'); - if not Assigned(wglGetPixelFormatAttribivEXT) then Exit; - @wglGetPixelFormatAttribfvEXT := SDL_GL_GetProcAddress('wglGetPixelFormatAttribfvEXT'); - if not Assigned(wglGetPixelFormatAttribfvEXT) then Exit; - @wglChoosePixelFormatEXT := SDL_GL_GetProcAddress('wglChoosePixelFormatEXT'); - if not Assigned(wglChoosePixelFormatEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_I3D_digital_video_control: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_I3D_digital_video_control', extstring) then - begin - @wglGetDigitalVideoParametersI3D := SDL_GL_GetProcAddress('wglGetDigitalVideoParametersI3D'); - if not Assigned(wglGetDigitalVideoParametersI3D) then Exit; - @wglSetDigitalVideoParametersI3D := SDL_GL_GetProcAddress('wglSetDigitalVideoParametersI3D'); - if not Assigned(wglSetDigitalVideoParametersI3D) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_I3D_gamma: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_I3D_gamma', extstring) then - begin - @wglGetGammaTableParametersI3D := SDL_GL_GetProcAddress('wglGetGammaTableParametersI3D'); - if not Assigned(wglGetGammaTableParametersI3D) then Exit; - @wglSetGammaTableParametersI3D := SDL_GL_GetProcAddress('wglSetGammaTableParametersI3D'); - if not Assigned(wglSetGammaTableParametersI3D) then Exit; - @wglGetGammaTableI3D := SDL_GL_GetProcAddress('wglGetGammaTableI3D'); - if not Assigned(wglGetGammaTableI3D) then Exit; - @wglSetGammaTableI3D := SDL_GL_GetProcAddress('wglSetGammaTableI3D'); - if not Assigned(wglSetGammaTableI3D) then Exit; - Result := TRUE; - end; - -end; - -function Load_WGL_I3D_genlock: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_I3D_genlock', extstring) then - begin - @wglEnableGenlockI3D := SDL_GL_GetProcAddress('wglEnableGenlockI3D'); - if not Assigned(wglEnableGenlockI3D) then Exit; - @wglDisableGenlockI3D := SDL_GL_GetProcAddress('wglDisableGenlockI3D'); - if not Assigned(wglDisableGenlockI3D) then Exit; - @wglIsEnabledGenlockI3D := SDL_GL_GetProcAddress('wglIsEnabledGenlockI3D'); - if not Assigned(wglIsEnabledGenlockI3D) then Exit; - @wglGenlockSourceI3D := SDL_GL_GetProcAddress('wglGenlockSourceI3D'); - if not Assigned(wglGenlockSourceI3D) then Exit; - @wglGetGenlockSourceI3D := SDL_GL_GetProcAddress('wglGetGenlockSourceI3D'); - if not Assigned(wglGetGenlockSourceI3D) then Exit; - @wglGenlockSourceEdgeI3D := SDL_GL_GetProcAddress('wglGenlockSourceEdgeI3D'); - if not Assigned(wglGenlockSourceEdgeI3D) then Exit; - @wglGetGenlockSourceEdgeI3D := SDL_GL_GetProcAddress('wglGetGenlockSourceEdgeI3D'); - if not Assigned(wglGetGenlockSourceEdgeI3D) then Exit; - @wglGenlockSampleRateI3D := SDL_GL_GetProcAddress('wglGenlockSampleRateI3D'); - if not Assigned(wglGenlockSampleRateI3D) then Exit; - @wglGetGenlockSampleRateI3D := SDL_GL_GetProcAddress('wglGetGenlockSampleRateI3D'); - if not Assigned(wglGetGenlockSampleRateI3D) then Exit; - @wglGenlockSourceDelayI3D := SDL_GL_GetProcAddress('wglGenlockSourceDelayI3D'); - if not Assigned(wglGenlockSourceDelayI3D) then Exit; - @wglGetGenlockSourceDelayI3D := SDL_GL_GetProcAddress('wglGetGenlockSourceDelayI3D'); - if not Assigned(wglGetGenlockSourceDelayI3D) then Exit; - @wglQueryGenlockMaxSourceDelayI3D := SDL_GL_GetProcAddress('wglQueryGenlockMaxSourceDelayI3D'); - if not Assigned(wglQueryGenlockMaxSourceDelayI3D) then Exit; - Result := TRUE; - end; - -end; -{$ENDIF} - -function Load_GL_ARB_matrix_palette: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_matrix_palette', extstring) then - begin - @glCurrentPaletteMatrixARB := SDL_GL_GetProcAddress('glCurrentPaletteMatrixARB'); - if not Assigned(glCurrentPaletteMatrixARB) then Exit; - @glMatrixIndexubvARB := SDL_GL_GetProcAddress('glMatrixIndexubvARB'); - if not Assigned(glMatrixIndexubvARB) then Exit; - @glMatrixIndexusvARB := SDL_GL_GetProcAddress('glMatrixIndexusvARB'); - if not Assigned(glMatrixIndexusvARB) then Exit; - @glMatrixIndexuivARB := SDL_GL_GetProcAddress('glMatrixIndexuivARB'); - if not Assigned(glMatrixIndexuivARB) then Exit; - @glMatrixIndexPointerARB := SDL_GL_GetProcAddress('glMatrixIndexPointerARB'); - if not Assigned(glMatrixIndexPointerARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_element_array: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_element_array', extstring) then - begin - @glElementPointerNV := SDL_GL_GetProcAddress('glElementPointerNV'); - if not Assigned(glElementPointerNV) then Exit; - @glDrawElementArrayNV := SDL_GL_GetProcAddress('glDrawElementArrayNV'); - if not Assigned(glDrawElementArrayNV) then Exit; - @glDrawRangeElementArrayNV := SDL_GL_GetProcAddress('glDrawRangeElementArrayNV'); - if not Assigned(glDrawRangeElementArrayNV) then Exit; - @glMultiDrawElementArrayNV := SDL_GL_GetProcAddress('glMultiDrawElementArrayNV'); - if not Assigned(glMultiDrawElementArrayNV) then Exit; - @glMultiDrawRangeElementArrayNV := SDL_GL_GetProcAddress('glMultiDrawRangeElementArrayNV'); - if not Assigned(glMultiDrawRangeElementArrayNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_float_buffer: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_float_buffer', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_fragment_program: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_fragment_program', extstring) then - begin - @glProgramNamedParameter4fNV := SDL_GL_GetProcAddress('glProgramNamedParameter4fNV'); - if not Assigned(glProgramNamedParameter4fNV) then Exit; - @glProgramNamedParameter4dNV := SDL_GL_GetProcAddress('glProgramNamedParameter4dNV'); - if not Assigned(glProgramNamedParameter4dNV) then Exit; - @glGetProgramNamedParameterfvNV := SDL_GL_GetProcAddress('glGetProgramNamedParameterfvNV'); - if not Assigned(glGetProgramNamedParameterfvNV) then Exit; - @glGetProgramNamedParameterdvNV := SDL_GL_GetProcAddress('glGetProgramNamedParameterdvNV'); - if not Assigned(glGetProgramNamedParameterdvNV) then Exit; - @glProgramLocalParameter4dARB := SDL_GL_GetProcAddress('glProgramLocalParameter4dARB'); - if not Assigned(glProgramLocalParameter4dARB) then Exit; - @glProgramLocalParameter4dvARB := SDL_GL_GetProcAddress('glProgramLocalParameter4dvARB'); - if not Assigned(glProgramLocalParameter4dvARB) then Exit; - @glProgramLocalParameter4fARB := SDL_GL_GetProcAddress('glProgramLocalParameter4fARB'); - if not Assigned(glProgramLocalParameter4fARB) then Exit; - @glProgramLocalParameter4fvARB := SDL_GL_GetProcAddress('glProgramLocalParameter4fvARB'); - if not Assigned(glProgramLocalParameter4fvARB) then Exit; - @glGetProgramLocalParameterdvARB := SDL_GL_GetProcAddress('glGetProgramLocalParameterdvARB'); - if not Assigned(glGetProgramLocalParameterdvARB) then Exit; - @glGetProgramLocalParameterfvARB := SDL_GL_GetProcAddress('glGetProgramLocalParameterfvARB'); - if not Assigned(glGetProgramLocalParameterfvARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_primitive_restart: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_primitive_restart', extstring) then - begin - @glPrimitiveRestartNV := SDL_GL_GetProcAddress('glPrimitiveRestartNV'); - if not Assigned(glPrimitiveRestartNV) then Exit; - @glPrimitiveRestartIndexNV := SDL_GL_GetProcAddress('glPrimitiveRestartIndexNV'); - if not Assigned(glPrimitiveRestartIndexNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_vertex_program2: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_vertex_program2', extstring) then - begin - Result := TRUE; - end; - -end; - -{$IFDEF WINDOWS} -function Load_WGL_NV_render_texture_rectangle: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_NV_render_texture_rectangle', extstring) then - begin - Result := TRUE; - end; - -end; -{$ENDIF} - -function Load_GL_NV_pixel_data_range: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_pixel_data_range', extstring) then - begin - @glPixelDataRangeNV := SDL_GL_GetProcAddress('glPixelDataRangeNV'); - if not Assigned(glPixelDataRangeNV) then Exit; - @glFlushPixelDataRangeNV := SDL_GL_GetProcAddress('glFlushPixelDataRangeNV'); - if not Assigned(glFlushPixelDataRangeNV) then Exit; - {$IFDEF WINDOWS} - @wglAllocateMemoryNV := SDL_GL_GetProcAddress('wglAllocateMemoryNV'); - if not Assigned(wglAllocateMemoryNV) then Exit; - @wglFreeMemoryNV := SDL_GL_GetProcAddress('wglFreeMemoryNV'); - if not Assigned(wglFreeMemoryNV) then Exit; - {$ENDIF} - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_rectangle: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_rectangle', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_S3_s3tc: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_S3_s3tc', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ATI_draw_buffers: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_draw_buffers', extstring) then - begin - @glDrawBuffersATI := SDL_GL_GetProcAddress('glDrawBuffersATI'); - if not Assigned(glDrawBuffersATI) then Exit; - Result := TRUE; - end; - -end; - -{$IFDEF WINDOWS} -function Load_WGL_ATI_pixel_format_float: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - @wglGetExtensionsStringARB := SDL_GL_GetProcAddress('wglGetExtensionsStringARB'); - if not Assigned(wglGetExtensionsStringARB) then Exit; - extstring := wglGetExtensionsStringARB(wglGetCurrentDC); - - if glext_ExtensionSupported('WGL_ATI_pixel_format_float', extstring) then - begin - Result := TRUE; - end; - -end; -{$ENDIF} - -function Load_GL_ATI_texture_env_combine3: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_texture_env_combine3', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ATI_texture_float: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_texture_float', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_texture_expand_normal: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_texture_expand_normal', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_half_float: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_half_float', extstring) then - begin - @glVertex2hNV := SDL_GL_GetProcAddress('glVertex2hNV'); - if not Assigned(glVertex2hNV) then Exit; - @glVertex2hvNV := SDL_GL_GetProcAddress('glVertex2hvNV'); - if not Assigned(glVertex2hvNV) then Exit; - @glVertex3hNV := SDL_GL_GetProcAddress('glVertex3hNV'); - if not Assigned(glVertex3hNV) then Exit; - @glVertex3hvNV := SDL_GL_GetProcAddress('glVertex3hvNV'); - if not Assigned(glVertex3hvNV) then Exit; - @glVertex4hNV := SDL_GL_GetProcAddress('glVertex4hNV'); - if not Assigned(glVertex4hNV) then Exit; - @glVertex4hvNV := SDL_GL_GetProcAddress('glVertex4hvNV'); - if not Assigned(glVertex4hvNV) then Exit; - @glNormal3hNV := SDL_GL_GetProcAddress('glNormal3hNV'); - if not Assigned(glNormal3hNV) then Exit; - @glNormal3hvNV := SDL_GL_GetProcAddress('glNormal3hvNV'); - if not Assigned(glNormal3hvNV) then Exit; - @glColor3hNV := SDL_GL_GetProcAddress('glColor3hNV'); - if not Assigned(glColor3hNV) then Exit; - @glColor3hvNV := SDL_GL_GetProcAddress('glColor3hvNV'); - if not Assigned(glColor3hvNV) then Exit; - @glColor4hNV := SDL_GL_GetProcAddress('glColor4hNV'); - if not Assigned(glColor4hNV) then Exit; - @glColor4hvNV := SDL_GL_GetProcAddress('glColor4hvNV'); - if not Assigned(glColor4hvNV) then Exit; - @glTexCoord1hNV := SDL_GL_GetProcAddress('glTexCoord1hNV'); - if not Assigned(glTexCoord1hNV) then Exit; - @glTexCoord1hvNV := SDL_GL_GetProcAddress('glTexCoord1hvNV'); - if not Assigned(glTexCoord1hvNV) then Exit; - @glTexCoord2hNV := SDL_GL_GetProcAddress('glTexCoord2hNV'); - if not Assigned(glTexCoord2hNV) then Exit; - @glTexCoord2hvNV := SDL_GL_GetProcAddress('glTexCoord2hvNV'); - if not Assigned(glTexCoord2hvNV) then Exit; - @glTexCoord3hNV := SDL_GL_GetProcAddress('glTexCoord3hNV'); - if not Assigned(glTexCoord3hNV) then Exit; - @glTexCoord3hvNV := SDL_GL_GetProcAddress('glTexCoord3hvNV'); - if not Assigned(glTexCoord3hvNV) then Exit; - @glTexCoord4hNV := SDL_GL_GetProcAddress('glTexCoord4hNV'); - if not Assigned(glTexCoord4hNV) then Exit; - @glTexCoord4hvNV := SDL_GL_GetProcAddress('glTexCoord4hvNV'); - if not Assigned(glTexCoord4hvNV) then Exit; - @glMultiTexCoord1hNV := SDL_GL_GetProcAddress('glMultiTexCoord1hNV'); - if not Assigned(glMultiTexCoord1hNV) then Exit; - @glMultiTexCoord1hvNV := SDL_GL_GetProcAddress('glMultiTexCoord1hvNV'); - if not Assigned(glMultiTexCoord1hvNV) then Exit; - @glMultiTexCoord2hNV := SDL_GL_GetProcAddress('glMultiTexCoord2hNV'); - if not Assigned(glMultiTexCoord2hNV) then Exit; - @glMultiTexCoord2hvNV := SDL_GL_GetProcAddress('glMultiTexCoord2hvNV'); - if not Assigned(glMultiTexCoord2hvNV) then Exit; - @glMultiTexCoord3hNV := SDL_GL_GetProcAddress('glMultiTexCoord3hNV'); - if not Assigned(glMultiTexCoord3hNV) then Exit; - @glMultiTexCoord3hvNV := SDL_GL_GetProcAddress('glMultiTexCoord3hvNV'); - if not Assigned(glMultiTexCoord3hvNV) then Exit; - @glMultiTexCoord4hNV := SDL_GL_GetProcAddress('glMultiTexCoord4hNV'); - if not Assigned(glMultiTexCoord4hNV) then Exit; - @glMultiTexCoord4hvNV := SDL_GL_GetProcAddress('glMultiTexCoord4hvNV'); - if not Assigned(glMultiTexCoord4hvNV) then Exit; - @glFogCoordhNV := SDL_GL_GetProcAddress('glFogCoordhNV'); - if not Assigned(glFogCoordhNV) then Exit; - @glFogCoordhvNV := SDL_GL_GetProcAddress('glFogCoordhvNV'); - if not Assigned(glFogCoordhvNV) then Exit; - @glSecondaryColor3hNV := SDL_GL_GetProcAddress('glSecondaryColor3hNV'); - if not Assigned(glSecondaryColor3hNV) then Exit; - @glSecondaryColor3hvNV := SDL_GL_GetProcAddress('glSecondaryColor3hvNV'); - if not Assigned(glSecondaryColor3hvNV) then Exit; - @glVertexWeighthNV := SDL_GL_GetProcAddress('glVertexWeighthNV'); - if not Assigned(glVertexWeighthNV) then Exit; - @glVertexWeighthvNV := SDL_GL_GetProcAddress('glVertexWeighthvNV'); - if not Assigned(glVertexWeighthvNV) then Exit; - @glVertexAttrib1hNV := SDL_GL_GetProcAddress('glVertexAttrib1hNV'); - if not Assigned(glVertexAttrib1hNV) then Exit; - @glVertexAttrib1hvNV := SDL_GL_GetProcAddress('glVertexAttrib1hvNV'); - if not Assigned(glVertexAttrib1hvNV) then Exit; - @glVertexAttrib2hNV := SDL_GL_GetProcAddress('glVertexAttrib2hNV'); - if not Assigned(glVertexAttrib2hNV) then Exit; - @glVertexAttrib2hvNV := SDL_GL_GetProcAddress('glVertexAttrib2hvNV'); - if not Assigned(glVertexAttrib2hvNV) then Exit; - @glVertexAttrib3hNV := SDL_GL_GetProcAddress('glVertexAttrib3hNV'); - if not Assigned(glVertexAttrib3hNV) then Exit; - @glVertexAttrib3hvNV := SDL_GL_GetProcAddress('glVertexAttrib3hvNV'); - if not Assigned(glVertexAttrib3hvNV) then Exit; - @glVertexAttrib4hNV := SDL_GL_GetProcAddress('glVertexAttrib4hNV'); - if not Assigned(glVertexAttrib4hNV) then Exit; - @glVertexAttrib4hvNV := SDL_GL_GetProcAddress('glVertexAttrib4hvNV'); - if not Assigned(glVertexAttrib4hvNV) then Exit; - @glVertexAttribs1hvNV := SDL_GL_GetProcAddress('glVertexAttribs1hvNV'); - if not Assigned(glVertexAttribs1hvNV) then Exit; - @glVertexAttribs2hvNV := SDL_GL_GetProcAddress('glVertexAttribs2hvNV'); - if not Assigned(glVertexAttribs2hvNV) then Exit; - @glVertexAttribs3hvNV := SDL_GL_GetProcAddress('glVertexAttribs3hvNV'); - if not Assigned(glVertexAttribs3hvNV) then Exit; - @glVertexAttribs4hvNV := SDL_GL_GetProcAddress('glVertexAttribs4hvNV'); - if not Assigned(glVertexAttribs4hvNV) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_map_object_buffer: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_map_object_buffer', extstring) then - begin - @glMapObjectBufferATI := SDL_GL_GetProcAddress('glMapObjectBufferATI'); - if not Assigned(glMapObjectBufferATI) then Exit; - @glUnmapObjectBufferATI := SDL_GL_GetProcAddress('glUnmapObjectBufferATI'); - if not Assigned(glUnmapObjectBufferATI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_separate_stencil: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_separate_stencil', extstring) then - begin - @glStencilOpSeparateATI := SDL_GL_GetProcAddress('glStencilOpSeparateATI'); - if not Assigned(glStencilOpSeparateATI) then Exit; - @glStencilFuncSeparateATI := SDL_GL_GetProcAddress('glStencilFuncSeparateATI'); - if not Assigned(glStencilFuncSeparateATI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ATI_vertex_attrib_array_object: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ATI_vertex_attrib_array_object', extstring) then - begin - @glVertexAttribArrayObjectATI := SDL_GL_GetProcAddress('glVertexAttribArrayObjectATI'); - if not Assigned(glVertexAttribArrayObjectATI) then Exit; - @glGetVertexAttribArrayObjectfvATI := SDL_GL_GetProcAddress('glGetVertexAttribArrayObjectfvATI'); - if not Assigned(glGetVertexAttribArrayObjectfvATI) then Exit; - @glGetVertexAttribArrayObjectivATI := SDL_GL_GetProcAddress('glGetVertexAttribArrayObjectivATI'); - if not Assigned(glGetVertexAttribArrayObjectivATI) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_vertex_buffer_object: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_vertex_buffer_object', extstring) then - begin - @glBindBufferARB := SDL_GL_GetProcAddress('glBindBufferARB'); - if not Assigned(glBindBufferARB) then Exit; - @glDeleteBuffersARB := SDL_GL_GetProcAddress('glDeleteBuffersARB'); - if not Assigned(glDeleteBuffersARB) then Exit; - @glGenBuffersARB := SDL_GL_GetProcAddress('glGenBuffersARB'); - if not Assigned(glGenBuffersARB) then Exit; - @glIsBufferARB := SDL_GL_GetProcAddress('glIsBufferARB'); - if not Assigned(glIsBufferARB) then Exit; - @glBufferDataARB := SDL_GL_GetProcAddress('glBufferDataARB'); - if not Assigned(glBufferDataARB) then Exit; - @glBufferSubDataARB := SDL_GL_GetProcAddress('glBufferSubDataARB'); - if not Assigned(glBufferSubDataARB) then Exit; - @glGetBufferSubDataARB := SDL_GL_GetProcAddress('glGetBufferSubDataARB'); - if not Assigned(glGetBufferSubDataARB) then Exit; - @glMapBufferARB := SDL_GL_GetProcAddress('glMapBufferARB'); - if not Assigned(glMapBufferARB) then Exit; - @glUnmapBufferARB := SDL_GL_GetProcAddress('glUnmapBufferARB'); - if not Assigned(glUnmapBufferARB) then Exit; - @glGetBufferParameterivARB := SDL_GL_GetProcAddress('glGetBufferParameterivARB'); - if not Assigned(glGetBufferParameterivARB) then Exit; - @glGetBufferPointervARB := SDL_GL_GetProcAddress('glGetBufferPointervARB'); - if not Assigned(glGetBufferPointervARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_occlusion_query: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_occlusion_query', extstring) then - begin - @glGenQueriesARB := SDL_GL_GetProcAddress('glGenQueriesARB'); - if not Assigned(glGenQueriesARB) then Exit; - @glDeleteQueriesARB := SDL_GL_GetProcAddress('glDeleteQueriesARB'); - if not Assigned(glDeleteQueriesARB) then Exit; - @glIsQueryARB := SDL_GL_GetProcAddress('glIsQueryARB'); - if not Assigned(glIsQueryARB) then Exit; - @glBeginQueryARB := SDL_GL_GetProcAddress('glBeginQueryARB'); - if not Assigned(glBeginQueryARB) then Exit; - @glEndQueryARB := SDL_GL_GetProcAddress('glEndQueryARB'); - if not Assigned(glEndQueryARB) then Exit; - @glGetQueryivARB := SDL_GL_GetProcAddress('glGetQueryivARB'); - if not Assigned(glGetQueryivARB) then Exit; - @glGetQueryObjectivARB := SDL_GL_GetProcAddress('glGetQueryObjectivARB'); - if not Assigned(glGetQueryObjectivARB) then Exit; - @glGetQueryObjectuivARB := SDL_GL_GetProcAddress('glGetQueryObjectuivARB'); - if not Assigned(glGetQueryObjectuivARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_shader_objects: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_shader_objects', extstring) then - begin - @glDeleteObjectARB := SDL_GL_GetProcAddress('glDeleteObjectARB'); - if not Assigned(glDeleteObjectARB) then Exit; - @glGetHandleARB := SDL_GL_GetProcAddress('glGetHandleARB'); - if not Assigned(glGetHandleARB) then Exit; - @glDetachObjectARB := SDL_GL_GetProcAddress('glDetachObjectARB'); - if not Assigned(glDetachObjectARB) then Exit; - @glCreateShaderObjectARB := SDL_GL_GetProcAddress('glCreateShaderObjectARB'); - if not Assigned(glCreateShaderObjectARB) then Exit; - @glShaderSourceARB := SDL_GL_GetProcAddress('glShaderSourceARB'); - if not Assigned(glShaderSourceARB) then Exit; - @glCompileShaderARB := SDL_GL_GetProcAddress('glCompileShaderARB'); - if not Assigned(glCompileShaderARB) then Exit; - @glCreateProgramObjectARB := SDL_GL_GetProcAddress('glCreateProgramObjectARB'); - if not Assigned(glCreateProgramObjectARB) then Exit; - @glAttachObjectARB := SDL_GL_GetProcAddress('glAttachObjectARB'); - if not Assigned(glAttachObjectARB) then Exit; - @glLinkProgramARB := SDL_GL_GetProcAddress('glLinkProgramARB'); - if not Assigned(glLinkProgramARB) then Exit; - @glUseProgramObjectARB := SDL_GL_GetProcAddress('glUseProgramObjectARB'); - if not Assigned(glUseProgramObjectARB) then Exit; - @glValidateProgramARB := SDL_GL_GetProcAddress('glValidateProgramARB'); - if not Assigned(glValidateProgramARB) then Exit; - @glUniform1fARB := SDL_GL_GetProcAddress('glUniform1fARB'); - if not Assigned(glUniform1fARB) then Exit; - @glUniform2fARB := SDL_GL_GetProcAddress('glUniform2fARB'); - if not Assigned(glUniform2fARB) then Exit; - @glUniform3fARB := SDL_GL_GetProcAddress('glUniform3fARB'); - if not Assigned(glUniform3fARB) then Exit; - @glUniform4fARB := SDL_GL_GetProcAddress('glUniform4fARB'); - if not Assigned(glUniform4fARB) then Exit; - @glUniform1iARB := SDL_GL_GetProcAddress('glUniform1iARB'); - if not Assigned(glUniform1iARB) then Exit; - @glUniform2iARB := SDL_GL_GetProcAddress('glUniform2iARB'); - if not Assigned(glUniform2iARB) then Exit; - @glUniform3iARB := SDL_GL_GetProcAddress('glUniform3iARB'); - if not Assigned(glUniform3iARB) then Exit; - @glUniform4iARB := SDL_GL_GetProcAddress('glUniform4iARB'); - if not Assigned(glUniform4iARB) then Exit; - @glUniform1fvARB := SDL_GL_GetProcAddress('glUniform1fvARB'); - if not Assigned(glUniform1fvARB) then Exit; - @glUniform2fvARB := SDL_GL_GetProcAddress('glUniform2fvARB'); - if not Assigned(glUniform2fvARB) then Exit; - @glUniform3fvARB := SDL_GL_GetProcAddress('glUniform3fvARB'); - if not Assigned(glUniform3fvARB) then Exit; - @glUniform4fvARB := SDL_GL_GetProcAddress('glUniform4fvARB'); - if not Assigned(glUniform4fvARB) then Exit; - @glUniform1ivARB := SDL_GL_GetProcAddress('glUniform1ivARB'); - if not Assigned(glUniform1ivARB) then Exit; - @glUniform2ivARB := SDL_GL_GetProcAddress('glUniform2ivARB'); - if not Assigned(glUniform2ivARB) then Exit; - @glUniform3ivARB := SDL_GL_GetProcAddress('glUniform3ivARB'); - if not Assigned(glUniform3ivARB) then Exit; - @glUniform4ivARB := SDL_GL_GetProcAddress('glUniform4ivARB'); - if not Assigned(glUniform4ivARB) then Exit; - @glUniformMatrix2fvARB := SDL_GL_GetProcAddress('glUniformMatrix2fvARB'); - if not Assigned(glUniformMatrix2fvARB) then Exit; - @glUniformMatrix3fvARB := SDL_GL_GetProcAddress('glUniformMatrix3fvARB'); - if not Assigned(glUniformMatrix3fvARB) then Exit; - @glUniformMatrix4fvARB := SDL_GL_GetProcAddress('glUniformMatrix4fvARB'); - if not Assigned(glUniformMatrix4fvARB) then Exit; - @glGetObjectParameterfvARB := SDL_GL_GetProcAddress('glGetObjectParameterfvARB'); - if not Assigned(glGetObjectParameterfvARB) then Exit; - @glGetObjectParameterivARB := SDL_GL_GetProcAddress('glGetObjectParameterivARB'); - if not Assigned(glGetObjectParameterivARB) then Exit; - @glGetInfoLogARB := SDL_GL_GetProcAddress('glGetInfoLogARB'); - if not Assigned(glGetInfoLogARB) then Exit; - @glGetAttachedObjectsARB := SDL_GL_GetProcAddress('glGetAttachedObjectsARB'); - if not Assigned(glGetAttachedObjectsARB) then Exit; - @glGetUniformLocationARB := SDL_GL_GetProcAddress('glGetUniformLocationARB'); - if not Assigned(glGetUniformLocationARB) then Exit; - @glGetActiveUniformARB := SDL_GL_GetProcAddress('glGetActiveUniformARB'); - if not Assigned(glGetActiveUniformARB) then Exit; - @glGetUniformfvARB := SDL_GL_GetProcAddress('glGetUniformfvARB'); - if not Assigned(glGetUniformfvARB) then Exit; - @glGetUniformivARB := SDL_GL_GetProcAddress('glGetUniformivARB'); - if not Assigned(glGetUniformivARB) then Exit; - @glGetShaderSourceARB := SDL_GL_GetProcAddress('glGetShaderSourceARB'); - if not Assigned(glGetShaderSourceARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_vertex_shader: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_vertex_shader', extstring) then - begin - @glVertexAttrib1fARB := SDL_GL_GetProcAddress('glVertexAttrib1fARB'); - if not Assigned(glVertexAttrib1fARB) then Exit; - @glVertexAttrib1sARB := SDL_GL_GetProcAddress('glVertexAttrib1sARB'); - if not Assigned(glVertexAttrib1sARB) then Exit; - @glVertexAttrib1dARB := SDL_GL_GetProcAddress('glVertexAttrib1dARB'); - if not Assigned(glVertexAttrib1dARB) then Exit; - @glVertexAttrib2fARB := SDL_GL_GetProcAddress('glVertexAttrib2fARB'); - if not Assigned(glVertexAttrib2fARB) then Exit; - @glVertexAttrib2sARB := SDL_GL_GetProcAddress('glVertexAttrib2sARB'); - if not Assigned(glVertexAttrib2sARB) then Exit; - @glVertexAttrib2dARB := SDL_GL_GetProcAddress('glVertexAttrib2dARB'); - if not Assigned(glVertexAttrib2dARB) then Exit; - @glVertexAttrib3fARB := SDL_GL_GetProcAddress('glVertexAttrib3fARB'); - if not Assigned(glVertexAttrib3fARB) then Exit; - @glVertexAttrib3sARB := SDL_GL_GetProcAddress('glVertexAttrib3sARB'); - if not Assigned(glVertexAttrib3sARB) then Exit; - @glVertexAttrib3dARB := SDL_GL_GetProcAddress('glVertexAttrib3dARB'); - if not Assigned(glVertexAttrib3dARB) then Exit; - @glVertexAttrib4fARB := SDL_GL_GetProcAddress('glVertexAttrib4fARB'); - if not Assigned(glVertexAttrib4fARB) then Exit; - @glVertexAttrib4sARB := SDL_GL_GetProcAddress('glVertexAttrib4sARB'); - if not Assigned(glVertexAttrib4sARB) then Exit; - @glVertexAttrib4dARB := SDL_GL_GetProcAddress('glVertexAttrib4dARB'); - if not Assigned(glVertexAttrib4dARB) then Exit; - @glVertexAttrib4NubARB := SDL_GL_GetProcAddress('glVertexAttrib4NubARB'); - if not Assigned(glVertexAttrib4NubARB) then Exit; - @glVertexAttrib1fvARB := SDL_GL_GetProcAddress('glVertexAttrib1fvARB'); - if not Assigned(glVertexAttrib1fvARB) then Exit; - @glVertexAttrib1svARB := SDL_GL_GetProcAddress('glVertexAttrib1svARB'); - if not Assigned(glVertexAttrib1svARB) then Exit; - @glVertexAttrib1dvARB := SDL_GL_GetProcAddress('glVertexAttrib1dvARB'); - if not Assigned(glVertexAttrib1dvARB) then Exit; - @glVertexAttrib2fvARB := SDL_GL_GetProcAddress('glVertexAttrib2fvARB'); - if not Assigned(glVertexAttrib2fvARB) then Exit; - @glVertexAttrib2svARB := SDL_GL_GetProcAddress('glVertexAttrib2svARB'); - if not Assigned(glVertexAttrib2svARB) then Exit; - @glVertexAttrib2dvARB := SDL_GL_GetProcAddress('glVertexAttrib2dvARB'); - if not Assigned(glVertexAttrib2dvARB) then Exit; - @glVertexAttrib3fvARB := SDL_GL_GetProcAddress('glVertexAttrib3fvARB'); - if not Assigned(glVertexAttrib3fvARB) then Exit; - @glVertexAttrib3svARB := SDL_GL_GetProcAddress('glVertexAttrib3svARB'); - if not Assigned(glVertexAttrib3svARB) then Exit; - @glVertexAttrib3dvARB := SDL_GL_GetProcAddress('glVertexAttrib3dvARB'); - if not Assigned(glVertexAttrib3dvARB) then Exit; - @glVertexAttrib4fvARB := SDL_GL_GetProcAddress('glVertexAttrib4fvARB'); - if not Assigned(glVertexAttrib4fvARB) then Exit; - @glVertexAttrib4svARB := SDL_GL_GetProcAddress('glVertexAttrib4svARB'); - if not Assigned(glVertexAttrib4svARB) then Exit; - @glVertexAttrib4dvARB := SDL_GL_GetProcAddress('glVertexAttrib4dvARB'); - if not Assigned(glVertexAttrib4dvARB) then Exit; - @glVertexAttrib4ivARB := SDL_GL_GetProcAddress('glVertexAttrib4ivARB'); - if not Assigned(glVertexAttrib4ivARB) then Exit; - @glVertexAttrib4bvARB := SDL_GL_GetProcAddress('glVertexAttrib4bvARB'); - if not Assigned(glVertexAttrib4bvARB) then Exit; - @glVertexAttrib4ubvARB := SDL_GL_GetProcAddress('glVertexAttrib4ubvARB'); - if not Assigned(glVertexAttrib4ubvARB) then Exit; - @glVertexAttrib4usvARB := SDL_GL_GetProcAddress('glVertexAttrib4usvARB'); - if not Assigned(glVertexAttrib4usvARB) then Exit; - @glVertexAttrib4uivARB := SDL_GL_GetProcAddress('glVertexAttrib4uivARB'); - if not Assigned(glVertexAttrib4uivARB) then Exit; - @glVertexAttrib4NbvARB := SDL_GL_GetProcAddress('glVertexAttrib4NbvARB'); - if not Assigned(glVertexAttrib4NbvARB) then Exit; - @glVertexAttrib4NsvARB := SDL_GL_GetProcAddress('glVertexAttrib4NsvARB'); - if not Assigned(glVertexAttrib4NsvARB) then Exit; - @glVertexAttrib4NivARB := SDL_GL_GetProcAddress('glVertexAttrib4NivARB'); - if not Assigned(glVertexAttrib4NivARB) then Exit; - @glVertexAttrib4NubvARB := SDL_GL_GetProcAddress('glVertexAttrib4NubvARB'); - if not Assigned(glVertexAttrib4NubvARB) then Exit; - @glVertexAttrib4NusvARB := SDL_GL_GetProcAddress('glVertexAttrib4NusvARB'); - if not Assigned(glVertexAttrib4NusvARB) then Exit; - @glVertexAttrib4NuivARB := SDL_GL_GetProcAddress('glVertexAttrib4NuivARB'); - if not Assigned(glVertexAttrib4NuivARB) then Exit; - @glVertexAttribPointerARB := SDL_GL_GetProcAddress('glVertexAttribPointerARB'); - if not Assigned(glVertexAttribPointerARB) then Exit; - @glEnableVertexAttribArrayARB := SDL_GL_GetProcAddress('glEnableVertexAttribArrayARB'); - if not Assigned(glEnableVertexAttribArrayARB) then Exit; - @glDisableVertexAttribArrayARB := SDL_GL_GetProcAddress('glDisableVertexAttribArrayARB'); - if not Assigned(glDisableVertexAttribArrayARB) then Exit; - @glBindAttribLocationARB := SDL_GL_GetProcAddress('glBindAttribLocationARB'); - if not Assigned(glBindAttribLocationARB) then Exit; - @glGetActiveAttribARB := SDL_GL_GetProcAddress('glGetActiveAttribARB'); - if not Assigned(glGetActiveAttribARB) then Exit; - @glGetAttribLocationARB := SDL_GL_GetProcAddress('glGetAttribLocationARB'); - if not Assigned(glGetAttribLocationARB) then Exit; - @glGetVertexAttribdvARB := SDL_GL_GetProcAddress('glGetVertexAttribdvARB'); - if not Assigned(glGetVertexAttribdvARB) then Exit; - @glGetVertexAttribfvARB := SDL_GL_GetProcAddress('glGetVertexAttribfvARB'); - if not Assigned(glGetVertexAttribfvARB) then Exit; - @glGetVertexAttribivARB := SDL_GL_GetProcAddress('glGetVertexAttribivARB'); - if not Assigned(glGetVertexAttribivARB) then Exit; - @glGetVertexAttribPointervARB := SDL_GL_GetProcAddress('glGetVertexAttribPointervARB'); - if not Assigned(glGetVertexAttribPointervARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_fragment_shader: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_fragment_shader', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_shading_language_100: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_shading_language_100', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_non_power_of_two: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_texture_non_power_of_two', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_point_sprite: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_point_sprite', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_depth_bounds_test: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_depth_bounds_test', extstring) then - begin - @glDepthBoundsEXT := SDL_GL_GetProcAddress('glDepthBoundsEXT'); - if not Assigned(glDepthBoundsEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_secondary_color: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_secondary_color', extstring) then - begin - @glSecondaryColor3bEXT := SDL_GL_GetProcAddress('glSecondaryColor3bEXT'); - if not Assigned(glSecondaryColor3bEXT) then Exit; - @glSecondaryColor3sEXT := SDL_GL_GetProcAddress('glSecondaryColor3sEXT'); - if not Assigned(glSecondaryColor3sEXT) then Exit; - @glSecondaryColor3iEXT := SDL_GL_GetProcAddress('glSecondaryColor3iEXT'); - if not Assigned(glSecondaryColor3iEXT) then Exit; - @glSecondaryColor3fEXT := SDL_GL_GetProcAddress('glSecondaryColor3fEXT'); - if not Assigned(glSecondaryColor3fEXT) then Exit; - @glSecondaryColor3dEXT := SDL_GL_GetProcAddress('glSecondaryColor3dEXT'); - if not Assigned(glSecondaryColor3dEXT) then Exit; - @glSecondaryColor3ubEXT := SDL_GL_GetProcAddress('glSecondaryColor3ubEXT'); - if not Assigned(glSecondaryColor3ubEXT) then Exit; - @glSecondaryColor3usEXT := SDL_GL_GetProcAddress('glSecondaryColor3usEXT'); - if not Assigned(glSecondaryColor3usEXT) then Exit; - @glSecondaryColor3uiEXT := SDL_GL_GetProcAddress('glSecondaryColor3uiEXT'); - if not Assigned(glSecondaryColor3uiEXT) then Exit; - @glSecondaryColor3bvEXT := SDL_GL_GetProcAddress('glSecondaryColor3bvEXT'); - if not Assigned(glSecondaryColor3bvEXT) then Exit; - @glSecondaryColor3svEXT := SDL_GL_GetProcAddress('glSecondaryColor3svEXT'); - if not Assigned(glSecondaryColor3svEXT) then Exit; - @glSecondaryColor3ivEXT := SDL_GL_GetProcAddress('glSecondaryColor3ivEXT'); - if not Assigned(glSecondaryColor3ivEXT) then Exit; - @glSecondaryColor3fvEXT := SDL_GL_GetProcAddress('glSecondaryColor3fvEXT'); - if not Assigned(glSecondaryColor3fvEXT) then Exit; - @glSecondaryColor3dvEXT := SDL_GL_GetProcAddress('glSecondaryColor3dvEXT'); - if not Assigned(glSecondaryColor3dvEXT) then Exit; - @glSecondaryColor3ubvEXT := SDL_GL_GetProcAddress('glSecondaryColor3ubvEXT'); - if not Assigned(glSecondaryColor3ubvEXT) then Exit; - @glSecondaryColor3usvEXT := SDL_GL_GetProcAddress('glSecondaryColor3usvEXT'); - if not Assigned(glSecondaryColor3usvEXT) then Exit; - @glSecondaryColor3uivEXT := SDL_GL_GetProcAddress('glSecondaryColor3uivEXT'); - if not Assigned(glSecondaryColor3uivEXT) then Exit; - @glSecondaryColorPointerEXT := SDL_GL_GetProcAddress('glSecondaryColorPointerEXT'); - if not Assigned(glSecondaryColorPointerEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_mirror_clamp: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_texture_mirror_clamp', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_blend_equation_separate: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_blend_equation_separate', extstring) then - begin - @glBlendEquationSeparateEXT := SDL_GL_GetProcAddress('glBlendEquationSeparateEXT'); - if not Assigned(glBlendEquationSeparateEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_MESA_pack_invert: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_MESA_pack_invert', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_MESA_ycbcr_texture: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_MESA_ycbcr_texture', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_fragment_program_shadow: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_ARB_fragment_program_shadow', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_fog_coord: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_fog_coord', extstring) then - begin - @glFogCoordfEXT := SDL_GL_GetProcAddress('glFogCoordfEXT'); - if not Assigned(glFogCoordfEXT) then Exit; - @glFogCoorddEXT := SDL_GL_GetProcAddress('glFogCoorddEXT'); - if not Assigned(glFogCoorddEXT) then Exit; - @glFogCoordfvEXT := SDL_GL_GetProcAddress('glFogCoordfvEXT'); - if not Assigned(glFogCoordfvEXT) then Exit; - @glFogCoorddvEXT := SDL_GL_GetProcAddress('glFogCoorddvEXT'); - if not Assigned(glFogCoorddvEXT) then Exit; - @glFogCoordPointerEXT := SDL_GL_GetProcAddress('glFogCoordPointerEXT'); - if not Assigned(glFogCoordPointerEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_NV_fragment_program_option: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_fragment_program_option', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_pixel_buffer_object: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_EXT_pixel_buffer_object', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_fragment_program2: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_fragment_program2', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_vertex_program2_option: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_vertex_program2_option', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_NV_vertex_program3: Boolean; -var - extstring : PChar; -begin - - Result := FALSE; - extstring := glGetString( GL_EXTENSIONS ); - - if glext_ExtensionSupported('GL_NV_vertex_program3', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_draw_buffers: Boolean; -var - extstring: PChar; -begin - - Result := FALSE; - extstring := glGetString(GL_EXTENSIONS); - - if glext_ExtensionSupported('GL_ARB_draw_buffers', extstring) then - begin - glDrawBuffersARB := SDL_GL_GetProcAddress('glDrawBuffersARB'); - if not Assigned(glDrawBuffersARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_rectangle: Boolean; -var - extstring: PChar; -begin - - Result := FALSE; - extstring := glGetString(GL_EXTENSIONS); - - if glext_ExtensionSupported('GL_ARB_texture_rectangle', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_color_buffer_float: Boolean; -var - extstring: PChar; -begin - - Result := FALSE; - extstring := glGetString(GL_EXTENSIONS); - - if glext_ExtensionSupported('GL_ARB_color_buffer_float', extstring) then - begin - glClampColorARB := SDL_GL_GetProcAddress('glClampColorARB'); - if not Assigned(glClampColorARB) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_ARB_half_float_pixel: Boolean; -var - extstring: PChar; -begin - - Result := FALSE; - extstring := glGetString(GL_EXTENSIONS); - - if glext_ExtensionSupported('GL_ARB_half_float_pixel', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_texture_float: Boolean; -var - extstring: PChar; -begin - - Result := FALSE; - extstring := glGetString(GL_EXTENSIONS); - - if glext_ExtensionSupported('GL_ARB_texture_float', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_texture_compression_dxt1: Boolean; -var - extstring: PChar; -begin - - Result := FALSE; - extstring := glGetString(GL_EXTENSIONS); - - if glext_ExtensionSupported('GL_EXT_texture_compression_dxt1', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_ARB_pixel_buffer_object: Boolean; -var - extstring: PChar; -begin - - Result := FALSE; - extstring := glGetString(GL_EXTENSIONS); - - if glext_ExtensionSupported('GL_ARB_pixel_buffer_object', extstring) then - begin - Result := TRUE; - end; - -end; - -function Load_GL_EXT_framebuffer_object: Boolean; -var - extstring: PChar; -begin - - Result := FALSE; - extstring := glGetString(GL_EXTENSIONS); - - if glext_ExtensionSupported('GL_EXT_framebuffer_object', extstring) then - begin - glIsRenderbufferEXT := SDL_GL_GetProcAddress('glIsRenderbufferEXT'); - if not Assigned(glIsRenderbufferEXT) then Exit; - glBindRenderbufferEXT := SDL_GL_GetProcAddress('glBindRenderbufferEXT'); - if not Assigned(glBindRenderbufferEXT) then Exit; - glDeleteRenderbuffersEXT := SDL_GL_GetProcAddress('glDeleteRenderbuffersEXT'); - if not Assigned(glDeleteRenderbuffersEXT) then Exit; - glGenRenderbuffersEXT := SDL_GL_GetProcAddress('glGenRenderbuffersEXT'); - if not Assigned(glGenRenderbuffersEXT) then Exit; - glRenderbufferStorageEXT := SDL_GL_GetProcAddress('glRenderbufferStorageEXT'); - if not Assigned(glRenderbufferStorageEXT) then Exit; - glGetRenderbufferParameterivEXT := SDL_GL_GetProcAddress('glGetRenderbufferParameterivEXT'); - if not Assigned(glGetRenderbufferParameterivEXT) then Exit; - glIsFramebufferEXT := SDL_GL_GetProcAddress('glIsFramebufferEXT'); - if not Assigned(glIsFramebufferEXT) then Exit; - glBindFramebufferEXT := SDL_GL_GetProcAddress('glBindFramebufferEXT'); - if not Assigned(glBindFramebufferEXT) then Exit; - glDeleteFramebuffersEXT := SDL_GL_GetProcAddress('glDeleteFramebuffersEXT'); - if not Assigned(glDeleteFramebuffersEXT) then Exit; - glGenFramebuffersEXT := SDL_GL_GetProcAddress('glGenFramebuffersEXT'); - if not Assigned(glGenFramebuffersEXT) then Exit; - glCheckFramebufferStatusEXT := SDL_GL_GetProcAddress('glCheckFramebufferStatusEXT'); - if not Assigned(glCheckFramebufferStatusEXT) then Exit; - glFramebufferTexture1DEXT := SDL_GL_GetProcAddress('glFramebufferTexture1DEXT'); - if not Assigned(glFramebufferTexture1DEXT) then Exit; - glFramebufferTexture2DEXT := SDL_GL_GetProcAddress('glFramebufferTexture2DEXT'); - if not Assigned(glFramebufferTexture2DEXT) then Exit; - glFramebufferTexture3DEXT := SDL_GL_GetProcAddress('glFramebufferTexture3DEXT'); - if not Assigned(glFramebufferTexture3DEXT) then Exit; - glFramebufferRenderbufferEXT := SDL_GL_GetProcAddress('glFramebufferRenderbufferEXT'); - if not Assigned(glFramebufferRenderbufferEXT) then Exit; - glGetFramebufferAttachmentParameterivEXT := SDL_GL_GetProcAddress('glGetFramebufferAttachmentParameterivEXT'); - if not Assigned(glGetFramebufferAttachmentParameterivEXT) then Exit; - glGenerateMipmapEXT := SDL_GL_GetProcAddress('glGenerateMipmapEXT'); - if not Assigned(glGenerateMipmapEXT) then Exit; - Result := TRUE; - end; - -end; - -function Load_GL_version_1_4: Boolean; -var - extstring: String; -begin - - Result := FALSE; - extstring := String(PChar(glGetString(GL_EXTENSIONS))); - - glBlendFuncSeparate := SDL_GL_GetProcAddress('glBlendFuncSeparate'); - if not Assigned(glBlendFuncSeparate) then Exit; - glFogCoordf := SDL_GL_GetProcAddress('glFogCoordf'); - if not Assigned(glFogCoordf) then Exit; - glFogCoordfv := SDL_GL_GetProcAddress('glFogCoordfv'); - if not Assigned(glFogCoordfv) then Exit; - glFogCoordd := SDL_GL_GetProcAddress('glFogCoordd'); - if not Assigned(glFogCoordd) then Exit; - glFogCoorddv := SDL_GL_GetProcAddress('glFogCoorddv'); - if not Assigned(glFogCoorddv) then Exit; - glFogCoordPointer := SDL_GL_GetProcAddress('glFogCoordPointer'); - if not Assigned(glFogCoordPointer) then Exit; - glMultiDrawArrays := SDL_GL_GetProcAddress('glMultiDrawArrays'); - if not Assigned(glMultiDrawArrays) then Exit; - glMultiDrawElements := SDL_GL_GetProcAddress('glMultiDrawElements'); - if not Assigned(glMultiDrawElements) then Exit; - glPointParameterf := SDL_GL_GetProcAddress('glPointParameterf'); - if not Assigned(glPointParameterf) then Exit; - glPointParameterfv := SDL_GL_GetProcAddress('glPointParameterfv'); - if not Assigned(glPointParameterfv) then Exit; - glPointParameteri := SDL_GL_GetProcAddress('glPointParameteri'); - if not Assigned(glPointParameteri) then Exit; - glPointParameteriv := SDL_GL_GetProcAddress('glPointParameteriv'); - if not Assigned(glPointParameteriv) then Exit; - glSecondaryColor3b := SDL_GL_GetProcAddress('glSecondaryColor3b'); - if not Assigned(glSecondaryColor3b) then Exit; - glSecondaryColor3bv := SDL_GL_GetProcAddress('glSecondaryColor3bv'); - if not Assigned(glSecondaryColor3bv) then Exit; - glSecondaryColor3d := SDL_GL_GetProcAddress('glSecondaryColor3d'); - if not Assigned(glSecondaryColor3d) then Exit; - glSecondaryColor3dv := SDL_GL_GetProcAddress('glSecondaryColor3dv'); - if not Assigned(glSecondaryColor3dv) then Exit; - glSecondaryColor3f := SDL_GL_GetProcAddress('glSecondaryColor3f'); - if not Assigned(glSecondaryColor3f) then Exit; - glSecondaryColor3fv := SDL_GL_GetProcAddress('glSecondaryColor3fv'); - if not Assigned(glSecondaryColor3fv) then Exit; - glSecondaryColor3i := SDL_GL_GetProcAddress('glSecondaryColor3i'); - if not Assigned(glSecondaryColor3i) then Exit; - glSecondaryColor3iv := SDL_GL_GetProcAddress('glSecondaryColor3iv'); - if not Assigned(glSecondaryColor3iv) then Exit; - glSecondaryColor3s := SDL_GL_GetProcAddress('glSecondaryColor3s'); - if not Assigned(glSecondaryColor3s) then Exit; - glSecondaryColor3sv := SDL_GL_GetProcAddress('glSecondaryColor3sv'); - if not Assigned(glSecondaryColor3sv) then Exit; - glSecondaryColor3ub := SDL_GL_GetProcAddress('glSecondaryColor3ub'); - if not Assigned(glSecondaryColor3ub) then Exit; - glSecondaryColor3ubv := SDL_GL_GetProcAddress('glSecondaryColor3ubv'); - if not Assigned(glSecondaryColor3ubv) then Exit; - glSecondaryColor3ui := SDL_GL_GetProcAddress('glSecondaryColor3ui'); - if not Assigned(glSecondaryColor3ui) then Exit; - glSecondaryColor3uiv := SDL_GL_GetProcAddress('glSecondaryColor3uiv'); - if not Assigned(glSecondaryColor3uiv) then Exit; - glSecondaryColor3us := SDL_GL_GetProcAddress('glSecondaryColor3us'); - if not Assigned(glSecondaryColor3us) then Exit; - glSecondaryColor3usv := SDL_GL_GetProcAddress('glSecondaryColor3usv'); - if not Assigned(glSecondaryColor3usv) then Exit; - glSecondaryColorPointer := SDL_GL_GetProcAddress('glSecondaryColorPointer'); - if not Assigned(glSecondaryColorPointer) then Exit; - glWindowPos2d := SDL_GL_GetProcAddress('glWindowPos2d'); - if not Assigned(glWindowPos2d) then Exit; - glWindowPos2dv := SDL_GL_GetProcAddress('glWindowPos2dv'); - if not Assigned(glWindowPos2dv) then Exit; - glWindowPos2f := SDL_GL_GetProcAddress('glWindowPos2f'); - if not Assigned(glWindowPos2f) then Exit; - glWindowPos2fv := SDL_GL_GetProcAddress('glWindowPos2fv'); - if not Assigned(glWindowPos2fv) then Exit; - glWindowPos2i := SDL_GL_GetProcAddress('glWindowPos2i'); - if not Assigned(glWindowPos2i) then Exit; - glWindowPos2iv := SDL_GL_GetProcAddress('glWindowPos2iv'); - if not Assigned(glWindowPos2iv) then Exit; - glWindowPos2s := SDL_GL_GetProcAddress('glWindowPos2s'); - if not Assigned(glWindowPos2s) then Exit; - glWindowPos2sv := SDL_GL_GetProcAddress('glWindowPos2sv'); - if not Assigned(glWindowPos2sv) then Exit; - glWindowPos3d := SDL_GL_GetProcAddress('glWindowPos3d'); - if not Assigned(glWindowPos3d) then Exit; - glWindowPos3dv := SDL_GL_GetProcAddress('glWindowPos3dv'); - if not Assigned(glWindowPos3dv) then Exit; - glWindowPos3f := SDL_GL_GetProcAddress('glWindowPos3f'); - if not Assigned(glWindowPos3f) then Exit; - glWindowPos3fv := SDL_GL_GetProcAddress('glWindowPos3fv'); - if not Assigned(glWindowPos3fv) then Exit; - glWindowPos3i := SDL_GL_GetProcAddress('glWindowPos3i'); - if not Assigned(glWindowPos3i) then Exit; - glWindowPos3iv := SDL_GL_GetProcAddress('glWindowPos3iv'); - if not Assigned(glWindowPos3iv) then Exit; - glWindowPos3s := SDL_GL_GetProcAddress('glWindowPos3s'); - if not Assigned(glWindowPos3s) then Exit; - glWindowPos3sv := SDL_GL_GetProcAddress('glWindowPos3sv'); - if not Assigned(glWindowPos3sv) then Exit; - Result := TRUE; - -end; - -function Load_GL_version_1_5: Boolean; -var - extstring: String; -begin - - Result := FALSE; - extstring := String(PChar(glGetString(GL_EXTENSIONS))); - - glGenQueries := SDL_GL_GetProcAddress('glGenQueries'); - if not Assigned(glGenQueries) then Exit; - glDeleteQueries := SDL_GL_GetProcAddress('glDeleteQueries'); - if not Assigned(glDeleteQueries) then Exit; - glIsQuery := SDL_GL_GetProcAddress('glIsQuery'); - if not Assigned(glIsQuery) then Exit; - glBeginQuery := SDL_GL_GetProcAddress('glBeginQuery'); - if not Assigned(glBeginQuery) then Exit; - glEndQuery := SDL_GL_GetProcAddress('glEndQuery'); - if not Assigned(glEndQuery) then Exit; - glGetQueryiv := SDL_GL_GetProcAddress('glGetQueryiv'); - if not Assigned(glGetQueryiv) then Exit; - glGetQueryObjectiv := SDL_GL_GetProcAddress('glGetQueryObjectiv'); - if not Assigned(glGetQueryObjectiv) then Exit; - glGetQueryObjectuiv := SDL_GL_GetProcAddress('glGetQueryObjectuiv'); - if not Assigned(glGetQueryObjectuiv) then Exit; - glBindBuffer := SDL_GL_GetProcAddress('glBindBuffer'); - if not Assigned(glBindBuffer) then Exit; - glDeleteBuffers := SDL_GL_GetProcAddress('glDeleteBuffers'); - if not Assigned(glDeleteBuffers) then Exit; - glGenBuffers := SDL_GL_GetProcAddress('glGenBuffers'); - if not Assigned(glGenBuffers) then Exit; - glIsBuffer := SDL_GL_GetProcAddress('glIsBuffer'); - if not Assigned(glIsBuffer) then Exit; - glBufferData := SDL_GL_GetProcAddress('glBufferData'); - if not Assigned(glBufferData) then Exit; - glBufferSubData := SDL_GL_GetProcAddress('glBufferSubData'); - if not Assigned(glBufferSubData) then Exit; - glGetBufferSubData := SDL_GL_GetProcAddress('glGetBufferSubData'); - if not Assigned(glGetBufferSubData) then Exit; - glMapBuffer := SDL_GL_GetProcAddress('glMapBuffer'); - if not Assigned(glMapBuffer) then Exit; - glUnmapBuffer := SDL_GL_GetProcAddress('glUnmapBuffer'); - if not Assigned(glUnmapBuffer) then Exit; - glGetBufferParameteriv := SDL_GL_GetProcAddress('glGetBufferParameteriv'); - if not Assigned(glGetBufferParameteriv) then Exit; - glGetBufferPointerv := SDL_GL_GetProcAddress('glGetBufferPointerv'); - if not Assigned(glGetBufferPointerv) then Exit; - Result := TRUE; - -end; - -function Load_GL_version_2_0: Boolean; -var - extstring: String; -begin - - Result := FALSE; - extstring := String(PChar(glGetString(GL_EXTENSIONS))); - - glBlendEquationSeparate := SDL_GL_GetProcAddress('glBlendEquationSeparate'); - if not Assigned(glBlendEquationSeparate) then Exit; - glDrawBuffers := SDL_GL_GetProcAddress('glDrawBuffers'); - if not Assigned(glDrawBuffers) then Exit; - glStencilOpSeparate := SDL_GL_GetProcAddress('glStencilOpSeparate'); - if not Assigned(glStencilOpSeparate) then Exit; - glStencilFuncSeparate := SDL_GL_GetProcAddress('glStencilFuncSeparate'); - if not Assigned(glStencilFuncSeparate) then Exit; - glStencilMaskSeparate := SDL_GL_GetProcAddress('glStencilMaskSeparate'); - if not Assigned(glStencilMaskSeparate) then Exit; - glAttachShader := SDL_GL_GetProcAddress('glAttachShader'); - if not Assigned(glAttachShader) then Exit; - glBindAttribLocation := SDL_GL_GetProcAddress('glBindAttribLocation'); - if not Assigned(glBindAttribLocation) then Exit; - glCompileShader := SDL_GL_GetProcAddress('glCompileShader'); - if not Assigned(glCompileShader) then Exit; - glCreateProgram := SDL_GL_GetProcAddress('glCreateProgram'); - if not Assigned(glCreateProgram) then Exit; - glCreateShader := SDL_GL_GetProcAddress('glCreateShader'); - if not Assigned(glCreateShader) then Exit; - glDeleteProgram := SDL_GL_GetProcAddress('glDeleteProgram'); - if not Assigned(glDeleteProgram) then Exit; - glDeleteShader := SDL_GL_GetProcAddress('glDeleteShader'); - if not Assigned(glDeleteShader) then Exit; - glDetachShader := SDL_GL_GetProcAddress('glDetachShader'); - if not Assigned(glDetachShader) then Exit; - glDisableVertexAttribArray := SDL_GL_GetProcAddress('glDisableVertexAttribArray'); - if not Assigned(glDisableVertexAttribArray) then Exit; - glEnableVertexAttribArray := SDL_GL_GetProcAddress('glEnableVertexAttribArray'); - if not Assigned(glEnableVertexAttribArray) then Exit; - glGetActiveAttrib := SDL_GL_GetProcAddress('glGetActiveAttrib'); - if not Assigned(glGetActiveAttrib) then Exit; - glGetActiveUniform := SDL_GL_GetProcAddress('glGetActiveUniform'); - if not Assigned(glGetActiveUniform) then Exit; - glGetAttachedShaders := SDL_GL_GetProcAddress('glGetAttachedShaders'); - if not Assigned(glGetAttachedShaders) then Exit; - glGetAttribLocation := SDL_GL_GetProcAddress('glGetAttribLocation'); - if not Assigned(glGetAttribLocation) then Exit; - glGetProgramiv := SDL_GL_GetProcAddress('glGetProgramiv'); - if not Assigned(glGetProgramiv) then Exit; - glGetProgramInfoLog := SDL_GL_GetProcAddress('glGetProgramInfoLog'); - if not Assigned(glGetProgramInfoLog) then Exit; - glGetShaderiv := SDL_GL_GetProcAddress('glGetShaderiv'); - if not Assigned(glGetShaderiv) then Exit; - glGetShaderInfoLog := SDL_GL_GetProcAddress('glGetShaderInfoLog'); - if not Assigned(glGetShaderInfoLog) then Exit; - glGetShaderSource := SDL_GL_GetProcAddress('glGetShaderSource'); - if not Assigned(glGetShaderSource) then Exit; - glGetUniformLocation := SDL_GL_GetProcAddress('glGetUniformLocation'); - if not Assigned(glGetUniformLocation) then Exit; - glGetUniformfv := SDL_GL_GetProcAddress('glGetUniformfv'); - if not Assigned(glGetUniformfv) then Exit; - glGetUniformiv := SDL_GL_GetProcAddress('glGetUniformiv'); - if not Assigned(glGetUniformiv) then Exit; - glGetVertexAttribdv := SDL_GL_GetProcAddress('glGetVertexAttribdv'); - if not Assigned(glGetVertexAttribdv) then Exit; - glGetVertexAttribfv := SDL_GL_GetProcAddress('glGetVertexAttribfv'); - if not Assigned(glGetVertexAttribfv) then Exit; - glGetVertexAttribiv := SDL_GL_GetProcAddress('glGetVertexAttribiv'); - if not Assigned(glGetVertexAttribiv) then Exit; - glGetVertexAttribPointerv := SDL_GL_GetProcAddress('glGetVertexAttribPointerv'); - if not Assigned(glGetVertexAttribPointerv) then Exit; - glIsProgram := SDL_GL_GetProcAddress('glIsProgram'); - if not Assigned(glIsProgram) then Exit; - glIsShader := SDL_GL_GetProcAddress('glIsShader'); - if not Assigned(glIsShader) then Exit; - glLinkProgram := SDL_GL_GetProcAddress('glLinkProgram'); - if not Assigned(glLinkProgram) then Exit; - glShaderSource := SDL_GL_GetProcAddress('glShaderSource'); - if not Assigned(glShaderSource) then Exit; - glUseProgram := SDL_GL_GetProcAddress('glUseProgram'); - if not Assigned(glUseProgram) then Exit; - glUniform1f := SDL_GL_GetProcAddress('glUniform1f'); - if not Assigned(glUniform1f) then Exit; - glUniform2f := SDL_GL_GetProcAddress('glUniform2f'); - if not Assigned(glUniform2f) then Exit; - glUniform3f := SDL_GL_GetProcAddress('glUniform3f'); - if not Assigned(glUniform3f) then Exit; - glUniform4f := SDL_GL_GetProcAddress('glUniform4f'); - if not Assigned(glUniform4f) then Exit; - glUniform1i := SDL_GL_GetProcAddress('glUniform1i'); - if not Assigned(glUniform1i) then Exit; - glUniform2i := SDL_GL_GetProcAddress('glUniform2i'); - if not Assigned(glUniform2i) then Exit; - glUniform3i := SDL_GL_GetProcAddress('glUniform3i'); - if not Assigned(glUniform3i) then Exit; - glUniform4i := SDL_GL_GetProcAddress('glUniform4i'); - if not Assigned(glUniform4i) then Exit; - glUniform1fv := SDL_GL_GetProcAddress('glUniform1fv'); - if not Assigned(glUniform1fv) then Exit; - glUniform2fv := SDL_GL_GetProcAddress('glUniform2fv'); - if not Assigned(glUniform2fv) then Exit; - glUniform3fv := SDL_GL_GetProcAddress('glUniform3fv'); - if not Assigned(glUniform3fv) then Exit; - glUniform4fv := SDL_GL_GetProcAddress('glUniform4fv'); - if not Assigned(glUniform4fv) then Exit; - glUniform1iv := SDL_GL_GetProcAddress('glUniform1iv'); - if not Assigned(glUniform1iv) then Exit; - glUniform2iv := SDL_GL_GetProcAddress('glUniform2iv'); - if not Assigned(glUniform2iv) then Exit; - glUniform3iv := SDL_GL_GetProcAddress('glUniform3iv'); - if not Assigned(glUniform3iv) then Exit; - glUniform4iv := SDL_GL_GetProcAddress('glUniform4iv'); - if not Assigned(glUniform4iv) then Exit; - glUniformMatrix2fv := SDL_GL_GetProcAddress('glUniformMatrix2fv'); - if not Assigned(glUniformMatrix2fv) then Exit; - glUniformMatrix3fv := SDL_GL_GetProcAddress('glUniformMatrix3fv'); - if not Assigned(glUniformMatrix3fv) then Exit; - glUniformMatrix4fv := SDL_GL_GetProcAddress('glUniformMatrix4fv'); - if not Assigned(glUniformMatrix4fv) then Exit; - glValidateProgram := SDL_GL_GetProcAddress('glValidateProgram'); - if not Assigned(glValidateProgram) then Exit; - glVertexAttrib1d := SDL_GL_GetProcAddress('glVertexAttrib1d'); - if not Assigned(glVertexAttrib1d) then Exit; - glVertexAttrib1dv := SDL_GL_GetProcAddress('glVertexAttrib1dv'); - if not Assigned(glVertexAttrib1dv) then Exit; - glVertexAttrib1f := SDL_GL_GetProcAddress('glVertexAttrib1f'); - if not Assigned(glVertexAttrib1f) then Exit; - glVertexAttrib1fv := SDL_GL_GetProcAddress('glVertexAttrib1fv'); - if not Assigned(glVertexAttrib1fv) then Exit; - glVertexAttrib1s := SDL_GL_GetProcAddress('glVertexAttrib1s'); - if not Assigned(glVertexAttrib1s) then Exit; - glVertexAttrib1sv := SDL_GL_GetProcAddress('glVertexAttrib1sv'); - if not Assigned(glVertexAttrib1sv) then Exit; - glVertexAttrib2d := SDL_GL_GetProcAddress('glVertexAttrib2d'); - if not Assigned(glVertexAttrib2d) then Exit; - glVertexAttrib2dv := SDL_GL_GetProcAddress('glVertexAttrib2dv'); - if not Assigned(glVertexAttrib2dv) then Exit; - glVertexAttrib2f := SDL_GL_GetProcAddress('glVertexAttrib2f'); - if not Assigned(glVertexAttrib2f) then Exit; - glVertexAttrib2fv := SDL_GL_GetProcAddress('glVertexAttrib2fv'); - if not Assigned(glVertexAttrib2fv) then Exit; - glVertexAttrib2s := SDL_GL_GetProcAddress('glVertexAttrib2s'); - if not Assigned(glVertexAttrib2s) then Exit; - glVertexAttrib2sv := SDL_GL_GetProcAddress('glVertexAttrib2sv'); - if not Assigned(glVertexAttrib2sv) then Exit; - glVertexAttrib3d := SDL_GL_GetProcAddress('glVertexAttrib3d'); - if not Assigned(glVertexAttrib3d) then Exit; - glVertexAttrib3dv := SDL_GL_GetProcAddress('glVertexAttrib3dv'); - if not Assigned(glVertexAttrib3dv) then Exit; - glVertexAttrib3f := SDL_GL_GetProcAddress('glVertexAttrib3f'); - if not Assigned(glVertexAttrib3f) then Exit; - glVertexAttrib3fv := SDL_GL_GetProcAddress('glVertexAttrib3fv'); - if not Assigned(glVertexAttrib3fv) then Exit; - glVertexAttrib3s := SDL_GL_GetProcAddress('glVertexAttrib3s'); - if not Assigned(glVertexAttrib3s) then Exit; - glVertexAttrib3sv := SDL_GL_GetProcAddress('glVertexAttrib3sv'); - if not Assigned(glVertexAttrib3sv) then Exit; - glVertexAttrib4Nbv := SDL_GL_GetProcAddress('glVertexAttrib4Nbv'); - if not Assigned(glVertexAttrib4Nbv) then Exit; - glVertexAttrib4Niv := SDL_GL_GetProcAddress('glVertexAttrib4Niv'); - if not Assigned(glVertexAttrib4Niv) then Exit; - glVertexAttrib4Nsv := SDL_GL_GetProcAddress('glVertexAttrib4Nsv'); - if not Assigned(glVertexAttrib4Nsv) then Exit; - glVertexAttrib4Nub := SDL_GL_GetProcAddress('glVertexAttrib4Nub'); - if not Assigned(glVertexAttrib4Nub) then Exit; - glVertexAttrib4Nubv := SDL_GL_GetProcAddress('glVertexAttrib4Nubv'); - if not Assigned(glVertexAttrib4Nubv) then Exit; - glVertexAttrib4Nuiv := SDL_GL_GetProcAddress('glVertexAttrib4Nuiv'); - if not Assigned(glVertexAttrib4Nuiv) then Exit; - glVertexAttrib4Nusv := SDL_GL_GetProcAddress('glVertexAttrib4Nusv'); - if not Assigned(glVertexAttrib4Nusv) then Exit; - glVertexAttrib4bv := SDL_GL_GetProcAddress('glVertexAttrib4bv'); - if not Assigned(glVertexAttrib4bv) then Exit; - glVertexAttrib4d := SDL_GL_GetProcAddress('glVertexAttrib4d'); - if not Assigned(glVertexAttrib4d) then Exit; - glVertexAttrib4dv := SDL_GL_GetProcAddress('glVertexAttrib4dv'); - if not Assigned(glVertexAttrib4dv) then Exit; - glVertexAttrib4f := SDL_GL_GetProcAddress('glVertexAttrib4f'); - if not Assigned(glVertexAttrib4f) then Exit; - glVertexAttrib4fv := SDL_GL_GetProcAddress('glVertexAttrib4fv'); - if not Assigned(glVertexAttrib4fv) then Exit; - glVertexAttrib4iv := SDL_GL_GetProcAddress('glVertexAttrib4iv'); - if not Assigned(glVertexAttrib4iv) then Exit; - glVertexAttrib4s := SDL_GL_GetProcAddress('glVertexAttrib4s'); - if not Assigned(glVertexAttrib4s) then Exit; - glVertexAttrib4sv := SDL_GL_GetProcAddress('glVertexAttrib4sv'); - if not Assigned(glVertexAttrib4sv) then Exit; - glVertexAttrib4ubv := SDL_GL_GetProcAddress('glVertexAttrib4ubv'); - if not Assigned(glVertexAttrib4ubv) then Exit; - glVertexAttrib4uiv := SDL_GL_GetProcAddress('glVertexAttrib4uiv'); - if not Assigned(glVertexAttrib4uiv) then Exit; - glVertexAttrib4usv := SDL_GL_GetProcAddress('glVertexAttrib4usv'); - if not Assigned(glVertexAttrib4usv) then Exit; - glVertexAttribPointer := SDL_GL_GetProcAddress('glVertexAttribPointer'); - if not Assigned(glVertexAttribPointer) then Exit; - Result := TRUE; - -end; - -function glext_LoadExtension(ext: String): Boolean; -begin - - Result := FALSE; - - if ext = 'GL_version_1_2' then Result := Load_GL_version_1_2 - else if ext = 'GL_ARB_imaging' then Result := Load_GL_ARB_imaging - else if ext = 'GL_version_1_3' then Result := Load_GL_version_1_3 - else if ext = 'GL_ARB_multitexture' then Result := Load_GL_ARB_multitexture - else if ext = 'GL_ARB_transpose_matrix' then Result := Load_GL_ARB_transpose_matrix - else if ext = 'GL_ARB_multisample' then Result := Load_GL_ARB_multisample - else if ext = 'GL_ARB_texture_env_add' then Result := Load_GL_ARB_texture_env_add - {$IFDEF WINDOWS} - else if ext = 'WGL_ARB_extensions_string' then Result := Load_WGL_ARB_extensions_string - else if ext = 'WGL_ARB_buffer_region' then Result := Load_WGL_ARB_buffer_region - {$ENDIF} - else if ext = 'GL_ARB_texture_cube_map' then Result := Load_GL_ARB_texture_cube_map - else if ext = 'GL_ARB_depth_texture' then Result := Load_GL_ARB_depth_texture - else if ext = 'GL_ARB_point_parameters' then Result := Load_GL_ARB_point_parameters - else if ext = 'GL_ARB_shadow' then Result := Load_GL_ARB_shadow - else if ext = 'GL_ARB_shadow_ambient' then Result := Load_GL_ARB_shadow_ambient - else if ext = 'GL_ARB_texture_border_clamp' then Result := Load_GL_ARB_texture_border_clamp - else if ext = 'GL_ARB_texture_compression' then Result := Load_GL_ARB_texture_compression - else if ext = 'GL_ARB_texture_env_combine' then Result := Load_GL_ARB_texture_env_combine - else if ext = 'GL_ARB_texture_env_crossbar' then Result := Load_GL_ARB_texture_env_crossbar - else if ext = 'GL_ARB_texture_env_dot3' then Result := Load_GL_ARB_texture_env_dot3 - else if ext = 'GL_ARB_texture_mirrored_repeat' then Result := Load_GL_ARB_texture_mirrored_repeat - else if ext = 'GL_ARB_vertex_blend' then Result := Load_GL_ARB_vertex_blend - else if ext = 'GL_ARB_vertex_program' then Result := Load_GL_ARB_vertex_program - else if ext = 'GL_ARB_window_pos' then Result := Load_GL_ARB_window_pos - else if ext = 'GL_EXT_422_pixels' then Result := Load_GL_EXT_422_pixels - else if ext = 'GL_EXT_abgr' then Result := Load_GL_EXT_abgr - else if ext = 'GL_EXT_bgra' then Result := Load_GL_EXT_bgra - else if ext = 'GL_EXT_blend_color' then Result := Load_GL_EXT_blend_color - else if ext = 'GL_EXT_blend_func_separate' then Result := Load_GL_EXT_blend_func_separate - else if ext = 'GL_EXT_blend_logic_op' then Result := Load_GL_EXT_blend_logic_op - else if ext = 'GL_EXT_blend_minmax' then Result := Load_GL_EXT_blend_minmax - else if ext = 'GL_EXT_blend_subtract' then Result := Load_GL_EXT_blend_subtract - else if ext = 'GL_EXT_clip_volume_hint' then Result := Load_GL_EXT_clip_volume_hint - else if ext = 'GL_EXT_color_subtable' then Result := Load_GL_EXT_color_subtable - else if ext = 'GL_EXT_compiled_vertex_array' then Result := Load_GL_EXT_compiled_vertex_array - else if ext = 'GL_EXT_convolution' then Result := Load_GL_EXT_convolution - else if ext = 'GL_EXT_histogram' then Result := Load_GL_EXT_histogram - else if ext = 'GL_EXT_multi_draw_arrays' then Result := Load_GL_EXT_multi_draw_arrays - else if ext = 'GL_EXT_packed_pixels' then Result := Load_GL_EXT_packed_pixels - else if ext = 'GL_EXT_paletted_texture' then Result := Load_GL_EXT_paletted_texture - else if ext = 'GL_EXT_point_parameters' then Result := Load_GL_EXT_point_parameters - else if ext = 'GL_EXT_polygon_offset' then Result := Load_GL_EXT_polygon_offset - else if ext = 'GL_EXT_separate_specular_color' then Result := Load_GL_EXT_separate_specular_color - else if ext = 'GL_EXT_shadow_funcs' then Result := Load_GL_EXT_shadow_funcs - else if ext = 'GL_EXT_shared_texture_palette' then Result := Load_GL_EXT_shared_texture_palette - else if ext = 'GL_EXT_stencil_two_side' then Result := Load_GL_EXT_stencil_two_side - else if ext = 'GL_EXT_stencil_wrap' then Result := Load_GL_EXT_stencil_wrap - else if ext = 'GL_EXT_subtexture' then Result := Load_GL_EXT_subtexture - else if ext = 'GL_EXT_texture3D' then Result := Load_GL_EXT_texture3D - else if ext = 'GL_EXT_texture_compression_s3tc' then Result := Load_GL_EXT_texture_compression_s3tc - else if ext = 'GL_EXT_texture_env_add' then Result := Load_GL_EXT_texture_env_add - else if ext = 'GL_EXT_texture_env_combine' then Result := Load_GL_EXT_texture_env_combine - else if ext = 'GL_EXT_texture_env_dot3' then Result := Load_GL_EXT_texture_env_dot3 - else if ext = 'GL_EXT_texture_filter_anisotropic' then Result := Load_GL_EXT_texture_filter_anisotropic - else if ext = 'GL_EXT_texture_lod_bias' then Result := Load_GL_EXT_texture_lod_bias - else if ext = 'GL_EXT_texture_object' then Result := Load_GL_EXT_texture_object - else if ext = 'GL_EXT_vertex_array' then Result := Load_GL_EXT_vertex_array - else if ext = 'GL_EXT_vertex_shader' then Result := Load_GL_EXT_vertex_shader - else if ext = 'GL_EXT_vertex_weighting' then Result := Load_GL_EXT_vertex_weighting - else if ext = 'GL_HP_occlusion_test' then Result := Load_GL_HP_occlusion_test - else if ext = 'GL_NV_blend_square' then Result := Load_GL_NV_blend_square - else if ext = 'GL_NV_copy_depth_to_color' then Result := Load_GL_NV_copy_depth_to_color - else if ext = 'GL_NV_depth_clamp' then Result := Load_GL_NV_depth_clamp - else if ext = 'GL_NV_evaluators' then Result := Load_GL_NV_evaluators - else if ext = 'GL_NV_fence' then Result := Load_GL_NV_fence - else if ext = 'GL_NV_fog_distance' then Result := Load_GL_NV_fog_distance - else if ext = 'GL_NV_light_max_exponent' then Result := Load_GL_NV_light_max_exponent - else if ext = 'GL_NV_multisample_filter_hint' then Result := Load_GL_NV_multisample_filter_hint - else if ext = 'GL_NV_occlusion_query' then Result := Load_GL_NV_occlusion_query - else if ext = 'GL_NV_packed_depth_stencil' then Result := Load_GL_NV_packed_depth_stencil - else if ext = 'GL_NV_point_sprite' then Result := Load_GL_NV_point_sprite - else if ext = 'GL_NV_register_combiners' then Result := Load_GL_NV_register_combiners - else if ext = 'GL_NV_register_combiners2' then Result := Load_GL_NV_register_combiners2 - else if ext = 'GL_NV_texgen_emboss' then Result := Load_GL_NV_texgen_emboss - else if ext = 'GL_NV_texgen_reflection' then Result := Load_GL_NV_texgen_reflection - else if ext = 'GL_NV_texture_compression_vtc' then Result := Load_GL_NV_texture_compression_vtc - else if ext = 'GL_NV_texture_env_combine4' then Result := Load_GL_NV_texture_env_combine4 - else if ext = 'GL_NV_texture_rectangle' then Result := Load_GL_NV_texture_rectangle - else if ext = 'GL_NV_texture_shader' then Result := Load_GL_NV_texture_shader - else if ext = 'GL_NV_texture_shader2' then Result := Load_GL_NV_texture_shader2 - else if ext = 'GL_NV_texture_shader3' then Result := Load_GL_NV_texture_shader3 - else if ext = 'GL_NV_vertex_array_range' then Result := Load_GL_NV_vertex_array_range - else if ext = 'GL_NV_vertex_array_range2' then Result := Load_GL_NV_vertex_array_range2 - else if ext = 'GL_NV_vertex_program' then Result := Load_GL_NV_vertex_program - else if ext = 'GL_NV_vertex_program1_1' then Result := Load_GL_NV_vertex_program1_1 - else if ext = 'GL_ATI_element_array' then Result := Load_GL_ATI_element_array - else if ext = 'GL_ATI_envmap_bumpmap' then Result := Load_GL_ATI_envmap_bumpmap - else if ext = 'GL_ATI_fragment_shader' then Result := Load_GL_ATI_fragment_shader - else if ext = 'GL_ATI_pn_triangles' then Result := Load_GL_ATI_pn_triangles - else if ext = 'GL_ATI_texture_mirror_once' then Result := Load_GL_ATI_texture_mirror_once - else if ext = 'GL_ATI_vertex_array_object' then Result := Load_GL_ATI_vertex_array_object - else if ext = 'GL_ATI_vertex_streams' then Result := Load_GL_ATI_vertex_streams - {$IFDEF WINDOWS} - else if ext = 'WGL_I3D_image_buffer' then Result := Load_WGL_I3D_image_buffer - else if ext = 'WGL_I3D_swap_frame_lock' then Result := Load_WGL_I3D_swap_frame_lock - else if ext = 'WGL_I3D_swap_frame_usage' then Result := Load_WGL_I3D_swap_frame_usage - {$ENDIF} - else if ext = 'GL_3DFX_texture_compression_FXT1' then Result := Load_GL_3DFX_texture_compression_FXT1 - else if ext = 'GL_IBM_cull_vertex' then Result := Load_GL_IBM_cull_vertex - else if ext = 'GL_IBM_multimode_draw_arrays' then Result := Load_GL_IBM_multimode_draw_arrays - else if ext = 'GL_IBM_raster_pos_clip' then Result := Load_GL_IBM_raster_pos_clip - else if ext = 'GL_IBM_texture_mirrored_repeat' then Result := Load_GL_IBM_texture_mirrored_repeat - else if ext = 'GL_IBM_vertex_array_lists' then Result := Load_GL_IBM_vertex_array_lists - else if ext = 'GL_MESA_resize_buffers' then Result := Load_GL_MESA_resize_buffers - else if ext = 'GL_MESA_window_pos' then Result := Load_GL_MESA_window_pos - else if ext = 'GL_OML_interlace' then Result := Load_GL_OML_interlace - else if ext = 'GL_OML_resample' then Result := Load_GL_OML_resample - else if ext = 'GL_OML_subsample' then Result := Load_GL_OML_subsample - else if ext = 'GL_SGIS_generate_mipmap' then Result := Load_GL_SGIS_generate_mipmap - else if ext = 'GL_SGIS_multisample' then Result := Load_GL_SGIS_multisample - else if ext = 'GL_SGIS_pixel_texture' then Result := Load_GL_SGIS_pixel_texture - else if ext = 'GL_SGIS_texture_border_clamp' then Result := Load_GL_SGIS_texture_border_clamp - else if ext = 'GL_SGIS_texture_color_mask' then Result := Load_GL_SGIS_texture_color_mask - else if ext = 'GL_SGIS_texture_edge_clamp' then Result := Load_GL_SGIS_texture_edge_clamp - else if ext = 'GL_SGIS_texture_lod' then Result := Load_GL_SGIS_texture_lod - else if ext = 'GL_SGIS_depth_texture' then Result := Load_GL_SGIS_depth_texture - else if ext = 'GL_SGIX_fog_offset' then Result := Load_GL_SGIX_fog_offset - else if ext = 'GL_SGIX_interlace' then Result := Load_GL_SGIX_interlace - else if ext = 'GL_SGIX_shadow_ambient' then Result := Load_GL_SGIX_shadow_ambient - else if ext = 'GL_SGI_color_matrix' then Result := Load_GL_SGI_color_matrix - else if ext = 'GL_SGI_color_table' then Result := Load_GL_SGI_color_table - else if ext = 'GL_SGI_texture_color_table' then Result := Load_GL_SGI_texture_color_table - else if ext = 'GL_SUN_vertex' then Result := Load_GL_SUN_vertex - else if ext = 'GL_ARB_fragment_program' then Result := Load_GL_ARB_fragment_program - else if ext = 'GL_ATI_text_fragment_shader' then Result := Load_GL_ATI_text_fragment_shader - else if ext = 'GL_APPLE_client_storage' then Result := Load_GL_APPLE_client_storage - else if ext = 'GL_APPLE_element_array' then Result := Load_GL_APPLE_element_array - else if ext = 'GL_APPLE_fence' then Result := Load_GL_APPLE_fence - else if ext = 'GL_APPLE_vertex_array_object' then Result := Load_GL_APPLE_vertex_array_object - else if ext = 'GL_APPLE_vertex_array_range' then Result := Load_GL_APPLE_vertex_array_range - {$IFDEF WINDOWS} - else if ext = 'WGL_ARB_pixel_format' then Result := Load_WGL_ARB_pixel_format - else if ext = 'WGL_ARB_make_current_read' then Result := Load_WGL_ARB_make_current_read - else if ext = 'WGL_ARB_pbuffer' then Result := Load_WGL_ARB_pbuffer - else if ext = 'WGL_EXT_swap_control' then Result := Load_WGL_EXT_swap_control - else if ext = 'WGL_ARB_render_texture' then Result := Load_WGL_ARB_render_texture - else if ext = 'WGL_EXT_extensions_string' then Result := Load_WGL_EXT_extensions_string - else if ext = 'WGL_EXT_make_current_read' then Result := Load_WGL_EXT_make_current_read - else if ext = 'WGL_EXT_pbuffer' then Result := Load_WGL_EXT_pbuffer - else if ext = 'WGL_EXT_pixel_format' then Result := Load_WGL_EXT_pixel_format - else if ext = 'WGL_I3D_digital_video_control' then Result := Load_WGL_I3D_digital_video_control - else if ext = 'WGL_I3D_gamma' then Result := Load_WGL_I3D_gamma - else if ext = 'WGL_I3D_genlock' then Result := Load_WGL_I3D_genlock - {$ENDIF} - else if ext = 'GL_ARB_matrix_palette' then Result := Load_GL_ARB_matrix_palette - else if ext = 'GL_NV_element_array' then Result := Load_GL_NV_element_array - else if ext = 'GL_NV_float_buffer' then Result := Load_GL_NV_float_buffer - else if ext = 'GL_NV_fragment_program' then Result := Load_GL_NV_fragment_program - else if ext = 'GL_NV_primitive_restart' then Result := Load_GL_NV_primitive_restart - else if ext = 'GL_NV_vertex_program2' then Result := Load_GL_NV_vertex_program2 - {$IFDEF WINDOWS} - else if ext = 'WGL_NV_render_texture_rectangle' then Result := Load_WGL_NV_render_texture_rectangle - {$ENDIF} - else if ext = 'GL_NV_pixel_data_range' then Result := Load_GL_NV_pixel_data_range - else if ext = 'GL_EXT_texture_rectangle' then Result := Load_GL_EXT_texture_rectangle - else if ext = 'GL_S3_s3tc' then Result := Load_GL_S3_s3tc - else if ext = 'GL_ATI_draw_buffers' then Result := Load_GL_ATI_draw_buffers - {$IFDEF WINDOWS} - else if ext = 'WGL_ATI_pixel_format_float' then Result := Load_WGL_ATI_pixel_format_float - {$ENDIF} - else if ext = 'GL_ATI_texture_env_combine3' then Result := Load_GL_ATI_texture_env_combine3 - else if ext = 'GL_ATI_texture_float' then Result := Load_GL_ATI_texture_float - else if ext = 'GL_NV_texture_expand_normal' then Result := Load_GL_NV_texture_expand_normal - else if ext = 'GL_NV_half_float' then Result := Load_GL_NV_half_float - else if ext = 'GL_ATI_map_object_buffer' then Result := Load_GL_ATI_map_object_buffer - else if ext = 'GL_ATI_separate_stencil' then Result := Load_GL_ATI_separate_stencil - else if ext = 'GL_ATI_vertex_attrib_array_object' then Result := Load_GL_ATI_vertex_attrib_array_object - else if ext = 'GL_ARB_vertex_buffer_object' then Result := Load_GL_ARB_vertex_buffer_object - else if ext = 'GL_ARB_occlusion_query' then Result := Load_GL_ARB_occlusion_query - else if ext = 'GL_ARB_shader_objects' then Result := Load_GL_ARB_shader_objects - else if ext = 'GL_ARB_vertex_shader' then Result := Load_GL_ARB_vertex_shader - else if ext = 'GL_ARB_fragment_shader' then Result := Load_GL_ARB_fragment_shader - else if ext = 'GL_ARB_shading_language_100' then Result := Load_GL_ARB_shading_language_100 - else if ext = 'GL_ARB_texture_non_power_of_two' then Result := Load_GL_ARB_texture_non_power_of_two - else if ext = 'GL_ARB_point_sprite' then Result := Load_GL_ARB_point_sprite - else if ext = 'GL_EXT_depth_bounds_test' then Result := Load_GL_EXT_depth_bounds_test - else if ext = 'GL_EXT_secondary_color' then Result := Load_GL_EXT_secondary_color - else if ext = 'GL_EXT_texture_mirror_clamp' then Result := Load_GL_EXT_texture_mirror_clamp - else if ext = 'GL_EXT_blend_equation_separate' then Result := Load_GL_EXT_blend_equation_separate - else if ext = 'GL_MESA_pack_invert' then Result := Load_GL_MESA_pack_invert - else if ext = 'GL_MESA_ycbcr_texture' then Result := Load_GL_MESA_ycbcr_texture - else if ext = 'GL_ARB_fragment_program_shadow' then Result := Load_GL_ARB_fragment_program_shadow - else if ext = 'GL_EXT_fog_coord' then Result := Load_GL_EXT_fog_coord - else if ext = 'GL_NV_fragment_program_option' then Result := Load_GL_NV_fragment_program_option - else if ext = 'GL_EXT_pixel_buffer_object' then Result := Load_GL_EXT_pixel_buffer_object - else if ext = 'GL_NV_fragment_program2' then Result := Load_GL_NV_fragment_program2 - else if ext = 'GL_NV_vertex_program2_option' then Result := Load_GL_NV_vertex_program2_option - else if ext = 'GL_NV_vertex_program3' then Result := Load_GL_NV_vertex_program3 - else if ext = 'GL_ARB_draw_buffers' then Result := Load_GL_ARB_draw_buffers - else if ext = 'GL_ARB_texture_rectangle' then Result := Load_GL_ARB_texture_rectangle - else if ext = 'GL_ARB_color_buffer_float' then Result := Load_GL_ARB_color_buffer_float - else if ext = 'GL_ARB_half_float_pixel' then Result := Load_GL_ARB_half_float_pixel - else if ext = 'GL_ARB_texture_float' then Result := Load_GL_ARB_texture_float - else if ext = 'GL_EXT_texture_compression_dxt1' then Result := Load_GL_EXT_texture_compression_dxt1 - else if ext = 'GL_ARB_pixel_buffer_object' then Result := Load_GL_ARB_pixel_buffer_object - else if ext = 'GL_EXT_framebuffer_object' then Result := Load_GL_EXT_framebuffer_object - else if ext = 'GL_version_1_4' then Result := Load_GL_version_1_4 - else if ext = 'GL_version_1_5' then Result := Load_GL_version_1_5 - else if ext = 'GL_version_2_0' then Result := Load_GL_version_2_0 - -end; - -end. diff --git a/src/lib/OpenGL/glu.pas b/src/lib/OpenGL/glu.pas deleted file mode 100644 index ce5cd691..00000000 --- a/src/lib/OpenGL/glu.pas +++ /dev/null @@ -1,583 +0,0 @@ -unit glu; -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} -{ - $Id: glu.pas,v 1.8 2007/05/20 20:28:31 savage Exp $ - - Adaption of the delphi3d.net OpenGL units to FreePascal - Sebastian Guenther (sg@freepascal.org) in 2002 - These units are free to use -} - -(*++ BUILD Version: 0004 // Increment this if a change has global effects - -Copyright (c) 1985-95, Microsoft Corporation - -Module Name: - - glu.h - -Abstract: - - Procedure declarations, constant definitions and macros for the OpenGL - Utility Library. - ---*) - -(* -** Copyright 1991-1993, Silicon Graphics, Inc. -** All Rights Reserved. -** -** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.; -** the contents of this file may not be disclosed to third parties, copied or -** duplicated in any form, in whole or in part, without the prior written -** permission of Silicon Graphics, Inc. -** -** RESTRICTED RIGHTS LEGEND: -** Use, duplication or disclosure by the Government is subject to restrictions -** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data -** and Computer Software clause at DFARS 252.227-7013, and/or in similar or -** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - -** rights reserved under the Copyright Laws of the United States. -*) - -(* -** Return the error string associated with a particular error code. -** This will return 0 for an invalid error code. -** -** The generic function prototype that can be compiled for ANSI or Unicode -** is defined as follows: -** -** LPCTSTR APIENTRY gluErrorStringWIN (GLenum errCode); -*) - -{******************************************************************************} -{ } -{ Converted to Delphi by Tom Nuydens (tom@delphi3d.net) } -{ For the latest updates, visit Delphi3D: http://www.delphi3d.net } -{ } -{ Modified for Delphi/Kylix and FreePascal } -{ by Dominique Louis ( Dominique@Savagesoftware.com.au) } -{ For the latest updates, visit JEDI-SDL : http://www.sf.net/projects/jedi-sdl } -{ } -{******************************************************************************} - -{ - $Log: glu.pas,v $ - Revision 1.8 2007/05/20 20:28:31 savage - Initial Changes to Handle 64 Bits - - Revision 1.7 2006/11/26 16:35:49 savage - Messed up the last change to GLUtessCombineDataProc, had to reapply it. Thanks Michalis. - - Revision 1.6 2006/11/25 23:38:02 savage - Changes as proposed by Michalis Kamburelis for better FPC support - - Revision 1.5 2006/11/20 21:20:59 savage - Updated to work in MacOS X - - Revision 1.4 2005/05/22 18:52:09 savage - Changes as suggested by Michalis Kamburelis. Thanks again. - - Revision 1.3 2004/10/07 21:01:29 savage - Fix for FPC - - Revision 1.2 2004/08/14 22:54:30 savage - Updated so that Library name defines are correctly defined for MacOS X. - - Revision 1.1 2004/03/30 21:53:54 savage - Moved to it's own folder. - - Revision 1.4 2004/02/20 17:09:55 savage - Code tidied up in gl, glu and glut, while extensions in glext.pas are now loaded using SDL_GL_GetProcAddress, thus making it more cross-platform compatible, but now more tied to SDL. - - Revision 1.3 2004/02/14 00:23:39 savage - As UNIX is defined in jedi-sdl.inc this will be used to check linux compatability as well. Units have been changed to reflect this change. - - Revision 1.2 2004/02/14 00:09:19 savage - Changed uses to now make use of moduleloader.pas rather than dllfuncs.pas - - Revision 1.1 2004/02/05 00:08:19 savage - Module 1.0 release - - Revision 1.4 2003/06/02 12:32:13 savage - Modified Sources to avoid warnings with Delphi by moving CVS Logging to the top of the header files. Hopefully CVS Logging still works. - - Revision 1.3 2003/05/29 22:55:00 savage - Make use of new DLLFunctions - - Revision 1.2 2003/05/27 09:39:53 savage - Added better Gnu Pascal support. - - Revision 1.1 2003/05/11 13:18:03 savage - Newest OpenGL Headers For Delphi, Kylix and FPC - - Revision 1.2 2002/10/13 14:36:47 sg - * Win32 fix: The OS symbol is called "Win32", not "Windows" - - Revision 1.1 2002/10/13 13:57:31 sg - * Finally, the new units are available: Match the C headers more closely; - support for OpenGL extensions, and much more. Based on the Delphi units - by Tom Nuydens of delphi3d.net - -} - -interface - -uses -{$IFDEF __GPC__} - gpc, -{$ENDIF} - moduleloader, - gl; - -const -{$IFDEF WINDOWS} - GLuLibName = 'glu32.dll'; -{$ENDIF} - -{$IFDEF UNIX} -{$IFDEF DARWIN} - GLuLibName = '/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib'; -{$ELSE} - GLuLibName = 'libGLU.so.1'; -{$ENDIF} -{$ENDIF} - -type - TViewPortArray = array[ 0..3 ] of GLint; - T16dArray = array[ 0..15 ] of GLdouble; - TCallBack = procedure; - T3dArray = array[ 0..2 ] of GLdouble; - T4pArray = array[ 0..3 ] of Pointer; - T4fArray = array[ 0..3 ] of GLfloat; -{$IFNDEF __GPC__} - PPointer = ^Pointer; -{$ENDIF} - -var - gluErrorString : function( errCode : GLenum ) : PChar; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluErrorUnicodeStringEXT : function( errCode : GLenum ) : PWideChar; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluGetString : function( name : GLenum ) : PChar; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluOrtho2D : procedure( left, right, bottom, top : GLdouble ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluPerspective : procedure( fovy, aspect, zNear, zFar : GLdouble ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluPickMatrix : procedure( x, y, width, height : GLdouble; var viewport : TViewPortArray ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluLookAt : procedure( eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz : GLdouble ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluProject : function( objx, objy, objz : GLdouble; var modelMatrix, projMatrix : T16dArray; var viewport : TViewPortArray; winx, winy, winz : PGLdouble ) : Integer; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluUnProject : function( winx, winy, winz : GLdouble; var modelMatrix, projMatrix : T16dArray; var viewport : TViewPortArray; objx, objy, objz : PGLdouble ) : Integer; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluScaleImage : function( format : GLenum; widthin, heightin : GLint; typein : GLenum; const datain : Pointer; widthout, heightout : GLint; typeout : GLenum; dataout : Pointer ) : Integer; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluBuild1DMipmaps : function( target : GLenum; components, width : GLint; format, atype : GLenum; const data : Pointer ) : Integer; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluBuild2DMipmaps : function( target : GLenum; components, width, height : GLint; format, atype : GLenum; const data : Pointer ) : Integer; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - -type - GLUnurbs = record - end; PGLUnurbs = ^GLUnurbs; - GLUquadric = record - end; PGLUquadric = ^GLUquadric; - GLUtesselator = record - end; PGLUtesselator = ^GLUtesselator; - - // backwards compatibility: - GLUnurbsObj = GLUnurbs; PGLUnurbsObj = PGLUnurbs; - GLUquadricObj = GLUquadric; PGLUquadricObj = PGLUquadric; - GLUtesselatorObj = GLUtesselator; PGLUtesselatorObj = PGLUtesselator; - GLUtriangulatorObj = GLUtesselator; PGLUtriangulatorObj = PGLUtesselator; - -var - gluNewQuadric : function : PGLUquadric; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluDeleteQuadric : procedure( state : PGLUquadric ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluQuadricNormals : procedure( quadObject : PGLUquadric; normals : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluQuadricTexture : procedure( quadObject : PGLUquadric; textureCoords : GLboolean ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluQuadricOrientation : procedure( quadObject : PGLUquadric; orientation : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluQuadricDrawStyle : procedure( quadObject : PGLUquadric; drawStyle : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluCylinder : procedure( qobj : PGLUquadric; baseRadius, topRadius, height : GLdouble; slices, stacks : GLint ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluDisk : procedure( qobj : PGLUquadric; innerRadius, outerRadius : GLdouble; slices, loops : GLint ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluPartialDisk : procedure( qobj : PGLUquadric; innerRadius, outerRadius : GLdouble; slices, loops : GLint; startAngle, sweepAngle : GLdouble ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluSphere : procedure( qobj : PGLuquadric; radius : GLdouble; slices, stacks : GLint ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluQuadricCallback : procedure( qobj : PGLUquadric; which : GLenum; fn : TCallBack ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluNewTess : function : PGLUtesselator; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluDeleteTess : procedure( tess : PGLUtesselator ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluTessBeginPolygon : procedure( tess : PGLUtesselator; polygon_data : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluTessBeginContour : procedure( tess : PGLUtesselator ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluTessVertex : procedure( tess : PGLUtesselator; var coords : T3dArray; data : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluTessEndContour : procedure( tess : PGLUtesselator ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluTessEndPolygon : procedure( tess : PGLUtesselator ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluTessProperty : procedure( tess : PGLUtesselator; which : GLenum; value : GLdouble ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluTessNormal : procedure( tess : PGLUtesselator; x, y, z : GLdouble ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluTessCallback : procedure( tess : PGLUtesselator; which : GLenum; fn : TCallBack ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluGetTessProperty : procedure( tess : PGLUtesselator; which : GLenum; value : PGLdouble ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluNewNurbsRenderer : function : PGLUnurbs; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluDeleteNurbsRenderer : procedure( nobj : PGLUnurbs ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluBeginSurface : procedure( nobj : PGLUnurbs ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluBeginCurve : procedure( nobj : PGLUnurbs ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluEndCurve : procedure( nobj : PGLUnurbs ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluEndSurface : procedure( nobj : PGLUnurbs ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluBeginTrim : procedure( nobj : PGLUnurbs ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluEndTrim : procedure( nobj : PGLUnurbs ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluPwlCurve : procedure( nobj : PGLUnurbs; count : GLint; aarray : PGLfloat; stride : GLint; atype : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluNurbsCurve : procedure( nobj : PGLUnurbs; nknots : GLint; knot : PGLfloat; stride : GLint; ctlarray : PGLfloat; order : GLint; atype : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluNurbsSurface : procedure( nobj : PGLUnurbs; sknot_count : GLint; sknot : PGLfloat; tknot_count : GLint; tknot : PGLfloat; s_stride, t_stride : GLint; ctlarray : PGLfloat; sorder, torder : GLint; atype : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluLoadSamplingMatrices : procedure( nobj : PGLUnurbs; var modelMatrix, projMatrix : T16dArray; var viewport : TViewPortArray ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluNurbsProperty : procedure( nobj : PGLUnurbs; aproperty : GLenum; value : GLfloat ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluGetNurbsProperty : procedure( nobj : PGLUnurbs; aproperty : GLenum; value : PGLfloat ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluNurbsCallback : procedure( nobj : PGLUnurbs; which : GLenum; fn : TCallBack ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - -(**** Callback function prototypes ****) - -type - // gluQuadricCallback - GLUquadricErrorProc = procedure( p : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - - // gluTessCallback - GLUtessBeginProc = procedure( p : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessEdgeFlagProc = procedure( p : GLboolean ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessVertexProc = procedure( p : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessEndProc = procedure; {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessErrorProc = procedure( p : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessCombineProc = procedure( var p1 : T3dArray; p2 : T4pArray; p3 : T4fArray; p4 : PPointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessBeginDataProc = procedure( p1 : GLenum; p2 : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessEdgeFlagDataProc = procedure( p1 : GLboolean; p2 : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessVertexDataProc = procedure( p1, p2 : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessEndDataProc = procedure( p : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessErrorDataProc = procedure( p1 : GLenum; p2 : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - GLUtessCombineDataProc = procedure( var p1 : T3dArray; var p2 : T4pArray; var p3 : T4fArray; - p4 : PPointer; p5 : Pointer ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - - // gluNurbsCallback - GLUnurbsErrorProc = procedure( p : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - - -//*** Generic constants ****/ - -const - // Version - GLU_VERSION_1_1 = 1; - GLU_VERSION_1_2 = 1; - - // Errors: (return value 0 = no error) - GLU_INVALID_ENUM = 100900; - GLU_INVALID_VALUE = 100901; - GLU_OUT_OF_MEMORY = 100902; - GLU_INCOMPATIBLE_GL_VERSION = 100903; - - // StringName - GLU_VERSION = 100800; - GLU_EXTENSIONS = 100801; - - // Boolean - GLU_TRUE = GL_TRUE; - GLU_FALSE = GL_FALSE; - - - //*** Quadric constants ****/ - - // QuadricNormal - GLU_SMOOTH = 100000; - GLU_FLAT = 100001; - GLU_NONE = 100002; - - // QuadricDrawStyle - GLU_POINT = 100010; - GLU_LINE = 100011; - GLU_FILL = 100012; - GLU_SILHOUETTE = 100013; - - // QuadricOrientation - GLU_OUTSIDE = 100020; - GLU_INSIDE = 100021; - - // Callback types: - // GLU_ERROR = 100103; - - - //*** Tesselation constants ****/ - - GLU_TESS_MAX_COORD = 1.0E150; - - // TessProperty - GLU_TESS_WINDING_RULE = 100140; - GLU_TESS_BOUNDARY_ONLY = 100141; - GLU_TESS_TOLERANCE = 100142; - - // TessWinding - GLU_TESS_WINDING_ODD = 100130; - GLU_TESS_WINDING_NONZERO = 100131; - GLU_TESS_WINDING_POSITIVE = 100132; - GLU_TESS_WINDING_NEGATIVE = 100133; - GLU_TESS_WINDING_ABS_GEQ_TWO = 100134; - - // TessCallback - GLU_TESS_BEGIN = 100100; // void (CALLBACK*)(GLenum type) - GLU_TESS_VERTEX = 100101; // void (CALLBACK*)(void *data) - GLU_TESS_END = 100102; // void (CALLBACK*)(void) - GLU_TESS_ERROR = 100103; // void (CALLBACK*)(GLenum errno) - GLU_TESS_EDGE_FLAG = 100104; // void (CALLBACK*)(GLboolean boundaryEdge) - GLU_TESS_COMBINE = 100105; { void (CALLBACK*)(GLdouble coords[3], - void *data[4], - GLfloat weight[4], - void **dataOut) } - GLU_TESS_BEGIN_DATA = 100106; { void (CALLBACK*)(GLenum type, - void *polygon_data) } - GLU_TESS_VERTEX_DATA = 100107; { void (CALLBACK*)(void *data, - void *polygon_data) } - GLU_TESS_END_DATA = 100108; // void (CALLBACK*)(void *polygon_data) - GLU_TESS_ERROR_DATA = 100109; { void (CALLBACK*)(GLenum errno, - void *polygon_data) } - GLU_TESS_EDGE_FLAG_DATA = 100110; { void (CALLBACK*)(GLboolean boundaryEdge, - void *polygon_data) } - GLU_TESS_COMBINE_DATA = 100111; { void (CALLBACK*)(GLdouble coords[3], - void *data[4], - GLfloat weight[4], - void **dataOut, - void *polygon_data) } - - // TessError - GLU_TESS_ERROR1 = 100151; - GLU_TESS_ERROR2 = 100152; - GLU_TESS_ERROR3 = 100153; - GLU_TESS_ERROR4 = 100154; - GLU_TESS_ERROR5 = 100155; - GLU_TESS_ERROR6 = 100156; - GLU_TESS_ERROR7 = 100157; - GLU_TESS_ERROR8 = 100158; - - GLU_TESS_MISSING_BEGIN_POLYGON = GLU_TESS_ERROR1; - GLU_TESS_MISSING_BEGIN_CONTOUR = GLU_TESS_ERROR2; - GLU_TESS_MISSING_END_POLYGON = GLU_TESS_ERROR3; - GLU_TESS_MISSING_END_CONTOUR = GLU_TESS_ERROR4; - GLU_TESS_COORD_TOO_LARGE = GLU_TESS_ERROR5; - GLU_TESS_NEED_COMBINE_CALLBACK = GLU_TESS_ERROR6; - - //*** NURBS constants ****/ - - // NurbsProperty - GLU_AUTO_LOAD_MATRIX = 100200; - GLU_CULLING = 100201; - GLU_SAMPLING_TOLERANCE = 100203; - GLU_DISPLAY_MODE = 100204; - GLU_PARAMETRIC_TOLERANCE = 100202; - GLU_SAMPLING_METHOD = 100205; - GLU_U_STEP = 100206; - GLU_V_STEP = 100207; - - // NurbsSampling - GLU_PATH_LENGTH = 100215; - GLU_PARAMETRIC_ERROR = 100216; - GLU_DOMAIN_DISTANCE = 100217; - - - // NurbsTrim - GLU_MAP1_TRIM_2 = 100210; - GLU_MAP1_TRIM_3 = 100211; - - // NurbsDisplay - // GLU_FILL = 100012; - GLU_OUTLINE_POLYGON = 100240; - GLU_OUTLINE_PATCH = 100241; - - // NurbsCallback - // GLU_ERROR = 100103; - - // NurbsErrors - GLU_NURBS_ERROR1 = 100251; - GLU_NURBS_ERROR2 = 100252; - GLU_NURBS_ERROR3 = 100253; - GLU_NURBS_ERROR4 = 100254; - GLU_NURBS_ERROR5 = 100255; - GLU_NURBS_ERROR6 = 100256; - GLU_NURBS_ERROR7 = 100257; - GLU_NURBS_ERROR8 = 100258; - GLU_NURBS_ERROR9 = 100259; - GLU_NURBS_ERROR10 = 100260; - GLU_NURBS_ERROR11 = 100261; - GLU_NURBS_ERROR12 = 100262; - GLU_NURBS_ERROR13 = 100263; - GLU_NURBS_ERROR14 = 100264; - GLU_NURBS_ERROR15 = 100265; - GLU_NURBS_ERROR16 = 100266; - GLU_NURBS_ERROR17 = 100267; - GLU_NURBS_ERROR18 = 100268; - GLU_NURBS_ERROR19 = 100269; - GLU_NURBS_ERROR20 = 100270; - GLU_NURBS_ERROR21 = 100271; - GLU_NURBS_ERROR22 = 100272; - GLU_NURBS_ERROR23 = 100273; - GLU_NURBS_ERROR24 = 100274; - GLU_NURBS_ERROR25 = 100275; - GLU_NURBS_ERROR26 = 100276; - GLU_NURBS_ERROR27 = 100277; - GLU_NURBS_ERROR28 = 100278; - GLU_NURBS_ERROR29 = 100279; - GLU_NURBS_ERROR30 = 100280; - GLU_NURBS_ERROR31 = 100281; - GLU_NURBS_ERROR32 = 100282; - GLU_NURBS_ERROR33 = 100283; - GLU_NURBS_ERROR34 = 100284; - GLU_NURBS_ERROR35 = 100285; - GLU_NURBS_ERROR36 = 100286; - GLU_NURBS_ERROR37 = 100287; - -//*** Backwards compatibility for old tesselator ****/ - -var - gluBeginPolygon : procedure( tess : PGLUtesselator ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluNextContour : procedure( tess : PGLUtesselator; atype : GLenum ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - gluEndPolygon : procedure( tess : PGLUtesselator ); {$IFDEF WINDOWS}stdcall; {$ELSE}cdecl; {$ENDIF} - -const - // Contours types -- obsolete! - GLU_CW = 100120; - GLU_CCW = 100121; - GLU_INTERIOR = 100122; - GLU_EXTERIOR = 100123; - GLU_UNKNOWN = 100124; - - // Names without "TESS_" prefix - GLU_BEGIN = GLU_TESS_BEGIN; - GLU_VERTEX = GLU_TESS_VERTEX; - GLU_END = GLU_TESS_END; - GLU_ERROR = GLU_TESS_ERROR; - GLU_EDGE_FLAG = GLU_TESS_EDGE_FLAG; - -procedure LoadGLu( const dll : PChar ); -procedure FreeGLu; - -implementation - -var - LibGlu : TModuleHandle; - -procedure FreeGLu; -begin - - @gluErrorString := nil; - @gluErrorUnicodeStringEXT := nil; - @gluGetString := nil; - @gluOrtho2D := nil; - @gluPerspective := nil; - @gluPickMatrix := nil; - @gluLookAt := nil; - @gluProject := nil; - @gluUnProject := nil; - @gluScaleImage := nil; - @gluBuild1DMipmaps := nil; - @gluBuild2DMipmaps := nil; - @gluNewQuadric := nil; - @gluDeleteQuadric := nil; - @gluQuadricNormals := nil; - @gluQuadricTexture := nil; - @gluQuadricOrientation := nil; - @gluQuadricDrawStyle := nil; - @gluCylinder := nil; - @gluDisk := nil; - @gluPartialDisk := nil; - @gluSphere := nil; - @gluQuadricCallback := nil; - @gluNewTess := nil; - @gluDeleteTess := nil; - @gluTessBeginPolygon := nil; - @gluTessBeginContour := nil; - @gluTessVertex := nil; - @gluTessEndContour := nil; - @gluTessEndPolygon := nil; - @gluTessProperty := nil; - @gluTessNormal := nil; - @gluTessCallback := nil; - @gluGetTessProperty := nil; - @gluNewNurbsRenderer := nil; - @gluDeleteNurbsRenderer := nil; - @gluBeginSurface := nil; - @gluBeginCurve := nil; - @gluEndCurve := nil; - @gluEndSurface := nil; - @gluBeginTrim := nil; - @gluEndTrim := nil; - @gluPwlCurve := nil; - @gluNurbsCurve := nil; - @gluNurbsSurface := nil; - @gluLoadSamplingMatrices := nil; - @gluNurbsProperty := nil; - @gluGetNurbsProperty := nil; - @gluNurbsCallback := nil; - @gluBeginPolygon := nil; - @gluNextContour := nil; - @gluEndPolygon := nil; - - UnLoadModule( LibGlu ); - -end; - -procedure LoadGLu( const dll : PChar ); -begin - - FreeGLu; - - if LoadModule( LibGlu, dll ) then - begin - @gluErrorString := GetModuleSymbol( LibGlu, 'gluErrorString' ); - @gluErrorUnicodeStringEXT := GetModuleSymbol( LibGlu, 'gluErrorUnicodeStringEXT' ); - @gluGetString := GetModuleSymbol( LibGlu, 'gluGetString' ); - @gluOrtho2D := GetModuleSymbol( LibGlu, 'gluOrtho2D' ); - @gluPerspective := GetModuleSymbol( LibGlu, 'gluPerspective' ); - @gluPickMatrix := GetModuleSymbol( LibGlu, 'gluPickMatrix' ); - @gluLookAt := GetModuleSymbol( LibGlu, 'gluLookAt' ); - @gluProject := GetModuleSymbol( LibGlu, 'gluProject' ); - @gluUnProject := GetModuleSymbol( LibGlu, 'gluUnProject' ); - @gluScaleImage := GetModuleSymbol( LibGlu, 'gluScaleImage' ); - @gluBuild1DMipmaps := GetModuleSymbol( LibGlu, 'gluBuild1DMipmaps' ); - @gluBuild2DMipmaps := GetModuleSymbol( LibGlu, 'gluBuild2DMipmaps' ); - @gluNewQuadric := GetModuleSymbol( LibGlu, 'gluNewQuadric' ); - @gluDeleteQuadric := GetModuleSymbol( LibGlu, 'gluDeleteQuadric' ); - @gluQuadricNormals := GetModuleSymbol( LibGlu, 'gluQuadricNormals' ); - @gluQuadricTexture := GetModuleSymbol( LibGlu, 'gluQuadricTexture' ); - @gluQuadricOrientation := GetModuleSymbol( LibGlu, 'gluQuadricOrientation' ); - @gluQuadricDrawStyle := GetModuleSymbol( LibGlu, 'gluQuadricDrawStyle' ); - @gluCylinder := GetModuleSymbol( LibGlu, 'gluCylinder' ); - @gluDisk := GetModuleSymbol( LibGlu, 'gluDisk' ); - @gluPartialDisk := GetModuleSymbol( LibGlu, 'gluPartialDisk' ); - @gluSphere := GetModuleSymbol( LibGlu, 'gluSphere' ); - @gluQuadricCallback := GetModuleSymbol( LibGlu, 'gluQuadricCallback' ); - @gluNewTess := GetModuleSymbol( LibGlu, 'gluNewTess' ); - @gluDeleteTess := GetModuleSymbol( LibGlu, 'gluDeleteTess' ); - @gluTessBeginPolygon := GetModuleSymbol( LibGlu, 'gluTessBeginPolygon' ); - @gluTessBeginContour := GetModuleSymbol( LibGlu, 'gluTessBeginContour' ); - @gluTessVertex := GetModuleSymbol( LibGlu, 'gluTessVertex' ); - @gluTessEndContour := GetModuleSymbol( LibGlu, 'gluTessEndContour' ); - @gluTessEndPolygon := GetModuleSymbol( LibGlu, 'gluTessEndPolygon' ); - @gluTessProperty := GetModuleSymbol( LibGlu, 'gluTessProperty' ); - @gluTessNormal := GetModuleSymbol( LibGlu, 'gluTessNormal' ); - @gluTessCallback := GetModuleSymbol( LibGlu, 'gluTessCallback' ); - @gluGetTessProperty := GetModuleSymbol( LibGlu, 'gluGetTessProperty' ); - @gluNewNurbsRenderer := GetModuleSymbol( LibGlu, 'gluNewNurbsRenderer' ); - @gluDeleteNurbsRenderer := GetModuleSymbol( LibGlu, 'gluDeleteNurbsRenderer' ); - @gluBeginSurface := GetModuleSymbol( LibGlu, 'gluBeginSurface' ); - @gluBeginCurve := GetModuleSymbol( LibGlu, 'gluBeginCurve' ); - @gluEndCurve := GetModuleSymbol( LibGlu, 'gluEndCurve' ); - @gluEndSurface := GetModuleSymbol( LibGlu, 'gluEndSurface' ); - @gluBeginTrim := GetModuleSymbol( LibGlu, 'gluBeginTrim' ); - @gluEndTrim := GetModuleSymbol( LibGlu, 'gluEndTrim' ); - @gluPwlCurve := GetModuleSymbol( LibGlu, 'gluPwlCurve' ); - @gluNurbsCurve := GetModuleSymbol( LibGlu, 'gluNurbsCurve' ); - @gluNurbsSurface := GetModuleSymbol( LibGlu, 'gluNurbsSurface' ); - @gluLoadSamplingMatrices := GetModuleSymbol( LibGlu, 'gluLoadSamplingMatrices' ); - @gluNurbsProperty := GetModuleSymbol( LibGlu, 'gluNurbsProperty' ); - @gluGetNurbsProperty := GetModuleSymbol( LibGlu, 'gluGetNurbsProperty' ); - @gluNurbsCallback := GetModuleSymbol( LibGlu, 'gluNurbsCallback' ); - - @gluBeginPolygon := GetModuleSymbol( LibGlu, 'gluBeginPolygon' ); - @gluNextContour := GetModuleSymbol( LibGlu, 'gluNextContour' ); - @gluEndPolygon := GetModuleSymbol( LibGlu, 'gluEndPolygon' ); - end; -end; - -initialization - - LoadGLu( GLuLibName ); - -finalization - - FreeGLu; - -end. - diff --git a/src/lib/OpenGL/glut.pas b/src/lib/OpenGL/glut.pas deleted file mode 100644 index 04f69267..00000000 --- a/src/lib/OpenGL/glut.pas +++ /dev/null @@ -1,688 +0,0 @@ -unit glut; -{ - $Id: glut.pas,v 1.4 2007/05/20 20:28:31 savage Exp $ - - Adaption of the delphi3d.net OpenGL units to FreePascal - Sebastian Guenther (sg@freepascal.org) in 2002 - These units are free to use -} - -// Copyright (c) Mark J. Kilgard, 1994, 1995, 1996. */ - -(* This program is freely distributable without licensing fees and is - provided without guarantee or warrantee expressed or implied. This - program is -not- in the public domain. *) - -{******************************************************************************} -{ } -{ Converted to Delphi by Tom Nuydens (tom@delphi3d.net) } -{ For the latest updates, visit Delphi3D: http://www.delphi3d.net } -{ } -{ Modified for Delphi/Kylix and FreePascal } -{ by Dominique Louis ( Dominique@Savagesoftware.com.au) } -{ For the latest updates, visit JEDI-SDL : http://www.sf.net/projects/jedi-sdl } -{ } -{******************************************************************************} - -{ - $Log: glut.pas,v $ - Revision 1.4 2007/05/20 20:28:31 savage - Initial Changes to Handle 64 Bits - - Revision 1.3 2006/11/20 21:20:59 savage - Updated to work in MacOS X - - Revision 1.2 2004/08/14 22:54:30 savage - Updated so that Library name defines are correctly defined for MacOS X. - - Revision 1.1 2004/03/30 21:53:54 savage - Moved to it's own folder. - - Revision 1.5 2004/02/20 17:09:55 savage - Code tidied up in gl, glu and glut, while extensions in glext.pas are now loaded using SDL_GL_GetProcAddress, thus making it more cross-platform compatible, but now more tied to SDL. - - Revision 1.4 2004/02/14 22:36:29 savage - Fixed inconsistencies of using LoadLibrary and LoadModule. - Now all units make use of LoadModule rather than LoadLibrary and other dynamic proc procedures. - - Revision 1.3 2004/02/14 00:23:39 savage - As UNIX is defined in jedi-sdl.inc this will be used to check linux compatability as well. Units have been changed to reflect this change. - - Revision 1.2 2004/02/14 00:09:19 savage - Changed uses to now make use of moduleloader.pas rather than dllfuncs.pas - - Revision 1.1 2004/02/05 00:08:19 savage - Module 1.0 release - - Revision 1.4 2003/06/02 12:32:13 savage - Modified Sources to avoid warnings with Delphi by moving CVS Logging to the top of the header files. Hopefully CVS Logging still works. - -} - -interface - -{$I jedi-sdl.inc} - -uses -{$IFDEF __GPC__} - system, - gpc, -{$ENDIF} - -{$IFDEF WINDOWS} - Windows, -{$ENDIF} - moduleloader, - gl; - -type - {$IFNDEF __GPC__} - PInteger = ^Integer; - PPChar = ^PChar; - {$ENDIF} - TGlutVoidCallback = procedure; {$IFNDEF __GPC__}{$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}{$ENDIF} - TGlut1IntCallback = procedure(value: Integer); {$IFNDEF __GPC__}{$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}{$ENDIF} - TGlut2IntCallback = procedure(v1, v2: Integer); {$IFNDEF __GPC__}{$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}{$ENDIF} - TGlut3IntCallback = procedure(v1, v2, v3: Integer); {$IFNDEF __GPC__}{$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}{$ENDIF} - TGlut4IntCallback = procedure(v1, v2, v3, v4: Integer); {$IFNDEF __GPC__}{$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}{$ENDIF} - TGlut1Char2IntCallback = procedure(c: Byte; v1, v2: Integer); {$IFNDEF __GPC__}{$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF}{$ENDIF} - -const -{$IFDEF WINDOWS} - GlutLibName = 'glut32.dll'; -{$ENDIF} - -{$IFDEF UNIX} -{$IFDEF DARWIN} - GlutLibName = '/System/Library/Frameworks/GLUT.framework/Libraries/libglut.dylib'; -{$ELSE} - GlutLibName = 'libglut.so'; -{$ENDIF} -{$ENDIF} - - GLUT_API_VERSION = 3; - GLUT_XLIB_IMPLEMENTATION = 12; - // Display mode bit masks. - GLUT_RGB = 0; - GLUT_RGBA = GLUT_RGB; - GLUT_INDEX = 1; - GLUT_SINGLE = 0; - GLUT_DOUBLE = 2; - GLUT_ACCUM = 4; - GLUT_ALPHA = 8; - GLUT_DEPTH = 16; - GLUT_STENCIL = 32; - GLUT_MULTISAMPLE = 128; - GLUT_STEREO = 256; - GLUT_LUMINANCE = 512; - - // Mouse buttons. - GLUT_LEFT_BUTTON = 0; - GLUT_MIDDLE_BUTTON = 1; - GLUT_RIGHT_BUTTON = 2; - - // Mouse button state. - GLUT_DOWN = 0; - GLUT_UP = 1; - - // function keys - GLUT_KEY_F1 = 1; - GLUT_KEY_F2 = 2; - GLUT_KEY_F3 = 3; - GLUT_KEY_F4 = 4; - GLUT_KEY_F5 = 5; - GLUT_KEY_F6 = 6; - GLUT_KEY_F7 = 7; - GLUT_KEY_F8 = 8; - GLUT_KEY_F9 = 9; - GLUT_KEY_F10 = 10; - GLUT_KEY_F11 = 11; - GLUT_KEY_F12 = 12; - // directional keys - GLUT_KEY_LEFT = 100; - GLUT_KEY_UP = 101; - GLUT_KEY_RIGHT = 102; - GLUT_KEY_DOWN = 103; - GLUT_KEY_PAGE_UP = 104; - GLUT_KEY_PAGE_DOWN = 105; - GLUT_KEY_HOME = 106; - GLUT_KEY_END = 107; - GLUT_KEY_INSERT = 108; - - // Entry/exit state. - GLUT_LEFT = 0; - GLUT_ENTERED = 1; - - // Menu usage state. - GLUT_MENU_NOT_IN_USE = 0; - GLUT_MENU_IN_USE = 1; - - // Visibility state. - GLUT_NOT_VISIBLE = 0; - GLUT_VISIBLE = 1; - - // Window status state. - GLUT_HIDDEN = 0; - GLUT_FULLY_RETAINED = 1; - GLUT_PARTIALLY_RETAINED = 2; - GLUT_FULLY_COVERED = 3; - - // Color index component selection values. - GLUT_RED = 0; - GLUT_GREEN = 1; - GLUT_BLUE = 2; - - // Layers for use. - GLUT_NORMAL = 0; - GLUT_OVERLAY = 1; - - // Stroke font constants (use these in GLUT program). - GLUT_STROKE_ROMAN = Pointer(0); - GLUT_STROKE_MONO_ROMAN = Pointer(1); - - // Bitmap font constants (use these in GLUT program). - GLUT_BITMAP_9_BY_15 = Pointer(2); - GLUT_BITMAP_8_BY_13 = Pointer(3); - GLUT_BITMAP_TIMES_ROMAN_10 = Pointer(4); - GLUT_BITMAP_TIMES_ROMAN_24 = Pointer(5); - GLUT_BITMAP_HELVETICA_10 = Pointer(6); - GLUT_BITMAP_HELVETICA_12 = Pointer(7); - GLUT_BITMAP_HELVETICA_18 = Pointer(8); - - // glutGet parameters. - GLUT_WINDOW_X = 100; - GLUT_WINDOW_Y = 101; - GLUT_WINDOW_WIDTH = 102; - GLUT_WINDOW_HEIGHT = 103; - GLUT_WINDOW_BUFFER_SIZE = 104; - GLUT_WINDOW_STENCIL_SIZE = 105; - GLUT_WINDOW_DEPTH_SIZE = 106; - GLUT_WINDOW_RED_SIZE = 107; - GLUT_WINDOW_GREEN_SIZE = 108; - GLUT_WINDOW_BLUE_SIZE = 109; - GLUT_WINDOW_ALPHA_SIZE = 110; - GLUT_WINDOW_ACCUM_RED_SIZE = 111; - GLUT_WINDOW_ACCUM_GREEN_SIZE = 112; - GLUT_WINDOW_ACCUM_BLUE_SIZE = 113; - GLUT_WINDOW_ACCUM_ALPHA_SIZE = 114; - GLUT_WINDOW_DOUBLEBUFFER = 115; - GLUT_WINDOW_RGBA = 116; - GLUT_WINDOW_PARENT = 117; - GLUT_WINDOW_NUM_CHILDREN = 118; - GLUT_WINDOW_COLORMAP_SIZE = 119; - GLUT_WINDOW_NUM_SAMPLES = 120; - GLUT_WINDOW_STEREO = 121; - GLUT_WINDOW_CURSOR = 122; - GLUT_SCREEN_WIDTH = 200; - GLUT_SCREEN_HEIGHT = 201; - GLUT_SCREEN_WIDTH_MM = 202; - GLUT_SCREEN_HEIGHT_MM = 203; - GLUT_MENU_NUM_ITEMS = 300; - GLUT_DISPLAY_MODE_POSSIBLE = 400; - GLUT_INIT_WINDOW_X = 500; - GLUT_INIT_WINDOW_Y = 501; - GLUT_INIT_WINDOW_WIDTH = 502; - GLUT_INIT_WINDOW_HEIGHT = 503; - GLUT_INIT_DISPLAY_MODE = 504; - GLUT_ELAPSED_TIME = 700; - - // glutDeviceGet parameters. - GLUT_HAS_KEYBOARD = 600; - GLUT_HAS_MOUSE = 601; - GLUT_HAS_SPACEBALL = 602; - GLUT_HAS_DIAL_AND_BUTTON_BOX = 603; - GLUT_HAS_TABLET = 604; - GLUT_NUM_MOUSE_BUTTONS = 605; - GLUT_NUM_SPACEBALL_BUTTONS = 606; - GLUT_NUM_BUTTON_BOX_BUTTONS = 607; - GLUT_NUM_DIALS = 608; - GLUT_NUM_TABLET_BUTTONS = 609; - - // glutLayerGet parameters. - GLUT_OVERLAY_POSSIBLE = 800; - GLUT_LAYER_IN_USE = 801; - GLUT_HAS_OVERLAY = 802; - GLUT_TRANSPARENT_INDEX = 803; - GLUT_NORMAL_DAMAGED = 804; - GLUT_OVERLAY_DAMAGED = 805; - - // glutVideoResizeGet parameters. - GLUT_VIDEO_RESIZE_POSSIBLE = 900; - GLUT_VIDEO_RESIZE_IN_USE = 901; - GLUT_VIDEO_RESIZE_X_DELTA = 902; - GLUT_VIDEO_RESIZE_Y_DELTA = 903; - GLUT_VIDEO_RESIZE_WIDTH_DELTA = 904; - GLUT_VIDEO_RESIZE_HEIGHT_DELTA = 905; - GLUT_VIDEO_RESIZE_X = 906; - GLUT_VIDEO_RESIZE_Y = 907; - GLUT_VIDEO_RESIZE_WIDTH = 908; - GLUT_VIDEO_RESIZE_HEIGHT = 909; - - // glutGetModifiers return mask. - GLUT_ACTIVE_SHIFT = 1; - GLUT_ACTIVE_CTRL = 2; - GLUT_ACTIVE_ALT = 4; - - // glutSetCursor parameters. - // Basic arrows. - GLUT_CURSOR_RIGHT_ARROW = 0; - GLUT_CURSOR_LEFT_ARROW = 1; - // Symbolic cursor shapes. - GLUT_CURSOR_INFO = 2; - GLUT_CURSOR_DESTROY = 3; - GLUT_CURSOR_HELP = 4; - GLUT_CURSOR_CYCLE = 5; - GLUT_CURSOR_SPRAY = 6; - GLUT_CURSOR_WAIT = 7; - GLUT_CURSOR_TEXT = 8; - GLUT_CURSOR_CROSSHAIR = 9; - // Directional cursors. - GLUT_CURSOR_UP_DOWN = 10; - GLUT_CURSOR_LEFT_RIGHT = 11; - // Sizing cursors. - GLUT_CURSOR_TOP_SIDE = 12; - GLUT_CURSOR_BOTTOM_SIDE = 13; - GLUT_CURSOR_LEFT_SIDE = 14; - GLUT_CURSOR_RIGHT_SIDE = 15; - GLUT_CURSOR_TOP_LEFT_CORNER = 16; - GLUT_CURSOR_TOP_RIGHT_CORNER = 17; - GLUT_CURSOR_BOTTOM_RIGHT_CORNER = 18; - GLUT_CURSOR_BOTTOM_LEFT_CORNER = 19; - // Inherit from parent window. - GLUT_CURSOR_INHERIT = 100; - // Blank cursor. - GLUT_CURSOR_NONE = 101; - // Fullscreen crosshair (if available). - GLUT_CURSOR_FULL_CROSSHAIR = 102; - - // GLUT game mode sub-API. - // glutGameModeGet. - GLUT_GAME_MODE_ACTIVE = 0; - GLUT_GAME_MODE_POSSIBLE = 1; - GLUT_GAME_MODE_WIDTH = 2; - GLUT_GAME_MODE_HEIGHT = 3; - GLUT_GAME_MODE_PIXEL_DEPTH = 4; - GLUT_GAME_MODE_REFRESH_RATE = 5; - GLUT_GAME_MODE_DISPLAY_CHANGED = 6; - -var -// GLUT initialization sub-API. - glutInit: procedure(argcp: PInteger; argv: PPChar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutInitDisplayMode: procedure(mode: Word); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutInitDisplayString: procedure(const str: PChar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutInitWindowPosition: procedure(x, y: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutInitWindowSize: procedure(width, height: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutMainLoop: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT window sub-API. - glutCreateWindow: function(const title: PChar): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutCreateSubWindow: function(win, x, y, width, height: Integer): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutDestroyWindow: procedure(win: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutPostRedisplay: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutPostWindowRedisplay: procedure(win: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSwapBuffers: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutGetWindow: function: Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSetWindow: procedure(win: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSetWindowTitle: procedure(const title: PChar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSetIconTitle: procedure(const title: PChar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutPositionWindow: procedure(x, y: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutReshapeWindow: procedure(width, height: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutPopWindow: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutPushWindow: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutIconifyWindow: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutShowWindow: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutHideWindow: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutFullScreen: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSetCursor: procedure(cursor: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWarpPointer: procedure(x, y: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT overlay sub-API. - glutEstablishOverlay: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutRemoveOverlay: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutUseLayer: procedure(layer: GLenum); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutPostOverlayRedisplay: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutPostWindowOverlayRedisplay: procedure(win: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutShowOverlay: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutHideOverlay: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT menu sub-API. - glutCreateMenu: function(callback: TGlut1IntCallback): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutDestroyMenu: procedure(menu: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutGetMenu: function: Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSetMenu: procedure(menu: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutAddMenuEntry: procedure(const caption: PChar; value: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutAddSubMenu: procedure(const caption: PChar; submenu: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutChangeToMenuEntry: procedure(item: Integer; const caption: PChar; value: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutChangeToSubMenu: procedure(item: Integer; const caption: PChar; submenu: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutRemoveMenuItem: procedure(item: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutAttachMenu: procedure(button: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutDetachMenu: procedure(button: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUTsub-API. - glutDisplayFunc: procedure(f: TGlutVoidCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutReshapeFunc: procedure(f: TGlut2IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutKeyboardFunc: procedure(f: TGlut1Char2IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutMouseFunc: procedure(f: TGlut4IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutMotionFunc: procedure(f: TGlut2IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutPassiveMotionFunc: procedure(f: TGlut2IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutEntryFunc: procedure(f: TGlut1IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutVisibilityFunc: procedure(f: TGlut1IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutIdleFunc: procedure(f: TGlutVoidCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutTimerFunc: procedure(millis: Word; f: TGlut1IntCallback; value: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutMenuStateFunc: procedure(f: TGlut1IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSpecialFunc: procedure(f: TGlut3IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSpaceballMotionFunc: procedure(f: TGlut3IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSpaceballRotateFunc: procedure(f: TGlut3IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSpaceballButtonFunc: procedure(f: TGlut2IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutButtonBoxFunc: procedure(f: TGlut2IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutDialsFunc: procedure(f: TGlut2IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutTabletMotionFunc: procedure(f: TGlut2IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutTabletButtonFunc: procedure(f: TGlut4IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutMenuStatusFunc: procedure(f: TGlut3IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutOverlayDisplayFunc: procedure(f:TGlutVoidCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWindowStatusFunc: procedure(f: TGlut1IntCallback); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT color index sub-API. - glutSetColor: procedure(cell: Integer; red, green, blue: GLfloat); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutGetColor: function(ndx, component: Integer): GLfloat; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutCopyColormap: procedure(win: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT state retrieval sub-API. - glutGet: function(t: GLenum): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutDeviceGet: function(t: GLenum): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT extension support sub-API - glutExtensionSupported: function(const name: PChar): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutGetModifiers: function: Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutLayerGet: function(t: GLenum): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT font sub-API - glutBitmapCharacter: procedure(font : pointer; character: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutBitmapWidth: function(font : pointer; character: Integer): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutStrokeCharacter: procedure(font : pointer; character: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutStrokeWidth: function(font : pointer; character: Integer): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutBitmapLength: function(font: pointer; const str: PChar): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutStrokeLength: function(font: pointer; const str: PChar): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT pre-built models sub-API - glutWireSphere: procedure(radius: GLdouble; slices, stacks: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidSphere: procedure(radius: GLdouble; slices, stacks: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWireCone: procedure(base, height: GLdouble; slices, stacks: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidCone: procedure(base, height: GLdouble; slices, stacks: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWireCube: procedure(size: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidCube: procedure(size: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWireTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidTorus: procedure(innerRadius, outerRadius: GLdouble; sides, rings: GLint); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWireDodecahedron: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidDodecahedron: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWireTeapot: procedure(size: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidTeapot: procedure(size: GLdouble); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWireOctahedron: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidOctahedron: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWireTetrahedron: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidTetrahedron: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutWireIcosahedron: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSolidIcosahedron: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT video resize sub-API. - glutVideoResizeGet: function(param: GLenum): Integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutSetupVideoResizing: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutStopVideoResizing: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutVideoResize: procedure(x, y, width, height: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutVideoPan: procedure(x, y, width, height: Integer); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -// GLUT debugging sub-API. - glutReportErrors: procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -var - //example glutGameModeString('1280x1024:32@75'); - glutGameModeString : procedure (const AString : PChar); {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutEnterGameMode : function : integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutLeaveGameMode : procedure; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - glutGameModeGet : function (mode : GLenum) : integer; {$IFDEF WINDOWS}stdcall;{$ELSE}cdecl;{$ENDIF} - -procedure LoadGlut(const dll: PChar); -procedure FreeGlut; - -implementation - -var - LibGLUT : TModuleHandle; - -procedure FreeGlut; -begin - - UnLoadModule( LibGLUT ); - - @glutInit := nil; - @glutInitDisplayMode := nil; - @glutInitDisplayString := nil; - @glutInitWindowPosition := nil; - @glutInitWindowSize := nil; - @glutMainLoop := nil; - @glutCreateWindow := nil; - @glutCreateSubWindow := nil; - @glutDestroyWindow := nil; - @glutPostRedisplay := nil; - @glutPostWindowRedisplay := nil; - @glutSwapBuffers := nil; - @glutGetWindow := nil; - @glutSetWindow := nil; - @glutSetWindowTitle := nil; - @glutSetIconTitle := nil; - @glutPositionWindow := nil; - @glutReshapeWindow := nil; - @glutPopWindow := nil; - @glutPushWindow := nil; - @glutIconifyWindow := nil; - @glutShowWindow := nil; - @glutHideWindow := nil; - @glutFullScreen := nil; - @glutSetCursor := nil; - @glutWarpPointer := nil; - @glutEstablishOverlay := nil; - @glutRemoveOverlay := nil; - @glutUseLayer := nil; - @glutPostOverlayRedisplay := nil; - @glutPostWindowOverlayRedisplay := nil; - @glutShowOverlay := nil; - @glutHideOverlay := nil; - @glutCreateMenu := nil; - @glutDestroyMenu := nil; - @glutGetMenu := nil; - @glutSetMenu := nil; - @glutAddMenuEntry := nil; - @glutAddSubMenu := nil; - @glutChangeToMenuEntry := nil; - @glutChangeToSubMenu := nil; - @glutRemoveMenuItem := nil; - @glutAttachMenu := nil; - @glutDetachMenu := nil; - @glutDisplayFunc := nil; - @glutReshapeFunc := nil; - @glutKeyboardFunc := nil; - @glutMouseFunc := nil; - @glutMotionFunc := nil; - @glutPassiveMotionFunc := nil; - @glutEntryFunc := nil; - @glutVisibilityFunc := nil; - @glutIdleFunc := nil; - @glutTimerFunc := nil; - @glutMenuStateFunc := nil; - @glutSpecialFunc := nil; - @glutSpaceballMotionFunc := nil; - @glutSpaceballRotateFunc := nil; - @glutSpaceballButtonFunc := nil; - @glutButtonBoxFunc := nil; - @glutDialsFunc := nil; - @glutTabletMotionFunc := nil; - @glutTabletButtonFunc := nil; - @glutMenuStatusFunc := nil; - @glutOverlayDisplayFunc := nil; - @glutWindowStatusFunc := nil; - @glutSetColor := nil; - @glutGetColor := nil; - @glutCopyColormap := nil; - @glutGet := nil; - @glutDeviceGet := nil; - @glutExtensionSupported := nil; - @glutGetModifiers := nil; - @glutLayerGet := nil; - @glutBitmapCharacter := nil; - @glutBitmapWidth := nil; - @glutStrokeCharacter := nil; - @glutStrokeWidth := nil; - @glutBitmapLength := nil; - @glutStrokeLength := nil; - @glutWireSphere := nil; - @glutSolidSphere := nil; - @glutWireCone := nil; - @glutSolidCone := nil; - @glutWireCube := nil; - @glutSolidCube := nil; - @glutWireTorus := nil; - @glutSolidTorus := nil; - @glutWireDodecahedron := nil; - @glutSolidDodecahedron := nil; - @glutWireTeapot := nil; - @glutSolidTeapot := nil; - @glutWireOctahedron := nil; - @glutSolidOctahedron := nil; - @glutWireTetrahedron := nil; - @glutSolidTetrahedron := nil; - @glutWireIcosahedron := nil; - @glutSolidIcosahedron := nil; - @glutVideoResizeGet := nil; - @glutSetupVideoResizing := nil; - @glutStopVideoResizing := nil; - @glutVideoResize := nil; - @glutVideoPan := nil; - @glutReportErrors := nil; - -end; - -procedure LoadGlut(const dll: PChar); -begin - - FreeGlut; - - if LoadModule( LibGLUT, dll ) then - begin - @glutInit := GetModuleSymbol(LibGLUT, 'glutInit'); - @glutInitDisplayMode := GetModuleSymbol(LibGLUT, 'glutInitDisplayMode'); - @glutInitDisplayString := GetModuleSymbol(LibGLUT, 'glutInitDisplayString'); - @glutInitWindowPosition := GetModuleSymbol(LibGLUT, 'glutInitWindowPosition'); - @glutInitWindowSize := GetModuleSymbol(LibGLUT, 'glutInitWindowSize'); - @glutMainLoop := GetModuleSymbol(LibGLUT, 'glutMainLoop'); - @glutCreateWindow := GetModuleSymbol(LibGLUT, 'glutCreateWindow'); - @glutCreateSubWindow := GetModuleSymbol(LibGLUT, 'glutCreateSubWindow'); - @glutDestroyWindow := GetModuleSymbol(LibGLUT, 'glutDestroyWindow'); - @glutPostRedisplay := GetModuleSymbol(LibGLUT, 'glutPostRedisplay'); - @glutPostWindowRedisplay := GetModuleSymbol(LibGLUT, 'glutPostWindowRedisplay'); - @glutSwapBuffers := GetModuleSymbol(LibGLUT, 'glutSwapBuffers'); - @glutGetWindow := GetModuleSymbol(LibGLUT, 'glutGetWindow'); - @glutSetWindow := GetModuleSymbol(LibGLUT, 'glutSetWindow'); - @glutSetWindowTitle := GetModuleSymbol(LibGLUT, 'glutSetWindowTitle'); - @glutSetIconTitle := GetModuleSymbol(LibGLUT, 'glutSetIconTitle'); - @glutPositionWindow := GetModuleSymbol(LibGLUT, 'glutPositionWindow'); - @glutReshapeWindow := GetModuleSymbol(LibGLUT, 'glutReshapeWindow'); - @glutPopWindow := GetModuleSymbol(LibGLUT, 'glutPopWindow'); - @glutPushWindow := GetModuleSymbol(LibGLUT, 'glutPushWindow'); - @glutIconifyWindow := GetModuleSymbol(LibGLUT, 'glutIconifyWindow'); - @glutShowWindow := GetModuleSymbol(LibGLUT, 'glutShowWindow'); - @glutHideWindow := GetModuleSymbol(LibGLUT, 'glutHideWindow'); - @glutFullScreen := GetModuleSymbol(LibGLUT, 'glutFullScreen'); - @glutSetCursor := GetModuleSymbol(LibGLUT, 'glutSetCursor'); - @glutWarpPointer := GetModuleSymbol(LibGLUT, 'glutWarpPointer'); - @glutEstablishOverlay := GetModuleSymbol(LibGLUT, 'glutEstablishOverlay'); - @glutRemoveOverlay := GetModuleSymbol(LibGLUT, 'glutRemoveOverlay'); - @glutUseLayer := GetModuleSymbol(LibGLUT, 'glutUseLayer'); - @glutPostOverlayRedisplay := GetModuleSymbol(LibGLUT, 'glutPostOverlayRedisplay'); - @glutPostWindowOverlayRedisplay := GetModuleSymbol(LibGLUT, 'glutPostWindowOverlayRedisplay'); - @glutShowOverlay := GetModuleSymbol(LibGLUT, 'glutShowOverlay'); - @glutHideOverlay := GetModuleSymbol(LibGLUT, 'glutHideOverlay'); - @glutCreateMenu := GetModuleSymbol(LibGLUT, 'glutCreateMenu'); - @glutDestroyMenu := GetModuleSymbol(LibGLUT, 'glutDestroyMenu'); - @glutGetMenu := GetModuleSymbol(LibGLUT, 'glutGetMenu'); - @glutSetMenu := GetModuleSymbol(LibGLUT, 'glutSetMenu'); - @glutAddMenuEntry := GetModuleSymbol(LibGLUT, 'glutAddMenuEntry'); - @glutAddSubMenu := GetModuleSymbol(LibGLUT, 'glutAddSubMenu'); - @glutChangeToMenuEntry := GetModuleSymbol(LibGLUT, 'glutChangeToMenuEntry'); - @glutChangeToSubMenu := GetModuleSymbol(LibGLUT, 'glutChangeToSubMenu'); - @glutRemoveMenuItem := GetModuleSymbol(LibGLUT, 'glutRemoveMenuItem'); - @glutAttachMenu := GetModuleSymbol(LibGLUT, 'glutAttachMenu'); - @glutDetachMenu := GetModuleSymbol(LibGLUT, 'glutDetachMenu'); - @glutDisplayFunc := GetModuleSymbol(LibGLUT, 'glutDisplayFunc'); - @glutReshapeFunc := GetModuleSymbol(LibGLUT, 'glutReshapeFunc'); - @glutKeyboardFunc := GetModuleSymbol(LibGLUT, 'glutKeyboardFunc'); - @glutMouseFunc := GetModuleSymbol(LibGLUT, 'glutMouseFunc'); - @glutMotionFunc := GetModuleSymbol(LibGLUT, 'glutMotionFunc'); - @glutPassiveMotionFunc := GetModuleSymbol(LibGLUT, 'glutPassiveMotionFunc'); - @glutEntryFunc := GetModuleSymbol(LibGLUT, 'glutEntryFunc'); - @glutVisibilityFunc := GetModuleSymbol(LibGLUT, 'glutVisibilityFunc'); - @glutIdleFunc := GetModuleSymbol(LibGLUT, 'glutIdleFunc'); - @glutTimerFunc := GetModuleSymbol(LibGLUT, 'glutTimerFunc'); - @glutMenuStateFunc := GetModuleSymbol(LibGLUT, 'glutMenuStateFunc'); - @glutSpecialFunc := GetModuleSymbol(LibGLUT, 'glutSpecialFunc'); - @glutSpaceballMotionFunc := GetModuleSymbol(LibGLUT, 'glutSpaceballMotionFunc'); - @glutSpaceballRotateFunc := GetModuleSymbol(LibGLUT, 'glutSpaceballRotateFunc'); - @glutSpaceballButtonFunc := GetModuleSymbol(LibGLUT, 'glutSpaceballButtonFunc'); - @glutButtonBoxFunc := GetModuleSymbol(LibGLUT, 'glutButtonBoxFunc'); - @glutDialsFunc := GetModuleSymbol(LibGLUT, 'glutDialsFunc'); - @glutTabletMotionFunc := GetModuleSymbol(LibGLUT, 'glutTabletMotionFunc'); - @glutTabletButtonFunc := GetModuleSymbol(LibGLUT, 'glutTabletButtonFunc'); - @glutMenuStatusFunc := GetModuleSymbol(LibGLUT, 'glutMenuStatusFunc'); - @glutOverlayDisplayFunc := GetModuleSymbol(LibGLUT, 'glutOverlayDisplayFunc'); - @glutWindowStatusFunc := GetModuleSymbol(LibGLUT, 'glutWindowStatusFunc'); - @glutSetColor := GetModuleSymbol(LibGLUT, 'glutSetColor'); - @glutGetColor := GetModuleSymbol(LibGLUT, 'glutGetColor'); - @glutCopyColormap := GetModuleSymbol(LibGLUT, 'glutCopyColormap'); - @glutGet := GetModuleSymbol(LibGLUT, 'glutGet'); - @glutDeviceGet := GetModuleSymbol(LibGLUT, 'glutDeviceGet'); - @glutExtensionSupported := GetModuleSymbol(LibGLUT, 'glutExtensionSupported'); - @glutGetModifiers := GetModuleSymbol(LibGLUT, 'glutGetModifiers'); - @glutLayerGet := GetModuleSymbol(LibGLUT, 'glutLayerGet'); - @glutBitmapCharacter := GetModuleSymbol(LibGLUT, 'glutBitmapCharacter'); - @glutBitmapWidth := GetModuleSymbol(LibGLUT, 'glutBitmapWidth'); - @glutStrokeCharacter := GetModuleSymbol(LibGLUT, 'glutStrokeCharacter'); - @glutStrokeWidth := GetModuleSymbol(LibGLUT, 'glutStrokeWidth'); - @glutBitmapLength := GetModuleSymbol(LibGLUT, 'glutBitmapLength'); - @glutStrokeLength := GetModuleSymbol(LibGLUT, 'glutStrokeLength'); - @glutWireSphere := GetModuleSymbol(LibGLUT, 'glutWireSphere'); - @glutSolidSphere := GetModuleSymbol(LibGLUT, 'glutSolidSphere'); - @glutWireCone := GetModuleSymbol(LibGLUT, 'glutWireCone'); - @glutSolidCone := GetModuleSymbol(LibGLUT, 'glutSolidCone'); - @glutWireCube := GetModuleSymbol(LibGLUT, 'glutWireCube'); - @glutSolidCube := GetModuleSymbol(LibGLUT, 'glutSolidCube'); - @glutWireTorus := GetModuleSymbol(LibGLUT, 'glutWireTorus'); - @glutSolidTorus := GetModuleSymbol(LibGLUT, 'glutSolidTorus'); - @glutWireDodecahedron := GetModuleSymbol(LibGLUT, 'glutWireDodecahedron'); - @glutSolidDodecahedron := GetModuleSymbol(LibGLUT, 'glutSolidDodecahedron'); - @glutWireTeapot := GetModuleSymbol(LibGLUT, 'glutWireTeapot'); - @glutSolidTeapot := GetModuleSymbol(LibGLUT, 'glutSolidTeapot'); - @glutWireOctahedron := GetModuleSymbol(LibGLUT, 'glutWireOctahedron'); - @glutSolidOctahedron := GetModuleSymbol(LibGLUT, 'glutSolidOctahedron'); - @glutWireTetrahedron := GetModuleSymbol(LibGLUT, 'glutWireTetrahedron'); - @glutSolidTetrahedron := GetModuleSymbol(LibGLUT, 'glutSolidTetrahedron'); - @glutWireIcosahedron := GetModuleSymbol(LibGLUT, 'glutWireIcosahedron'); - @glutSolidIcosahedron := GetModuleSymbol(LibGLUT, 'glutSolidIcosahedron'); - @glutVideoResizeGet := GetModuleSymbol(LibGLUT, 'glutVideoResizeGet'); - @glutSetupVideoResizing := GetModuleSymbol(LibGLUT, 'glutSetupVideoResizing'); - @glutStopVideoResizing := GetModuleSymbol(LibGLUT, 'glutStopVideoResizing'); - @glutVideoResize := GetModuleSymbol(LibGLUT, 'glutVideoResize'); - @glutVideoPan := GetModuleSymbol(LibGLUT, 'glutVideoPan'); - @glutReportErrors := GetModuleSymbol(LibGLUT, 'glutReportErrors'); - @glutGameModeString := GetModuleSymbol(LibGLUT, 'glutGameModeString'); - @glutEnterGameMode := GetModuleSymbol(LibGLUT, 'glutEnterGameMode'); - @glutLeaveGameMode := GetModuleSymbol(LibGLUT, 'glutLeaveGameMode'); - @glutGameModeGet := GetModuleSymbol(LibGLUT, 'glutGameModeGet'); - end; -end; - -initialization - LoadGlut( GlutLibName ); - -finalization - FreeGlut; - -end. diff --git a/src/lib/OpenGL/glx.pas b/src/lib/OpenGL/glx.pas deleted file mode 100644 index 9f36d2b5..00000000 --- a/src/lib/OpenGL/glx.pas +++ /dev/null @@ -1,279 +0,0 @@ -unit glx; -{ - $Id: glx.pas,v 1.3 2006/11/20 21:20:59 savage Exp $ - - Translation of the Mesa GLX headers for FreePascal - Copyright (C) 1999 Sebastian Guenther - - - Mesa 3-D graphics library - Version: 3.0 - Copyright (C) 1995-1998 Brian Paul - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -} - -// {$MODE delphi} // objfpc would not work because of direct proc var assignments - -{You have to enable Macros (compiler switch "-Sm") for compiling this unit! - This is necessary for supporting different platforms with different calling - conventions via a single unit.} - -{ - $Log: glx.pas,v $ - Revision 1.3 2006/11/20 21:20:59 savage - Updated to work in MacOS X - - Revision 1.2 2006/04/18 18:38:33 savage - fixed boolean test - thanks grudzio - - Revision 1.1 2004/03/30 21:53:55 savage - Moved to it's own folder. - - Revision 1.5 2004/02/15 22:48:35 savage - More FPC and FreeBSD support changes. - - Revision 1.4 2004/02/14 22:36:29 savage - Fixed inconsistencies of using LoadLibrary and LoadModule. - Now all units make use of LoadModule rather than LoadLibrary and other dynamic proc procedures. - - Revision 1.3 2004/02/14 00:23:39 savage - As UNIX is defined in jedi-sdl.inc this will be used to check linux compatability as well. Units have been changed to reflect this change. - - Revision 1.2 2004/02/14 00:09:19 savage - Changed uses to now make use of moduleloader.pas rather than dllfuncs.pas - - Revision 1.1 2004/02/05 00:08:19 savage - Module 1.0 release - - Revision 1.1 2003/05/11 13:18:03 savage - Newest OpenGL Headers For Delphi, Kylix and FPC - - Revision 1.1 2002/10/13 13:57:31 sg - * Finally, the new units are available: Match the C headers more closely; - support for OpenGL extensions, and much more. Based on the Delphi units - by Tom Nuydens of delphi3d.net - -} - -interface - -{$I jedi-sdl.inc} - -{$IFDEF UNIX} - uses - {$IFDEF FPC} - x, - xlib, - xutil; - {$ELSE} - xlib; - {$ENDIF} - {$DEFINE HasGLX} // Activate GLX stuff -{$ELSE} - {$MESSAGE Unsupported platform.} -{$ENDIF} - -{$IFNDEF HasGLX} - {$MESSAGE GLX not present on this platform.} -{$ENDIF} - - -// ======================================================= -// Unit specific extensions -// ======================================================= - -// Note: Requires that the GL library has already been initialized -function InitGLX: Boolean; - -var - GLXDumpUnresolvedFunctions, - GLXInitialized: Boolean; - - -// ======================================================= -// GLX consts, types and functions -// ======================================================= - -// Tokens for glXChooseVisual and glXGetConfig: -const - GLX_USE_GL = 1; - GLX_BUFFER_SIZE = 2; - GLX_LEVEL = 3; - GLX_RGBA = 4; - GLX_DOUBLEBUFFER = 5; - GLX_STEREO = 6; - GLX_AUX_BUFFERS = 7; - GLX_RED_SIZE = 8; - GLX_GREEN_SIZE = 9; - GLX_BLUE_SIZE = 10; - GLX_ALPHA_SIZE = 11; - GLX_DEPTH_SIZE = 12; - GLX_STENCIL_SIZE = 13; - GLX_ACCUM_RED_SIZE = 14; - GLX_ACCUM_GREEN_SIZE = 15; - GLX_ACCUM_BLUE_SIZE = 16; - GLX_ACCUM_ALPHA_SIZE = 17; - - // GLX_EXT_visual_info extension - GLX_X_VISUAL_TYPE_EXT = $22; - GLX_TRANSPARENT_TYPE_EXT = $23; - GLX_TRANSPARENT_INDEX_VALUE_EXT = $24; - GLX_TRANSPARENT_RED_VALUE_EXT = $25; - GLX_TRANSPARENT_GREEN_VALUE_EXT = $26; - GLX_TRANSPARENT_BLUE_VALUE_EXT = $27; - GLX_TRANSPARENT_ALPHA_VALUE_EXT = $28; - - - // Error codes returned by glXGetConfig: - GLX_BAD_SCREEN = 1; - GLX_BAD_ATTRIBUTE = 2; - GLX_NO_EXTENSION = 3; - GLX_BAD_VISUAL = 4; - GLX_BAD_CONTEXT = 5; - GLX_BAD_VALUE = 6; - GLX_BAD_ENUM = 7; - - // GLX 1.1 and later: - GLX_VENDOR = 1; - GLX_VERSION = 2; - GLX_EXTENSIONS = 3; - - // GLX_visual_info extension - GLX_TRUE_COLOR_EXT = $8002; - GLX_DIRECT_COLOR_EXT = $8003; - GLX_PSEUDO_COLOR_EXT = $8004; - GLX_STATIC_COLOR_EXT = $8005; - GLX_GRAY_SCALE_EXT = $8006; - GLX_STATIC_GRAY_EXT = $8007; - GLX_NONE_EXT = $8000; - GLX_TRANSPARENT_RGB_EXT = $8008; - GLX_TRANSPARENT_INDEX_EXT = $8009; - -type - // From XLib: - {$IFNDEF FPC} - TXID = XID; - {$ENDIF} - XPixmap = TXID; - XFont = TXID; - XColormap = TXID; - - GLXContext = Pointer; - GLXPixmap = TXID; - GLXDrawable = TXID; - GLXContextID = TXID; - -var - glXChooseVisual: function(dpy: PDisplay; screen: Integer; var attribList: Integer): PXVisualInfo; cdecl; - glXCreateContext: function(dpy: PDisplay; vis: PXVisualInfo; shareList: GLXContext; direct: Boolean): GLXContext; cdecl; - glXDestroyContext: procedure(dpy: PDisplay; ctx: GLXContext); cdecl; - glXMakeCurrent: function(dpy: PDisplay; drawable: GLXDrawable; ctx: GLXContext): Boolean; cdecl; - glXCopyContext: procedure(dpy: PDisplay; src, dst: GLXContext; mask: LongWord); cdecl; - glXSwapBuffers: procedure(dpy: PDisplay; drawable: GLXDrawable); cdecl; - glXCreateGLXPixmap: function(dpy: PDisplay; visual: PXVisualInfo; pixmap: XPixmap): GLXPixmap; cdecl; - glXDestroyGLXPixmap: procedure(dpy: PDisplay; pixmap: GLXPixmap); cdecl; - glXQueryExtension: function(dpy: PDisplay; var errorb, event: Integer): Boolean; cdecl; - glXQueryVersion: function(dpy: PDisplay; var maj, min: Integer): Boolean; cdecl; - glXIsDirect: function(dpy: PDisplay; ctx: GLXContext): Boolean; cdecl; - glXGetConfig: function(dpy: PDisplay; visual: PXVisualInfo; attrib: Integer; var value: Integer): Integer; cdecl; - glXGetCurrentContext: function: GLXContext; cdecl; - glXGetCurrentDrawable: function: GLXDrawable; cdecl; - glXWaitGL: procedure; cdecl; - glXWaitX: procedure; cdecl; - glXUseXFont: procedure(font: XFont; first, count, list: Integer); cdecl; - - // GLX 1.1 and later - glXQueryExtensionsString: function(dpy: PDisplay; screen: Integer): PChar; cdecl; - glXQueryServerString: function(dpy: PDisplay; screen, name: Integer): PChar; cdecl; - glXGetClientString: function(dpy: PDisplay; name: Integer): PChar; cdecl; - - // Mesa GLX Extensions - glXCreateGLXPixmapMESA: function(dpy: PDisplay; visual: PXVisualInfo; pixmap: XPixmap; cmap: XColormap): GLXPixmap; cdecl; - glXReleaseBufferMESA: function(dpy: PDisplay; d: GLXDrawable): Boolean; cdecl; - glXCopySubBufferMESA: procedure(dpy: PDisplay; drawbale: GLXDrawable; x, y, width, height: Integer); cdecl; - glXGetVideoSyncSGI: function(var counter: LongWord): Integer; cdecl; - glXWaitVideoSyncSGI: function(divisor, remainder: Integer; var count: LongWord): Integer; cdecl; - - -// ======================================================= -// -// ======================================================= - -implementation - -uses - {$IFNDEF __GPC__} - SysUtils, - {$ENDIF} - moduleloader; - -(* {$LINKLIB m} *) - -var - libGLX: TModuleHandle; - -function InitGLXFromLibrary( dll : PChar ): Boolean; -begin - Result := False; - - if not LoadModule( libGLX, dll ) then - exit; - - glXChooseVisual := GetModuleSymbol(libglx, 'glXChooseVisual'); - glXCreateContext := GetModuleSymbol(libglx, 'glXCreateContext'); - glXDestroyContext := GetModuleSymbol(libglx, 'glXDestroyContext'); - glXMakeCurrent := GetModuleSymbol(libglx, 'glXMakeCurrent'); - glXCopyContext := GetModuleSymbol(libglx, 'glXCopyContext'); - glXSwapBuffers := GetModuleSymbol(libglx, 'glXSwapBuffers'); - glXCreateGLXPixmap := GetModuleSymbol(libglx, 'glXCreateGLXPixmap'); - glXDestroyGLXPixmap := GetModuleSymbol(libglx, 'glXDestroyGLXPixmap'); - glXQueryExtension := GetModuleSymbol(libglx, 'glXQueryExtension'); - glXQueryVersion := GetModuleSymbol(libglx, 'glXQueryVersion'); - glXIsDirect := GetModuleSymbol(libglx, 'glXIsDirect'); - glXGetConfig := GetModuleSymbol(libglx, 'glXGetConfig'); - glXGetCurrentContext := GetModuleSymbol(libglx, 'glXGetCurrentContext'); - glXGetCurrentDrawable := GetModuleSymbol(libglx, 'glXGetCurrentDrawable'); - glXWaitGL := GetModuleSymbol(libglx, 'glXWaitGL'); - glXWaitX := GetModuleSymbol(libglx, 'glXWaitX'); - glXUseXFont := GetModuleSymbol(libglx, 'glXUseXFont'); - // GLX 1.1 and later - glXQueryExtensionsString := GetModuleSymbol(libglx, 'glXQueryExtensionsString'); - glXQueryServerString := GetModuleSymbol(libglx, 'glXQueryServerString'); - glXGetClientString := GetModuleSymbol(libglx, 'glXGetClientString'); - // Mesa GLX Extensions - glXCreateGLXPixmapMESA := GetModuleSymbol(libglx, 'glXCreateGLXPixmapMESA'); - glXReleaseBufferMESA := GetModuleSymbol(libglx, 'glXReleaseBufferMESA'); - glXCopySubBufferMESA := GetModuleSymbol(libglx, 'glXCopySubBufferMESA'); - glXGetVideoSyncSGI := GetModuleSymbol(libglx, 'glXGetVideoSyncSGI'); - glXWaitVideoSyncSGI := GetModuleSymbol(libglx, 'glXWaitVideoSyncSGI'); - - GLXInitialized := True; - Result := True; -end; - -function InitGLX: Boolean; -begin - Result := InitGLXFromLibrary('libGL.so.1') or - InitGLXFromLibrary('libMesaGL.so') or - InitGLXFromLibrary('libMesaGL.so.3'); -end; - - -initialization - InitGLX; -finalization - UnloadModule(libGLX); -end. diff --git a/src/lib/OpenGL/moduleloader.pas b/src/lib/OpenGL/moduleloader.pas deleted file mode 100644 index ec4ae95b..00000000 --- a/src/lib/OpenGL/moduleloader.pas +++ /dev/null @@ -1,322 +0,0 @@ -unit moduleloader; -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} -{ - $Id: moduleloader.pas,v 1.4 2004/02/20 17:19:10 savage Exp $ - -} -{******************************************************************} -{ } -{ Project JEDI } -{ OS independent Dynamic Loading Helpers } -{ } -{ The initial developer of the this code is } -{ Robert Marquardt <robert_marquardt@gmx.de) } -{ } -{ Copyright (C) 2000, 2001 Robert Marquardt. } -{ } -{ Obtained through: } -{ Joint Endeavour of Delphi Innovators (Project JEDI) } -{ } -{ You may retrieve the latest version of this file at the Project } -{ JEDI home page, located at http://delphi-jedi.org } -{ } -{ The contents of this file are used with permission, 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/NPL/NPL-1_1Final.html } -{ } -{ 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. } -{ } -{******************************************************************} -{ - $Log: moduleloader.pas,v $ - Revision 1.4 2004/02/20 17:19:10 savage - Added Calling convention to Win32 functions just in case. - - Revision 1.3 2004/02/14 22:36:29 savage - Fixed inconsistencies of using LoadLibrary and LoadModule. - Now all units make use of LoadModule rather than LoadLibrary and other dynamic proc procedures. - - Revision 1.2 2004/02/14 00:23:39 savage - As UNIX is defined in jedi-sdl.inc this will be used to check linux compatability as well. Units have been changed to reflect this change. - - Revision 1.1 2004/02/14 00:04:50 savage - dllfuncs conflicts with FreePascal so it has been renamed back to the moduleloader.pas - - Revision 1.1 2004/02/05 00:08:19 savage - Module 1.0 release - - -} - -interface - -{$WEAKPACKAGEUNIT ON} - -// each OS gets its own IFDEFed complete code block to make reading easier - -{$IFDEF MSWINDOWS} -uses - Windows; - -type - // Handle to a loaded DLL - TModuleHandle = HINST; - -const - // Value designating an unassigned TModuleHandle od a failed loading - INVALID_MODULEHANDLE_VALUE = TModuleHandle(0); - -function LoadModule(var Module: TModuleHandle; FileName: PChar): Boolean; -function LoadModuleEx(var Module: TModuleHandle; FileName: PChar; Flags: Cardinal): Boolean; -procedure UnloadModule(var Module: TModuleHandle); -function GetModuleSymbol(Module: TModuleHandle; SymbolName: PChar): Pointer; -function GetModuleSymbolEx(Module: TModuleHandle; SymbolName: PChar; var Accu: Boolean): Pointer; -function ReadModuleData(Module: TModuleHandle; SymbolName: PChar; var Buffer; Size: Cardinal): Boolean; -function WriteModuleData(Module: TModuleHandle; SymbolName: PChar; var Buffer; Size: Cardinal): Boolean; - -implementation - -// load the DLL file FileName -// the rules for FileName are those of LoadLibrary -// Returns: True = success, False = failure to load -// Assigns: the handle of the loaded DLL to Module -// Warning: if Module has any other value than INVALID_MODULEHANDLE_VALUE -// on entry the function will do nothing but returning success. - -function LoadModule(var Module: TModuleHandle; FileName: PChar): Boolean; -begin - if Module = INVALID_MODULEHANDLE_VALUE then - Module := LoadLibrary( FileName ); - Result := Module <> INVALID_MODULEHANDLE_VALUE; -end; - -// load the DLL file FileName -// LoadLibraryEx is used to get better control of the loading -// for the allowed values for flags see LoadLibraryEx documentation. - -function LoadModuleEx(var Module: TModuleHandle; FileName: PChar; Flags: Cardinal): Boolean; -begin - if Module = INVALID_MODULEHANDLE_VALUE then - Module := LoadLibraryEx( FileName, 0, Flags); - Result := Module <> INVALID_MODULEHANDLE_VALUE; -end; - -// unload a DLL loaded with LoadModule or LoadModuleEx -// The procedure will not try to unload a handle with -// value INVALID_MODULEHANDLE_VALUE and assigns this value -// to Module after unload. - -procedure UnloadModule(var Module: TModuleHandle); -begin - if Module <> INVALID_MODULEHANDLE_VALUE then - FreeLibrary(Module); - Module := INVALID_MODULEHANDLE_VALUE; -end; - -// returns the pointer to the symbol named SymbolName -// if it is exported from the DLL Module -// nil is returned if the symbol is not available - -function GetModuleSymbol(Module: TModuleHandle; SymbolName: PChar): Pointer; -begin - Result := nil; - if Module <> INVALID_MODULEHANDLE_VALUE then - Result := GetProcAddress(Module, SymbolName ); -end; - -// returns the pointer to the symbol named SymbolName -// if it is exported from the DLL Module -// nil is returned if the symbol is not available. -// as an extra the boolean variable Accu is updated -// by anding in the success of the function. -// This is very handy for rendering a global result -// when accessing a long list of symbols. - -function GetModuleSymbolEx(Module: TModuleHandle; SymbolName: PChar; var Accu: Boolean): Pointer; -begin - Result := nil; - if Module <> INVALID_MODULEHANDLE_VALUE then - Result := GetProcAddress(Module, SymbolName ); - Accu := Accu and (Result <> nil); -end; - -// get the value of variables exported from a DLL Module -// Delphi cannot access variables in a DLL directly, so -// this function allows to copy the data from the DLL. -// Beware! You are accessing the DLL memory image directly. -// Be sure to access a variable not a function and be sure -// to read the correct amount of data. - -function ReadModuleData(Module: TModuleHandle; SymbolName: PChar; var Buffer; Size: Cardinal): Boolean; -var - Sym: Pointer; -begin - Result := True; - Sym := GetModuleSymbolEx(Module, SymbolName, Result); - if Result then - Move(Sym^, Buffer, Size); -end; - -// set the value of variables exported from a DLL Module -// Delphi cannot access variables in a DLL directly, so -// this function allows to copy the data to the DLL! -// BEWARE! You are accessing the DLL memory image directly. -// Be sure to access a variable not a function and be sure -// to write the correct amount of data. -// The changes are not persistent. They get lost when the -// DLL is unloaded. - -function WriteModuleData(Module: TModuleHandle; SymbolName: PChar; var Buffer; Size: Cardinal): Boolean; -var - Sym: Pointer; -begin - Result := True; - Sym := GetModuleSymbolEx(Module, SymbolName, Result); - if Result then - Move(Buffer, Sym^, Size); -end; - -{$ENDIF} - -{$IFDEF Unix} -uses -{$ifdef FPC} - dl, - Types, - Baseunix, - Unix; -{$else} - Types, - Libc; -{$endif} - -type - // Handle to a loaded .so - TModuleHandle = Pointer; - -const - // Value designating an unassigned TModuleHandle od a failed loading - INVALID_MODULEHANDLE_VALUE = TModuleHandle(nil); - -function LoadModule(var Module: TModuleHandle; FileName: PChar): Boolean; -function LoadModuleEx(var Module: TModuleHandle; FileName: PChar; Flags: Cardinal): Boolean; -procedure UnloadModule(var Module: TModuleHandle); -function GetModuleSymbol(Module: TModuleHandle; SymbolName: PChar): Pointer; -function GetModuleSymbolEx(Module: TModuleHandle; SymbolName: PChar; var Accu: Boolean): Pointer; -function ReadModuleData(Module: TModuleHandle; SymbolName: PChar; var Buffer; Size: Cardinal): Boolean; -function WriteModuleData(Module: TModuleHandle; SymbolName: PChar; var Buffer; Size: Cardinal): Boolean; - -implementation - -// load the .so file FileName -// the rules for FileName are those of dlopen() -// Returns: True = success, False = failure to load -// Assigns: the handle of the loaded .so to Module -// Warning: if Module has any other value than INVALID_MODULEHANDLE_VALUE -// on entry the function will do nothing but returning success. - -function LoadModule(var Module: TModuleHandle; FileName: PChar): Boolean; -begin - if Module = INVALID_MODULEHANDLE_VALUE then - Module := dlopen( FileName, RTLD_NOW); - Result := Module <> INVALID_MODULEHANDLE_VALUE; -end; - -// load the .so file FileName -// dlopen() with flags is used to get better control of the loading -// for the allowed values for flags see "man dlopen". - -function LoadModuleEx(var Module: TModuleHandle; FileName: PChar; Flags: Cardinal): Boolean; -begin - if Module = INVALID_MODULEHANDLE_VALUE then - Module := dlopen( FileName, Flags); - Result := Module <> INVALID_MODULEHANDLE_VALUE; -end; - -// unload a .so loaded with LoadModule or LoadModuleEx -// The procedure will not try to unload a handle with -// value INVALID_MODULEHANDLE_VALUE and assigns this value -// to Module after unload. - -procedure UnloadModule(var Module: TModuleHandle); -begin - if Module <> INVALID_MODULEHANDLE_VALUE then - dlclose(Module); - Module := INVALID_MODULEHANDLE_VALUE; -end; - -// returns the pointer to the symbol named SymbolName -// if it is exported from the .so Module -// nil is returned if the symbol is not available - -function GetModuleSymbol(Module: TModuleHandle; SymbolName: PChar): Pointer; -begin - Result := nil; - if Module <> INVALID_MODULEHANDLE_VALUE then - Result := dlsym(Module, SymbolName ); -end; - -// returns the pointer to the symbol named SymbolName -// if it is exported from the .so Module -// nil is returned if the symbol is not available. -// as an extra the boolean variable Accu is updated -// by anding in the success of the function. -// This is very handy for rendering a global result -// when accessing a long list of symbols. - -function GetModuleSymbolEx(Module: TModuleHandle; SymbolName: PChar; var Accu: Boolean): Pointer; -begin - Result := nil; - if Module <> INVALID_MODULEHANDLE_VALUE then - Result := dlsym(Module, SymbolName ); - Accu := Accu and (Result <> nil); -end; - -// get the value of variables exported from a .so Module -// Delphi cannot access variables in a .so directly, so -// this function allows to copy the data from the .so. -// Beware! You are accessing the .so memory image directly. -// Be sure to access a variable not a function and be sure -// to read the correct amount of data. - -function ReadModuleData(Module: TModuleHandle; SymbolName: PChar; var Buffer; Size: Cardinal): Boolean; -var - Sym: Pointer; -begin - Result := True; - Sym := GetModuleSymbolEx(Module, SymbolName, Result); - if Result then - Move(Sym^, Buffer, Size); -end; - -// set the value of variables exported from a .so Module -// Delphi cannot access variables in a .so directly, so -// this function allows to copy the data to the .so! -// BEWARE! You are accessing the .so memory image directly. -// Be sure to access a variable not a function and be sure -// to write the correct amount of data. -// The changes are not persistent. They get lost when the -// .so is unloaded. - -function WriteModuleData(Module: TModuleHandle; SymbolName: PChar; var Buffer; Size: Cardinal): Boolean; -var - Sym: Pointer; -begin - Result := True; - Sym := GetModuleSymbolEx(Module, SymbolName, Result); - if Result then - Move(Buffer, Sym^, Size); -end; -{$ENDIF} - -{$IFDEF __MACH__} // Mach definitions go here -{$ENDIF} - -end. diff --git a/src/lib/SDL2/SDL2_gfx.pas b/src/lib/SDL2/SDL2_gfx.pas index 5cdd1f92..59d4adc9 100644 --- a/src/lib/SDL2/SDL2_gfx.pas +++ b/src/lib/SDL2/SDL2_gfx.pas @@ -44,8 +44,8 @@ interface {$IFDEF UNIX} {$IFDEF DARWIN} - GFX_LibName = 'libSDL2.dylib'; -// {$linklib libSDL2_gfx} + GFX_LibName = 'libSDL2_gfx.dylib'; + {$linklib libSDL2_gfx} {$ELSE} {$IFDEF FPC} GFX_LibName = 'libSDL2_gfx.so'; @@ -55,6 +55,13 @@ interface {$ENDIF} {$ENDIF} + {$IFDEF MACOS} + GFX_LibName = 'SDL2_gfx'; + {$IFDEF FPC} + {$linklib libSDL2_gfx} + {$ENDIF} + {$ENDIF} + {$IF DEFINED(DELPHI) AND DEFINED(MACOS)} {$DEFINE DELMAC} {$ENDIF} diff --git a/src/lib/SDL2/SDL2_image.pas b/src/lib/SDL2/SDL2_image.pas index b87f3978..f9eff762 100644 --- a/src/lib/SDL2/SDL2_image.pas +++ b/src/lib/SDL2/SDL2_image.pas @@ -51,7 +51,7 @@ interface {$IFDEF UNIX} {$IFDEF DARWIN} IMG_LibName = 'libSDL2_image.dylib'; - {$linklib libSDL2_image} + {$linklib libSDL2_image} {$ELSE} {$IFDEF FPC} IMG_LibName = 'libSDL2_image.so'; @@ -61,6 +61,13 @@ interface {$ENDIF} {$ENDIF} + {$IFDEF MACOS} + IMG_LibName = 'SDL2_image'; + {$IFDEF FPC} + {$linklib libSDL2_image} + {$ENDIF} + {$ENDIF} + {* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL *} SDL_IMAGE_MAJOR_VERSION = 2; SDL_IMAGE_MINOR_VERSION = 0; diff --git a/src/lib/SDL2/SDL2_mixer.pas b/src/lib/SDL2/SDL2_mixer.pas index 3b469c9f..8406e25e 100644 --- a/src/lib/SDL2/SDL2_mixer.pas +++ b/src/lib/SDL2/SDL2_mixer.pas @@ -45,7 +45,7 @@ interface {$IFDEF UNIX} {$IFDEF DARWIN} MIX_LibName = 'libSDL2_mixer.dylib'; - {$linklib libSDL2_mixer} + {$linklib libSDL2_mixer} {$ELSE} {$IFDEF FPC} MIX_LibName = 'libSDL2_mixer.so'; @@ -55,6 +55,13 @@ interface {$ENDIF} {$ENDIF} + {$IFDEF MACOS} + MIX_LibName = 'SDL2_mixer'; + {$IFDEF FPC} + {$linklib libSDL2_mixer} + {$ENDIF} + {$ENDIF} + {* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL *} const SDL_MIXER_MAJOR_VERSION = 2; diff --git a/src/lib/SDL2/SDL2_net.pas b/src/lib/SDL2/SDL2_net.pas index ba2b5125..29658c79 100644 --- a/src/lib/SDL2/SDL2_net.pas +++ b/src/lib/SDL2/SDL2_net.pas @@ -36,8 +36,8 @@ {$IFDEF UNIX} {$IFDEF DARWIN} - SDLNet_LibName = 'libSDL2.dylib'; -// {$linklib libSDL2_net} + SDLNet_LibName = 'libSDL2_net.dylib'; + {$linklib libSDL2_net} {$ELSE} {$IFDEF FPC} SDLNet_LibName = 'libSDL2_net.so'; @@ -47,6 +47,14 @@ {$ENDIF} {$ENDIF} + {$IFDEF MACOS} + SDLNet_LibName = 'SDL2_net'; + {$IFDEF FPC} + {$linklib libSDL2_net} + {$ENDIF} + {$ENDIF} + + type TSDLNet_Version = TSDL_Version; @@ -325,7 +333,7 @@ TSDLNet_GenericSocket = record socket that was in the socket set, to find out if data is available for reading. *} - function SDLNet_SocketReady(sock: TSDLNet_GenericSocket): Integer; + function SDLNet_SocketReady(sock: TSDLNet_GenericSocket): Integer; {$IFNDEF DELPHI} inline; {$ELSE} {$IFDEF DELPHI10UP} inline; {$ENDIF} {$ENDIF} {* Free a set of sockets allocated by SDL_NetAllocSocketSet() *} procedure SDLNet_FreeSocketSet(set_: TSDLNet_SocketSet) cdecl; external SDLNet_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDLNet_FreeSocketSet' {$ENDIF} {$ENDIF}; diff --git a/src/lib/SDL2/SDL2_ttf.pas b/src/lib/SDL2/SDL2_ttf.pas index 98858542..310e99c8 100644 --- a/src/lib/SDL2/SDL2_ttf.pas +++ b/src/lib/SDL2/SDL2_ttf.pas @@ -49,8 +49,8 @@ interface {$IFDEF UNIX} {$IFDEF DARWIN} - TTF_LibName = 'libSDL2.dylib'; - {$linklib libSDL2_ttf} + TTF_LibName = 'libSDL2_tff.dylib'; + {$linklib libSDL2_ttf} {$ELSE} {$IFDEF FPC} TTF_LibName = 'libSDL2_ttf.so'; @@ -60,6 +60,13 @@ interface {$ENDIF} {$ENDIF} + {$IFDEF MACOS} + TTF_LibName = 'SDL2_ttf'; + {$IFDEF FPC} + {$linklib libSDL2_ttf} + {$ENDIF} + {$ENDIF} + {* Set up for C function definitions, even when using C++ *} {* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL *} diff --git a/src/lib/SDL2/jedi.inc b/src/lib/SDL2/jedi.inc index fcbb84a0..38a250f4 100644 --- a/src/lib/SDL2/jedi.inc +++ b/src/lib/SDL2/jedi.inc @@ -393,6 +393,31 @@ {$DEFINE HAS_TYPES} {$ENDIF ver270} +{$IFNDEF FPC} +{$IF CompilerVersion > 27} + {$DEFINE Delphi} {Delphi / C++ Builder} + {$DEFINE Delphi4UP} + {$DEFINE Delphi5UP} + {$DEFINE Delphi6UP} + {$DEFINE Delphi7UP} + {$DEFINE Delphi8UP} + {$DEFINE Delphi9UP} + {$DEFINE Delphi10UP} + {$DEFINE Delphi11UP} + {$DEFINE Delphi12UP} + {$DEFINE Delphi13UP} + {$DEFINE Delphi14UP} + {$DEFINE Delphi15UP} + {$DEFINE Delphi16UP} + {$DEFINE Delphi17UP} + {$WARN UNSAFE_TYPE OFF} {Disable warning for unsafe types} + {$DEFINE Has_Int64} + {$DEFINE Has_UInt64} + {$DEFINE Has_Native} + {$DEFINE HAS_TYPES} +{$IFEND} +{$ENDIF} + {*************** define 16/32/64 Bit ********************} {$IFDEF WIN16} diff --git a/src/lib/SDL2/sdl2.pas b/src/lib/SDL2/sdl2.pas index cd501111..5d19c525 100644 --- a/src/lib/SDL2/sdl2.pas +++ b/src/lib/SDL2/sdl2.pas @@ -88,7 +88,8 @@ { Changelog: ---------- - ? ?: Delphi 6+ bugfixes/compatibility. Thx to Peter Karpov for identifiying and testing. + ? 31.01.2016: updated sdlevents.inc to SDL2 2.0.4, adressing issue #24 (thx to imantsg) + ? 16.01.2016: Delphi 6+ bugfixes/compatibility. Thx to Peter Karpov for identifiying and testing. v.1.80-stable; 09.10.2014: added sdl_cpuinfo.h and sdl_clipboard.h v.1.74-stable; 10.11.2013: added sdl_gamecontroller.h v.1.73-stable; 08.11.2013: added sdl_hints.h and some keystate helpers @@ -143,8 +144,6 @@ interface {$IFDEF DARWIN} uses - X, - XLib, CocoaAll; {$ENDIF} @@ -157,7 +156,7 @@ interface {$IFDEF UNIX} {$IFDEF DARWIN} SDL_LibName = 'libSDL2.dylib'; - {$linklib libSDL2} + {$linklib libSDL2} {$ELSE} {$IFDEF FPC} SDL_LibName = 'libSDL2.so'; @@ -167,6 +166,13 @@ interface {$ENDIF} {$ENDIF} + {$IFDEF MACOS} + SDL_LibName = 'SDL2'; + {$IFDEF FPC} + {$linklib libSDL2} + {$ENDIF} + {$ENDIF} + {$I sdltype.inc} {$I sdlversion.inc} {$I sdlerror.inc} @@ -258,6 +264,14 @@ function SDL_RectEquals(A: TSDL_Rect; B: TSDL_Rect): Boolean; Result := (A.x = B.x) and (A.y = B.y) and (A.w = B.w) and (A.h = B.h); end; +function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean; Inline; +begin + Result := + (p^.x >= r^.x) and (p^.x < (r^.x + r^.w)) + and + (p^.y >= r^.y) and (p^.y < (r^.y + r^.h)) +end; + //from "sdl_rwops.h" function SDL_RWsize(ctx: PSDL_RWops): SInt64; @@ -334,29 +348,29 @@ function SDL_AUDIO_ISUNSIGNED(x: Cardinal): Cardinal; //from "sdl_pixels.h" -function SDL_PIXELFLAG(X: Cardinal): Boolean; +function SDL_PIXELFLAG(X: Cardinal): Cardinal; begin - Result := (X shr 28) = $0F; + Result := (X shr 28) and $0F; end; -function SDL_PIXELTYPE(X: Cardinal): Boolean; +function SDL_PIXELTYPE(X: Cardinal): Cardinal; begin - Result := (X shr 24) = $0F; + Result := (X shr 24) and $0F; end; -function SDL_PIXELORDER(X: Cardinal): Boolean; +function SDL_PIXELORDER(X: Cardinal): Cardinal; begin - Result := (X shr 20) = $0F; + Result := (X shr 20) and $0F; end; -function SDL_PIXELLAYOUT(X: Cardinal): Boolean; +function SDL_PIXELLAYOUT(X: Cardinal): Cardinal; begin - Result := (X shr 16) = $0F; + Result := (X shr 16) and $0F; end; -function SDL_BITSPERPIXEL(X: Cardinal): Boolean; +function SDL_BITSPERPIXEL(X: Cardinal): Cardinal; begin - Result := (X shr 8) = $FF; + Result := (X shr 8) and $FF; end; function SDL_IsPixelFormat_FOURCC(format: Variant): Boolean; diff --git a/src/lib/SDL2/sdlaudio.inc b/src/lib/SDL2/sdlaudio.inc index aeb60109..c6b2bfdb 100644 --- a/src/lib/SDL2/sdlaudio.inc +++ b/src/lib/SDL2/sdlaudio.inc @@ -115,7 +115,7 @@ const * Stereo samples are stored in a LRLRLR ordering. *} type - TSDL_AudioCallback = procedure(userdata: Pointer; stream: PUInt8; len: Integer); + TSDL_AudioCallback = procedure(userdata: Pointer; stream: PUInt8; len: Integer) cdecl; {** * The calculated values in this structure are calculated by SDL_OpenAudio(). @@ -135,7 +135,7 @@ type end; PSDL_AudioCVT = ^TSDL_AudioCVT; - TSDL_AudioFilter = procedure(cvt: PSDL_AudioCVT; format: TSDL_AudioFormat); + TSDL_AudioFilter = procedure(cvt: PSDL_AudioCVT; format: TSDL_AudioFormat) cdecl; {** * A structure to hold a set of audio conversion filters and buffers. @@ -397,6 +397,149 @@ procedure SDL_MixAudio(dst: PUInt8; src: PUInt8; len: UInt32; volume: Integer) c *} procedure SDL_MixAudioFormat(dst: PUInt8; src: PUInt8; format: TSDL_AudioFormat; len: UInt32; volume: Integer) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_MixAudioFormat' {$ENDIF} {$ENDIF}; + {** + * Queue more audio on non-callback devices. + * + * SDL offers two ways to feed audio to the device: you can either supply a + * callback that SDL triggers with some frequency to obtain more audio + * (pull method), or you can supply no callback, and then SDL will expect + * you to supply data at regular intervals (push method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Queued data will drain to the device as + * necessary without further intervention from you. If the device needs + * audio but there is not enough queued, it will play silence to make up + * the difference. This means you will have skips in your audio playback + * if you aren't routinely queueing sufficient data. + * + * This function copies the supplied data, so you are safe to free it when + * the function returns. This function is thread-safe, but queueing to the + * same device from two threads at once does not promise which buffer will + * be queued first. + * + * You may not queue audio on a device that is using an application-supplied + * callback; doing so returns an error. You have to use the audio callback + * or queue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before queueing; SDL + * handles locking internally for this function. + * + * \param dev The device ID to which we will queue audio. + * \param data The data to queue to the device for later playback. + * \param len The number of bytes (not samples!) to which (data) points. + * \return zero on success, -1 on error. + * + * \sa SDL_GetQueuedAudioSize + * \sa SDL_ClearQueuedAudio + *} +function SDL_QueueAudio(dev: TSDL_AudioDeviceID; data: Pointer; len: UInt32): SInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_QueueAudio' {$ENDIF} {$ENDIF}; + + {** + * Dequeue more audio on non-callback devices. + * + * (If you are looking to queue audio for output on a non-callback playback + * device, you want SDL_QueueAudio() instead. This will always return 0 + * if you use it with playback devices.) + * + * SDL offers two ways to retrieve audio from a capture device: you can + * either supply a callback that SDL triggers with some frequency as the + * device records more audio data, (push method), or you can supply no + * callback, and then SDL will expect you to retrieve data at regular + * intervals (pull method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Data from the device will keep queuing as + * necessary without further intervention from you. This means you will + * eventually run out of memory if you aren't routinely dequeueing data. + * + * Capture devices will not queue data when paused; if you are expecting + * to not need captured audio for some length of time, use + * SDL_PauseAudioDevice() to stop the capture device from queueing more + * data. This can be useful during, say, level loading times. When + * unpaused, capture devices will start queueing data from that point, + * having flushed any capturable data available while paused. + * + * This function is thread-safe, but dequeueing from the same device from + * two threads at once does not promise which thread will dequeued data + * first. + * + * You may not dequeue audio from a device that is using an + * application-supplied callback; doing so returns an error. You have to use + * the audio callback, or dequeue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before queueing; SDL + * handles locking internally for this function. + * + * \param dev The device ID from which we will dequeue audio. + * \param data A pointer into where audio data should be copied. + * \param len The number of bytes (not samples!) to which (data) points. + * \return number of bytes dequeued, which could be less than requested. + * + * \sa SDL_GetQueuedAudioSize + * \sa SDL_ClearQueuedAudio + *} +function SDL_DequeueAudio(dev: TSDL_AudioDeviceID; data: Pointer; len:Uint32):Uint32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_DequeueAudio' {$ENDIF} {$ENDIF}; + + {** + * Get the number of bytes of still-queued audio. + * + * This is the number of bytes that have been queued for playback with + * SDL_QueueAudio(), but have not yet been sent to the hardware. + * + * Once we've sent it to the hardware, this function can not decide the exact + * byte boundary of what has been played. It's possible that we just gave the + * hardware several kilobytes right before you called this function, but it + * hasn't played any of it yet, or maybe half of it, etc. + * + * You may not queue audio on a device that is using an application-supplied + * callback; calling this function on such a device always returns 0. + * You have to use the audio callback or queue audio with SDL_QueueAudio(), + * but not both. + * + * You should not call SDL_LockAudio() on the device before querying; SDL + * handles locking internally for this function. + * + * \param dev The device ID of which we will query queued audio size. + * \return Number of bytes (not samples!) of queued audio. + * + * \sa SDL_QueueAudio + * \sa SDL_ClearQueuedAudio + *} +function SDL_GetQueuedAudioSize(dev: TSDL_AudioDeviceID): UInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetQueuedAudioSize' {$ENDIF} {$ENDIF}; + + {** + * Drop any queued audio data waiting to be sent to the hardware. + * + * Immediately after this call, SDL_GetQueuedAudioSize() will return 0 and + * the hardware will start playing silence if more audio isn't queued. + * + * This will not prevent playback of queued audio that's already been sent + * to the hardware, as we can not undo that, so expect there to be some + * fraction of a second of audio that might still be heard. This can be + * useful if you want to, say, drop any pending music during a level change + * in your game. + * + * You may not queue audio on a device that is using an application-supplied + * callback; calling this function on such a device is always a no-op. + * You have to use the audio callback or queue audio with SDL_QueueAudio(), + * but not both. + * + * You should not call SDL_LockAudio() on the device before clearing the + * queue; SDL handles locking internally for this function. + * + * This function always succeeds and thus returns void. + * + * \param dev The device ID of which to clear the audio queue. + * + * \sa SDL_QueueAudio + * \sa SDL_GetQueuedAudioSize + *} +procedure SDL_ClearQueuedAudio(dev: TSDL_AudioDeviceID); cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_ClearQueuedAudio' {$ENDIF} {$ENDIF}; + {** * Audio lock functions * diff --git a/src/lib/SDL2/sdlcpuinfo.inc b/src/lib/SDL2/sdlcpuinfo.inc index 2ea9f293..29b505c0 100644 --- a/src/lib/SDL2/sdlcpuinfo.inc +++ b/src/lib/SDL2/sdlcpuinfo.inc @@ -70,6 +70,11 @@ function SDL_HasSSE42(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} { *} function SDL_HasAVX(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasAVX' {$ENDIF} {$ENDIF}; +{** + * This function returns true if the CPU has AVX2 features. + *} +function SDL_HasAVX2(): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_HasAVX2' {$ENDIF} {$ENDIF}; + {** * This function returns the amount of RAM configured in the system, in MB. *} diff --git a/src/lib/SDL2/sdlevents.inc b/src/lib/SDL2/sdlevents.inc index e5905443..f15e043e 100644 --- a/src/lib/SDL2/sdlevents.inc +++ b/src/lib/SDL2/sdlevents.inc @@ -49,6 +49,8 @@ const SDL_KEYUP = $301; // Key released SDL_TEXTEDITING = $302; // Keyboard text editing (composition) SDL_TEXTINPUT = $303; // Keyboard text input + SDL_KEYMAPCHANGED = $304; // Keymap changed due to a system event such as an + // input language or keyboard layout change. { Mouse events } SDL_MOUSEMOTION = $400; // Mouse moved @@ -88,9 +90,17 @@ const { Drag and drop events } SDL_DROPFILE = $1000; // The system requests a file open - + SDL_DROPTEXT = $1001; // text/plain drag-and-drop event + SDL_DROPBEGIN = $1002; // A new set of drops is beginning (NULL filename) + SDL_DROPCOMPLETE = $1003; // Current set of drops is now complete (NULL filename) + + { Audio hotplug events } + SDL_AUDIODEVICEADDED = $1100; // A new audio device is available + SDL_AUDIODEVICEREMOVED = $1101; // An audio device has been removed. + { Render events } SDL_RENDER_TARGETS_RESET = $2000; // The render targets have been reset + SDL_RENDER_DEVICE_RESET = $2001; // The device has been reset and all textures need to be recreated {** Events SDL_USEREVENT through SDL_LASTEVENT are for your use, * and should be allocated with SDL_RegisterEvents() @@ -226,6 +236,7 @@ type which: UInt32; // The mouse instance id, or SDL_TOUCH_MOUSEID x: SInt32; // The amount scrolled horizontally y: SInt32; // The amount scrolled vertically + direction: UInt32; // Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back end; {** @@ -345,6 +356,21 @@ type which: SInt32; // The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event end; + {** + * Audio device event structure (event.adevice.*) + *} + + TSDL_AudioDeviceEvent = record + type_: UInt32; // ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED + timestamp: UInt32; + which: UInt32; // The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event + iscapture: UInt8; // zero if an output device, non-zero if a capture device. + padding1: UInt8; + padding2: UInt8; + padding3: UInt8; + end; + + {** * Touch finger event structure (event.tfinger.*) *} @@ -475,6 +501,9 @@ type SDL_CONTROLLERDEVICEREMOVED, SDL_CONTROLLERDEVICEREMAPPED: (cdevice: TSDL_ControllerDeviceEvent); + SDL_AUDIODEVICEADDED, + SDL_AUDIODEVICEREMOVED: (adevice: TSDL_AudioDeviceEvent); + SDL_QUITEV: (quit: TSDL_QuitEvent); SDL_USEREVENT: (user: TSDL_UserEvent); @@ -590,9 +619,9 @@ type type PSDL_EventFilter = ^TSDL_EventFilter; {$IFNDEF GPC} - TSDL_EventFilter = function( event: PSDL_Event ): Integer; cdecl; + TSDL_EventFilter = function( userdata: Pointer; event: PSDL_Event ): Integer; cdecl; {$ELSE} - TSDL_EventFilter = function( event: PSDL_Event ): Integer; + TSDL_EventFilter = function( userdata: Pointer; event: PSDL_Event ): Integer; {$ENDIF} {** @@ -623,7 +652,7 @@ type * If there is no event filter set, this function returns SDL_FALSE. *} - function SDL_GetEventFilter(filter: PSDL_EventFilter; userdata: Pointer): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetEventFilter' {$ENDIF} {$ENDIF}; + function SDL_GetEventFilter(var filter: PSDL_EventFilter; var userdata: PPointer): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetEventFilter' {$ENDIF} {$ENDIF}; {** * Add a function which is called when an event is added to the queue. diff --git a/src/lib/SDL2/sdlgamecontroller.inc b/src/lib/SDL2/sdlgamecontroller.inc index f7583101..7c83ff04 100644 --- a/src/lib/SDL2/sdlgamecontroller.inc +++ b/src/lib/SDL2/sdlgamecontroller.inc @@ -118,6 +118,12 @@ function SDL_GameControllerNameForIndex(joystick_index: Integer): PAnsiChar cdec *} function SDL_GameControllerOpen(joystick_index: Integer): PSDL_GameController cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerOpen' {$ENDIF} {$ENDIF}; + {** + * Return the SDL_GameController associated with an instance id. + *} +function SDL_GameControllerFromInstanceID(joyid: TSDL_JoystickID): PSDL_GameController; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GameControllerFromInstanceID' {$ENDIF} {$ENDIF}; + {** * Return the name for this currently opened controller *} diff --git a/src/lib/SDL2/sdlhints.inc b/src/lib/SDL2/sdlhints.inc index b3f393d6..7240fcd3 100644 --- a/src/lib/SDL2/sdlhints.inc +++ b/src/lib/SDL2/sdlhints.inc @@ -251,6 +251,16 @@ SDL_HINT_ACCELEROMETER_AS_JOYSTICK = 'SDL_ACCELEROMETER_AS_JOYSTICK'; */} SDL_HINT_XINPUT_ENABLED = 'SDL_XINPUT_ENABLED'; +{** + * \brief A hint that specifies that SDL should use the old axis and button mapping for XInput devices. + * + * The variable can be set to the following values: + * 0 use the old axis and button mapping for XInput devices + * 1 do not use old axis and button mapping for XInput devices + * + * By default SDL does not use the old axis and button mapping for XInput devices. + *} +SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING = 'SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING'; {/** * \brief A variable that lets you manually hint extra gamecontroller db entries @@ -309,6 +319,15 @@ SDL_HINT_TIMER_RESOLUTION = 'SDL_TIMER_RESOLUTION'; *} SDL_HINT_VIDEO_HIGHDPI_DISABLED = 'SDL_VIDEO_HIGHDPI_DISABLED'; +{** + * \brief A hint that specifies if the SDL app should not be forced to become a foreground process on Mac OS X. + * + * Possible values: + * 0 force the SDL app to become a foreground process (default) + * 1 do not force the SDL app to become a foreground process + *} +SDL_HINT_MAC_BACKGROUND_APP = 'SDL_HINT_MAC_BACKGROUND_APP'; + {** * \brief A variable that determines whether ctrl+click should generate a right-click event on Mac * @@ -429,6 +448,152 @@ SDL_HINT_WINRT_HANDLE_BACK_BUTTON = 'SDL_HINT_WINRT_HANDLE_BACK_BUTTON'; *} SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES = 'SDL_VIDEO_MAC_FULLSCREEN_SPACES'; +{** + * \brief A hint that specifies the Android APK expansion main file version. + * + * The variable should specify the Android APK expansion main file version (a string number like "1", "2" etc.). + * This hint must be set together with the hint SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * By default this hint is not set and the APK expansion files are not searched. + *} +SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION = 'SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION'; + +{** + * \brief A hint that specifies the Android APK expansion patch file version. + * + * The variable should specify the Android APK expansion patch file version (a string number like "1", "2" etc.). + * This hint must be set together with the hint SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and assets. + * By default this hint is not set and the APK expansion files are not searched. + *} +SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION = 'SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION'; + +{** + * \brief A hint that specifies a variable to control whether mouse and touch events are to be treated together or separately. + * + * Possible values: + * 0 mouse events will be handled as touch events and touch will raise fake mouse events + * 1 mouse events will be handled separately from pure touch events + * + * By default mouse events will be handled as touch events and touch will raise fake mouse events. + * The value of this hint is used at runtime, so it can be changed at any time. + *} +SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH = 'SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH'; + +{** + * \brief A hint that specifies a value to override the binding element for keyboard inputs for Emscripten builds. + * + * Possible values: + * #window the JavaScript window object (this is the default) + * #document the JavaScript document object + * #screen the JavaScript window.screen object + * #canvas the default WebGL canvas element + * + * Any other string without a leading # sign applies to the element on the page with that ID. + * This hint only applies to the Emscripten platform. + *} +SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT = 'SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT'; + +{** + * \brief A hint that specifies whether certain IMEs should handle text editing internally instead of sending SDL_TEXTEDITING events. + * + * Possible values: + * 0 SDL_TEXTEDITING events are sent, and it is the application's responsibility + * to render the text from these events and differentiate it somehow from committed text. (default) + * + * 1 If supported by the IME then SDL_TEXTEDITING events are not sent, + * and text that is being composed will be rendered in its own UI. + *} +SDL_HINT_IME_INTERNAL_EDITING = 'SDL_HINT_IME_INTERNAL_EDITING'; + +{** + * \brief A hint that specifies not to catch the SIGINT or SIGTERM signals. + * + * Possible values: + * 0 SDL will install a SIGINT and SIGTERM handler, and when it catches a signal, convert it into an SDL_QUIT event (default) + * 1 SDL will not install a signal handler at all + * + * This hint only applies to Unix-like platforms. + *} +SDL_HINT_NO_SIGNAL_HANDLERS = 'SDL_HINT_NO_SIGNAL_HANDLERS'; + +{** + * \brief A hint that specifies a variable specifying SDL's threads stack size in bytes or "0" for the backend's default size. + * + * Possible values for this hint are: + * 0 use the backend's default threads stack size (default) + * X use the provided positive threads stack size + * + * Use this hint in case you need to set SDL's threads stack size to other than the default. + * This is specially useful if you build SDL against a non glibc libc library (such as musl) + * which provides a relatively small default thread stack size (a few kilobytes versus the default 8 MB glibc uses). + * + * Support for this hint is currently available only in the pthread backend. + *} +SDL_HINT_THREAD_STACK_SIZE = 'SDL_HINT_THREAD_STACK_SIZE'; + +{** + * \brief A hint that specifies whether the windows message loop is processed by SDL. + * + * Possible values for this hint: + * 0 the window message loop is not run + * 1 the window message loop is processed in SDL_PumpEvents() [default] + *} +SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP = 'SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP'; + +{** + * \brief A hint that specifies that SDL should not to generate SDL_WINDOWEVENT_CLOSE events for Alt+F4 on Microsoft Windows. + * + * Possible values for this hint: + * 0 generate an SDL_WINDOWEVENT_CLOSE event for Alt+F4 (default) + * 1 do not generate event and only do normal key handling for Alt+F4 + *} +SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 = 'SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4'; + +{** + * \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs. + * + * The bitmap header version 4 is required for proper alpha channel support and + * SDL will use it when required. Should this not be desired, this hint can + * force the use of the 40 byte header version which is supported everywhere. + * + * The variable can be set to the following values: + * "0" - Surfaces with a colorkey or an alpha channel are saved to a + * 32-bit BMP file with an alpha mask. SDL will use the bitmap + * header version 4 and set the alpha mask accordingly. + * "1" - Surfaces with a colorkey or an alpha channel are saved to a + * 32-bit BMP file without an alpha mask. The alpha channel data + * will be in the file, but applications are going to ignore it. + * + * The default value is "0". + *} +SDL_HINT_BMP_SAVE_LEGACY_FORMAT = 'SDL_BMP_SAVE_LEGACY_FORMAT'; + +{** + * \brief Tell SDL not to name threads on Windows. + * + * The variable can be set to the following values: + * "0" - SDL will raise the 0x406D1388 Exception to name threads. + * This is the default behavior of SDL <= 2.0.4. (default) + * "1" - SDL will not raise this exception, and threads will be unnamed. + * For .NET languages this is required when running under a debugger. + *} +SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING = 'SDL_WINDOWS_DISABLE_THREAD_NAMING'; + +{** + * \brief A hint that specifies whether the window frame and title bar are interactive when the cursor is hidden. + * + * Possible values for this hint: + * 0 the window frame is not interactive when the cursor is hidden (no move, resize, etc) + * 1 the window frame is interactive when the cursor is hidden + * + * By default SDL will allow interaction with the window frame when the cursor is hidden. + *} +SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN = 'SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN'; {/** * \brief An enumeration of hint priorities diff --git a/src/lib/SDL2/sdljoystick.inc b/src/lib/SDL2/sdljoystick.inc index a2df0586..eb3b47a5 100644 --- a/src/lib/SDL2/sdljoystick.inc +++ b/src/lib/SDL2/sdljoystick.inc @@ -20,6 +20,16 @@ type end; TSDL_JoystickID = SInt32; + + TSDL_JoystickPowerLevel = ( + SDL_JOYSTICK_POWER_UNKNOWN = -1, + SDL_JOYSTICK_POWER_EMPTY, + SDL_JOYSTICK_POWER_LOW, + SDL_JOYSTICK_POWER_MEDIUM, + SDL_JOYSTICK_POWER_FULL, + SDL_JOYSTICK_POWER_WIRED, + SDL_JOYSTICK_POWER_MAX + ); {* Function prototypes *} {** @@ -44,6 +54,12 @@ function SDL_JoystickNameForIndex(device_index: SInt32): PAnsiChar cdecl; extern *} function SDL_JoystickOpen(device_index: SInt32): PSDL_Joystick cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickOpen' {$ENDIF} {$ENDIF}; + {** + * Return the SDL_Joystick associated with an instance id. + *} +function SDL_JoystickFromInstanceID(joyid: TSDL_JoystickID): PSDL_Joystick; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickFromInstanceID' {$ENDIF} {$ENDIF}; + {** * Return the name for this currently opened joystick. * If no name can be found, this function returns NULL. @@ -64,7 +80,7 @@ function SDL_JoystickGetGUID(joystick: PSDL_Joystick): TSDL_JoystickGUID cdecl; * Return a string representation for this guid. pszGUID must point to at least 33 bytes * (32 for the string plus a NULL terminator). *} -procedure SDL_JoystickGetGUIDString(guid: TSDL_JoystickGUId; pszGUID: PAnsiChar; cbGUID: SInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetGUIDString' {$ENDIF} {$ENDIF}; +procedure SDL_JoystickGetGUIDString(guid: TSDL_JoystickGUID; pszGUID: PAnsiChar; cbGUID: SInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetGUIDString' {$ENDIF} {$ENDIF}; {** * convert a string into a joystick formatted guid @@ -179,7 +195,14 @@ function SDL_JoystickGetBall(joystick: PSDL_Joystick; ball: SInt32; dx: PInt; dy * The button indices start at index 0. *} function SDL_JoystickGetButton(joystick: PSDL_Joystick; button: SInt32): UInt8 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickGetButton' {$ENDIF} {$ENDIF}; + {** * Close a joystick previously opened with SDL_JoystickOpen(). *} procedure SDL_JoystickClose(joystick: PSDL_Joystick) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickClose' {$ENDIF} {$ENDIF}; + + {** + * Return the battery level of this joystick + *} +function SDL_JoystickCurrentPowerLevel(joystick: PSDL_Joystick): TSDL_JoystickPowerLevel; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_JoystickCurrentPowerLevel' {$ENDIF} {$ENDIF}; diff --git a/src/lib/SDL2/sdlkeyboard.inc b/src/lib/SDL2/sdlkeyboard.inc index 1943d5ce..90040aa9 100644 --- a/src/lib/SDL2/sdlkeyboard.inc +++ b/src/lib/SDL2/sdlkeyboard.inc @@ -52,7 +52,7 @@ type * * See SDL_Keycode for details. * - * SDL_GetCharCode() + * SDL_GetKeyName() *} function SDL_GetKeyFromScancode(scancode: TSDL_ScanCode): TSDL_KeyCode cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetKeyFromScancode' {$ENDIF}{$ENDIF}; @@ -101,7 +101,7 @@ type * SDL_Key *} - function SDL_GetCharCode(key: TSDL_ScanCode): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetCharCode' {$ENDIF}{$ENDIF}; + function SDL_GetKeyName(key: TSDL_ScanCode): PAnsiChar cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetKeyName' {$ENDIF}{$ENDIF}; {** * Get a key code from a human-readable name diff --git a/src/lib/SDL2/sdlmouse.inc b/src/lib/SDL2/sdlmouse.inc index 994b52c6..dc8947d9 100644 --- a/src/lib/SDL2/sdlmouse.inc +++ b/src/lib/SDL2/sdlmouse.inc @@ -48,6 +48,33 @@ type function SDL_GetMouseState(x: PInt; y: PInt): UInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetMouseState' {$ENDIF}{$ENDIF}; + + {** + * \brief Get the current state of the mouse, in relation to the desktop + * + * This works just like SDL_GetMouseState(), but the coordinates will be + * reported relative to the top-left of the desktop. This can be useful if + * you need to track the mouse outside of a specific window and + * SDL_CaptureMouse() doesn't fit your needs. For example, it could be + * useful if you need to track the mouse while dragging a window, where + * coordinates relative to a window might not be in sync at all times. + * + * \note SDL_GetMouseState() returns the mouse position as SDL understands + * it from the last pump of the event queue. This function, however, + * queries the OS for the current mouse position, and as such, might + * be a slightly less efficient function. Unless you know what you're + * doing and have a good reason to use this function, you probably want + * SDL_GetMouseState() instead. + * + * \param x Returns the current X coord, relative to the desktop. Can be NULL. + * \param y Returns the current Y coord, relative to the desktop. Can be NULL. + * \return The current button state as a bitmask, which can be tested using the SDL_BUTTON(X) macros. + * + * \sa SDL_GetMouseState + *} + function SDL_GetGlobalMouseState(x, y: PSInt32): UInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetGlobalMouseState' {$ENDIF}{$ENDIF}; + {** * Retrieve the relative state of the mouse. * @@ -70,6 +97,18 @@ type procedure SDL_WarpMouseInWindow(window: PSDL_Window; x: SInt32; y: SInt32) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WarpMouseInWindow' {$ENDIF}{$ENDIF}; + {** + * \brief Moves the mouse to the given position in global screen space. + * + * \param x The x coordinate + * \param y The y coordinate + * \return 0 on success, -1 on error (usually: unsupported by a platform). + * + * \note This function generates a mouse motion event + *} + Function SDL_WarpMouseGlobal(x, y: SInt32): SInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_WarpMouseGlobal' {$ENDIF}{$ENDIF}; + {** * Set relative mouse mode. * @@ -89,6 +128,38 @@ type function SDL_SetRelativeMouseMode(enabled: TSDL_Bool): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetRelativeMouseMode' {$ENDIF}{$ENDIF}; + {** + * \brief Capture the mouse, to track input outside an SDL window. + * + * \param enabled Whether or not to enable capturing + * + * Capturing enables your app to obtain mouse events globally, instead of + * just within your window. Not all video targets support this function. + * When capturing is enabled, the current window will get all mouse events, + * but unlike relative mode, no change is made to the cursor and it is + * not restrained to your window. + * + * This function may also deny mouse input to other windows--both those in + * your application and others on the system--so you should use this + * function sparingly, and in small bursts. For example, you might want to + * track the mouse while the user is dragging something, until the user + * releases a mouse button. It is not recommended that you capture the mouse + * for long periods of time, such as the entire time your app is running. + * + * While captured, mouse events still report coordinates relative to the + * current (foreground) window, but those coordinates may be outside the + * bounds of the window (including negative values). Capturing is only + * allowed for the foreground window. If the window loses focus while + * capturing, the capture will be disabled automatically. + * + * While capturing is enabled, the current window will have the + * SDL_WINDOW_MOUSE_CAPTURE flag set. + * + * \return 0 on success, or -1 if not supported. + *} + function SDL_CaptureMouse(enabled: TSDL_Bool): SInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CaptureMouse' {$ENDIF}{$ENDIF}; + {** * Query whether relative mouse mode is enabled. * diff --git a/src/lib/SDL2/sdlpixels.inc b/src/lib/SDL2/sdlpixels.inc index fc6aad39..f9da590c 100644 --- a/src/lib/SDL2/sdlpixels.inc +++ b/src/lib/SDL2/sdlpixels.inc @@ -72,11 +72,11 @@ function SDL_DEFINE_PIXELFOURCC(A,B,C,D: Variant): Variant; ((bits) << 8) | ((bytes) << 0)) } -function SDL_PIXELFLAG(X: Cardinal): Boolean; -function SDL_PIXELTYPE(X: Cardinal): Boolean; -function SDL_PIXELORDER(X: Cardinal): Boolean; -function SDL_PIXELLAYOUT(X: Cardinal): Boolean; -function SDL_BITSPERPIXEL(X: Cardinal): Boolean; +function SDL_PIXELFLAG(X: Cardinal): Cardinal; +function SDL_PIXELTYPE(X: Cardinal): Cardinal; +function SDL_PIXELORDER(X: Cardinal): Cardinal; +function SDL_PIXELLAYOUT(X: Cardinal): Cardinal; +function SDL_BITSPERPIXEL(X: Cardinal): Cardinal; { #define SDL_BYTESPERPIXEL(X) \ (SDL_ISPIXELFORMAT_FOURCC(X) ? \ @@ -313,6 +313,23 @@ const (32 shl 8) or (4 shl 0); + (* Aliases for RGBA byte arrays of color data, for the current platform *) + {$IFDEF FPC} + {$IF DEFINED(ENDIAN_LITTLE)} + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888; + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888; + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888; + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888; + {$ELSEIF DEFINED(ENDIAN_BIG)} + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888; + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888; + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888; + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888; + {$ELSE} + {$FATAL Cannot determine endianness.} + {$IFEND} + {$ENDIF} + {**< Planar mode: Y + V + U (3 planes) *} SDL_PIXELFORMAT_YV12 = (Integer('Y') ) or (Integer('V') shl 8) or @@ -432,7 +449,7 @@ procedure SDL_FreeFormat(format: PSDL_PixelFormat) cdecl; external SDL_LibName { * A new palette, or nil if there wasn't enough memory. * * The palette entries are initialized to white. - * + * * SDL_FreePalette() *} diff --git a/src/lib/SDL2/sdlrect.inc b/src/lib/SDL2/sdlrect.inc index b7837bd6..b23861fa 100644 --- a/src/lib/SDL2/sdlrect.inc +++ b/src/lib/SDL2/sdlrect.inc @@ -30,6 +30,11 @@ type w,h: SInt32; end; + {** + * \brief Returns true if point resides inside a rectangle. + *} +function SDL_PointInRect(const p: PSDL_Point; const r: PSDL_Rect): Boolean; Inline; + {** * Returns true if the rectangle has no area. *} diff --git a/src/lib/SDL2/sdlrenderer.inc b/src/lib/SDL2/sdlrenderer.inc index 466173cd..aaae2ff6 100644 --- a/src/lib/SDL2/sdlrenderer.inc +++ b/src/lib/SDL2/sdlrenderer.inc @@ -447,6 +447,16 @@ function SDL_RenderSetClipRect(renderer: PSDL_Renderer; rect: PSDL_Rect): SInt32 *} procedure SDL_RenderGetClipRect(renderer: PSDL_Renderer; rect: PSDL_Rect) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderGetClipRect' {$ENDIF} {$ENDIF}; + {** + * \brief Get whether clipping is enabled on the given renderer. + * + * \param renderer The renderer from which clip state should be queried. + * + * \sa SDL_RenderGetClipRect() + *} +function SDL_RenderIsClipEnabled(renderer: PSDL_Renderer): TSDL_Bool; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_RenderIsClipEnabled' {$ENDIF} {$ENDIF}; + {** * Set the drawing scale for rendering on the current target. * diff --git a/src/lib/SDL2/sdlsurface.inc b/src/lib/SDL2/sdlsurface.inc index 05624f4e..e08c9efa 100644 --- a/src/lib/SDL2/sdlsurface.inc +++ b/src/lib/SDL2/sdlsurface.inc @@ -74,7 +74,9 @@ function SDL_MUSTLOCK(Const S:PSDL_Surface):Boolean; *} function SDL_CreateRGBSurface(flags: UInt32; width: SInt32; height: SInt32; depth: SInt32; Rmask: UInt32; Gmask: UInt32; Bmask: UInt32; Amask: UInt32): PSDL_Surface cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRGBSurface' {$ENDIF} {$ENDIF}; +function SDL_CreateRGBSurfaceWithFormat(flags: Uint32; width, height, depth: sInt32; format: Uint32):PSDL_Surface; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRGBSurfaceWithFormat' {$ENDIF} {$ENDIF}; function SDL_CreateRGBSurfaceFrom(pixels: Pointer; width: SInt32; height: SInt32; depth: SInt32; pitch: SInt32; Rmask: UInt32; Gmask: UInt32; Bmask: UInt32; Amask: UInt32): PSDL_Surface cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRGBSurfaceFrom' {$ENDIF} {$ENDIF}; +function SDL_CreateRGBSurfaceWithFormatFrom(pixels: Pointer; width, height, depth, pitch: sInt32; format: Uint32):PSDL_Surface; cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_CreateRGBSurfaceWithFormatFrom' {$ENDIF} {$ENDIF}; procedure SDL_FreeSurface(surface: PSDL_Surface) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_FreeSurface' {$ENDIF} {$ENDIF}; {** diff --git a/src/lib/SDL2/sdlsystem.inc b/src/lib/SDL2/sdlsystem.inc index 9849bb0f..f0cfecd9 100644 --- a/src/lib/SDL2/sdlsystem.inc +++ b/src/lib/SDL2/sdlsystem.inc @@ -3,6 +3,15 @@ (* Platform specific functions for Windows *) {$IF DEFINED(WIN32) OR DEFINED(WIN64)} + {** + * \brief Set a function that is called for every windows message, before TranslateMessage() + *} +Type + TSDL_WindowsMessageHook = Procedure(userdata, hWnd: Pointer; mesage: UInt32; wParam: UInt64; lParam: SInt64); cdecl; + +Procedure SDL_SetWindowsMessageHook(callback: TSDL_WindowsMessageHook; userdata: Pointer); cdecl; + external SDL_LibName; + {* Returns the D3D9 adapter index that matches the specified display index. * This adapter index can be passed to IDirect3D9::CreateDevice and controls * on which monitor a full screen application will appear. @@ -21,7 +30,7 @@ Function SDL_RenderGetD3D9Device(renderer:PSDL_Renderer):PIDirect3DDevice9; * These can be passed to EnumAdapters and EnumOutputs respectively to get the objects * required to create a DX10 or DX11 device and swap chain. *} -Procedure SDL_DXGIGetOutputInfo(displayIndex :SInt32; adapterIndex, outputIndex :PSInt32); +function SDL_DXGIGetOutputInfo(displayIndex :SInt32; adapterIndex, outputIndex :PSInt32): TSDL_Bool; cdecl; external SDL_LibName; {$IFEND} diff --git a/src/lib/SDL2/sdlsyswm.inc b/src/lib/SDL2/sdlsyswm.inc index 13280f77..2511df1c 100644 --- a/src/lib/SDL2/sdlsyswm.inc +++ b/src/lib/SDL2/sdlsyswm.inc @@ -4,8 +4,10 @@ {$DEFINE SDL_VIDEO_DRIVER_WINDOWS} {$ENDIF} -{$IF DEFINED (LINUX) OR DEFINED(UNIX)} - {$DEFINE SDL_VIDEO_DRIVER_X11} +{$IFNDEF DARWIN} + {$IF DEFINED (LINUX) OR DEFINED(UNIX)} + {$DEFINE SDL_VIDEO_DRIVER_X11} + {$IFEND} {$IFEND} {$IFDEF DARWIN} @@ -26,7 +28,8 @@ Type SDL_SYSWM_WAYLAND, // Since SDL 2.0.2 SDL_SYSWM_MIR, // Since SDL 2.0.2 SDL_SYSWM_WINRT, // Since SDL 2.0.3 - SDL_SYSWM_ANDROID // Planned for SDL 2.0.4 + SDL_SYSWM_ANDROID, // Since SDL 2.0.4 + SDL_SYSWM_VIVANTE // Since SDL 2.0.5 ); /// sdl_syswm.h uses anonymous structs, declared right in SDL_SysWMmsg. diff --git a/src/lib/SDL2/sdlversion.inc b/src/lib/SDL2/sdlversion.inc index 520c5758..7d64d08c 100644 --- a/src/lib/SDL2/sdlversion.inc +++ b/src/lib/SDL2/sdlversion.inc @@ -25,7 +25,7 @@ type const SDL_MAJOR_VERSION = 2; SDL_MINOR_VERSION = 0; - SDL_PATCHLEVEL = 0; + SDL_PATCHLEVEL = 4; {** * Macro to determine SDL version program was compiled against. diff --git a/src/lib/SDL2/sdlvideo.inc b/src/lib/SDL2/sdlvideo.inc index ddb72ca2..ca254c99 100644 --- a/src/lib/SDL2/sdlvideo.inc +++ b/src/lib/SDL2/sdlvideo.inc @@ -1,4 +1,4 @@ -//from "sdl_video.h" +//from "sdl_video.h" and "sdl_sysvideo.h" {** * The structure that defines a display mode @@ -57,6 +57,7 @@ min_w, min_h: SInt32; max_w, max_h: SInt32; flags: UInt32; + last_fullscreen_flags: UInt32; {* Stored position and size for windowed mode * } windowed: TSDL_Rect; @@ -191,6 +192,11 @@ const SDL_WINDOW_FULLSCREEN_DESKTOP = SDL_WINDOW_FULLSCREEN or $00001000; SDL_WINDOW_FOREIGN = $00000800; {**< window not created by SDL *} SDL_WINDOW_ALLOW_HIGHDPI = $00002000; {**< window should be created in high-DPI mode if supported *} + SDL_WINDOW_ALWAYS_ON_TOP = $00008000; {**< window should always be above others *} + SDL_WINDOW_SKIP_TASKBAR = $00010000; {**< window should not be added to the taskbar *} + SDL_WINDOW_UTILITY = $00020000; {**< window should be treated as a utility window *} + SDL_WINDOW_TOOLTIP = $00040000; {**< window should be treated as a tooltip *} + SDL_WINDOW_POPUP_MENU = $00080000; {**< window should be treated as a popup menu *} type TSDL_WindowFlags = DWord; @@ -233,6 +239,8 @@ const SDL_WINDOWEVENT_FOCUS_GAINED = 12; {**< Window has gained keyboard focus *} SDL_WINDOWEVENT_FOCUS_LOST = 13; {**< Window has lost keyboard focus *} SDL_WINDOWEVENT_CLOSE = 14; {**< The window manager requests that the window be closed *} + SDL_WINDOWEVENT_TAKE_FOCUS = 15; {**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) *} + SDL_WINDOWEVENT_HIT_TEST = 16; {**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. *} type TSDL_WindowEventID = DWord; @@ -272,6 +280,7 @@ const SDL_GL_CONTEXT_PROFILE_MASK = 21; SDL_GL_SHARE_WITH_CURRENT_CONTEXT = 22; SDL_GL_FRAMEBUFFER_SRGB_CAPABLE = 23; + SDL_GL_CONTEXT_RELEASE_BEHAVIOR = 24; type TSDL_GLattr = DWord; @@ -293,6 +302,39 @@ const type TSDL_GLcontextFlag = DWord; +const + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = $0000; + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = $0001; + +type + TSDL_GLcontextReleaseFlag = DWord; + + {** + * \brief Possible return values from the SDL_HitTest callback. + * + * \sa SDL_HitTest + *} + TSDL_HitTestResult = ( + SDL_HITTEST_NORMAL, {**< Region is normal. No special properties. *} + SDL_HITTEST_DRAGGABLE, {**< Region can drag entire window. *} + SDL_HITTEST_RESIZE_TOPLEFT, + SDL_HITTEST_RESIZE_TOP, + SDL_HITTEST_RESIZE_TOPRIGHT, + SDL_HITTEST_RESIZE_RIGHT, + SDL_HITTEST_RESIZE_BOTTOMRIGHT, + SDL_HITTEST_RESIZE_BOTTOM, + SDL_HITTEST_RESIZE_BOTTOMLEFT, + SDL_HITTEST_RESIZE_LEFT + ); + + {** + * \brief Callback used for hit-testing. + * + * \sa SDL_SetWindowHitTest + *} + TSDL_HitTest = Function(win: PSDL_Window; const area: PSDL_Point; data: Pointer): TSDL_HitTestResult; cdecl; + + {* Function prototypes *} {** @@ -381,6 +423,39 @@ function SDL_GetDisplayName(displayIndex: SInt32): PAnsiChar cdecl; external SDL function SDL_GetDisplayBounds(displayIndex: SInt32; rect: PSDL_Rect): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetDisplayBounds' {$ENDIF} {$ENDIF}; + {** + * \brief Get the dots/pixels-per-inch for a display + * + * \note Diagonal, horizontal and vertical DPI can all be optionally + * returned if the parameter is non-NULL. + * + * \return 0 on success, or -1 if no DPI information is available or the index is out of range. + * + * \sa SDL_GetNumVideoDisplays() + *} +function SDL_GetDisplayDPI(displayIndex: SInt32; ddpi, hdpi, vdpi: PSingle): SInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetDisplayDPI' {$ENDIF} {$ENDIF}; + + {** + * \brief Get the usable desktop area represented by a display, with the + * primary display located at 0,0 + * + * This is the same area as SDL_GetDisplayBounds() reports, but with portions + * reserved by the system removed. For example, on Mac OS X, this subtracts + * the area occupied by the menu bar and dock. + * + * Setting a window to be fullscreen generally bypasses these unusable areas, + * so these are good guidelines for the maximum space available to a + * non-fullscreen window. + * + * \return 0 on success, or -1 if the index is out of range. + * + * \sa SDL_GetDisplayBounds() + * \sa SDL_GetNumVideoDisplays() + *} +function SDL_GetDisplayUsableBounds(displayIndex: sInt32; rect: PSDL_Rect):sInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetDisplayUsableBounds' {$ENDIF} {$ENDIF}; + {** * Returns the number of available display modes. * @@ -636,7 +711,25 @@ procedure SDL_SetWindowSize(window: PSDL_Window; w: SInt32; h: SInt32) cdecl; ex *} procedure SDL_GetWindowSize(window: PSDL_Window; w: PInt; h: PInt) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetWindowSize' {$ENDIF} {$ENDIF}; - + + {** + * \brief Get the size of a window's borders (decorations) around the client area. + * + * \param window The window to query. + * \param top Pointer to variable for storing the size of the top border. NULL is permitted. + * \param left Pointer to variable for storing the size of the left border. NULL is permitted. + * \param bottom Pointer to variable for storing the size of the bottom border. NULL is permitted. + * \param right Pointer to variable for storing the size of the right border. NULL is permitted. + * + * \return 0 on success, or -1 if getting this information is not supported. + * + * \note if this function fails (returns -1), the size values will be + * initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as + * if the window in question was borderless. + *} +function SDL_GetWindowBordersSize(window: PSDL_Window; top, left, bottom, right: PsInt32):sInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetWindowBordersSize' {$ENDIF} {$ENDIF}; + {** * Set the minimum size of a window's client area. * @@ -708,6 +801,23 @@ procedure SDL_GetWindowMaximumSize(window: PSDL_Window; w: PInt; h: PInt) cdecl; procedure SDL_SetWindowBordered(window: PSDL_Window; bordered: TSDL_Bool) cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetWindowBordered' {$ENDIF} {$ENDIF}; + {** + * \brief Set the user-resizable state of a window. + * + * This will add or remove the window's SDL_WINDOW_RESIZABLE flag and + * allow/disallow user resizing of the window. This is a no-op if the + * window's resizable state already matches the requested state. + * + * \param window The window of which to change the resizable state. + * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow. + * + * \note You can't change the resizable state of a fullscreen window. + * + * \sa SDL_GetWindowFlags() + *} +procedure SDL_SetWindowResizable(window: PSDL_Window; resizable: TSDL_Bool); cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetWindowResizable' {$ENDIF} {$ENDIF}; + {** * Show a window. * @@ -824,6 +934,16 @@ procedure SDL_SetWindowGrab(window: PSDL_Window; grabbed: TSDL_Bool) cdecl; exte function SDL_GetWindowGrab(window: PSDL_Window): TSDL_Bool cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetWindowGrab' {$ENDIF} {$ENDIF}; + {** + * \brief Get the window that currently has an input grab enabled. + * + * \return This returns the window if input is grabbed, and NULL otherwise. + * + * \sa SDL_SetWindowGrab() + *} +function SDL_GetGrabbedWindow(): PSDL_Window; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetGrabbedWindow' {$ENDIF} {$ENDIF}; + {** * Set the brightness (gamma correction) for a window. * @@ -845,6 +965,62 @@ function SDL_SetWindowBrightness(window: PSDL_Window; brightness: Float): SInt32 function SDL_GetWindowBrightness(window: PSDL_Window): Float cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetWindowBrightness' {$ENDIF} {$ENDIF}; + {** + * \brief Set the opacity for a window + * + * \param window The window which will be made transparent or opaque + * \param opacity Opacity (0.0f - transparent, 1.0f - opaque) This will be + * clamped internally between 0.0f and 1.0f. + * + * \return 0 on success, or -1 if setting the opacity isn't supported. + * + * \sa SDL_GetWindowOpacity() + *} +function SDL_SetWindowOpacity(window: PSDL_Window; opacity: Float):sInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetWindowOpacity' {$ENDIF} {$ENDIF}; + + {** + * \brief Get the opacity of a window. + * + * If transparency isn't supported on this platform, opacity will be reported + * as 1.0f without error. + * + * \param window The window in question. + * \param out_opacity Opacity (0.0f - transparent, 1.0f - opaque) + * + * \return 0 on success, or -1 on error (invalid window, etc). + * + * \sa SDL_SetWindowOpacity() + *} +function SDL_GetWindowOpacity(window: PSDL_Window; out_opacity: PFloat):sInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetWindowOpacity' {$ENDIF} {$ENDIF}; + + {** + * \brief Sets the window as a modal for another window + * + * \param modal_window The window that should be modal + * \param parent_window The parent window + * + * \return 0 on success, or -1 otherwise. + *} +function SDL_SetWindowModalFor(modal_window, parent_window: PSDL_Window):sInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetWindowModalFor' {$ENDIF} {$ENDIF}; + + {** + * \brief Explicitly sets input focus to the window. + * + * You almost certainly want SDL_RaiseWindow() instead of this function. Use + * this with caution, as you might give focus to a window that's completely + * obscured by other windows. + * + * \param window The window that should get the input focus + * + * \return 0 on success, or -1 otherwise. + * \sa SDL_RaiseWindow() + *} +function SDL_SetWindowInputFocus(window: PSDL_Window):sInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetWindowInputFocus' {$ENDIF} {$ENDIF}; + {** * Set the gamma ramp for a window. * @@ -882,6 +1058,46 @@ function SDL_SetWindowGammaRamp(window: PSDL_Window; const red: PUInt16; const g function SDL_GetWindowGammaRamp(window: PSDL_Window; red: PUInt16; green: PUInt16; blue: PUInt16): SInt32 cdecl; external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_GetWindowGammaRamp' {$ENDIF} {$ENDIF}; + {** + * \brief Provide a callback that decides if a window region has special properties. + * + * Normally windows are dragged and resized by decorations provided by the + * system window manager (a title bar, borders, etc), but for some apps, it + * makes sense to drag them from somewhere else inside the window itself; for + * example, one might have a borderless window that wants to be draggable + * from any part, or simulate its own title bar, etc. + * + * This function lets the app provide a callback that designates pieces of + * a given window as special. This callback is run during event processing + * if we need to tell the OS to treat a region of the window specially; the + * use of this callback is known as "hit testing." + * + * Mouse input may not be delivered to your application if it is within + * a special area; the OS will often apply that input to moving the window or + * resizing the window and not deliver it to the application. + * + * Specifying NULL for a callback disables hit-testing. Hit-testing is + * disabled by default. + * + * Platforms that don't support this functionality will return -1 + * unconditionally, even if you're attempting to disable hit-testing. + * + * Your callback may fire at any time, and its firing does not indicate any + * specific behavior (for example, on Windows, this certainly might fire + * when the OS is deciding whether to drag your window, but it fires for lots + * of other reasons, too, some unrelated to anything you probably care about + * _and when the mouse isn't actually at the location it is testing_). + * Since this can fire at any time, you should try to keep your callback + * efficient, devoid of allocations, etc. + * + * \param window The window to set hit-testing on. + * \param callback The callback to call when doing a hit-test. + * \param callback_data An app-defined void pointer passed to the callback. + * \return 0 on success, -1 on error (including unsupported). + *} +Function SDL_SetWindowHitTest(window: PSDL_Window; callback: TSDL_HitTest; callback_data: Pointer): SInt32; cdecl; + external SDL_LibName {$IFDEF DELPHI} {$IFDEF MACOS} name '_SDL_SetWindowHitTest' {$ENDIF} {$ENDIF}; + {** * Destroy a window. *} diff --git a/src/lib/bass/bass.chm b/src/lib/bass/bass.chm index 8071fb0b..57c76337 100644 Binary files a/src/lib/bass/bass.chm and b/src/lib/bass/bass.chm differ diff --git a/src/lib/bass/bass.txt b/src/lib/bass/bass.txt index 381519e1..6ddcacab 100644 --- a/src/lib/bass/bass.txt +++ b/src/lib/bass/bass.txt @@ -1,104 +1,140 @@ BASS 2.4 -Copyright (c) 1999-2009 Un4seen Developments Ltd. All rights reserved. +Copyright (c) 1999-2016 Un4seen Developments Ltd. All rights reserved. Files that you should have found in the BASS package ==================================================== Win32 version ------------- BASS.TXT This file -BASS.DLL The BASS module +BASS.DLL BASS module BASS.CHM BASS documentation -MP3-FREE - BASS.DLL BASS module using the Windows MP3 decoder +MP3-FREE\ + BASS.DLL BASS module using the OS's MP3 decoder +X64\ + BASS.DLL 64-bit BASS module + MP3-FREE + BASS.DLL 64-bit BASS module using the OS's MP3 decoder C\ C/C++ API and examples... BASS.H BASS C/C++ header file BASS.LIB BASS import library - BASS.DSW Visual C++ workspace for examples + BASS.DSW Visual C++ 6 workspace for examples + BASS.SLN Visual C++ 2005 (and above) solution for examples MAKEFILE Makefile for all examples MAKEFILE.IN Makefile helper macros + X64\ + BASS.LIB 64-bit BASS import library 3DTEST\ 3D/EAX example 3DTEST.C 3DTEST.RC 3DTEST.DSP + 3DTEST.VCPROJ MAKEFILE BASSTEST\ Simple playback example BASSTEST.C BASSTEST.RC BASSTEST.DSP + BASSTEST.VCPROJ MAKEFILE CONTEST\ Console example CONTEST.C CONTEST.DSP + CONTEST.VCPROJ MAKEFILE CUSTLOOP\ Custom looping example CUSTLOOP.C CUSTLOOP.DSP + CUSTLOOP.VCPROJ + MAKEFILE + DEVLIST\ Device list example + DEVLIST.C + DEVLIST.DSP + DEVLIST.VCPROJ MAKEFILE DSPTEST\ DSP example DSPTEST.C DSPTEST.RC DSPTEST.DSP + DSPTEST.VCPROJ MAKEFILE FXTEST\ DX8 effect example FXTEST.C FXTEST.RC FXTEST.DSP + FXTEST.VCPROJ MAKEFILE LIVEFX\ Full-duplex example LIVEFX.C LIVEFX.RC LIVEFX.DSP + LIVEFX.VCPROJ MAKEFILE LIVESPEC\ "Live" version of spectrum analyser example LIVESPEC.C LIVESPEC.DSP + LIVESPEC.VCPROJ + MAKEFILE + MODTEST\ MOD music example + MODTEST.C + MODTEST.RC + MODTEST.DSP + MODTEST.VCPROJ MAKEFILE MULTI\ Multiple device example MULTI.C MULTI.RC MULTI.DSP + MULTI.VCPROJ MAKEFILE NETRADIO\ Internet streaming example NETRADIO.C NETRADIO.RC NETRADIO.DSP + NETRADIO.VCPROJ MAKEFILE PLUGINS\ Plugins example PLUGINS.C PLUGINS.RC PLUGINS.DSP + PLUGINS.VCPROJ MAKEFILE RECTEST\ Recording example RECTEST.C RECTEST.RC RECTEST.DSP + RECTEST.VCPROJ MAKEFILE SPEAKERS\ Multi-speaker example SPEAKERS.C SPEAKERS.RC SPEAKERS.DSP + SPEAKERS.VCPROJ MAKEFILE SPECTRUM\ Spectrum analyser example SPECTRUM.C SPECTRUM.DSP + SPECTRUM.VCPROJ MAKEFILE - SYNTH\ Synth example + SYNTH\ Low latency custom streaming example SYNTH.C SYNTH.DSP + SYNTH.VCPROJ MAKEFILE WRITEWAV\ WAVE writer example WRITEWAV.C WRITEWAV.DSP + WRITEWAV.VCPROJ MAKEFILE BIN\ Precompiled examples 3DTEST.EXE BASSTEST.EXE CONTEST.EXE CUSTLOOP.EXE + DEVLIST.EXE DSPTEST.EXE FXTEST.EXE LIVEFX.EXE LIVESPEC.EXE + MODTEST.EXE MULTI.EXE NETRADIO.EXE RECTEST.EXE @@ -106,69 +142,6 @@ C\ C/C++ API and examples... SPECTRUM.EXE SYNTH.EXE WRITEWAV.EXE -VB\ Visual Basic API and examples... - BASS.BAS BASS Visual Basic module - 3DTEST\ 3D/EAX example - PRJ3DTEST.VBP - PRJ3DTEST.FRM - PRJDEVICE.FRM - BASSTEST\ Simple playback example - PRJBASSTEST.VBP - FRMBASSTEST.FRM - CUSTLOOP\ Custom looping example - PRJCUSTLOOP.VBP - FRMCUSTLOOP.FRM - MODCUSTLOOP.BAS - DSPTEST\ DSP example - PRJDSPTEST.VBP - FRMDSPTEST.FRM - MODDSPTEST.BAS - FXTEST\ DX8 effect example - PRJFXTEST.VBP - FRMFXTEST.FRM - LIVEFX\ Full-duplex example - PRJLIVEFX.VBP - FRMLIVEFX.FRM - MODLIVEFX.BAS - LIVESPEC\ "Live" version of spectrum analyser example - PRJLIVESPEC.VBP - FRMLIVESPEC.FRM - MODLIVESPEC.BAS - MULTI\ Multiple device example - PRJMULTI.VBP - FRMMULTI.FRM - FRMDEVICE.FRM - NETRADIO\ Internet streaming example - PRJNETRADIO.VBP - FRMNETRADIO.FRM - MODNETRADIO.BAS - CLSFILEIO.CLS - PLUGINS\ Plugins example - PRJPLUGINS.VBP - FRMPLUGINS.FRM - RECTEST\ Recording example - PRJRECTEST.VBP - FRMRECTEST.FRM - MODRECTEST.BAS - SPEAKERS\ Multi-speaker example - PRJSPEAKERS.VBP - FRMSPEAKERS.FRM - SPECTRUM\ Spectrum analyser example - PRJSPECTRUM.VBP - FRMSPECTRUM.FRM - MODSPECTRUM.BAS - SYNTH\ Synth example - PRJSYNTH.VBP - FRMSYNTH.FRM - MODSYNTH.BAS - WRITEWAV\ WAVE writer example - PRJWRITEWAVE.VBP - PRJWRITEWAVE.FRM - MEMORY\ Playing from memory example by Jobnik - PRJMEMORY.VBP - FRMMEMORY.FRM - SYNCTEST.BAS - CBASS_TIME.CLS DELPHI\ Delphi API and examples... BASS.PAS BASS Delphi unit 3DTEST\ 3D/EAX example @@ -243,113 +216,271 @@ DELPHI\ Delphi API and examples... WRITEWAV.DPR UNITMAIN.PAS UNITMAIN.DFM - DYNAMIC\ Dynamic-loading Delphi API - DYNAMIC_BASS.PAS Dynamic-loading Delphi unit -MASM\ MASM API and examples... - BASS.INC BASS MASM include file - PLAYER\ Example MOD player - PLAYER.EXE - PLAYER.ASM - RSRC.RC - TOOLBAR.BMP - COMPILE.BAT - -NOTE: To run the example EXEs, first you will have to copy BASS.DLL into the - same directory as them. +VB\ Visual Basic API and examples... + BASS.BAS BASS Visual Basic module + 3DTEST\ 3D/EAX example + PRJ3DTEST.VBP + PRJ3DTEST.FRM + PRJDEVICE.FRM + BASSTEST\ Simple playback example + PRJBASSTEST.VBP + FRMBASSTEST.FRM + CUSTLOOP\ Custom looping example + PRJCUSTLOOP.VBP + FRMCUSTLOOP.FRM + MODCUSTLOOP.BAS + DSPTEST\ DSP example + PRJDSPTEST.VBP + FRMDSPTEST.FRM + MODDSPTEST.BAS + FXTEST\ DX8 effect example + PRJFXTEST.VBP + FRMFXTEST.FRM + LIVEFX\ Full-duplex example + PRJLIVEFX.VBP + FRMLIVEFX.FRM + MODLIVEFX.BAS + LIVESPEC\ "Live" version of spectrum analyser example + PRJLIVESPEC.VBP + FRMLIVESPEC.FRM + MODLIVESPEC.BAS + MULTI\ Multiple device example + PRJMULTI.VBP + FRMMULTI.FRM + FRMDEVICE.FRM + NETRADIO\ Internet streaming example + PRJNETRADIO.VBP + FRMNETRADIO.FRM + MODNETRADIO.BAS + CLSFILEIO.CLS + PLUGINS\ Plugins example + PRJPLUGINS.VBP + FRMPLUGINS.FRM + RECTEST\ Recording example + PRJRECTEST.VBP + FRMRECTEST.FRM + MODRECTEST.BAS + SPEAKERS\ Multi-speaker example + PRJSPEAKERS.VBP + FRMSPEAKERS.FRM + SPECTRUM\ Spectrum analyser example + PRJSPECTRUM.VBP + FRMSPECTRUM.FRM + MODSPECTRUM.BAS + SYNTH\ Low latency custom streaming example + PRJSYNTH.VBP + FRMSYNTH.FRM + MODSYNTH.BAS + WRITEWAV\ WAVE writer example + PRJWRITEWAVE.VBP + PRJWRITEWAVE.FRM + MEMORY\ Playing from memory example by Jobnik + PRJMEMORY.VBP + FRMMEMORY.FRM + SYNCTEST.BAS + CBASS_TIME.CLS -NOTE: To avoid unnecessary bloatage, the BASS DLLs are not digitally signed. - Signed versions are available on request (email: bass@un4seen.com). +NOTE: You may need to "Unblock" the BASS.CHM file in its "Properties" to + view it on Windows 7. The documentation can also be viewed online at + the BASS website. + +NOTE: To run the example EXEs, first you will need to copy BASS.DLL into the + same directory as them. MacOSX version -------------- BASS.TXT This file -LIBBASS.DYLIB The BASS module +LIBBASS.DYLIB BASS module BASS.CHM BASS documentation CHMOX.APP CHM file viewer BASS.H BASS C/C++ header file MAKEFILE Makefile for all examples MAKEFILE.IN Makefile helper macros -MP3-FREE - LIBBASS.DYLIB BASS module using the OSX MP3 decoder +BASS.XCODEPROJ Xcode project for examples +MP3-FREE\ + LIBBASS.DYLIB BASS module using the OS's MP3 decoder 3DTEST\ 3D example 3DTEST.C - MAKEFILE 3DTEST.NIB + MAKEFILE BASSTEST\ Simple playback example BASSTEST.C - MAKEFILE BASSTEST.NIB + MAKEFILE CONTEST\ Console example CONTEST.C MAKEFILE CUSTLOOP\ Custom looping example CUSTLOOP.C MAKEFILE +DEVLIST\ Device list example + DEVLIST.C + MAKEFILE DSPTEST\ DSP example DSPTEST.C - MAKEFILE DSPTEST.NIB + MAKEFILE FXTEST\ DX8 effect example FXTEST.C - MAKEFILE FXTEST.NIB + MAKEFILE LIVESPEC\ "Live" version of spectrum analyser example LIVESPEC.C MAKEFILE +MODTEST\ MOD music example + MODTEST.C + MODTEST.NIB + MAKEFILE MULTI\ Multiple device example MULTI.C - MAKEFILE MULTI.NIB + MAKEFILE NETRADIO\ Internet streaming example NETRADIO.C - MAKEFILE NETRADIO.NIB + MAKEFILE PLUGINS\ Plugins example PLUGINS.C - MAKEFILE PLUGINS.NIB + MAKEFILE RECTEST\ Recording example RECTEST.C - MAKEFILE RECTEST.NIB + MAKEFILE SPEAKERS\ Multi-speaker example SPEAKERS.C - MAKEFILE SPEAKERS.NIB + MAKEFILE SPECTRUM\ Spectrum analyser example SPECTRUM.C MAKEFILE +SYNTH\ Low latency custom streaming example + SYNTH.C + SYNTH.NIB + MAKEFILE WRITEWAV\ WAVE writer example WRITEWAV.C MAKEFILE +NOTE: To view the documentation, you will need a CHM viewer, such as the + included CHMOX. The documentation can also be viewed online at the + BASS website. + +Linux version +------------- +BASS.TXT This file +LIBBASS.SO BASS module +BASS.CHM BASS documentation +BASS.H BASS C/C++ header file +MAKEFILE Makefile for all examples +MAKEFILE.IN Makefile helper macros +MP3-FREE\ + LIBBASS.SO BASS module using the OS's MP3 decoder +X64\ + LIBBASS.SO 64-bit BASS module + MP3-FREE + LIBBASS.SO 64-bit BASS module using the OS's MP3 decoder +PASCAL\ + BASS.PAS BASS Delphi/Pascal unit +3DTEST\ 3D example + 3DTEST.C + MAKEFILE + 3DTEST.GLADE +BASSTEST\ Simple playback example + BASSTEST.C + MAKEFILE + BASSTEST.GLADE +CONTEST\ Console example + CONTEST.C + MAKEFILE +CUSTLOOP\ Custom looping example + CUSTLOOP.C + MAKEFILE +DEVLIST\ Device list example + DEVLIST.C + MAKEFILE +DSPTEST\ DSP example + DSPTEST.C + MAKEFILE + DSPTEST.GLADE +FXTEST\ DX8 effect example + FXTEST.C + MAKEFILE + FXTEST.GLADE +LIVESPEC\ "Live" version of spectrum analyser example + LIVESPEC.C + MAKEFILE +MODTEST\ MOD music example + MODTEST.C + MAKEFILE + MODTEST.GLADE +MULTI\ Multiple device example + MULTI.C + MAKEFILE + MULTI.GLADE +NETRADIO\ Internet streaming example + NETRADIO.C + MAKEFILE + NETRADIO.GLADE +PLUGINS\ Plugins example + PLUGINS.C + MAKEFILE + PLUGINS.GLADE +RECTEST\ Recording example + RECTEST.C + MAKEFILE + RECTEST.GLADE +SPEAKERS\ Multi-speaker example + SPEAKERS.C + MAKEFILE + SPEAKERS.GLADE +SPECTRUM\ Spectrum analyser example + SPECTRUM.C + MAKEFILE +SYNTH\ Low latency custom streaming example + SYNTH.C + MAKEFILE + SYNTH.GLADE +WRITEWAV\ WAVE writer example + WRITEWAV.C + MAKEFILE + +NOTE: To view the documentation, you will need a CHM viewer. The + documentation can also be viewed online at the BASS website. + What's the point? ================= -BASS is an audio library for use in Windows and MacOSX software. Its -purpose is to provide the most powerful and efficient (yet easy to use), -sample, stream, MOD music, and recording functions. All in a tiny DLL, -under 100KB in size. +BASS is an audio library for use in software on several platforms. Its +purpose is to provide the powerful and efficient sample, stream, MOD +music, and recording functions. All in a compact DLL that won't overly +bloat your software. -See the documentation for descriptions of all the BASS functions. You -should also look at the included example program source-codes for some -examples of how to use BASS in your own programs. +See the documentation for descriptions of all the BASS functions. Also +check the included example source-codes for some examples of how to use +BASS in your own programs. Requirements ============ Win32 version ------------- -BASS requires DirectX 3 or above for output. BASS does not require that a -soundcard with DirectSound/DirectSound3D hardware accelerated drivers is -installed, but it does improve performance if there is one. BASS also takes -advantage of MMX, which improves the performance of the MOD music playback. +BASS requires DirectSound for playback and recording, but decoding is still +possible without it. DirectSound has been included with all Windows versions +since Windows 98. 32-bit and 64-bit Windows are supported. MacOSX version -------------- -OSX 10.3 or above is recommended. BASS uses CoreAudio for output, so there -are no special library/driver requirements. BASS supports both PowerPC and -Intel Macs. +BASS uses CoreAudio for playback and recording, so there are no special +library/driver requirements. 32-bit (i386) and 64-bit (x86_64) architectures +are supported in a single universal library. OSX 10.4 or above is +recommended. + +Linux version +------------- +BASS requires ALSA for playback and recording, but decoding is still possible +without it. 32-bit (i386) and 64-bit (x86-64) architectures are supported. +ARM support is also available as a separate download from the website. Main Features @@ -369,6 +500,9 @@ Main Features * User file streaming stream files from anywhere using any delivery method +* OS codecs + ACM, Media Foundation and CoreAudio codec support for additional audio formats + * Multi-channel streaming support for more than plain stereo, including multi-channel OGG/WAV/AIFF files @@ -396,20 +530,17 @@ Main Features * High precision synchronization synchronize events in your software to the streams and MOD musics -* DirectX 8 effects +* Effects chorus/compressor/distortion/echo/flanger/gargle/parameq/reverb * User defined DSP functions custom effects may be applied to musics and streams * 32 bit floating-point decoding and processing - floating-point stream/music decoding, DSP, FX, and recording + floating-point stream/music decoding, DSP/FX, and recording * 3D sound - play samples/streams/musics in any 3D position, with EAX support - -* Small - BASS is under 100KB (on Windows), so won't bloat your distribution + play samples/streams/musics in any 3D position Using BASS @@ -427,9 +558,9 @@ functions that you are using have been affected by a change. Win32 version ------------- -C/C++, Visual Basic, Delphi and MASM APIs are provided, to use BASS with -another language you'll first have to convert the header file. Or, as a -last resort, you could use LoadLibrary and GetProcAddress. +C/C++, Visual Basic, and Delphi APIs and example projects are provided. To +use BASS with another language you will first have to convert the header +file. Or, as a last resort, you could use LoadLibrary and GetProcAddress. The downside is that you have to manually import each function that you use, with the GetProcAddress function. But it has been made a lot simpler @@ -443,7 +574,7 @@ HINSTANCE bass=LoadLibrary("BASS.DLL"); // load BASS BASS_Init=GetProcAddress(bass,"BASS_Init"); // get BASS_Init BASS_Init(-1,44100,0,hWnd,NULL); // call BASS_Init -To use BASS with Borland C++ Builder, you'll first have to create a +To use BASS with Borland C++ Builder, you will first have to create a Borland C++ Builder import library for it. This is done by using the IMPLIB tool that comes with Borland C++ Builder. Simply execute this: @@ -451,7 +582,7 @@ IMPLIB tool that comes with Borland C++ Builder. Simply execute this: ... and then use BASSBCB.LIB in your projects to import BASS. -To use BASS with LCC-Win32, you'll first have to create a compatible +To use BASS with LCC-Win32, you will first have to create a compatible import library for it. This is done by using the PEDUMP and BUILDLIB tools that come with LCC-Win32. Run these 2 commands: @@ -466,19 +597,31 @@ string. MacOSX version -------------- -A separate "LIB" file is not required for OSX. Using XCode, you can simply -add the DYLIB file to the project. Or using a makefile, you can build your -programs like this, for example: +See the example Xcode project and makefiles. - gcc yoursource -L. -lbass -o yourprog +NOTE: The LIBBASS.DYLIB file must be put in the same directory as the + executable, it can't just be somewhere in the path. -The LIBBASS.DYLIB file must be put in the same directory as the executable -(it can't just be somewhere in the path). See the example makefiles. +LIBBASS.DYLIB is a universal binary, with support for the i386 and +x86_64 architectures. If only one of those architectures is needed, the +included makefile can be used extract the wanted one. It will also process +any BASS add-ons placed in the same directory. Type "make i386" or +"make x86_64" to extract a particular architecture. + +Linux version +------------- +The LIBBASS.SO file needs to be in the OS's library search path for it to +be found; simply placing it in the same directory as the executable won't +necessarily work as it does on other platforms. The BASS libraries should +also not be placed in the standard library directories to avoid version +conflicts. To meet those competing requirements, a wrapper script could be +used to set the "LD_LIBRARY_PATH" environment variable before loading the +executable. Another option is to set the "rpath" in the executable, to tell +it where to look for libraries. That is what the example makefiles do. -LIBBASS.DYLIB is a universal binary, with support for both PowerPC and -Intel Macs. If you want PowerPC-only or Intel-only versions, the included -makefile can create them for you, by typing "make ppc" or "make i386". It -will also process any BASS add-ons placed in the same directory. +When building both 32-bit and 64-bit executables, it is possible to simply +try linking with both LIBBASS.SO versions, and the linker will use the +appropriate version and ignore the other. Latest Version @@ -491,10 +634,10 @@ The latest version of BASS can always be found at the BASS website: Licence ======= BASS is free for non-commercial use. If you are a non-commercial entity -(eg. an individual) and you are not charging for your product, and the -product has no other commercial purpose, then you can use BASS in it -for free. If you wish to use BASS in commercial products, then please -also see the next section. +(eg. an individual) and you are not making any money from your product +(through sales/advertising/etc), then you can use BASS in it for free. +If you wish to use BASS in commercial products, then please also see the +next section. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, BASS IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, @@ -514,18 +657,19 @@ BASS is available for use in your commercial products. The licence types available are as follows: SHAREWARE: Allows the usage of BASS in an unlimited number of your -shareware products, which must sell for no more than 40 Euros each. -If you are an individual (not a corporation) making and selling your -own software (and its price is within the limit), this is the licence -for you. +shareware ("try before you buy") products, which must sell for no more +than 40 Euros each. Non-shareware products are also permitted, but the +product price limit is 10 Euros in that case. The price limit can be +raised by purchasing duplicate licences, eg. 2 licences doubles it. If +you are an individual (not a corporation) making and selling your own +software, this is the licence for you. -SINGLE COMMERCIAL: Allows the usage of BASS in a single commercial -product. +SINGLE COMMERCIAL: Allows the usage of BASS in one commercial product. UNLIMITED COMMERCIAL: Allows the usage of BASS in an unlimited number -of your commercial products. This licence is on a per site basis. So -if your company has two sites that use BASS, then two licences are -required. +of your commercial products. This licence is on a per-site basis, eg. +if you are creating products with BASS at 2 sites/locations, then 2 +licences are required. Please note the products must be end-user products, eg. not components used by other products. @@ -535,9 +679,8 @@ other's software. If you publish other's software, its developers (or the software itself) will need to be licensed to use BASS. These licences are on a per-platform basis, with reductions available -when licensing for both platforms. In all cases there are no royalties -to pay, and you can use future BASS updates without further cost. One -licence covers one person or entity and is not transferable. +when licensing for multiple platforms. In all cases there are no royalties +to pay, and you can use future BASS updates without further cost. These licences do not allow reselling/sublicensing of BASS. For example, if a product is a development system, the users of said product are not @@ -562,11 +705,15 @@ details: Alternatively, the "MP3-FREE" BASS version does not include its own MP3 decoder but instead makes use of the operating system's already licensed -decoder. +decoder. If an MP3 decoder is not available, then MP3 playback will not +be possible, but everything else will function as normal. NOTE: When using the OS's MP3 decoder, BASS still does the file handling so all the usual features are still supported, including streaming, - tag reading, pre-scanning, gapless playback, etc... + tag reading, pre-scanning, gapless playback, etc. + +NOTE: Linux does not include an MP3 decoder as standard. The "MP3-FREE" + BASS version will make use of the libmpg123 decoder, if installed. History @@ -576,13 +723,254 @@ There are of course bug fixes and other little improvements made along the way too! To make upgrading simpler, all functions affected by a change to the BASS interface are listed. +2.4.12 - 10/3/2016 +------------------ +* DSP/FX chain order modification + BASS_FXSetPriority +* Average bitrate retrieval + BASS_ATTRIB_BITRATE +* Ramping-out when stopping/pausing playback + BASS_ChannelStop + BASS_ChannelPause +* Disabling of playback ramping + BASS_ATTRIB_NORAMP (BASS_ChannelSetAttribute option) +* Pre-buffering when playback buffering is disabled + BASS_ChannelUpdate + BASS_ATTRIB_NOBUFFER (BASS_ChannelSetAttribute option) +* Net agent and proxy config options now make a copy of the provided string + BASS_CONFIG_NET_AGENT/PROXY (BASS_SetConfig options) + NETRADIO example updated +* Unicode net agent and proxy config options on Windows + BASS_CONFIG_NET_AGENT/PROXY (BASS_SetConfig options) +* 32768 sample FFT + BASS_DATA_FFT32768 (BASS_ChannelGetData flag) +* Support for numerical MP4 genre (gnre) tags + BASS_TAG_MP4 (BASS_ChannelGetTags type) +* Support for BASSWMA's tag option when using Media Foundation WMA codec + BASS_TAG_WMA (BASS_ChannelGetTags type) +* OpenMPT author tag retrieval + BASS_TAG_MUSIC_AUTH (BASS_ChannelGetTags type) +* FastTracker2 panning for XM files + BASS_MUSIC_FT2PAN (BASS_MusicLoad flag) +* Support for longer device names on Windows + BASS_DEVICEINFO (name member) +* Checking for floating-point support on platforms that might not have it + BASS_CONFIG_FLOAT (BASS_GetConfig option) +* Attribute size retrieval fix + BASS_ChannelGetAttributeEx +* Fix for missing LC_VERSION_MIN issue with Xcode 7 on OSX, ppc architecture (PowerPC) support dropped +* LIST example renamed to DEVLIST + +2.4.11 - 22/12/2014 +------------------- +* Support for custom HTTP request headers + BASS_StreamCreateURL +* HTTPS support on Linux/Android + BASS_StreamCreateURL +* Redirection HTTP headers provided during connection + BASS_STREAM_STATUS (BASS_StreamCreateURL flag) + DOWNLOADPROC +* Adjustable stalled internet stream resumption buffer level + BASS_ATTRIB_NET_RESUME (BASS_ChannelSetAttribute option) +* Extended level retrieval inc. multi-channel and RMS options + BASS_ChannelGetLevelEx +* Inexact/faster seeking + BASS_POS_INEXACT (BASS_ChannelSetPosition flag) +* Post-stream creation scanning (seek table building) + BASS_POS_SCAN (BASS_ChannelSetPosition flag) +* Extended attribute support + BASS_ChannelGet/SetAttributeEx +* Scanned info retrieval and setting + BASS_ATTRIB_SCANINFO (BASS_ChannelGet/SetAttributeEx option) +* Built-in ADPCM WAVE file support on Linux/Android/WinCE + BASS_StreamCreateFile/User/URL + BASS_SampleLoad +* Active MOD channel count retrieval + BASS_ATTRIB_MUSIC_ACTIVE (BASS_ChannelGetAttribute option) +* Fractional sample rates + BASS_ATTRIB_FREQ (BASS_ChannelSetAttribute option) +* Device type information + BASS_DEVICE_TYPE_xxx (BASS_DEVICEINFO flags) +* Unicode support for recording input names + BASS_CONFIG_UNICODE + BASS_RecordGetInputName +* File size retrieval + BASS_FILEPOS_SIZE (BASS_StreamGetFilePosition mode) +* Asynchronous file reading buffer level retrieval + BASS_FILEPOS_ASYNCBUF (BASS_StreamGetFilePosition mode) +* MPEG data search limit raised to 1MB + BASS_CONFIG_VERIFY +* Separate MPEG data search limit for internet/buffered streams + BASS_CONFIG_VERIFY_NET +* Support for iTunes gapless info with Media Foundation and CoreAudio codecs + BASS_StreamCreateFile/User +* Airplay receiver enumeration and selection on OSX + BASS_DEVICES_AIRPLAY (BASS_GetDeviceInfo flag) + BASS_CONFIG_AIRPLAY (BASS_SetConfig option) +* Media Foundation playback of audio from videos is now optional + BASS_CONFIG_MF_VIDEO (BASS_SetConfig option) +* Optional floating-point or fixed-point data retrieval on Android/WinCE + BASS_DATA_FLOAT/FIXED (BASS_ChannelGetData flags) +* Continuous output when nothing is playing on Linux/Android/WinCE + BASS_CONFIG_DEV_NONSTOP (BASS_SetConfig option) +* Fix for decoding channels being ended when stopping the output device + BASS_Stop +* Fix for Media Foundation internet/buffered streaming on Windows 8 + BASS_StreamCreateURL + BASS_StreamCreateFileUser +* Improved compatibility with recent PulseAudio versions on Linux +* LIST and MODTEST examples added +* MASM API and examples removed (available as separate download) + +2.4.10 - 16/2/2013 +------------------ +* Asynchronous file reading/buffering + BASS_ASYNCFILE (BASS_StreamCreateFile/User flag) + BASS_CONFIG_ASYNCFILE_BUFFER (BASS_SetConfig option) +* Support for chained OGG files (multiple logical bitstreams) + BASS_StreamCreateFile/User + BASS_CONFIG_OGG_PRESCAN (BASS_SetConfig option) + BASS_POS_OGG (BASS_ChannelSetPosition/ChannelGetLength mode) +* OGG logical bitstream syncs are no longer automatically "mixtime" + BASS_SYNC_OGG_CHANGE (BASS_ChannelSetSync type) +* Support for Soundtracker MOD files + BASS_MusicLoad +* Complex FFT data + BASS_DATA_FFT_COMPLEX (BASS_ChannelGetData flag) +* Volume levels above 1.0 for decoding channels + BASS_ATTRIB_VOL (BASS_ChannelSetAttribute option) +* Recording device channel count retrieval on Windows/OSX/iOS + BASS_RECORDINFO (formats member) +* Minimum recording period reduced to 5ms + BASS_RecordStart +* Recording device period adjustment on OSX + BASS_RecordStart +* Device UID retrieval on OSX + BASS_DEVICEINFO (driver member) +* The desktop window handle is used when none is provided + BASS_Init + +2.4.9 - 3/5/2012 +---------------- +* Improved and adjustable sample rate conversion quality + BASS_ATTRIB_SRC (BASS_ChannelSetAttribute option) + BASS_CONFIG_SRC/_SAMPLE (BASS_SetConfig options) +* Support for buffered file & internet streams with CoreAudio codecs on OSX/iOS + BASS_StreamCreateURL + BASS_StreamCreateUser +* Data and level retrieval from sample channels + BASS_ChannelGetData + BASS_ChannelGetLevel +* Oldest sample channel will be overridden when there are multiple candidates + BASS_SampleGetChannel +* Use of the device's output rate with MODs + BASS_MusicLoad +* Optional device output rate setting on OSX/iOS + BASS_DEVICE_FREQ (BASS_Init flag) +* UTF-8 device information on Windows + BASS_CONFIG_UNICODE (BASS_SetConfig option) +* Speaker assignment with panning/balance control on Windows Vista/7 + BASS_CONFIG_VISTA_SPEAKERS (BASS_SetConfig option) + BASS_ATTRIB_PAN (BASS_ChannelGet/Set/SlideAttribute option) +* Push stream queue level can be checked after using BASS_STREAMPROC_END + BASS_StreamPutData +* Support for ALSA subdevices on Linux + BASS_Init + BASS_GetDeviceInfo + BASS_RecordInit + BASS_RecordGetDeviceInfo +* Device list fix on 64-bit OSX + BASS_GetDeviceInfo + BASS_RecordGetDeviceInfo +* BASS_UNICODE support fix on Linux + BASS_PluginLoad +* Internet streaming tweaks/fixes on Windows +* SYNTH example updated to use device output rate +* RECTEST example updated (C version) for better Windows Vista/7 support +* Documentation updated with platform-specific info for Android + +2.4.8 - 29/8/2011 +----------------- +* Support for Media Foundation codecs on Windows 7 and updated Vista + BASS_StreamCreateFile/User/URL + BASS_TAG_MF (BASS_ChannelGetTags type) + PLUGINS example updated +* Built-in support for MP4 tags on Win32/OSX/iOS (for Media Foundation & CoreAudio AAC/ALAC codecs) + BASS_TAG_MP4 (BASS_ChannelGetTags type) +* WAVE format chunk retrieval + BASS_TAG_WAVEFORMAT (BASS_ChannelGetTags type) +* Adjustable sample channel limit + BASS_SampleSetInfo +* Per-channel CPU usage monitoring + BASS_ATTRIB_CPU (BASS_ChannelGetAttribute option) +* Pre-allocation of push stream queue space + BASS_StreamPutData +* Support for AIFF files with the data chunk before the format info chunk + BASS_StreamCreateFile/User/URL +* Ramping-in disabled for all but the XM format (and MODs in FT2 mode) in "normal" ramping mode + BASS_MUSIC_RAMP (BASS_MusicLoad flag) +* RIFF "INFO" tag reading fix + BASS_TAG_RIFF_INFO (BASS_ChannelGetTags type) +* OSX 10.7 compatibility fix +* x86_64 architecture support on OSX +* Delphi dynamic loading unit removed (now available as separate download) + +2.4.7 - 30/11/2010 +------------------ +* Decode-to-position seeking + BASS_POS_DECODETO (BASS_ChannelSetPosition flag) +* Support for RIFF "DISP" text tags + BASS_TAG_RIFF_DISP (BASS_ChannelGetTags type) +* Support for APEv1 tags + BASS_TAG_APE (BASS_ChannelGetTags type) + BASS_TAG_APE_BINARY (BASS_ChannelGetTags type) +* 16384 sample FFT + BASS_DATA_FFT16384 (BASS_ChannelGetData flag) +* Support for AIFF files larger than 4GB + BASS_StreamCreateFile/User/URL +* Acceptance of self-signed and invalid certificates + BASS_StreamCreateURL +* Internet stream reading timeout + BASS_CONFIG_NET_READTIMEOUT +* Support for removing a DSP within its DSPPROC + BASS_ChannelRemoveDSP +* Buffer bypassing for lower latency output (not available on Windows) + BASS_ATTRIB_NOBUFFER (BASS_ChannelSetAttribute option) + SYNTH example added (OSX) +* A "Default" device that follows default device changes on Windows 7 + BASS_CONFIG_DEV_DEFAULT (BASS_SetConfig option) +* Xcode examples project added for OSX +* Documentation updated with platform-specific info for iOS/Linux/WinCE + +2.4.6 - 17/6/2010 +----------------- +* Support for APEv2 tags, including binary + BASS_TAG_APE (BASS_ChannelGetTags type) + BASS_TAG_APE_BINARY (BASS_ChannelGetTags type) +* Unicode/IDN URL support + BASS_StreamCreateURL +* Decoding position retrieval + BASS_POS_DECODE (BASS_ChannelGetPosition flag) +* Support for OGG 6/7.1 channel configs + BASS_StreamCreateFile/User/URL +* Support for setting syncs within mixtime SYNCPROCs + BASS_ChannelSetSync +* Support for setting additional DSP/FX within DSPPROCs + BASS_ChannelSetDSP/FX +* DC bias removal in FFT processing + BASS_DATA_FFT_REMOVEDC (BASS_ChannelGetData flag) +* Fix for incorrect (2x) return value when getting FFT data from a 16-bit channel + BASS_ChannelGetData +* Fix for incorrect (STOPPED instead of PAUSED) channel status following BASS_Pause + BASS_ChannelIsActive + 2.4.5 - 18/12/2009 ------------------ * Support for little-endian AIFF files - BASS_StreamCreateFile/User/Url + BASS_StreamCreateFile/User/URL BASS_SampleLoad * Support for 64-bit floating-point WAVE/AIFF files - BASS_StreamCreateFile/User/Url + BASS_StreamCreateFile/User/URL BASS_SampleLoad * Input volume retrieval failure results in a reading of -1 instead of 1 BASS_RecordGetInput @@ -594,7 +982,7 @@ change to the BASS interface are listed. * Fix for deferred input settings on Vista BASS_RecordSetInput * Windows MP3 codec given preference over other installed MP3 codecs (MP3-FREE version) - BASS_StreamCreateFile/User/Url + BASS_StreamCreateFile/User/URL BASS_SampleLoad 2.4.4 - 13/10/2009 @@ -791,7 +1179,7 @@ change to the BASS interface are listed. * Improved stall handling BASS_SYNC_STALL * Invalid decoding channel flags produce an error instead of being ignored - BASS_StreamCreate/File/User/Url + BASS_StreamCreate/File/User/URL BASS_MusicLoad 2.3.0.2 - 22/1/2007 @@ -874,7 +1262,7 @@ change to the BASS interface are listed. * Add-on plugin system BASS_PluginLoad BASS_PluginFree - BASS_StreamCreateFile/User/Url + BASS_StreamCreateFile/User/URL BASS_SampleLoad PLUGINS example added * MOD position & syncing in bytes @@ -890,13 +1278,13 @@ change to the BASS interface are listed. BASS_StreamGetLength *removed* BASS_MusicGetLength *removed* * Support for AIFF files - BASS_StreamCreateFile/User/Url + BASS_StreamCreateFile/User/URL BASS_SampleLoad * Support for 24 and 32-bit (integer) WAV files - BASS_StreamCreateFile/User/Url + BASS_StreamCreateFile/User/URL BASS_SampleLoad * WAV files are no longer converted to the "device" resolution - BASS_StreamCreateFile/User/Url + BASS_StreamCreateFile/User/URL * Recording master control BASS_RecordGetInput BASS_RecordSetInput @@ -1046,7 +1434,7 @@ change to the BASS interface are listed. BASS_RECORD_PAUSE (BASS_RecordStart flag) * Multi-channel streams, inc. support for multichannel OGG & WAV files BASS_StreamCreate - BASS_StreamCreateFile/User/Url + BASS_StreamCreateFile/User/URL * FFT for individual channels, inc. multi-channel streams BASS_DATA_FFT_INDIVIDUAL (BASS_ChannelGetData flag) BASS_DATA_FFT512S/1024S/2048S/4096S *removed* @@ -1133,7 +1521,7 @@ change to the BASS interface are listed. * Output automatically started during initialization * BASS_ChannelGetData once again accepts any "length" param * All function comments have been removed from the API headers to avoid - outdated/incorrect information - the BASS.CHM documentation should be used. + outdated/incorrect information - the documentation should be used. * TMT Pascal API removed from main distribution - now available on the website * A few more 'K' knocked off the DLL size :) @@ -1147,7 +1535,7 @@ change to the BASS interface are listed. BASS_ChannelSeconds2Bytes return value is rounded down to nearest sample BASS_ChannelGetData "length" param must equal a whole number of samples Slide syncs are triggered by "-2" volume slides on "autofree" streams -* Support for UNICODE filenames +* Support for Unicode filenames BASS_UNICODE (BASS_SampleLoad/BASS_StreamCreateFile/BASS_MusicLoad flag) * 4096 sample FFT BASS_DATA_FFT4096/S (BASS_ChannelGetData flags) @@ -1156,7 +1544,7 @@ change to the BASS interface are listed. 1.8 - 9/3/2003 -------------- * 32-bit floating-point channels - BASS_SAMPLE_FLOAT (BASS_StreamCreate/URL/File flag) + BASS_SAMPLE_FLOAT (BASS_StreamCreate/File/URL flag) BASS_MUSIC_FLOAT (BASS_MusicLoad flag) BASS_SAMPLE_FLOAT (BASS_RecordStart flag) BASS_DEVICE_FLOATDSP (BASS_Init flag) @@ -1198,7 +1586,7 @@ change to the BASS interface are listed. BASS_StreamCreate/File/URL * BASS_StreamGetFilePosition mode flags added BASS_FILEPOS_DECODE/DOWNLOAD/END -* DirectX 9 detection +* DirectSound 9 detection BASS_INFO (dsver member) * Initialization flags retrieval BASS_INFO (initflags member) @@ -1722,7 +2110,6 @@ Visual Basic: Adam Hoult, Hendrik Knaepen, Arthur Aminov, Peter Hebels Delphi: Titus Miloi, Rogier Timmermans, Alessandro Cappellozza, Jesse Naranjo, Chris Troesken, Evgeny Melnikov -MASM: Octavian Chis Bug reports, Suggestions, Comments, Enquiries, etc... diff --git a/src/lib/bass/delphi/bass.pas b/src/lib/bass/delphi/bass.pas index 9f2d911b..0ebf3bb1 100644 --- a/src/lib/bass/delphi/bass.pas +++ b/src/lib/bass/delphi/bass.pas @@ -1,6 +1,6 @@ { BASS 2.4 Delphi unit - Copyright (c) 1999-2014 Un4seen Developments Ltd. + Copyright (c) 1999-2016 Un4seen Developments Ltd. See the BASS.CHM file for more detailed documentation @@ -11,7 +11,7 @@ NOTE: Delphi users should use the BASS_UNICODE flag where possible } -unit Bass; +unit BASS; interface @@ -110,21 +110,25 @@ interface BASS_CONFIG_DEV_NONSTOP = 50; BASS_CONFIG_IOS_NOCATEGORY = 51; BASS_CONFIG_VERIFY_NET = 52; + BASS_CONFIG_DEV_PERIOD = 53; + BASS_CONFIG_FLOAT = 54; // BASS_SetConfigPtr options BASS_CONFIG_NET_AGENT = 16; BASS_CONFIG_NET_PROXY = 17; // BASS_Init flags - BASS_DEVICE_8BITS = 1; // 8 bit resolution, else 16 bit - BASS_DEVICE_MONO = 2; // mono, else stereo + BASS_DEVICE_8BITS = 1; // 8 bit + BASS_DEVICE_MONO = 2; // mono BASS_DEVICE_3D = 4; // enable 3D functionality + BASS_DEVICE_16BITS = 8; // limit output to 16 bit BASS_DEVICE_LATENCY = $100; // calculate device latency (BASS_INFO struct) BASS_DEVICE_CPSPEAKERS = $400; // detect speakers via Windows control panel BASS_DEVICE_SPEAKERS = $800; // force enabling of speaker assignment BASS_DEVICE_NOSPEAKER = $1000; // ignore speaker arrangement BASS_DEVICE_DMIX = $2000; // use ALSA "dmix" plugin BASS_DEVICE_FREQ = $4000; // set device sample rate + BASS_DEVICE_STEREO = $8000; // limit output to stereo // DirectSound interfaces (for use with BASS_GetDSoundObject) BASS_OBJECT_DS = 1; // IDirectSound @@ -179,7 +183,7 @@ interface WAVE_FORMAT_4S16 = $00000800; // 44.1 kHz, Stereo, 16-bit BASS_SAMPLE_8BITS = 1; // 8 bit - BASS_SAMPLE_FLOAT = 256; // 32-bit floating-point + BASS_SAMPLE_FLOAT = 256; // 32 bit floating-point BASS_SAMPLE_MONO = 2; // mono BASS_SAMPLE_LOOP = 4; // looped BASS_SAMPLE_3D = 8; // 3D functionality @@ -212,6 +216,7 @@ interface BASS_MUSIC_RAMPS = $400; // sensitive ramping BASS_MUSIC_SURROUND = $800; // surround sound BASS_MUSIC_SURROUND2 = $1000; // surround sound (mode 2) + BASS_MUSIC_FT2PAN = $2000; // apply FastTracker 2 panning to XM files BASS_MUSIC_FT2MOD = $2000; // play .MOD as FastTracker 2 does BASS_MUSIC_PT1MOD = $4000; // play .MOD as ProTracker 1 does BASS_MUSIC_NONINTER = $10000; // non-interpolated sample mixing @@ -311,7 +316,6 @@ interface BASS_STREAMPROC_END = $80000000; // end of user stream flag - // BASS_StreamCreateFileUser file systems STREAMFILE_NOBUFFER = 0; STREAMFILE_BUFFER = 1; @@ -345,8 +349,8 @@ interface BASS_SYNC_MUSICINST = 1; BASS_SYNC_MUSICFX = 3; BASS_SYNC_OGG_CHANGE = 12; - BASS_SYNC_MIXTIME = $40000000; // FLAG: sync at mixtime, else at playtime - BASS_SYNC_ONETIME = $80000000; // FLAG: sync only once, else continuously + BASS_SYNC_MIXTIME = $40000000; // flag: sync at mixtime, else at playtime + BASS_SYNC_ONETIME = $80000000; // flag: sync only once, else continuously // BASS_ChannelIsActive return values BASS_ACTIVE_STOPPED = 0; @@ -365,6 +369,8 @@ interface BASS_ATTRIB_SRC = 8; BASS_ATTRIB_NET_RESUME = 9; BASS_ATTRIB_SCANINFO = 10; + BASS_ATTRIB_NORAMP = 11; + BASS_ATTRIB_BITRATE = 12; BASS_ATTRIB_MUSIC_AMPLIFY = $100; BASS_ATTRIB_MUSIC_PANSEP = $101; BASS_ATTRIB_MUSIC_PSCALER = $102; @@ -386,6 +392,7 @@ interface BASS_DATA_FFT4096 = $80000004; // 4096 FFT BASS_DATA_FFT8192 = $80000005; // 8192 FFT BASS_DATA_FFT16384 = $80000006; // 16384 FFT + BASS_DATA_FFT32768 = $80000007; // 32768 FFT BASS_DATA_FFT_INDIVIDUAL = $10; // FFT flag: FFT for each channel, else all combined BASS_DATA_FFT_NOWINDOW = $20; // FFT flag: no Hanning window BASS_DATA_FFT_REMOVEDC = $40; // FFT flag: pre-remove DC bias @@ -405,9 +412,10 @@ interface BASS_TAG_META = 5; // ICY metadata : ANSI string BASS_TAG_APE = 6; // APEv2 tags : series of null-terminated UTF-8 strings BASS_TAG_MP4 = 7; // MP4/iTunes metadata : series of null-terminated UTF-8 strings + BASS_TAG_WMA = 8; // WMA tags : series of null-terminated UTF-8 strings BASS_TAG_VENDOR = 9; // OGG encoder : UTF-8 string BASS_TAG_LYRICS3 = 10; // Lyric3v2 tag : ASCII string - BASS_TAG_CA_CODEC = 11; // CoreAudio codec info : TAG_CA_CODEC structure + BASS_TAG_CA_CODEC = 11; // CoreAudio codec info : TAG_CA_CODEC structure BASS_TAG_MF = 13; // Media Foundation tags : series of null-terminated UTF-8 strings BASS_TAG_WAVEFORMAT = 14; // WAVE format : WAVEFORMATEEX structure BASS_TAG_RIFF_INFO = $100; // RIFF "INFO" tags : series of null-terminated ANSI strings @@ -418,6 +426,7 @@ interface BASS_TAG_MUSIC_NAME = $10000; // MOD music name : ANSI string BASS_TAG_MUSIC_MESSAGE = $10001; // MOD message : ANSI string BASS_TAG_MUSIC_ORDERS = $10002; // MOD order list : BYTE array of pattern numbers + BASS_TAG_MUSIC_AUTH = $10003; // MOD author : UTF-8 string BASS_TAG_MUSIC_INST = $10100; // + instrument #, MOD instrument name : ANSI string BASS_TAG_MUSIC_SAMPLE = $10300; // + sample #, MOD sample name : ANSI string @@ -429,7 +438,7 @@ interface BASS_POS_DECODE = $10000000; // flag: get the decoding (not playing) position BASS_POS_DECODETO = $20000000; // flag: decode to the position instead of seeking BASS_POS_SCAN = $40000000; // flag: scan to the position - + // BASS_RecordSetInput flags BASS_INPUT_OFF = $10000; BASS_INPUT_ON = $20000; @@ -619,7 +628,7 @@ TAG_APE_BINARY = record Reserved: Array[0..189] of Byte; CodingHistory: Array[0..maxInt div 2 - 1] of AnsiChar; // history end; - + BASS_DX8_CHORUS = record fWetDryMix: Single; fDepth: Single; @@ -846,7 +855,7 @@ function BASS_RecordFree: BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; e function BASS_RecordGetInfo(var info: BASS_RECORDINFO): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; function BASS_RecordGetInputName(input: LongInt): PAnsiChar; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; function BASS_RecordSetInput(input: LongInt; flags: DWORD; volume: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; -function BASS_RecordGetInput(input: LongInt; var volume: Single): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; +function BASS_RecordGetInput(input: LongInt; volume: PSingle): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; function BASS_RecordStart(freq, chans, flags: DWORD; proc: RECORDPROC; user: Pointer): HRECORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; function BASS_ChannelBytes2Seconds(handle: DWORD; pos: QWORD): Double; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF};external bassdll; @@ -890,6 +899,7 @@ function BASS_ChannelRemoveFX(handle: DWORD; fx: HFX): BOOL; {$IFDEF MSWINDOWS}s function BASS_FXSetParameters(handle: HFX; par: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; function BASS_FXGetParameters(handle: HFX; par: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; function BASS_FXReset(handle: HFX): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; +function BASS_FXSetPriority(handle: HFX; priority: LongInt): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bassdll; function BASS_SPEAKER_N(n: DWORD): DWORD; @@ -903,6 +913,7 @@ function BASS_SetEAXPreset(env: LongInt): BOOL; } {$ENDIF} + implementation function BASS_SPEAKER_N(n: DWORD): DWORD; diff --git a/src/lib/bass_fx/bass_fx.chm b/src/lib/bass_fx/bass_fx.chm new file mode 100644 index 00000000..fe5716a9 Binary files /dev/null and b/src/lib/bass_fx/bass_fx.chm differ diff --git a/src/lib/bass_fx/bass_fx.pas b/src/lib/bass_fx/bass_fx.pas new file mode 100644 index 00000000..72099c41 --- /dev/null +++ b/src/lib/bass_fx/bass_fx.pas @@ -0,0 +1,472 @@ +{============================================================================= + BASS_FX 2.4 - Copyright (c) 2002-2014 (: JOBnik! :) [Arthur Aminov, ISRAEL] + [http://www.jobnik.org] + + bugs/suggestions/questions: + forum : http://www.un4seen.com/forum/?board=1 + http://www.jobnik.org/smforum + e-mail : bass_fx@jobnik.org + -------------------------------------------------- + + BASS_FX unit is based on BASS_FX 1.1 unit: + ------------------------------------------ + (c) 2002 Roger Johansson. w1dg3r@yahoo.com + + NOTE: This unit will work only with BASS_FX version 2.4.11.1 + Check www.un4seen.com or www.jobnik.org for any later versions. + + * Requires BASS 2.4 (available at http://www.un4seen.com) + + How to install: + --------------- + Copy BASS_FX.PAS & BASS.PAS to the \LIB subdirectory of your Delphi path + or your project dir. +=============================================================================} + +unit BASS_FX; + +interface + +{$IFDEF FPC} + {$MODE Delphi} + {$PACKRECORDS C} +{$ENDIF} + +uses Bass, Math; // Math is used for BASS_BFX_Linear2dB/dB2Linear functions below + +const + // BASS_CHANNELINFO types + BASS_CTYPE_STREAM_TEMPO = $1f200; + BASS_CTYPE_STREAM_REVERSE = $1f201; + + // Tempo / Reverse / BPM / Beat flag + BASS_FX_FREESOURCE = $10000; // Free the source handle as well? + + {$IFDEF MSWINDOWS} + bass_fxdll = 'bass_fx.dll'; + {$ELSE} + bass_fxdll = 'libbass_fx.so'; + {$ENDIF} + +// BASS_FX Version +function BASS_FX_GetVersion(): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; + +{============================================================================= + DSP (Digital Signal Processing) +=============================================================================} + +{ + Multi-channel order of each channel is as follows: + 3 channels left-front, right-front, center. + 4 channels left-front, right-front, left-rear/side, right-rear/side. + 5 channels left-front, right-front, center, left-rear/side, right-rear/side. + 6 channels (5.1) left-front, right-front, center, LFE, left-rear/side, right-rear/side. + 8 channels (7.1) left-front, right-front, center, LFE, left-rear/side, right-rear/side, left-rear center, right-rear center. +} + +const + // DSP channels flags + BASS_BFX_CHANALL = -1; // all channels at once (as by default) + BASS_BFX_CHANNONE = 0; // disable an effect for all channels + BASS_BFX_CHAN1 = 1; // left-front channel + BASS_BFX_CHAN2 = 2; // right-front channel + BASS_BFX_CHAN3 = 4; // see above info + BASS_BFX_CHAN4 = 8; // see above info + BASS_BFX_CHAN5 = 16; // see above info + BASS_BFX_CHAN6 = 32; // see above info + BASS_BFX_CHAN7 = 64; // see above info + BASS_BFX_CHAN8 = 128; // see above info + +// if you have more than 8 channels (7.1), use this function below +function BASS_BFX_CHANNEL_N(n: DWORD): DWORD; + +// DSP effects +const + BASS_FX_BFX_ROTATE = $10000; // A channels volume ping-pong / multi channel + BASS_FX_BFX_ECHO = $10001; // Echo / 2 channels max (deprecated) + BASS_FX_BFX_FLANGER = $10002; // Flanger / multi channel (deprecated) + BASS_FX_BFX_VOLUME = $10003; // Volume / multi channel + BASS_FX_BFX_PEAKEQ = $10004; // Peaking Equalizer / multi channel + BASS_FX_BFX_REVERB = $10005; // Reverb / 2 channels max (deprecated) + BASS_FX_BFX_LPF = $10006; // Low Pass Filter 24dB / multi channel (deprecated) + BASS_FX_BFX_MIX = $10007; // Swap, remap and mix channels / multi channel + BASS_FX_BFX_DAMP = $10008; // Dynamic Amplification / multi channel + BASS_FX_BFX_AUTOWAH = $10009; // Auto Wah / multi channel + BASS_FX_BFX_ECHO2 = $1000A; // Echo 2 / multi channel (deprecated) + BASS_FX_BFX_PHASER = $1000B; // Phaser / multi channel + BASS_FX_BFX_ECHO3 = $1000C; // Echo 3 / multi channel (deprecated) + BASS_FX_BFX_CHORUS = $1000D; // Chorus/Flanger / multi channel + BASS_FX_BFX_APF = $1000E; // All Pass Filter / multi channel (deprecated) + BASS_FX_BFX_COMPRESSOR = $1000F; // Compressor / multi channel (deprecated) + BASS_FX_BFX_DISTORTION = $10010; // Distortion / multi channel + BASS_FX_BFX_COMPRESSOR2 = $10011; // Compressor 2 / multi channel + BASS_FX_BFX_VOLUME_ENV = $10012; // Volume envelope / multi channel + BASS_FX_BFX_BQF = $10013; // BiQuad filters / multi channel + BASS_FX_BFX_ECHO4 = $10014; // Echo 4 / multi channel + BASS_FX_BFX_PITCHSHIFT = $10015; // Pitch shift using FFT / multi channel (not available on mobile) + BASS_FX_BFX_FREEVERB = $10016; // Reverb using "Freeverb" algo / multi channel + +{ + Deprecated effects in 2.4.10 version: + ------------------------------------ + BASS_FX_BFX_ECHO -> use BASS_FX_BFX_ECHO4 + BASS_FX_BFX_ECHO2 -> use BASS_FX_BFX_ECHO4 + BASS_FX_BFX_ECHO3 -> use BASS_FX_BFX_ECHO4 + BASS_FX_BFX_REVERB -> use BASS_FX_BFX_FREEVERB + BASS_FX_BFX_FLANGER -> use BASS_FX_BFX_CHORUS + BASS_FX_BFX_COMPRESSOR -> use BASS_FX_BFX_COMPRESSOR2 + BASS_FX_BFX_APF -> use BASS_FX_BFX_BQF with BASS_BFX_BQF_ALLPASS filter + BASS_FX_BFX_LPF -> use 2x BASS_FX_BFX_BQF with BASS_BFX_BQF_LOWPASS filter and appropriate fQ values +} + +const + // BiQuad Filters + BASS_BFX_BQF_LOWPASS = 0; + BASS_BFX_BQF_HIGHPASS = 1; + BASS_BFX_BQF_BANDPASS = 2; // constant 0 dB peak gain + BASS_BFX_BQF_BANDPASS_Q = 3; // constant skirt gain, peak gain = Q + BASS_BFX_BQF_NOTCH = 4; + BASS_BFX_BQF_ALLPASS = 5; + BASS_BFX_BQF_PEAKINGEQ = 6; + BASS_BFX_BQF_LOWSHELF = 7; + BASS_BFX_BQF_HIGHSHELF = 8; + + // Freeverb + BASS_BFX_FREEVERB_MODE_FREEZE = 1; + +type + // Rotate + BASS_BFX_ROTATE = record + fRate: Single; // rotation rate/speed in Hz (A negative rate can be used for reverse direction) + lChannel: Integer; // BASS_BFX_CHANxxx flag/s (supported only even number of channels) + end; + + // Echo (deprecated) + BASS_BFX_ECHO = record + fLevel: Single; // [0....1....n] linear + lDelay: Integer; // [1200..30000] + end; + + // Flanger (deprecated) + BASS_BFX_FLANGER = record + fWetDry: Single; // [0....1....n] linear + fSpeed: Single; // [0......0.09] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Volume + BASS_BFX_VOLUME = record + lChannel: Integer; // BASS_BFX_CHANxxx flag/s or 0 for global volume control + fVolume: Single; // [0....1....n] linear + end; + + // Peaking Equalizer + BASS_BFX_PEAKEQ = record + lBand: Integer; // [0...............n] more bands means more memory & cpu usage + fBandwidth: Single; // [0.1...........<10] in octaves - fQ is not in use (Bandwidth has a priority over fQ) + fQ: Single; // [0...............1] the EE kinda definition (linear) (if Bandwidth is not in use) + fCenter: Single; // [1Hz..<info.freq/2] in Hz + fGain: Single; // [-15dB...0...+15dB] in dB (can be above/below these limits) + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Reverb (deprecated) + BASS_BFX_REVERB = record + fLevel: Single; // [0....1....n] linear + lDelay: Integer; // [1200..10000] + end; + + // Low Pass Filter (deprecated) + BASS_BFX_LPF = record + fResonance: Single; // [0.01............10] + fCutOffFreq: Single; // [1Hz....info.freq/2] cutoff frequency + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Swap, remap and mix + PTlChannel = ^TlChannel; + TlChannel = array[0..maxInt div sizeOf(DWORD) - 1] of DWORD; + BASS_BFX_MIX = record + lChannel: PTlChannel; // a pointer to an array of channels to mix using BASS_BFX_CHANxxx flag/s (lChannel[0] is left channel...) + end; + + // Dynamic Amplification + BASS_BFX_DAMP = record + fTarget: Single; // target volume level [0<......1] linear + fQuiet: Single; // quiet volume level [0.......1] linear + fRate: Single; // amp adjustment rate [0.......1] linear + fGain: Single; // amplification level [0...1...n] linear + fDelay: Single; // delay in seconds before increasing level [0.......n] linear + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Auto Wah + BASS_BFX_AUTOWAH = record + fDryMix: Single; // dry (unaffected) signal mix [-2......2] + fWetMix: Single; // wet (affected) signal mix [-2......2] + fFeedback: Single; // output signal to feed back into input [-1......1] + fRate: Single; // rate of sweep in cycles per second [0<....<10] + fRange: Single; // sweep range in octaves [0<....<10] + fFreq: Single; // base frequency of sweep Hz [0<...1000] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Echo 2 (deprecated) + BASS_BFX_ECHO2 = record + fDryMix: Single; // dry (unaffected) signal mix [-2......2] + fWetMix: Single; // wet (affected) signal mix [-2......2] + fFeedback: Single; // output signal to feed back into input [-1......1] + fDelay: Single; // delay sec [0<......n] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Phaser + BASS_BFX_PHASER = record + fDryMix: Single; // dry (unaffected) signal mix [-2......2] + fWetMix: Single; // wet (affected) signal mix [-2......2] + fFeedback: Single; // output signal to feed back into input [-1......1] + fRate: Single; // rate of sweep in cycles per second [0<....<10] + fRange: Single; // sweep range in octaves [0<....<10] + fFreq: Single; // base frequency of sweep [0<...1000] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Echo 3 (deprecated) + BASS_BFX_ECHO3 = record + fDryMix: Single; // dry (unaffected) signal mix [-2......2] + fWetMix: Single; // wet (affected) signal mix [-2......2] + fDelay: Single; // delay sec [0<......n] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Chorus/Flanger + BASS_BFX_CHORUS = record + fDryMix: Single; // dry (unaffected) signal mix [-2......2] + fWetMix: Single; // wet (affected) signal mix [-2......2] + fFeedback: Single; // output signal to feed back into input [-1......1] + fMinSweep: Single; // minimal delay ms [0<...6000] + fMaxSweep: Single; // maximum delay ms [0<...6000] + fRate: Single; // rate ms/s [0<...1000] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // All Pass Filter (deprecated) + BASS_BFX_APF = record + fGain: Single; // reverberation time [-1=<..<=1] + fDelay: Single; // delay sec [0<....<=n] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Compressor (deprecated) + BASS_BFX_COMPRESSOR = record + fThreshold: Single; // compressor threshold [0<=...<=1] + fAttacktime: Single; // attack time ms [0<.<=1000] + fReleasetime: Single; // release time ms [0<.<=5000] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Distortion + BASS_BFX_DISTORTION = record + fDrive: Single; // distortion drive [0<=...<=5] + fDryMix: Single; // dry (unaffected) signal mix [-5<=..<=5] + fWetMix: Single; // wet (affected) signal mix [-5<=..<=5] + fFeedback: Single; // output signal to feed back into input [-1<=..<=1] + fVolume: Single; // distortion volume [0=<...<=2] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Compressor 2 + BASS_BFX_COMPRESSOR2 = record + fGain: Single; // output gain of signal after compression [-60....60] in dB + fThreshold: Single; // point at which compression begins [-60.....0] in dB + fRatio: Single; // compression ratio [1.......n] + fAttack: Single; // attack time in ms [0.01.1000] + fRelease: Single; // release time in ms [0.01.5000] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Volume envelope + BASS_BFX_ENV_NODE = packed record + pos: Double; // node position in seconds (1st envelope node must be at position 0) + val: Single; // node value + end; + PBASS_BFX_ENV_NODES = ^TBASS_BFX_ENV_NODES; + TBASS_BFX_ENV_NODES = array[0..maxInt div sizeOf(BASS_BFX_ENV_NODE) - 1] of BASS_BFX_ENV_NODE; + + BASS_BFX_VOLUME_ENV = record + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + lNodeCount: Integer; // number of nodes + pNodes: PBASS_BFX_ENV_NODES; // the nodes + bFollow: BOOL; // follow source position + end; + + // BiQuad Filters + BASS_BFX_BQF = record + lFilter: Integer; // BASS_BFX_BQF_xxx filter types + fCenter: Single; // [1Hz..<info.freq/2] Cutoff (central) frequency in Hz + fGain: Single; // [-15dB...0...+15dB] Used only for PEAKINGEQ and Shelving filters in dB (can be above/below these limits) + fBandwidth: Single; // [0.1...........<10] Bandwidth in octaves (fQ is not in use (fBandwidth has a priority over fQ)) + // (between -3 dB frequencies for BANDPASS and NOTCH or between midpoint + // (fGgain/2) gain frequencies for PEAKINGEQ) + fQ: Single; // [0.1.............1] The EE kinda definition (linear) (if fBandwidth is not in use) + fS: Single; // [0.1.............1] A "shelf slope" parameter (linear) (used only with Shelving filters) + // when fS = 1, the shelf slope is as steep as you can get it and remain monotonically + // increasing or decreasing gain with frequency. + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Echo 4 + BASS_BFX_ECHO4 = record + fDryMix: Single; // dry (unaffected) signal mix [-2.......2] + fWetMix: Single; // wet (affected) signal mix [-2.......2] + fFeedback: Single; // output signal to feed back into input [-1.......1] + fDelay: Single; // delay sec [0<.......n] + bStereo: BOOL; // echo adjoining channels to each other [TRUE/FALSE] + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Pitch shift (not available on mobile) + BASS_BFX_PITCHSHIFT = record + fPitchShift: Single; // A factor value which is between 0.5 (one octave down) and 2 (one octave up) (1 won't change the pitch) [1 default] + // (fSemitones is not in use, fPitchShift has a priority over fSemitones) + fSemitones: Single; // Semitones (0 won't change the pitch) [0 default] + lFFTsize: Integer; // Defines the FFT frame size used for the processing. Typical values are 1024, 2048 and 4096 [2048 default] + // It may be any value <= 8192 but it MUST be a power of 2 + lOsamp: Integer; // Is the STFT oversampling factor which also determines the overlap between adjacent STFT frames [8 default] + // It should at least be 4 for moderate scaling ratios. A value of 32 is recommended for best quality (better quality = higher CPU usage) + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + + // Freeverb + BASS_BFX_FREEVERB = record + fDryMix: Single; // dry (unaffected) signal mix [0........1], def. 0 + fWetMix: Single; // wet (affected) signal mix [0........3], def. 1.0f + fRoomSize: Single; // room size [0........1], def. 0.5f + fDamp: Single; // damping [0........1], def. 0.5f + fWidth: Single; // stereo width [0........1], def. 1 + lMode: DWORD; // 0 or BASS_BFX_FREEVERB_MODE_FREEZE, def. 0 (no freeze) + lChannel: Integer; // BASS_BFX_CHANxxx flag/s + end; + +{============================================================================= + set dsp fx - BASS_ChannelSetFX + remove dsp fx - BASS_ChannelRemoveFX + set parameters - BASS_FXSetParameters + retrieve parameters - BASS_FXGetParameters + reset the state - BASS_FXReset +=============================================================================} + +{============================================================================= + Tempo, Pitch scaling and Sample rate changers +=============================================================================} + +// NOTE: Enable Tempo supported flags in BASS_FX_TempoCreate and the others to source handle. + +const + // tempo attributes (BASS_ChannelSet/GetAttribute) + BASS_ATTRIB_TEMPO = $10000; + BASS_ATTRIB_TEMPO_PITCH = $10001; + BASS_ATTRIB_TEMPO_FREQ = $10002; + + // tempo attributes options + BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER = $10010; // TRUE (default) / FALSE (default for multi-channel on mobile devices for lower CPU usage) + BASS_ATTRIB_TEMPO_OPTION_AA_FILTER_LENGTH = $10011; // 32 default (8 .. 128 taps) + BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO = $10012; // TRUE (default on mobile devices for loswer CPU usage) / FALSE (default) + BASS_ATTRIB_TEMPO_OPTION_SEQUENCE_MS = $10013; // 82 default, 0 = automatic + BASS_ATTRIB_TEMPO_OPTION_SEEKWINDOW_MS = $10014; // 28 default, 0 = automatic + BASS_ATTRIB_TEMPO_OPTION_OVERLAP_MS = $10015; // 8 default + BASS_ATTRIB_TEMPO_OPTION_PREVENT_CLICK = $10016; // TRUE / FALSE (default) + + // tempo algorithm flags + BASS_FX_TEMPO_ALGO_LINEAR = $200; + BASS_FX_TEMPO_ALGO_CUBIC = $400; // default + BASS_FX_TEMPO_ALGO_SHANNON = $800; + +function BASS_FX_TempoCreate(chan, flags: DWORD): HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_TempoGetSource(chan: HSTREAM): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_TempoGetRateRatio(chan: HSTREAM): Single; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; + +{============================================================================= + Reverse playback +=============================================================================} + +// NOTES: 1. MODs won't load without BASS_MUSIC_PRESCAN flag. +// 2. Enable Reverse supported flags in BASS_FX_ReverseCreate and the others to source handle. + +const + // reverse attribute (BASS_ChannelSet/GetAttribute) + BASS_ATTRIB_REVERSE_DIR = $11000; + + // playback directions + BASS_FX_RVS_REVERSE = -1; + BASS_FX_RVS_FORWARD = 1; + +function BASS_FX_ReverseCreate(chan: DWORD; dec_block: Single; flags: DWORD): HSTREAM; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_ReverseGetSource(chan: HSTREAM): DWORD; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; + +{============================================================================= + BPM (Beats Per Minute) +=============================================================================} + +const + // bpm flags + BASS_FX_BPM_BKGRND = 1; // if in use, then you can do other processing while detection's in progress. Available only in Windows platforms (BPM/Beat) + BASS_FX_BPM_MULT2 = 2; // if in use, then will auto multiply bpm by 2 (if BPM < minBPM*2) + + // translation options (deprecated) + BASS_FX_BPM_TRAN_X2 = 0; // multiply the original BPM value by 2 (may be called only once & will change the original BPM as well!) + BASS_FX_BPM_TRAN_2FREQ = 1; // BPM value to Frequency + BASS_FX_BPM_TRAN_FREQ2 = 2; // Frequency to BPM value + BASS_FX_BPM_TRAN_2PERCENT = 3; // BPM value to Percents + BASS_FX_BPM_TRAN_PERCENT2 = 4; // Percents to BPM value + +type + BPMPROC = procedure(chan: DWORD; bpm: Single; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; + BPMPROGRESSPROC = procedure(chan: DWORD; percent: Single; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; + BPMPROCESSPROC = BPMPROGRESSPROC; // back-compatibility + +function BASS_FX_BPM_DecodeGet(chan: DWORD; startSec, endSec: Double; minMaxBPM, flags: DWORD; proc: BPMPROGRESSPROC; user: Pointer): Single; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_BPM_CallbackSet(handle: DWORD; proc: BPMPROC; period: Double; minMaxBPM, flags: DWORD; user: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_BPM_CallbackReset(handle: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_BPM_Translate(handle: DWORD; val2tran: Single; trans: DWORD): Single; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; // deprecated +function BASS_FX_BPM_Free(handle: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; + +{============================================================================= + Beat position trigger +=============================================================================} + +type + BPMBEATPROC = procedure(chan: DWORD; beatpos: Double; user: Pointer); {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; + +function BASS_FX_BPM_BeatCallbackSet(handle: DWORD; proc: BPMBEATPROC; user: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_BPM_BeatCallbackReset(handle: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_BPM_BeatDecodeGet(chan: DWORD; startSec, endSec: Double; flags: DWORD; proc: BPMBEATPROC; user: Pointer): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_BPM_BeatSetParameters(handle: DWORD; bandwidth, centerfreq, beat_rtime: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_BPM_BeatGetParameters(handle: DWORD; var bandwidth, centerfreq, beat_rtime: Single): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; +function BASS_FX_BPM_BeatFree(handle: DWORD): BOOL; {$IFDEF MSWINDOWS}stdcall{$ELSE}cdecl{$ENDIF}; external bass_fxdll; + +implementation + +{============================================================================= + Macros +=============================================================================} + +// if you have more than 8 channels (7.1), use this function +function BASS_BFX_CHANNEL_N(n: DWORD): DWORD; +begin + Result := 1 shl (n-1); +end; + +// translate linear level to logarithmic dB +function BASS_BFX_Linear2dB(level: Double): Double; +begin + Result := 20*log10(level); +end; + +// translate logarithmic dB level to linear +function BASS_BFX_dB2Linear(dB: Double): Double; +begin + Result := Power(10,(dB)/20); +end; + +end. diff --git a/src/lib/bass_fx/bass_fx.txt b/src/lib/bass_fx/bass_fx.txt new file mode 100644 index 00000000..54ef813b --- /dev/null +++ b/src/lib/bass_fx/bass_fx.txt @@ -0,0 +1,1301 @@ +------------------------------------------------------------------------------- + (: -= BASS_FX v2.4.11.1 =- :) + -=================- + Copyright (c) 2002-2014 JOBnik! [Arthur Aminov, ISRAEL] + All rights reserved! +------------------------------------------------------------------------------- + +Donate +====== +If you like BASS_FX or use it in a commercial/shareware products, +then you may wish to make a donation to support its development (see the docs for info). + +Thank you! + + +Files that you should have found in the BASS_FX "package" +========================================================= +Win32 version +------------- +BASS_FX.TXT This file +BASS_FX.DLL The BASS_FX module +BASS_FX.CHM BASS_FX documentation +File_ID.Diz BBS description file + +x64\ + BASS_FX.DLL 64-bit BASS_FX module + +C\ C/C++ APIs and samples + BASS_FX.H BASS_FX C/C++ header file + BASS_FX.LIB BASS_FX import library + x64\ + BASS_FX.LIB 64-bit BASS_FX import library + SAFESEH\ + BASS_FX.LIB SAFESEH compatible BASS_FX import library + + bpm\ BPM example + bpm.c + bpm.h + bpm.rc + + dsp\ DSP example + dsp.c + dsp.h + dsp.rc + + freeverb\ Freeverb example + freeverb.c + freeverb.h + freeverb.rc + + reverse\ Reverse example + reverse.c + reverse.h + reverse.rc + + tempo\ Tempo example + tempo.c + tempo.h + tempo.rc + + bin\ Precompiled examples + bpm.exe + dsp.exe + reverse.exe + tempo.exe + +Delphi\ Delphi APIs and samples + BASS_FX.PAS BASS_FX Delphi APIs Unit + + BPM\ BPM example + bpm.dfm main form + bpm.pas main unit + prjBPM.dpr project file + + DSP\ DSP example + dsp.dfm + dsp.pas + prjDSP.dpr + + Reverse\ Reverse example + prjRev.dpr + Reverse.dfm + Reverse.pas + + Tempo\ Tempo example + prjTempo.dpr + tempo.dfm + tempo.pas + +VB\ Visual Basic APIs and samples + BASS_FX.BAS BASS_FX VB APIs Module + + BPM\ BPM example + frmBPM.frm main form + modBPM.bas module with some functions + prjBPM.vbp project file + + DSP\ DSP example + frmDSP.frm + prjDSP.vbp + + Reverse\ Reverse example + frmREVERSE.frm + prjREVERSE.vbp + + Tempo\ Tempo example + frmTempo.frm + prjTepmo.vbp + + +NOTE: To run the sample EXEs, first you'll have to copy BASS_FX.DLL into + the same directory as the EXEs. You'll also need BASS.DLL which can + be download from the BASS website. + +NOTE: To build the examples, you'll need to copy the BASS API into the + same directory as the BASS_FX API. + + +MacOSX version +-------------- +BASS_FX.TXT This file +LIBBASS_FX.DYLIB The BASS_FX module +BASS_FX.CHM BASS_FX documentation +BASS_FX.H BASS_FX C/C++ header file +MAKEFILE Makefile for all examples +MAKEFILE.IN Makefile helper macros + +reverse\ Reverse example + reverse.c + makefile + reverse.nib + +tempo\ Tempo example + tempo.c + makefile + tempo.nib + + +NOTE: To view the documentation, you will need a CHM viewer, like CHMOX + which is included in the BASS package. + +NOTE: To build the examples, you'll need to copy the BASS API into the + same directory as the BASS_FX API. + + +What's the point? +================= +BASS_FX is an extension to the BASS audio library, providing a complete +set of Real-time DSP functions to start developing your own DJ software ;) +Developed to enable the simple and advanced developers/users to +have in their applications sound effects without knowing any DSP at all! + + +Requirements +============ +BASS 2.4 is required, the BASS_FX module will fail to load if it is not present. + +MacOSX version +-------------- +OSX 10.3.9 or above is recommended. BASS_FX is compatible with both +PowerPC and Intel Macs. + + +Using BASS_FX +============= +Win32 version +------------- +To use BASS_FX with Borland C++ Builder, you'll first have to create a +Borland C++ Builder import library for it. This is done by using the +IMPLIB tool that comes with Borland C++ Builder. Simply execute this: + + IMPLIB BASS_FXBCB.LIB BASS_FX.DLL + +... and then use BASS_FXBCB.LIB in your projects to import BASS_FX. + +To use BASS_FX with LCC-Win32, you'll first have to create a compatible +import library for it. This is done by using the PEDUMP and BUILDLIB +tools that come with LCC-Win32. Run these 2 commands: + + PEDUMP /EXP BASS_FX.LIB > BASS_FXLCC.EXP + BUILDLIB BASS_FXLCC.EXP BASS_FXLCC.LIB + +... and then use BASS_FXLCC.LIB in your projects to import BASS_FX. + +TIP: The BASS_FX.CHM file should be put in the same directory as the BASS.CHM + file, so that the BASS_FX documentation can be accessed from within the + BASS documentation. + +MacOSX version +-------------- +A separate "LIB" file is not required for OSX. Using XCode, you can simply +add the DYLIB file to the project. Or using a makefile, you can build your +programs like this, for example: + + gcc yoursource -L. -lbass -lbass_fx -o yourprog + +As with LIBBASS.DYLIB, the LIBBASS_FX.DYLIB file must be put in the same +directory as the executable (it can't just be somewhere in the path). See +the example makefiles. + +LIBBASS_FX.DYLIB is a universal binary, with support for both PowerPC and +Intel Macs. If you want PowerPC-only or Intel-only versions, the included +makefile can create them for you, by typing "make ppc" or "make i386". + + +Latest Version +============== +The latest versions of BASS_FX & BASS can be found at these websites: + + http://www.un4seen.com (the home of BASS) + http://www.jobnik.org + + +Copyright, Disclaimer, and all that other jazz +============================================== +The BASS_FX library is free, so if anyone tries to charge you +for it, kick 'em where it hurts. + +This software is provided "as is", without warranty of ANY KIND, +either expressed or implied, including but not limited to the +implied warranties of merchantability and/or fitness for a +particular purpose. The author shall NOT be held liable for +ANY damage to you, your computer, or to anyone or anything else, +that may result from its use, or misuse. Basically, you use it +at YOUR OWN RISK. + +Usage of BASS_FX indicates that you agree to the above conditions. + +You may freely distribute the BASS_FX package as long as NO FEE is +charged and all the files remain INTACT AND UNMODIFIED. + +All trademarks and other registered names contained in the BASS_FX +package are the property of their respective owners. + + +History +======= +These are the major (and not so major) changes at each version +stage. There are ofcourse bug fixes and other little improvements +made along the way too! To make upgrading simpler, all functions +affected by a change to the BASS_FX interface are listed. + +2.4.11.1 - 24/12/2014 +--------------------- +* BASS_FX: + * Added support for BASS 2.4.11, BASS_DATA_FIXED flag is used in Android, WinCE and Linux ARM platforms. + * Documentation is updated. + * iOS, added "x86_64" simulator architecture. + +* Tempo: + * Fixed "Segmentation fault" on x64 Linux system. + +* DSP: + * Android, fixed "BASS_FX_BFX_ECHO4" effect as reported in this thread: + http://www.un4seen.com/forum/?topic=13225.msg112373#msg112373 + +2.4.11 - 02/09/2014 +------------------- +* BASS_FX: + * Fixed an issue on OSX (The Xcode project's "Installation Directory" setting set to "@loader_path" instead of "@executable_path"). + * Tempo/Reverse fixed a thread-safety crash. + * Tempo/Reverse added CTYPE info for these streams. + * Android, added "x86" architecture support (some effects are buggy, will be fixed soon). + * iOS, added "arm64" architecture support. + * Fixed Delphi/Pascal unit by changing "FLOAT" to "Single". + * Added C/C++ "freeverb" example. + +* Tempo: + * Updated to latest SoundTouch library version 1.8.0 + * Fixed a crash when using syncs on tempo, as described in this thread: http://www.un4seen.com/forum/?topic=15708.0 + * Added 3 interpolation algorithms to set using BASS_FX_TEMPO_ALGO_XXX flags (BASS_FX_TempoCreate): + * BASS_FX_TEMPO_ALGO_LINEAR + * BASS_FX_TEMPO_ALGO_CUBIC (default) + * BASS_FX_TEMPO_ALGO_SHANNON + +* DSP: + * Fixed a bug in BASS_FX_BFX_VOLUME_ENV effect with the "bFollow" option on mobile devices, + as described in this thread http://www.un4seen.com/forum/?topic=15866 + * Added new effects: + * BASS_FX_BFX_PITCHSHIFT, that uses FFT for its pitch shifting while maintaining duration. + * BASS_FX_BFX_FREEVERB, a reverb effect. + +2.4.10.1 - 05/06/2013 +--------------------- +* BPM/Beat: + * Fixed a crash when not using BPMPROGRESSPROC callback + * Added a check for BPMPROC/BPMBEATPROC callbacks, if not available, returns BASS_ERROR_ILLPARAM error code + +2.4.10 - 02/06/2013 +------------------- +* BASS_FX: + * Please see DSP and BPM sections for decprecated effects/functions. + To not break compatibility with BASS 2.4 version, these effects and functions will still remain in BASS_FX, + but are removed from documentations and will be totally removed from BASS_FX in the future. + * BASS_ERROR_FX_NODECODE error code *removed*, will return BASS_ERROR_DECODE instead (Tempo/Reverse/BPM/Beat) + * BASS_ERROR_FX_BPMINUSE error code *removed*, will return BASS_ERROR_ALREADY instead (BPM/Beat) + * Tempo and BPM functions updated to latest SoundTouch library version 1.7.1 + * Added BASS_BFX_Linear2dB and BASS_BFX_dB2Linear macros to headers, for convenience. + +* Tempo: + * Multi-channel support is added, but: + * No SSE optimizations + * BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER is by default set to FALSE on iOS, Android, WinCE and Linux ARM platforms for lower CPU usage + * Not part of SoundTouch library, sources will be sent to Olli Parviainen after BASS_FX release + * Sound quality improvements + * Improved output sound stream duration to match better with ideal duration + * Fixed BASS_ERROR_UNKNOWN issue with Windows 8 x64, posted in this thread: + http://www.un4seen.com/forum/?topic=14499.0 + +* BPM: + * BASS_FX_BPM_Translate and all of its options, BASS_FX_BPM_TRAN_xxx, are *deprecated* + * BPMPROCESSPROC *renamed* to BPMPROGRESSPROC + * BPM example is updated to fit above changes + * Tuned detection algorithm + * Fixed detection bug in Android, WinCE & Linux ARM platforms, for returning odd values + * Fixed percents bug in BPMPROGRESSPROC + * Changed default min/max BPM window to SoundTouch's 29/200 + +* Beat: + * Fixed regression since version 2.4.8 in BASS_FX_BPM_BeatDecodeGet function, + that would free a "chan" when detection is completed, as described in this thread: + http://www.un4seen.com/forum/?topic=2181.msg102805#msg102805 + +* DSP: + * Ported all effects to Android, WinCE & Linux ARM platforms + + * BASS_FX_BFX_ROTATE: + added new structure "BASS_BFX_ROTATE" with params: + "fRate" - set the rotation rate/speed in Hz between channels + "lChannel" - multi-channel support, only for even number of channels + + * BASS_FX_BFX_ECHO4: + added new effect and structure "BASS_BFX_ECHO4" with params: + "fDryMix" - unaffected signal mix + "fWetMix" - affected signal mix + "fFeedback" - output signal to feed back into input + "fDelay" - delay seconds + "bStereo" - even channels are echoed to each other if enabled + "lChannel" - multi-channel support + + * BASS_FX_BFX_ECHO - *deprecated*, use BASS_FX_BFX_ECHO4 + * BASS_FX_BFX_ECHO2 - *deprecated*, use BASS_FX_BFX_ECHO4 + * BASS_FX_BFX_ECHO3 - *deprecated*, use BASS_FX_BFX_ECHO4 + * BASS_FX_BFX_REVERB - *deprecated*, use BASS_FX_BFX_ECHO4 with fFeedback enabled + * BASS_FX_BFX_FLANGER - *deprecated*, use BASS_FX_BFX_CHORUS + * BASS_FX_BFX_COMPRESSOR - *deprecated*, use BASS_FX_BFX_COMPRESSOR2 + * BASS_FX_BFX_APF - *deprecated*, use BASS_FX_BFX_BQF with BASS_BFX_BQF_ALLPASS filter + * BASS_FX_BFX_LPF - *deprecated*, use 2x BASS_FX_BFX_BQF with BASS_BFX_BQF_LOWPASS filter and appropriate fQ values + +2.4.9 - 16/01/2013 +------------------ +* BASS_FX: + * WinCE version introduced (package bass_fx24-ce.zip) currently doesn't include most BASS_FX_BFX_xxx effects. + * Linux ARM version introduced (package bass_fx24-linux-arm.zip) currently doesn't include most BASS_FX_BFX_xxx effects. + +* DSP: + * Added more effects to Android, WinCE & Linux ARM ports: + BASS_FX_BFX_PEAKEQ + BASS_FX_BFX_MIX + BASS_FX_BFX_VOLUME_ENV + +* Tempo and Reverse: + * According to this request: http://www.un4seen.com/forum/?topic=13910 + Added support for DECODETO option. + +* Tempo: + * iOS, WinCE & Linux ARM: Enabled the BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO option on tempo + streams by default for lower CPU usage. See docs on how to disable it. + +* iOS: Added armv7s architecture support. + +2.4.8 - 31/07/2012 +------------------ +* BASS_FX: + * Android version introduced (package bass_fx24-android.zip) + currently doesn't include most BASS_FX_BFX_xxx effects. + * Delphi/Pascal unit: changed "user" param from "DWORD" to "Pointer" + +* BPM: + * Added "user" param to BASS_FX_BPM_DecodeGet and BPMPROCESSPROC (you have to recompile your project). + * BPM example is updated to fit above changes. + * According to this request: http://www.un4seen.com/forum/?topic=13319 + Added support for BPM detection from the current position with BASS_FX_BPM_DecodeGet (startSec<0). + +* Beat: + * Couple of little fixes in beat detection. + +* Tempo: + * Android: Enabled the BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO option on tempo + streams by default for lower CPU usage. See docs on how to disable it. + +2.4.7.1 - 01/07/2011 +-------------------- +* BASS_FX: + * Documentation updated. + +* DSP: + * Fixed a small issue in BASS_FXGetParameters for BASS_FX_BFX_VOLUME effect, as it would change the lChannel value + when the global volume (lChannel=0) is requested. + +* OSX: + * x86_64 architecture support + +2.4.7 - 07/04/2011 +------------------ +* BASS_FX: + * Delphi unit updated: BASS_BFX_ENV_NODE = record, changed to BASS_BFX_ENV_NODE = packed record + +* DSP: + * Fixed bug in BASS_FX_BFX_VOLUME_ENV, being applied slightly early when "bFollow" is enabled. + * BASS_FX_BFX_DAMP made effect parameter setting a bit more convenient. If fGain < 0 then leave the current value. + +* iOS: + * Added armv7 architecture support. + * Combined the Device armv6/7 architectures and Simulator libraries into a single file. + +2.4.6 - 27/07/2010 +------------------ +* BASS_FX: + * Tempo and BPM updated to SoundTouch 1.5.1pre + * iPhone version introduced (package bass_fx24-iphone.zip) + NOTE: Since iPhone supports only static libraries, it isn't possible for static libraries to declare their dependencies, + so that needs to be done in the app's project instead, eg. by adding "-lstdc++" in the "Other Linker Flags". +* Tempo: + * Updated automatic parameter adjustment logic to reduce tone wobbling at large tempo changes. + * Retired 3DNow! optimization support as 3DNow! is nowadays obsolete and assembler code is nuisance to maintain. + +* BPM: + * Improved BPM detection. + * Added automatic cutoff threshold adaptation to beat detection routine to better adapt BPM calculation to different types of music. + * Fixed bug in BPMPROCESSPROC percents, when endSec is greater than stream's length. + +* Reverse: + * Fixed bug with getting the position when using a large output buffer (BASS_CONFIG_BUFFER). + * Fixed bug in BASS_ChannelGetPosition, could return an incorrect position. + +2.4.5 - 18/12/2009 +------------------ +* DSP: Added new effect, BiQuad filters, BASS_FX_BFX_BQF with filter types: + BASS_BFX_BQF_LOWPASS + BASS_BFX_BQF_HIGHPASS + BASS_BFX_BQF_BANDPASS + BASS_BFX_BQF_BANDPASS_Q + BASS_BFX_BQF_NOTCH + BASS_BFX_BQF_ALLPASS + BASS_BFX_BQF_PEAKINGEQ + BASS_BFX_BQF_LOWSHELF + BASS_BFX_BQF_HIGHSHELF + +* Tempo: + * Tempo processing bypassed when tempo/pitch set to 0 + * Couple of improvements: + * Added normalization to correlation calculation + * Heuristic that weights center of the processing window + +2.4.4.1 - 29/04/2009 +-------------------- +* Tempo: Fixed a bug that could cause a stream to end slightly early. + +2.4.4 - 28/03/2009 +------------------ +* BASS_FX: + * Added: Linux x64 build in bass_fx24-linux.zip package. + +* Tempo: + * Updated to most latest SoundTouch library 1.4.1 + * Improved sound quality by automatic calculation of time stretch algorithm processing + parameters according to tempo setting. + * Added new BASS_ATTRIB_TEMPO_OPTION_PREVENT_CLICK, to prevent click when + samplerate/pitch crosses the default value during processing. + Default is FALSE as this involves slight sound quality compromise. + +* BPM/Beat: + * Fixed a small bug of internally called SETPOS sync. + +2.4.3.1 - 07/01/2009 +-------------------- +* BASS_FX: Delphi/Pascal unit updated to handle both Windows and Linux +* Tempo: Fixed a small bug in processing with BASS_SAMPLE_LOOP flag + +2.4.3 - 24/12/2008 +------------------ +* BASS_FX: + * Mixtime POS syncs are now triggered when the specified position is + rendered in the tempo/reverse stream (rather than when it is decoded from the source). + * Linux version introduced (package bass_fx24-linux.zip) // examples will follow + +* Tempo: + * Corrected BASS_ATTRIB_TEMPO_FREQ min/max values. + +* DSP: + * Added new volume effect: BASS_FX_BFX_VOLUME_ENV, a volume effect using an envelope. + * BASS_FX_BFX_APF, BASS_FX_BFX_ECHO2, BASS_FX_BFX_ECHO3: fDelay 6 seconds limit removed. + +* BPM: + * Improved the peak detection algorithm so that it wouldn't incorrectly report too slow + harmonic beats if they are close to the true base beat. + +2.4.2 - 16/08/2008 +------------------ +* BASS_FX: + * Some processing functions optimized for speed. + +* DSP: + * Added new compressor effect BASS_FX_BFX_COMPRESSOR2 + For compatibility issues new compressor will replace old one in version 2.5 + +2.4.1 - 28/06/2008 +------------------ +* Tempo: + * Fixed a bug in BASS_ChannelGetPosition, that would return a + lower position than it should with a decoding tempo stream. + +* BPM: + * Multi-channel support. + * Fixed a bug in BASS_FX_BPM_DecodeGet, that would return 0 if using + the same handle and endSec for both Callback and Decode BPM. + +2.4.0.2 - 17/04/2008 +-------------------- +* BPM: fixed another bug in BPMPROC +* Tempo: fixed a bug not allowing changing BASS_ATTRIB_TEMPO_OPTION_xxx + +2.4.0.1 - 06/04/2008 +-------------------- +* BPM: fixed a bug in BPMPROC + +2.4 - 02/04/2008 +---------------- +* BASS_FX: + * Updated to BASS 2.4 + * More integrated with BASS plug-in system. + * Added a function BASS_FX_GetVersion + * BASS_FX_CONFIG_DSP_RESET *removed* + * Error codes and names changed + * To be able to link with BASS_FX, you'll have to call BASS_FX_GetVersion function + (or any other function from BASS_FX.DLL) or load it dynamically using LoadLibrary("bass_fx.dll") + * Win64 version introduced (package bass_fx24-x64.zip) + +* DSP: + * Effect names, structure names, flags and chain order are changed + e.g: BASS_FX_DSPFX_PHASER -> BASS_FX_BFX_PHASER + BASS_FX_DSPPHASER -> BASS_BFX_PHASER + * All functions integrated with BASS FX functions and the usage is the same + as with BASS DX8/DMO effects: + + BASS_FX_DSP_Set *removed* (use BASS_ChannelSetFX) + BASS_FX_DSP_SetParameters *removed* (use BASS_FXSetParameters) + BASS_FX_DSP_GetParameters *removed* (use BASS_FXGetParameters) + BASS_FX_DSP_Reset *removed* (use BASS_FXReset) + BASS_FX_DSP_Remove *removed* (use BASS_ChannelRemoveFX) + + * It is possible now to apply an effect more than once on the same channel. + * BASS_FX_BFX_SWAP *removed* (use BASS_FX_BFX_MIX) + * BASS_FX_BFX_S2M: + Updated to support multi-channel and renamed to BASS_FX_BFX_MIX + BASS_FX_BFX_MIX supports Swap, remap and mixing channels together. + * BASS_FX_BFX_PEAKEQ: + * fFreq param *removed* + (use 'oldcenter*freq/oldfreq' to update the fCenter after changing the Samplerate) + * Max fCenter updated from less than 1/3 to 1/2 of info.freq + * Take a look at DSP example to know how to increase the number of bands + + * BASS_FX_BFX_LPF: + * fFreq param *removed* (adjust fCutOffFreq param when needed) + +* Tempo: + * Support for all source sync types + * Funtions integrated with BASS attribute system (BASS_ChannelSet/GetAttribute): + BASS_FX_TempoSet *removed* + BASS_FX_TempoGet *removed* + BASS_FX_TempoSetOption *removed* + BASS_FX_TempoGetOption *removed* + + * Tempo attributes: + BASS_ATTRIB_TEMPO + BASS_ATTRIB_TEMPO_PITCH + BASS_ATTRIB_TEMPO_FREQ + + * Option attributes: + BASS_ATTRIB_TEMPO_OPTION_USE_AA_FILTER + BASS_ATTRIB_TEMPO_OPTION_AA_FILTER_LENGTH + BASS_ATTRIB_TEMPO_OPTION_USE_QUICKALGO + BASS_ATTRIB_TEMPO_OPTION_SEQUENCE_MS + BASS_ATTRIB_TEMPO_OPTION_SEEKWINDOW_MS + BASS_ATTRIB_TEMPO_OPTION_OVERLAP_MS + +* Reverse: + * Support for all source sync types + * Funtions integrated with BASS attribute system (BASS_ChannelSet/GetAttribute): + BASS_FX_ReverseSetDirection *removed* + BASS_FX_ReverseGetDirection *removed* + + * Reverse attribute: + BASS_ATTRIB_REVERSE_DIR + +* BPM: + * Seconds changed from "float" to "double" + * Callback "user" parameters changed to pointers: BASS_FX_BPM_CallbackSet / BPMPROC + * Translation names changed: + BASS_FX_BPM_X2 -> BASS_FX_BPM_TRAN_X2 + BASS_FX_BPM_2FREQ -> BASS_FX_BPM_TRAN_2FREQ + BASS_FX_BPM_FREQ2 -> BASS_FX_BPM_TRAN_FREQ2 + BASS_FX_BPM_2PERCENT -> BASS_FX_BPM_TRAN_2PERCENT + BASS_FX_BPM_PERCENT2 -> BASS_FX_BPM_TRAN_PERCENT2 + +* Beat: + * Multi-channel support + * Seconds changed from "float" to "double" + * "cutofffreq" param renamed to "centerfreq" + * Callback "user" parameters changed to pointers: + BASS_FX_BPM_BeatCallbackSet / BPMBEATPROC + BASS_FX_BPM_BeatDecodeGet / BPMBEATPROC + +2.3.0.4 - 30/10/07 +------------------ +* DSP: + * Fixed: a bug in BASS_FX_DSPFX_DAMP to avoid trying to amplify silence data + * Fixed: a bug in BASS_FX_DSPFX_PEAKEQ to check illegal Center Frequencies (fCenter) + +* Tempo: + * Fixed: a bug that would prevent using a BASS_SYNC_MESSAGE sync + * Fixed: a bug that would prevent triggering a BASS_SYNC_END sync + +* Reverse: + * Fixed: a bug that would prevent using a BASS_SYNC_MESSAGE sync + +2.3.0.3 - 08/08/2007 +-------------------- +* BASS_FX: + * Fixed: a DEP crashing bug. + * Added: a Config option, to reset DSPs, BPM/Beat Callbacks when position is set. + use BASS_FX_CONFIG_DSP_RESET with BASS_Set/GetConfig function. + +* DSP: + * Fixed: bugs in functions: + BASS_FX_DSP_Set and BASS_FX_DSP_Remove + + * Fixed: bugs in DSP effects: + BASS_FX_DSPFX_PEAKEQ + BASS_FX_DSPFX_ECHO + BASS_FX_DSPFX_ECHO2 + BASS_FX_DSPFX_REVERB + BASS_FX_DSPFX_VOLUME + BASS_FX_DSPFX_DAMP + + * Removed: DSPFX.TXT file, please check the docs for DSP effects/DSP Values + +* TEMPO: + * Fixed: a floating-point bug when calling BASS_FX_TempoCreate + * Fixed: POS SYNCs to be more accurate + +* BPM: + * Fixed: a bug in BASS_FX_BPM_Free and BASS_FX_BPM_BeatFree + that would sometimes release the source channnel as well + without using BASS_FX_FREESOURCE flag. + +* REVERSE: + * Fixed: a bug that, if you would set the direction to forward before starting playback, + the position would keep counting from the end. + * Updated: When reaching the end of the stream, changing the direction will now + reset the stream, so that it can be played again. + * Fixed: POS SYNCs to be more accurate + +2.3.0.2 - 09/04/2007 +-------------------- +* BEAT: + * Added Beat position detection for decoded streams + BASS_FX_BPM_BeatDecodeGet + + * Added new functions: + BASS_FX_BPM_BeatCallbackReset + BASS_FX_BPM_BeatSetParameters + BASS_FX_BPM_BeatGetParameters + +* REVERSE: + * Multi-channel support + * Added new feature to change playing direction from Reverse to Forward and vice-versa + BASS_FX_ReverseSetDirection + BASS_FX_ReverseGetDirection + +* BPM: + * Fixed: one more critical bug in BPM functions + +* DSP: + * BASS_FX_DSPFX_PEAKEQ: + Improved effect and reduced CPU usage + Fixed: a bug, preventing using fQ if fBandwidth < 0.1f + Changed: fQ min limit to 0.1f + + * BASS_FX_DSPFX_ECHO3: + Fixed: a bug in BASS_FX_DSP_GetParameters, that would return a wrong lChannel value + + * Error code: BASS_FX_ERROR_STEREO *removed* (replaced with BASS_ERROR_FORMAT) + +* TEMPO: + * Setting functions name changed: + BASS_FX_TempoSettingSet -> BASS_FX_TempoSetOption + BASS_FX_TempoSettingGet -> BASS_FX_TempoGetOption + + BASS_FX_TEMPO_SETTING_xxx -> BASS_FX_TEMPO_OPTION_xxx + +2.3.0.1 - 08/06/2006 +-------------------- +* New in BASS_FX: + * Added a valid parameters check for all functions. + +* BPM: + * A little improved Beat position trigger. + * Changing buffer content won't affect the BPM/Beat detection anymore. + * BASS_Stream/MusicFree will free the callback BPM/Beat as well. + +* BASS_FX.CHM: + * Added a very simple example to BPMBEATPROC callback, showing how to + count the BPM with just 2 beats. + +* DSP: + * Fixed small bugs in BASS_FX_DSPFX_VOLUME effect. + +2.3 - 21/05/2006 +---------------- +* New in BASS_FX: + * This version has some API changes. + * You'll have to recompile your application to use this version. + * ===== + If you like BASS_FX or use it in a commercial/shareware products, + then you may wish to make a donation to support its development (see the docs for info). + ===== + +* Tempo: + * Fixed a bug, that wouldn't clear buffers if a source channel isn't seekable. + * Removed flags: + BASS_FX_TEMPO_QUICKALGO + BASS_FX_TEMPO_NO_AAFILTER + + you can set these using a function below, in real-time. + + * Added 2 new functions: + BASS_FX_TempoSettingSet + BASS_FX_TempoSettingGet + + with options (check the docs for more info about using them): + BASS_FX_TEMPO_SETTING_USE_AA_FILTER + BASS_FX_TEMPO_SETTING_AA_FILTER_LENGTH + BASS_FX_TEMPO_SETTING_USE_QUICKALGO + BASS_FX_TEMPO_SETTING_SEQUENCE_MS + BASS_FX_TEMPO_SETTING_SEEKWINDOW_MS + BASS_FX_TEMPO_SETTING_OVERLAP_MS + +* DSP: + * Added new struct: + BASS_FX_DSPSWAP + + * Added multi-channel support and a per channel control with flags/macro: + each effect with a per channel control has a new "lChannel" param + (if you won't set the new param, then the effect will be affected on all channels as by default) + + BASS_FX_DSPFX_SWAP -> it's now possible not only swap, but remap as well. + BASS_FX_DSPFX_FLANGER + BASS_FX_DSPFX_VOLUME -> it's now needed to set a global volume, before boosting. + BASS_FX_DSPFX_PEAKEQ + BASS_FX_DSPFX_LPF + BASS_FX_DSPFX_DAMP + BASS_FX_DSPFX_AUTOWAH + BASS_FX_DSPFX_ECHO2 + BASS_FX_DSPFX_PHASER + BASS_FX_DSPFX_ECHO3 + BASS_FX_DSPFX_CHORUS + BASS_FX_DSPFX_APF + BASS_FX_DSPFX_COMPRESSOR + BASS_FX_DSPFX_DISTORTION + + + * Channel flags (check the docs for channels order): + BASS_FX_DSP_CHANALL + BASS_FX_DSP_CHANNONE + BASS_FX_DSP_CHAN1 .. BASS_FX_DSP_CHAN8 + + * If you have more than 8 channels (7.1), use this macro. + BASS_FX_DSP_CHANNEL_N(n) + + * Added a DENORMAL check for all effects. + * BASS_FX_DSP_Reset is updated for all effects. + +* BPM: + * Added Real-Time Beat Position Trigger: + BASS_FX_BPM_BeatCallbackSet + BASS_FX_BPM_BeatFree + + * BASS_FX_ERROR_BPMX2 error code *removed* and *replaced* with BASS_ERROR_ALREADY + * Fixed bugs: + * Serious memory-leak is fixed using both options. + * A bug that would free resources before the detecting process is finished. + * A bug that would still continue to detect previous data even if changing file to + scan, using a BASS_FX_BPM_BKGRND flag. + * A bug that would still return BPMs out of MIN/MAX range if using BASS_FX_BPM_MULT2 flag. + +2.2.0.1 - 30/11/2005 +-------------------- +* New in BASS_FX: + * 8-bit support. + * Added more DSP effect information to BASS_FX.CHM + +* DSP: + * Automatically free DSP resources when freeing the channel. + * Multi-channel support started with: + * BASS_FX_DSPFX_ECHO2 + * BASS_FX_DSPFX_ECHO3 + + more effects will be updated soon! :) + * Some bugs fixed. + +* BPM: + * Fixed a bug that would return BPMs out of MIN/MAX range if + using BASS_FX_BPM_MULT2 flag. + +* MacOSX: + * Samples added. + +2.2 - 03/10/2005 +---------------- +* New in BASS_FX: + * Removed all DSP GPL code. + * BASS_FX is now fully useable in commercial software, as long as + credit is given. + * BASS_FX_GetVersion() *removed* (won't load if BASS 2.2 isn't present) + * BASS_FX_ERROR_MODLEN *removed* (replaced with BASS_ERROR_NOTAVAIL) + * BASS_FX_ERROR_16BIT *removed* (no 16-bit only effects are left) + * Multi_FX example *removed* + * MacOSX port introduced + +* DSP: + * Removed GPL FX: + * BASS_FX_DSPFX_FLANGER2 & BASS_FX_DSPFX_CUT + - because of that the DSP chain is changed! + +* Reverse: + * MOD playback is now supported if using BASS_MUSIC_PRESCAN flag. + +* MacOSX examples will follow this week. + +2.1.0.2 - 07/05/2005 +-------------------- +* DSP: + * Chorus: fixed a bug, that would convert stereo to mono. + * Low Pass Filter: fixed a bug, that would convert stereo to mono. + * DynamicAMP: another bug fix, that would sometimes cause a total silence. + + Added: + * A new effect: Distortion + * DSPFX.TXT - a values to use with some effects, to achieve different + effect with the same one (not using other effect/s) :) + +2.1.0.1 - 22/02/2005 +-------------------- +* New in BASS_FX: + + Added: + * File version info. + * Documentation file BASS_FX.CHM. + +* DSP: + * Another DynamicAMP bug fix. + * Added a new effect: Compressor + +* BPM: + * Added: "User" param to Callback BPM functions. + +2.1 - 27/12/2004 - Happy New Year ;) +------------------------------------ +* New in BASS_FX: + * No more "alpha/beta" releases! :) + * Updated to BASS 2.1 add-on APIs, coz of that BASS_FX is not compatible with any + previous versions. You'll have to make some changes in your project. + * Full 32-bit floating-point support. + * Sync support, "Sync & Tempo" example *removed* + * A lot of functions/error codes removed and integrated with BASS functions/error codes. + * New flag: BASS_FX_FREESOURCE if you want BASS_FX to free the source handle as well. + * New error code: BASS_FX_ERROR_16BIT for Flanger 2. + * BASS_FX_ErrorGetCode *removed* (use BASS_ErrorGetCode) + * BASS_FX_Free *removed* + +* Tempo: + * BASS_FX_TempoGetResampledHandle *removed* + * BASS_FX_TempoStopAndFlush *removed* + * BASS_FX_TempoFree *removed* (use BASS_StreamFree for music as well) + * BASS_FX_TempoGetApproxSeconds *removed* (use BASS_FX_TempoGetRateRatio to calculate) + * BASS_FX_TempoGetApproxPercents *removed* (use BASS_FX_TempoGetRateRatio to calculate) + + New functions: + BASS_FX_TempoGetSource (get the source handle when needed) + BASS_FX_TempoGetRateRatio + + New in flags: + BASS_FX_TEMPO_QUICKSEEK *renamed* to BASS_FX_TEMPO_QUICKALGO + BASS_FX_TEMPO_NO_AAFILTER *added* + * 3DNow! & SSE support. + +* Reverse: + * BASS_FX_ReverseGetReversedHandle *removed* + * BASS_FX_ReverseSetPosition *removed* (use BASS_ChannelSetPosition) + * BASS_FX_ReverseFree *removed* (use BASS_StreamFree) + * BASS_FX_ReverseCreate: "decode" param *removed* (use BASS_STREAM_DECODE flag) + * New function: BASS_FX_ReverseGetSource (get the source handle when needed) + +* BPM: + + These functions are combined to one: BASS_FX_BPM_Translate + * BASS_FX_BPM_X2 *removed* + * BASS_FX_BPM_Frequency2BPM *removed* + * BASS_FX_BPM_2Frequency *removed* + * BASS_FX_BPM_Percents2BPM *removed* + * BASS_FX_BPM_2Percents *removed* + + + Use these translation options with a function above: + BASS_FX_BPM_X2 + BASS_FX_BPM_2FREQ + BASS_FX_BPM_FREQ2 + BASS_FX_BPM_2PERCENT + BASS_FX_BPM_PERCENT2 + +* DSP: + * Flanger 2 still only 16-bit, will return an error if applied to 32-bit. + * Some DSP effects bug fixed. + + Echo 2.1 renamed to Echo 3: + * BASS_FX_DSPFX_ECHO21 -> BASS_FX_DSPFX_ECHO3 + * BASS_FX_DSPECHO21 -> BASS_FX_DSPECHO3 + + New effects added (more will come soon!): + . Chorus + . All Pass Filter + +2.0 "beta 2" - 28/11/2004 +------------------------- +* New in BASS_FX: + * Updated to BASS 2.1, just before releasing the official BASS_FX 2.1 :) + * Oops... again BASS_FX is a bit smaller ;) + +2.0 "beta 2" - 19/10/2004 +------------------------- +* DSP: + + Updated with 32-bit floating-point support: + . Auto Wah + + Dynamic Amplification: + * Fixed bug that would cause a sound mute if there're ~20+ seconds of silence. + All parameters changed from "Integer/Long" to "Float/Single" and their names + now starts with "f: Float/Single". + + + Not updated, yet [only 16-bit support]: + . Flanger 2.0! + + + Fixed bugs of: + * "Echo" & "Reverb" effects that would cause a noise clicks and a sound mute. + * "Peaking EQ" that would cause a crash with Mono files. + +* Reverse: + * 32-bit floating-point support. + +* Tempo: + * Fixed bug that would cause a crash if BASS_FX_Free would be called twice. + +* WARN!NG NOTE: + Not updated effects (Flanger 2/Tempo) must not be used with 32-bit. + It will crash your program and could make a very annoying noise!!! + Sometimes could even crash your system until RESET! + +2.0 "beta 1" - 07/09/2004 +------------------------- +* Really sorry for a long delay with updates!!! + +* New in BASS_FX: + * Now supports Windows 98/98SE without "msvcp60.dll" ~392KB + * Some DSP effects updated with 32-bit floating-point support. + The updated effects could be used with 16-bit & 32-bit. + +* DSP: + + Updated with 32-bit floating-point support: + . Swap Channels + . Rotate + . Echo + . Flanger + . Volume Amplifier + . Peaking EQ + . Reverb + . Low Pass Filter + . Volume Cutter + . Stereo 2 Mono + . Echo 2.0! + . Phaser + . Echo 2.1! + + + Not updated, yet [only 16-bit support]: + . Flanger 2.0! + . Dynamic Amplification + . Auto Wah + + * All parameters that began with "d: Double" changed to "f: Float/Single", + as it was forgotten with last update. + +* BPM: + * Updated with 32-bit floating-point support. + +* WARN!NG NOTE: + Not updated effects (DSP/Tempo/Reverse) must not be used with 32-bit. + It will crash your program and could make a very annoying noise!!! + Sometimes could even crash your system until RESET! + +* New in Examples: + * Added: "Sync & Tempo" + +* Removed: + * BASS_FX_ERROR_BASS20 error code, BASS_FX will show an error message + if BASS.DLL version is below 2.0 and won't load. + +2.0 "alpha" - 4/12/2003 +----------------------- +* New in BASS_FX: + * Updated to BASS 2.0! + * Version jumpted from '1.2 "beta"' to '2.0 "alpha"', + means only BASS v2.x is supported! + +* DSP: + * Added *priority* param to BASS_FX_DSP_Set(..) func + * All *Double* types changed to *Float/Single* + +* New in Examples: + * Added "Multi_FX" C/C++ only. + +* VERSION 2.0 (not "alpha") will support: + * 32-bit floating-point including in: DSP, Tempo, BPM & Reverse. + * Multi Channel in some DSPs. + * Planning to release till the end of this month/year :) + +1.2 "beta" - 30/06/2003 +----------------------- +* New in BASS_FX: + * Not compatible with any previous BASS_FX versions, + you'll have to make changes & recompile your + application to use with this version! + + + Tempo, Pitch Scaling & Samplerate changers (3 at once ;)) + + Functions: + * BASS_FX_TempoCreate + * BASS_FX_TempoSet + * BASS_FX_TempoGet + * BASS_FX_TempoGetApproxSeconds + * BASS_FX_TempoGetApproxPercents + * BASS_FX_TempoGetResampledHandle + * BASS_FX_TempoStopAndFlush + * BASS_FX_TempoFree + + + Two BPM Detection options: + + Option 1 - Get BPM from a Decoding channel: + + Function + * BASS_FX_BPM_DecodeGet + + + Option 2 - Get BPM by period of time of any handle - in Real-Time: + + Functions + * BASS_FX_BPM_CallbackSet + * BASS_FX_BPM_CallbackReset + + + Functions to use with both options: + * BASS_FX_BPM_X2 + * BASS_FX_BPM_Frequency2BPM + * BASS_FX_BPM_2Frequency + * BASS_FX_BPM_Percents2BPM + * BASS_FX_BPM_2Percents + * BASS_FX_BPM_Free + +* New in DSP: + * All DSP effects names has changed. + * The index of 1st DSP effect starts from 0 and + not from 1 as it was before. + + + -= DSP FXs =- added: + * Dynamic Amplification + * Stereo 2 Mono + * Auto Wah + * Echo v2.0! + * Phaser + * Echo v2.1! + + + Equalizer: + * Added *Q* parameter. + * Fixed some bugs :) + + Flanger v2.0! + * fixed bug (crashed with Mono files) + +* New in Functions: + + Added: + * BASS_FX_ErrorGetCode + * Always check for any Function changes. + +* Removed all PITCH functions: + * BASS_FX_PitchCreate + * BASS_FX_PitchSet + * BASS_FX_PitchGet + * BASS_FX_PitchGetResampledHandle + * BASS_FX_PitchStopAndFlush + * BASS_FX_PitchFree + +* New in Examples: + * Added: C/C++, Delphi & VB + +1.1 - 02/10/2002 +---------------- +* New in BASS_FX: + * Now supports - 16/8-Bit Stereo/Mono. + * Support for Multiple BASS instances. + * A lot of BUGs fixed =) + +* New in DSP: + + -= DSP FXs =- added: + * Low Pass Filter + * Cutter + * Flanger v2.0! + + + Equalizer: + * Algorithm optimized to BiQuad. + * Added a new parameter *eqBandwidth* + +* New in Reverse: + * Now you can add DX8 effects + change Pitch + with BASS_FX_Pitch... (check the *Reverse* example). + +* New in functions: + + Added: + * BASS_FX_DSP_Reset + * BASS_FX_Free + * Always check for any Function changes. + +* Added: + * Delphi APIs + Pitch Example. + * C/C++ Examples + corrected BASS_FX.LIB file ;) + +* Switched from MFC to Win32 DLL [MFC42.DLL ~1MB doesn't required] + +1.0 - 14/06/2002 +---------------- +* First release + + +Credits +======= +* Thanks a lot to - Ian Luck @ www.un4seen.com - for: + + BASS - Best Available Sound System! + + DSP source codes for Echo, Dynamic Amplification, Compressor and Volume Envelope + + Reverse playback source code + + SoundTouch algorithms implementation for Tempo/BPM + + Beat position algorithm fixes + + 8/16/32-bit support + + Fixed-point support + + Multi-channel support + + Add-on support + + MacOSX support + + Android support +* Ian, you're the best programmer in the whole world! + + +Credits - API/Sample Contributors +================================= +Delphi - Roger Johansson, Alex Graham (bigjim), DJ-Chris +BASS_FX.CHM - Thijs van Vliet + + +Bug reports, Suggestions, Comments, Enquiries, etc... +===================================================== +If you have any of the aforementioned please check the BASS forum (at +the website)... If you can't find an answer there, you can email: + + bass_fx@jobnik.org + + +System - Desktop/PC +=================== + --------------------------------------------------- + BASS_FX.DLL - Windows - developed and tested using: + --------------------------------------------------- + System : Intel Core i7 Haswell 4770 3.9GHz 8MB, 16GB DDR3 1600MHz CL9 + Intel Core i7 860 2.8GHz 8MB, 4GB DDR3 1600MHz CL7 + VMware 10 + + OS : Microsoft Windows: + x86: 8, 7 Ultimate, Vista Ultimate, XP Pro SP3, 2000 Pro SP4 & 98 + x64: 8.1 Pro, 7 Enterprise/Ultimate, Vista Ultimate SP1, XP Pro SP1 + + Sound Card : RealTek HD 7.1 (onboard) + + Compiler : x86: Microsoft Visual C++ v6.0 SP5 with a Processor Pack + x64: Microsoft Visual C++ 2005 v8.0 + + DirectX : 11, 10, 9.0c and 7.0 + BASS.DLL : 2.4.11 + + ---------------------------------------------------- + LIBBASS_FX.DYLIB - OSX - developed and tested using: + ---------------------------------------------------- + System : VMware 10 + + OS : Apple Macintosh OS X: + Intel Mac : 10.9, 10.8.2, 10.5.8 and 10.4.10 + PowerPC : 10.3.9 and 10.4 + + Compiler : GCC 4.0.1 + IDE : XCode 3.1.4 + LIBBASS.DYLIB : 2.4.11 + + --------------------------------------------------- + LIBBASS_FX.SO - Linux - developed and tested using: + --------------------------------------------------- + System : VMware 10 + + OS : Ubuntu Desktop x86 and x64 v8.04 + + Compiler : x86 and x64: GCC 4.2.4 (g++) + + IDE : Code::Blocks v8.02 + LIBBASS.SO : 2.4.11 + + +System - Mobile/Portable +======================== + ------------------------------------------------ + LIBBASS_FX.A - iOS - developed and tested using: + ------------------------------------------------ + System : VMware 10 + + OS : Apple Macintosh OS X: Intel Mac 10.9 + + Compiler : GCC 4.2 / LLVM + IDE : XCode 3.1.4 / XCode 5.0.2 for armv7s/arm64 architectures + LIBBASS.A : 2.4.11 + + ----------------------------------------------------- + LIBBASS_FX.SO - Android - developed and tested using: + ----------------------------------------------------- + System : Samsung Galaxy S3 GT-I9300 + Samsung Galaxy S2 GT-I9100 + Android Virtual Device + + OS : Android JB 4.1.1/2 + Android ICS 4.0.3/4 + Android GB 2.3.3 + + Compiler : Android NDK R8: GCC 4.4.3 + + IDE : Eclipse + LIBBASS.SO : 2.4.11 + + ------------------------------------------------- + BASS_FX.DLL - WinCE - developed and tested using: + ------------------------------------------------- + System : GPS Device with CPU @ 372MHz + Pocket PC 2003 SE Emulator + + OS : Windows CE 5 + Windows Mobile 2003 SE version 4.21.1088 + + Compiler : Microsoft Visual C++ 2005 v8.0 + BASS.DLL : 2.4.11 + + ------------------------------------------------------- + LIBBASS_FX.SO - Linux ARM - developed and tested using: + ------------------------------------------------------- + System : VMware 8 + + OS : Ubuntu Desktop x86 v11.10 + + Compiler : GCC: (crosstool-NG 1.15.2) 4.7.1 20120402 (prerelease) + + IDE : Code::Blocks v8.02 + LIBBASS.SO : 2.4.11 + + +More Credits ;) +=============== + * BiQuad filters +(c) Robert Bristow-JohnsonD + @ http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt + + * Peaking Equalizer (BiQuad filter) + The main source is based on - Manu Webber's - source code. + @ http://www.un4seen.com/forum/?topic=1246.msg6484#msg6484 + + * Tempo/Pitch/Rate/BPM [SoundTouch v1.8.0] +(c) Copyright (c) 2002-2014 Olli Parviainen + @ http://www.surina.net/soundtouch + L LGPL license + + * Auto Wah, Chorus, Distortion, Echo (some parts from 1st algorithm) and Phaser +(c) Copyright (c) 2000 Aleksey Smoli + @ http://st.karelia.ru/~smlalx (offline) + + * Freeverb +(c) Copyright (c) 2000 Jezar at Dreampoint + @ http://www.dreampoint.co.uk + L Public domain + + * Pitch shifting using FFT [smbPitchShift v1.2] +(c) Copyright (c) 1999-2009 Stephan M. Bernsee <smb [AT] dspdimension [DOT] com> + @ http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/ + L WOL license + + * BASS_FX is fully useable in commercial software, as long as credit is given. + +----------------------------------------------------------------------------------- +* BASS_FX.TXT & File_ID.Diz are better viewed in DOS mode OR with - Courier - font. +----------------------------------------------------------------------------------- \ No newline at end of file diff --git a/src/lib/dglOpenGL/dglOpenGL.pas b/src/lib/dglOpenGL/dglOpenGL.pas index f3a36920..7009a7e5 100644 --- a/src/lib/dglOpenGL/dglOpenGL.pas +++ b/src/lib/dglOpenGL/dglOpenGL.pas @@ -14773,11 +14773,11 @@ TGLUTesselator = record GLU_LIBNAME = 'GLU32.dll'; {$ELSE} {$IFDEF darwin} - OPENGL_LIBNAME = 'libGL.dylib'; - GLU_LIBNAME = 'libGLU.dylib'; + OPENGL_LIBNAME = '/System/Library/Frameworks/OpenGL.framework/Libraries/libGL.dylib'; + GLU_LIBNAME = '/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib'; {$ELSE} - OPENGL_LIBNAME = 'libGL.so.1'; - GLU_LIBNAME = 'libGLU.so.1'; + OPENGL_LIBNAME = 'libGL.so'; + GLU_LIBNAME = 'libGLU.so'; {$ENDIF} {$ENDIF} diff --git a/src/lib/ffmpeg-0.10/swresample.pas b/src/lib/ffmpeg-0.10/swresample.pas new file mode 100644 index 00000000..10b510a0 --- /dev/null +++ b/src/lib/ffmpeg-0.10/swresample.pas @@ -0,0 +1,183 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libswresample/swresample.h: + * version: 0.6.100 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + SWR_CH_MAX = 16; (* < Maximum number of channels *) + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s Swr context, can be NULL + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space then the input will be buffered. + * You can avoid this buffering by providing more output space than input. + * Convertion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Activate resampling compensation. + *) +function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param s allocated Swr context, not yet initialized + * @param channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * Return the LIBSWRESAMPLE_VERSION_INT constant. + *) +function swresample_version(): cuint; + cdecl; external sw__resample; + +(** + * Return the swr build-time configuration. + *) +function swresample_configuration(): cuchar; + cdecl; external sw__resample; + +(** + * Return the swr license. + *) +function swresample_license(): cuchar; + cdecl; external sw__resample; + +(** + * @ + *) + +implementation + +end. + diff --git a/src/lib/ffmpeg-0.11/swresample.pas b/src/lib/ffmpeg-0.11/swresample.pas new file mode 100644 index 00000000..d7b13428 --- /dev/null +++ b/src/lib/ffmpeg-0.11/swresample.pas @@ -0,0 +1,265 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libswresample/swresample.h: + * version: 0.15.100 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + {$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} + SWR_CH_MAX = 32; (* < Maximum number of channels *) + {$ENDIF} + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type + TSwrDitherType = ( + SWR_DITHER_NONE = 0, + SWR_DITHER_RECTANGULAR, + SWR_DITHER_TRIANGULAR, + SWR_DITHER_TRIANGULAR_HIGHPASS, + SWR_DITHER_NB (* < not part of API/ABI *) + ); + + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +(** + * Get the AVClass for swrContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function swr_get_class(): PAVClass; + cdecl; external sw__resample; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s Swr context, can be NULL + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space then the input will be buffered. + * You can avoid this buffering by providing more output space than input. + * Convertion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Convert the next timestamp from input to output + * timestamps are in 1/(in_sample_rate * out_sample_rate) units. + * + * @note There are 2 slightly differently behaving modes. + * First is when automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) + * in this case timestamps will be passed through with delays compensated + * Second is when automatic timestamp compensation is used, (min_compensation < FLT_MAX) + * in this case the output timestamps will match output sample numbers + * + * @param pts timestamp for the next input sample, INT64_MIN if unknown + * @return the output timestamp for the next output sample + *) +function swr_next_pts(s: PSwrContext; pts: cint64): cint64; + cdecl; external sw__resample; + +(** + * Activate resampling compensation. + *) +function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param s allocated Swr context, not yet initialized + * @param channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * Set a customized remix matrix. + * + * @param s allocated Swr context, not yet initialized + * @param matrix remix coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o + * @param stride offset between lines of the matrix + * @return AVERROR error code in case of failure. + *) +function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; + cdecl; external sw__resample; + +(** + * Drops the specified number of output samples. + *) +function swr_drop_output(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Injects the specified number of silence samples. + *) +function swr_inject_silence(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Gets the delay the next input sample will experience relative to the next output sample. + * + * Swresample can buffer data if more input has been provided than available + * output space, also converting between sample rates needs a delay. + * This function returns the sum of all such delays. + * The exact delay is not necessarily an integer value in either input or + * output sample rate. Especially when downsampling by a large value, the + * output sample rate may be a poor choice to represent the delay, similarly + * for upsampling and the input sample rate. + * + * @param s swr context + * @param base timebase in which the returned delay will be + * if its set to 1 the returned delay is in seconds + * if its set to 1000 the returned delay is in milli seconds + * if its set to the input sample rate then the returned delay is in input samples + * if its set to the output sample rate then the returned delay is in output samples + * an exact rounding free delay can be found by using LCM(in_sample_rate, out_sample_rate) + * @returns the delay in 1/base units. + *) +function swr_get_delay(s: PSwrContext; base: cint64): cint64; + cdecl; external sw__resample; + +(** + * Return the LIBSWRESAMPLE_VERSION_INT constant. + *) +function swresample_version(): cuint; + cdecl; external sw__resample; + +(** + * Return the swr build-time configuration. + *) +function swresample_configuration(): cuchar; + cdecl; external sw__resample; + +(** + * Return the swr license. + *) +function swresample_license(): cuchar; + cdecl; external sw__resample; + +(** + * @ + *) + +implementation + +end. + diff --git a/src/lib/ffmpeg-0.9/libavcodec/audioconvert.pas b/src/lib/ffmpeg-0.9/libavcodec/audioconvert.pas index 9b2877d1..fea0f7cf 100644 --- a/src/lib/ffmpeg-0.9/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-0.9/libavcodec/audioconvert.pas @@ -50,10 +50,10 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output diff --git a/src/lib/ffmpeg-0.9/swresample.pas b/src/lib/ffmpeg-0.9/swresample.pas new file mode 100644 index 00000000..73900adf --- /dev/null +++ b/src/lib/ffmpeg-0.9/swresample.pas @@ -0,0 +1,165 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libswresample/swresample.h: + * version: 0.5.0 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + SWR_CH_MAX = 16; (* < Maximum number of channels *) + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s Swr context, can be NULL + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space then the input will be buffered. + * You can avoid this buffering by providing more output space than input. + * Convertion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Activate resampling compensation. + *) +procedure swr_compensate(s: PSwrContext; sample_delta: cint; compensation_distance: cint); + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param s allocated Swr context, not yet initialized + * @param channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * @ + *) + +implementation + +end. + diff --git a/src/lib/ffmpeg-1.0/libavcodec/audioconvert.pas b/src/lib/ffmpeg-1.0/libavcodec/audioconvert.pas index 6c139afa..efedb96a 100644 --- a/src/lib/ffmpeg-1.0/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-1.0/libavcodec/audioconvert.pas @@ -50,11 +50,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -183,7 +183,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -192,7 +192,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-1.0/swresample.pas b/src/lib/ffmpeg-1.0/swresample.pas new file mode 100644 index 00000000..5ec813bf --- /dev/null +++ b/src/lib/ffmpeg-1.0/swresample.pas @@ -0,0 +1,271 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libswresample/swresample.h: + * version: 0.15.100 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + {$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} + SWR_CH_MAX = 32; (* < Maximum number of channels *) + {$ENDIF} + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type + TSwrDitherType = ( + SWR_DITHER_NONE = 0, + SWR_DITHER_RECTANGULAR, + SWR_DITHER_TRIANGULAR, + SWR_DITHER_TRIANGULAR_HIGHPASS, + SWR_DITHER_NB (* < not part of API/ABI *) + ); + + TSwrFilterType = ( + SWR_FILTER_TYPE_CUBIC, (* < Cubic *) + SWR_FILTER_TYPE_BLACKMAN_NUTTALL, (* < Blackman Nuttall Windowed Sinc *) + SWR_FILTER_TYPE_KAISER (* < Kaiser Windowed Sinc *) + ); + + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +(** + * Get the AVClass for swrContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function swr_get_class(): PAVClass; + cdecl; external sw__resample; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s Swr context, can be NULL + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space then the input will be buffered. + * You can avoid this buffering by providing more output space than input. + * Convertion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Convert the next timestamp from input to output + * timestamps are in 1/(in_sample_rate * out_sample_rate) units. + * + * @note There are 2 slightly differently behaving modes. + * First is when automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) + * in this case timestamps will be passed through with delays compensated + * Second is when automatic timestamp compensation is used, (min_compensation < FLT_MAX) + * in this case the output timestamps will match output sample numbers + * + * @param pts timestamp for the next input sample, INT64_MIN if unknown + * @return the output timestamp for the next output sample + *) +function swr_next_pts(s: PSwrContext; pts: cint64): cint64; + cdecl; external sw__resample; + +(** + * Activate resampling compensation. + *) +function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param s allocated Swr context, not yet initialized + * @param channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * Set a customized remix matrix. + * + * @param s allocated Swr context, not yet initialized + * @param matrix remix coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o + * @param stride offset between lines of the matrix + * @return AVERROR error code in case of failure. + *) +function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; + cdecl; external sw__resample; + +(** + * Drops the specified number of output samples. + *) +function swr_drop_output(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Injects the specified number of silence samples. + *) +function swr_inject_silence(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Gets the delay the next input sample will experience relative to the next output sample. + * + * Swresample can buffer data if more input has been provided than available + * output space, also converting between sample rates needs a delay. + * This function returns the sum of all such delays. + * The exact delay is not necessarily an integer value in either input or + * output sample rate. Especially when downsampling by a large value, the + * output sample rate may be a poor choice to represent the delay, similarly + * for upsampling and the input sample rate. + * + * @param s swr context + * @param base timebase in which the returned delay will be + * if its set to 1 the returned delay is in seconds + * if its set to 1000 the returned delay is in milli seconds + * if its set to the input sample rate then the returned delay is in input samples + * if its set to the output sample rate then the returned delay is in output samples + * an exact rounding free delay can be found by using LCM(in_sample_rate, out_sample_rate) + * @returns the delay in 1/base units. + *) +function swr_get_delay(s: PSwrContext; base: cint64): cint64; + cdecl; external sw__resample; + +(** + * Return the LIBSWRESAMPLE_VERSION_INT constant. + *) +function swresample_version(): cuint; + cdecl; external sw__resample; + +(** + * Return the swr build-time configuration. + *) +function swresample_configuration(): cuchar; + cdecl; external sw__resample; + +(** + * Return the swr license. + *) +function swresample_license(): cuchar; + cdecl; external sw__resample; + +(** + * @ + *) + +implementation + +end. + diff --git a/src/lib/ffmpeg-1.1/libavcodec/audioconvert.pas b/src/lib/ffmpeg-1.1/libavcodec/audioconvert.pas index 369b5175..622453c8 100644 --- a/src/lib/ffmpeg-1.1/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-1.1/libavcodec/audioconvert.pas @@ -61,11 +61,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -194,7 +194,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -203,7 +203,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-1.1/swresample.pas b/src/lib/ffmpeg-1.1/swresample.pas new file mode 100644 index 00000000..0d7211ff --- /dev/null +++ b/src/lib/ffmpeg-1.1/swresample.pas @@ -0,0 +1,277 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libswresample/swresample.h: + * version: 0.17.102 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + {$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} + SWR_CH_MAX = 32; (* < Maximum number of channels *) + {$ENDIF} + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type + TSwrDitherType = ( + SWR_DITHER_NONE = 0, + SWR_DITHER_RECTANGULAR, + SWR_DITHER_TRIANGULAR, + SWR_DITHER_TRIANGULAR_HIGHPASS, + SWR_DITHER_NB (* < not part of API/ABI *) + ); + + TSwrEngine = ( + SWR_ENGINE_SWR, (* < SW Resampler *) + SWR_ENGINE_SOXR, (* < SoX Resampler *) + SWR_ENGINE_NB (* < not part of API/ABI *) + ); + + TSwrFilterType = ( + SWR_FILTER_TYPE_CUBIC, (* < Cubic *) + SWR_FILTER_TYPE_BLACKMAN_NUTTALL, (* < Blackman Nuttall Windowed Sinc *) + SWR_FILTER_TYPE_KAISER (* < Kaiser Windowed Sinc *) + ); + + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +(** + * Get the AVClass for swrContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function swr_get_class(): PAVClass; + cdecl; external sw__resample; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s Swr context, can be NULL + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space then the input will be buffered. + * You can avoid this buffering by providing more output space than input. + * Convertion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Convert the next timestamp from input to output + * timestamps are in 1/(in_sample_rate * out_sample_rate) units. + * + * @note There are 2 slightly differently behaving modes. + * First is when automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) + * in this case timestamps will be passed through with delays compensated + * Second is when automatic timestamp compensation is used, (min_compensation < FLT_MAX) + * in this case the output timestamps will match output sample numbers + * + * @param pts timestamp for the next input sample, INT64_MIN if unknown + * @return the output timestamp for the next output sample + *) +function swr_next_pts(s: PSwrContext; pts: cint64): cint64; + cdecl; external sw__resample; + +(** + * Activate resampling compensation. + *) +function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param s allocated Swr context, not yet initialized + * @param channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * Set a customized remix matrix. + * + * @param s allocated Swr context, not yet initialized + * @param matrix remix coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o + * @param stride offset between lines of the matrix + * @return AVERROR error code in case of failure. + *) +function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; + cdecl; external sw__resample; + +(** + * Drops the specified number of output samples. + *) +function swr_drop_output(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Injects the specified number of silence samples. + *) +function swr_inject_silence(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Gets the delay the next input sample will experience relative to the next output sample. + * + * Swresample can buffer data if more input has been provided than available + * output space, also converting between sample rates needs a delay. + * This function returns the sum of all such delays. + * The exact delay is not necessarily an integer value in either input or + * output sample rate. Especially when downsampling by a large value, the + * output sample rate may be a poor choice to represent the delay, similarly + * for upsampling and the input sample rate. + * + * @param s swr context + * @param base timebase in which the returned delay will be + * if its set to 1 the returned delay is in seconds + * if its set to 1000 the returned delay is in milli seconds + * if its set to the input sample rate then the returned delay is in input samples + * if its set to the output sample rate then the returned delay is in output samples + * an exact rounding free delay can be found by using LCM(in_sample_rate, out_sample_rate) + * @returns the delay in 1/base units. + *) +function swr_get_delay(s: PSwrContext; base: cint64): cint64; + cdecl; external sw__resample; + +(** + * Return the LIBSWRESAMPLE_VERSION_INT constant. + *) +function swresample_version(): cuint; + cdecl; external sw__resample; + +(** + * Return the swr build-time configuration. + *) +function swresample_configuration(): cuchar; + cdecl; external sw__resample; + +(** + * Return the swr license. + *) +function swresample_license(): cuchar; + cdecl; external sw__resample; + +(** + * @ + *) + +implementation + +end. + diff --git a/src/lib/ffmpeg-1.2/libavcodec/audioconvert.pas b/src/lib/ffmpeg-1.2/libavcodec/audioconvert.pas index c1156851..e43007c5 100644 --- a/src/lib/ffmpeg-1.2/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-1.2/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -157,14 +157,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -209,7 +209,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -218,7 +218,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-1.2/swresample.pas b/src/lib/ffmpeg-1.2/swresample.pas new file mode 100644 index 00000000..c3adb474 --- /dev/null +++ b/src/lib/ffmpeg-1.2/swresample.pas @@ -0,0 +1,286 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libswresample/swresample.h: + * version: 0.17.102 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + {$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} + SWR_CH_MAX = 32; (* < Maximum number of channels *) + {$ENDIF} + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type + TSwrDitherType = ( + SWR_DITHER_NONE = 0, + SWR_DITHER_RECTANGULAR, + SWR_DITHER_TRIANGULAR, + SWR_DITHER_TRIANGULAR_HIGHPASS, + + SWR_DITHER_NS = 64, (* < not part of API/ABI *) + SWR_DITHER_NS_LIPSHITZ, + SWR_DITHER_NS_F_WEIGHTED, + SWR_DITHER_NS_MODIFIED_E_WEIGHTED, + SWR_DITHER_NS_IMPROVED_E_WEIGHTED, + SWR_DITHER_NS_SHIBATA, + SWR_DITHER_NS_LOW_SHIBATA, + SWR_DITHER_NS_HIGH_SHIBATA, + SWR_DITHER_NB (* < not part of API/ABI *) + ); + + TSwrEngine = ( + SWR_ENGINE_SWR, (* < SW Resampler *) + SWR_ENGINE_SOXR, (* < SoX Resampler *) + SWR_ENGINE_NB (* < not part of API/ABI *) + ); + + TSwrFilterType = ( + SWR_FILTER_TYPE_CUBIC, (* < Cubic *) + SWR_FILTER_TYPE_BLACKMAN_NUTTALL, (* < Blackman Nuttall Windowed Sinc *) + SWR_FILTER_TYPE_KAISER (* < Kaiser Windowed Sinc *) + ); + + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +(** + * Get the AVClass for swrContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function swr_get_class(): PAVClass; + cdecl; external sw__resample; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s Swr context, can be NULL + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space then the input will be buffered. + * You can avoid this buffering by providing more output space than input. + * Convertion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Convert the next timestamp from input to output + * timestamps are in 1/(in_sample_rate * out_sample_rate) units. + * + * @note There are 2 slightly differently behaving modes. + * First is when automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) + * in this case timestamps will be passed through with delays compensated + * Second is when automatic timestamp compensation is used, (min_compensation < FLT_MAX) + * in this case the output timestamps will match output sample numbers + * + * @param pts timestamp for the next input sample, INT64_MIN if unknown + * @return the output timestamp for the next output sample + *) +function swr_next_pts(s: PSwrContext; pts: cint64): cint64; + cdecl; external sw__resample; + +(** + * Activate resampling compensation. + *) +function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param s allocated Swr context, not yet initialized + * @param channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * Set a customized remix matrix. + * + * @param s allocated Swr context, not yet initialized + * @param matrix remix coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o + * @param stride offset between lines of the matrix + * @return AVERROR error code in case of failure. + *) +function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; + cdecl; external sw__resample; + +(** + * Drops the specified number of output samples. + *) +function swr_drop_output(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Injects the specified number of silence samples. + *) +function swr_inject_silence(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Gets the delay the next input sample will experience relative to the next output sample. + * + * Swresample can buffer data if more input has been provided than available + * output space, also converting between sample rates needs a delay. + * This function returns the sum of all such delays. + * The exact delay is not necessarily an integer value in either input or + * output sample rate. Especially when downsampling by a large value, the + * output sample rate may be a poor choice to represent the delay, similarly + * for upsampling and the input sample rate. + * + * @param s swr context + * @param base timebase in which the returned delay will be + * if its set to 1 the returned delay is in seconds + * if its set to 1000 the returned delay is in milli seconds + * if its set to the input sample rate then the returned delay is in input samples + * if its set to the output sample rate then the returned delay is in output samples + * an exact rounding free delay can be found by using LCM(in_sample_rate, out_sample_rate) + * @returns the delay in 1/base units. + *) +function swr_get_delay(s: PSwrContext; base: cint64): cint64; + cdecl; external sw__resample; + +(** + * Return the LIBSWRESAMPLE_VERSION_INT constant. + *) +function swresample_version(): cuint; + cdecl; external sw__resample; + +(** + * Return the swr build-time configuration. + *) +function swresample_configuration(): cuchar; + cdecl; external sw__resample; + +(** + * Return the swr license. + *) +function swresample_license(): cuchar; + cdecl; external sw__resample; + +(** + * @ + *) + +implementation + +end. + diff --git a/src/lib/ffmpeg-2.0/libavcodec/audioconvert.pas b/src/lib/ffmpeg-2.0/libavcodec/audioconvert.pas index 116b26ac..73c76f22 100644 --- a/src/lib/ffmpeg-2.0/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-2.0/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -157,14 +157,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -209,7 +209,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -218,7 +218,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-2.0/swresample.pas b/src/lib/ffmpeg-2.0/swresample.pas new file mode 100644 index 00000000..c3adb474 --- /dev/null +++ b/src/lib/ffmpeg-2.0/swresample.pas @@ -0,0 +1,286 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libswresample/swresample.h: + * version: 0.17.102 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + {$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} + SWR_CH_MAX = 32; (* < Maximum number of channels *) + {$ENDIF} + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type + TSwrDitherType = ( + SWR_DITHER_NONE = 0, + SWR_DITHER_RECTANGULAR, + SWR_DITHER_TRIANGULAR, + SWR_DITHER_TRIANGULAR_HIGHPASS, + + SWR_DITHER_NS = 64, (* < not part of API/ABI *) + SWR_DITHER_NS_LIPSHITZ, + SWR_DITHER_NS_F_WEIGHTED, + SWR_DITHER_NS_MODIFIED_E_WEIGHTED, + SWR_DITHER_NS_IMPROVED_E_WEIGHTED, + SWR_DITHER_NS_SHIBATA, + SWR_DITHER_NS_LOW_SHIBATA, + SWR_DITHER_NS_HIGH_SHIBATA, + SWR_DITHER_NB (* < not part of API/ABI *) + ); + + TSwrEngine = ( + SWR_ENGINE_SWR, (* < SW Resampler *) + SWR_ENGINE_SOXR, (* < SoX Resampler *) + SWR_ENGINE_NB (* < not part of API/ABI *) + ); + + TSwrFilterType = ( + SWR_FILTER_TYPE_CUBIC, (* < Cubic *) + SWR_FILTER_TYPE_BLACKMAN_NUTTALL, (* < Blackman Nuttall Windowed Sinc *) + SWR_FILTER_TYPE_KAISER (* < Kaiser Windowed Sinc *) + ); + + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +(** + * Get the AVClass for swrContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function swr_get_class(): PAVClass; + cdecl; external sw__resample; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s Swr context, can be NULL + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space then the input will be buffered. + * You can avoid this buffering by providing more output space than input. + * Convertion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Convert the next timestamp from input to output + * timestamps are in 1/(in_sample_rate * out_sample_rate) units. + * + * @note There are 2 slightly differently behaving modes. + * First is when automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) + * in this case timestamps will be passed through with delays compensated + * Second is when automatic timestamp compensation is used, (min_compensation < FLT_MAX) + * in this case the output timestamps will match output sample numbers + * + * @param pts timestamp for the next input sample, INT64_MIN if unknown + * @return the output timestamp for the next output sample + *) +function swr_next_pts(s: PSwrContext; pts: cint64): cint64; + cdecl; external sw__resample; + +(** + * Activate resampling compensation. + *) +function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param s allocated Swr context, not yet initialized + * @param channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * Set a customized remix matrix. + * + * @param s allocated Swr context, not yet initialized + * @param matrix remix coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o + * @param stride offset between lines of the matrix + * @return AVERROR error code in case of failure. + *) +function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; + cdecl; external sw__resample; + +(** + * Drops the specified number of output samples. + *) +function swr_drop_output(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Injects the specified number of silence samples. + *) +function swr_inject_silence(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Gets the delay the next input sample will experience relative to the next output sample. + * + * Swresample can buffer data if more input has been provided than available + * output space, also converting between sample rates needs a delay. + * This function returns the sum of all such delays. + * The exact delay is not necessarily an integer value in either input or + * output sample rate. Especially when downsampling by a large value, the + * output sample rate may be a poor choice to represent the delay, similarly + * for upsampling and the input sample rate. + * + * @param s swr context + * @param base timebase in which the returned delay will be + * if its set to 1 the returned delay is in seconds + * if its set to 1000 the returned delay is in milli seconds + * if its set to the input sample rate then the returned delay is in input samples + * if its set to the output sample rate then the returned delay is in output samples + * an exact rounding free delay can be found by using LCM(in_sample_rate, out_sample_rate) + * @returns the delay in 1/base units. + *) +function swr_get_delay(s: PSwrContext; base: cint64): cint64; + cdecl; external sw__resample; + +(** + * Return the LIBSWRESAMPLE_VERSION_INT constant. + *) +function swresample_version(): cuint; + cdecl; external sw__resample; + +(** + * Return the swr build-time configuration. + *) +function swresample_configuration(): cuchar; + cdecl; external sw__resample; + +(** + * Return the swr license. + *) +function swresample_license(): cuchar; + cdecl; external sw__resample; + +(** + * @ + *) + +implementation + +end. + diff --git a/src/lib/ffmpeg-2.1/libavcodec/audioconvert.pas b/src/lib/ffmpeg-2.1/libavcodec/audioconvert.pas index 116b26ac..73c76f22 100644 --- a/src/lib/ffmpeg-2.1/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-2.1/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -157,14 +157,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -209,7 +209,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -218,7 +218,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-2.1/swresample.pas b/src/lib/ffmpeg-2.1/swresample.pas index e9efe6c2..6b9146a8 100644 --- a/src/lib/ffmpeg-2.1/swresample.pas +++ b/src/lib/ffmpeg-2.1/swresample.pas @@ -47,6 +47,7 @@ interface uses ctypes, + avutil, rational, {$IFDEF UNIX} BaseUnix, @@ -54,7 +55,7 @@ interface UConfig; const - {$IF LIBRESAMPLE_VERSION_MAJOR < 1} + {$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} SWR_CH_MAX = 32; (* < Maximum number of channels *) {$ENDIF} SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) @@ -101,7 +102,7 @@ TSwrContext = record * @see av_opt_find(). *) function swr_get_class(): PAVClass; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext. @@ -113,7 +114,7 @@ function swr_get_class(): PAVClass; * @return NULL on error, allocated context otherwise *) function swr_alloc(): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Initialize context after user parameters have been set. @@ -121,7 +122,7 @@ function swr_alloc(): PSwrContext; * @return AVERROR error code in case of failure. *) function swr_init(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext if needed and set/reset common parameters. @@ -147,13 +148,13 @@ function swr_alloc_set_opts(s: PSwrContext; out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; log_offset: cint; log_ctx: pointer): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Free the given SwrContext and set the pointer to NULL. *) procedure swr_free(s: PPSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert audio. @@ -173,9 +174,9 @@ procedure swr_free(s: PPSwrContext); * * @return number of samples output per channel, negative value on error *) -function swr_convert(s: PSwrContext; out_: PByte; out_count: cint; - {const} in_: PByte; in_count: cint): cint; - cdecl; external swresample; +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; (** * Convert the next timestamp from input to output @@ -191,13 +192,13 @@ function swr_convert(s: PSwrContext; out_: PByte; out_count: cint; * @return the output timestamp for the next output sample *) function swr_next_pts(s: PSwrContext; pts: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Activate resampling compensation. *) function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized input channel mapping. @@ -208,7 +209,7 @@ function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_d * @return AVERROR error code in case of failure. *) function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized remix matrix. @@ -220,19 +221,19 @@ function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): ci * @return AVERROR error code in case of failure. *) function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Drops the specified number of output samples. *) function swr_drop_output(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Injects the specified number of silence samples. *) function swr_inject_silence(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Gets the delay the next input sample will experience relative to the next output sample. @@ -255,25 +256,25 @@ function swr_inject_silence(s: PSwrContext; count: cint): cint; * @returns the delay in 1/base units. *) function swr_get_delay(s: PSwrContext; base: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the LIBSWRESAMPLE_VERSION_INT constant. *) function swresample_version(): cuint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr build-time configuration. *) function swresample_configuration(): cuchar; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr license. *) function swresample_license(): cuchar; - cdecl; external swresample; + cdecl; external sw__resample; (** * @ diff --git a/src/lib/ffmpeg-2.2/libavcodec/audioconvert.pas b/src/lib/ffmpeg-2.2/libavcodec/audioconvert.pas index 9cc78f97..03e3fb10 100644 --- a/src/lib/ffmpeg-2.2/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-2.2/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -161,14 +161,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -213,7 +213,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -222,7 +222,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-2.2/swresample.pas b/src/lib/ffmpeg-2.2/swresample.pas index 8e138d4b..8f550df2 100644 --- a/src/lib/ffmpeg-2.2/swresample.pas +++ b/src/lib/ffmpeg-2.2/swresample.pas @@ -47,6 +47,7 @@ interface uses ctypes, + avutil, rational, {$IFDEF UNIX} BaseUnix, @@ -86,7 +87,7 @@ interface LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + - (LIBSWRESAMPLE_VERSION_RELEASE * VERSION_RELEASE); + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); (* Min. supported version by this header *) LIBSWRESAMPLE_MIN_VERSION_MAJOR = 0; @@ -106,7 +107,7 @@ interface {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} {$IFEND} -{$IF LIBRESAMPLE_VERSION_MAJOR < 1} +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} SWR_CH_MAX = 32; (* < Maximum number of channels *) {$ENDIF} SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) @@ -153,7 +154,7 @@ TSwrContext = record * @see av_opt_find(). *) function swr_get_class(): PAVClass; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext. @@ -165,7 +166,7 @@ function swr_get_class(): PAVClass; * @return NULL on error, allocated context otherwise *) function swr_alloc(): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Initialize context after user parameters have been set. @@ -173,7 +174,7 @@ function swr_alloc(): PSwrContext; * @return AVERROR error code in case of failure. *) function swr_init(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Check whether an swr context has been initialized or not. @@ -181,7 +182,7 @@ function swr_init(s: PSwrContext): cint; * @return positive if it has been initialized, 0 if not initialized *) function swr_is_initialized(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext if needed and set/reset common parameters. @@ -207,13 +208,13 @@ function swr_alloc_set_opts(s: PSwrContext; out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; log_offset: cint; log_ctx: pointer): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Free the given SwrContext and set the pointer to NULL. *) procedure swr_free(s: PPSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert audio. @@ -233,9 +234,9 @@ procedure swr_free(s: PPSwrContext); * * @return number of samples output per channel, negative value on error *) -function swr_convert(s: PSwrContext; out_: PByte; out_count: cint; - {const} in_: PByte; in_count: cint): cint; - cdecl; external swresample; +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + {const} var in_: PByte; in_count: cint): cint; + cdecl; external sw__resample; (** * Convert the next timestamp from input to output @@ -251,13 +252,13 @@ function swr_convert(s: PSwrContext; out_: PByte; out_count: cint; * @return the output timestamp for the next output sample *) function swr_next_pts(s: PSwrContext; pts: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Activate resampling compensation. *) function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized input channel mapping. @@ -268,7 +269,7 @@ function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_d * @return AVERROR error code in case of failure. *) function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized remix matrix. @@ -280,19 +281,19 @@ function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): ci * @return AVERROR error code in case of failure. *) function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Drops the specified number of output samples. *) function swr_drop_output(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Injects the specified number of silence samples. *) function swr_inject_silence(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Gets the delay the next input sample will experience relative to the next output sample. @@ -315,25 +316,25 @@ function swr_inject_silence(s: PSwrContext; count: cint): cint; * @returns the delay in 1/base units. *) function swr_get_delay(s: PSwrContext; base: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the LIBSWRESAMPLE_VERSION_INT constant. *) function swresample_version(): cuint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr build-time configuration. *) function swresample_configuration(): cuchar; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr license. *) function swresample_license(): cuchar; - cdecl; external swresample; + cdecl; external sw__resample; (** * @ diff --git a/src/lib/ffmpeg-2.4/libavcodec/audioconvert.pas b/src/lib/ffmpeg-2.4/libavcodec/audioconvert.pas index 9cc78f97..03e3fb10 100644 --- a/src/lib/ffmpeg-2.4/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-2.4/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -161,14 +161,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -213,7 +213,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -222,7 +222,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-2.4/swresample.pas b/src/lib/ffmpeg-2.4/swresample.pas index 1890cd1c..c99531c6 100644 --- a/src/lib/ffmpeg-2.4/swresample.pas +++ b/src/lib/ffmpeg-2.4/swresample.pas @@ -24,7 +24,7 @@ * Conversion of * * libswresample/swresample.h: - * version: 0.18.100 + * version: 1.1.100 * *) @@ -47,6 +47,7 @@ interface uses ctypes, + avutil, rational, {$IFDEF UNIX} BaseUnix, @@ -81,16 +82,16 @@ interface *) (* Supported version by this header *) - LIBSWRESAMPLE_MAX_VERSION_MAJOR = 0; - LIBSWRESAMPLE_MAX_VERSION_MINOR = 18; + LIBSWRESAMPLE_MAX_VERSION_MAJOR = 1; + LIBSWRESAMPLE_MAX_VERSION_MINOR = 1; LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + - (LIBSWRESAMPLE_VERSION_RELEASE * VERSION_RELEASE); + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); (* Min. supported version by this header *) - LIBSWRESAMPLE_MIN_VERSION_MAJOR = 0; - LIBSWRESAMPLE_MIN_VERSION_MINOR = 18; + LIBSWRESAMPLE_MIN_VERSION_MAJOR = 1; + LIBSWRESAMPLE_MIN_VERSION_MINOR = 1; LIBSWRESAMPLE_MIN_VERSION_RELEASE = 100; LIBSWRESAMPLE_MIN_VERSION = (LIBSWRESAMPLE_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MIN_VERSION_MINOR * VERSION_MINOR) + @@ -106,7 +107,7 @@ interface {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} {$IFEND} -{$IF LIBRESAMPLE_VERSION_MAJOR < 1} +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} SWR_CH_MAX = 32; (* < Maximum number of channels *) {$ENDIF} SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) @@ -162,7 +163,7 @@ TSwrContext = record * @see av_opt_find(). *) function swr_get_class(): PAVClass; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext. @@ -174,7 +175,7 @@ function swr_get_class(): PAVClass; * @return NULL on error, allocated context otherwise *) function swr_alloc(): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Initialize context after user parameters have been set. @@ -186,7 +187,7 @@ function swr_alloc(): PSwrContext; * @return AVERROR error code in case of failure. *) function swr_init(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Check whether an swr context has been initialized or not. @@ -196,7 +197,7 @@ function swr_init(s: PSwrContext): cint; * @return positive if it has been initialized, 0 if not initialized *) function swr_is_initialized(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext if needed and set/reset common parameters. @@ -206,11 +207,11 @@ function swr_is_initialized(s: PSwrContext): cint; * on the allocated context. * * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). * @param in_sample_rate input sample rate (frequency in Hz) * @param log_offset logging level offset * @param log_ctx parent logging context, can be NULL @@ -222,7 +223,7 @@ function swr_alloc_set_opts(s: PSwrContext; out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; log_offset: cint; log_ctx: pointer): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Free the given SwrContext and set the pointer to NULL. @@ -230,7 +231,7 @@ function swr_alloc_set_opts(s: PSwrContext; * @param[in] s a pointer to a pointer to Swr context *) procedure swr_free(s: PPSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Closes the context so that swr_is_initialized() returns 0. @@ -243,7 +244,7 @@ procedure swr_free(s: PPSwrContext); * @param[in,out] s Swr context to be closed *) procedure swr_close(s: PSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert audio. @@ -265,7 +266,7 @@ procedure swr_close(s: PSwrContext); *) function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; var in_: {const} PByte; in_count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert the next timestamp from input to output @@ -281,7 +282,7 @@ function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; * @return the output timestamp for the next output sample *) function swr_next_pts(s: PSwrContext; pts: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Activate resampling compensation ("soft" compensation). This function is @@ -300,7 +301,7 @@ function swr_next_pts(s: PSwrContext; pts: cint64): cint64; * @li swr_init() fails when called. *) function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized input channel mapping. @@ -311,7 +312,7 @@ function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_d * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized remix matrix. @@ -323,7 +324,7 @@ function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): ci * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Drops the specified number of output samples. @@ -337,7 +338,7 @@ function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_drop_output(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Injects the specified number of silence samples. @@ -351,7 +352,7 @@ function swr_drop_output(s: PSwrContext; count: cint): cint; * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_inject_silence(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Gets the delay the next input sample will experience relative to the next output sample. @@ -378,7 +379,7 @@ function swr_inject_silence(s: PSwrContext; count: cint): cint; * @returns the delay in 1 / @c base units. *) function swr_get_delay(s: PSwrContext; base: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. @@ -389,7 +390,7 @@ function swr_get_delay(s: PSwrContext; base: cint64): cint64; * @returns the unsigned int-typed version *) function swresample_version(): cuint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr build-time configuration. @@ -397,7 +398,7 @@ function swresample_version(): cuint; * @returns the build-time @c ./configure flags *) function swresample_configuration(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr license. @@ -405,7 +406,7 @@ function swresample_configuration(): PAnsiChar; * @returns the license of libswresample, determined at build-time *) function swresample_license(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; implementation diff --git a/src/lib/ffmpeg-2.5/libavcodec/audioconvert.pas b/src/lib/ffmpeg-2.5/libavcodec/audioconvert.pas index 9cc78f97..03e3fb10 100644 --- a/src/lib/ffmpeg-2.5/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-2.5/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -161,14 +161,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -213,7 +213,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -222,7 +222,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-2.5/swresample.pas b/src/lib/ffmpeg-2.5/swresample.pas index 1890cd1c..c99531c6 100644 --- a/src/lib/ffmpeg-2.5/swresample.pas +++ b/src/lib/ffmpeg-2.5/swresample.pas @@ -24,7 +24,7 @@ * Conversion of * * libswresample/swresample.h: - * version: 0.18.100 + * version: 1.1.100 * *) @@ -47,6 +47,7 @@ interface uses ctypes, + avutil, rational, {$IFDEF UNIX} BaseUnix, @@ -81,16 +82,16 @@ interface *) (* Supported version by this header *) - LIBSWRESAMPLE_MAX_VERSION_MAJOR = 0; - LIBSWRESAMPLE_MAX_VERSION_MINOR = 18; + LIBSWRESAMPLE_MAX_VERSION_MAJOR = 1; + LIBSWRESAMPLE_MAX_VERSION_MINOR = 1; LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + - (LIBSWRESAMPLE_VERSION_RELEASE * VERSION_RELEASE); + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); (* Min. supported version by this header *) - LIBSWRESAMPLE_MIN_VERSION_MAJOR = 0; - LIBSWRESAMPLE_MIN_VERSION_MINOR = 18; + LIBSWRESAMPLE_MIN_VERSION_MAJOR = 1; + LIBSWRESAMPLE_MIN_VERSION_MINOR = 1; LIBSWRESAMPLE_MIN_VERSION_RELEASE = 100; LIBSWRESAMPLE_MIN_VERSION = (LIBSWRESAMPLE_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MIN_VERSION_MINOR * VERSION_MINOR) + @@ -106,7 +107,7 @@ interface {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} {$IFEND} -{$IF LIBRESAMPLE_VERSION_MAJOR < 1} +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} SWR_CH_MAX = 32; (* < Maximum number of channels *) {$ENDIF} SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) @@ -162,7 +163,7 @@ TSwrContext = record * @see av_opt_find(). *) function swr_get_class(): PAVClass; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext. @@ -174,7 +175,7 @@ function swr_get_class(): PAVClass; * @return NULL on error, allocated context otherwise *) function swr_alloc(): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Initialize context after user parameters have been set. @@ -186,7 +187,7 @@ function swr_alloc(): PSwrContext; * @return AVERROR error code in case of failure. *) function swr_init(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Check whether an swr context has been initialized or not. @@ -196,7 +197,7 @@ function swr_init(s: PSwrContext): cint; * @return positive if it has been initialized, 0 if not initialized *) function swr_is_initialized(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext if needed and set/reset common parameters. @@ -206,11 +207,11 @@ function swr_is_initialized(s: PSwrContext): cint; * on the allocated context. * * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). * @param in_sample_rate input sample rate (frequency in Hz) * @param log_offset logging level offset * @param log_ctx parent logging context, can be NULL @@ -222,7 +223,7 @@ function swr_alloc_set_opts(s: PSwrContext; out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; log_offset: cint; log_ctx: pointer): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Free the given SwrContext and set the pointer to NULL. @@ -230,7 +231,7 @@ function swr_alloc_set_opts(s: PSwrContext; * @param[in] s a pointer to a pointer to Swr context *) procedure swr_free(s: PPSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Closes the context so that swr_is_initialized() returns 0. @@ -243,7 +244,7 @@ procedure swr_free(s: PPSwrContext); * @param[in,out] s Swr context to be closed *) procedure swr_close(s: PSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert audio. @@ -265,7 +266,7 @@ procedure swr_close(s: PSwrContext); *) function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; var in_: {const} PByte; in_count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert the next timestamp from input to output @@ -281,7 +282,7 @@ function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; * @return the output timestamp for the next output sample *) function swr_next_pts(s: PSwrContext; pts: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Activate resampling compensation ("soft" compensation). This function is @@ -300,7 +301,7 @@ function swr_next_pts(s: PSwrContext; pts: cint64): cint64; * @li swr_init() fails when called. *) function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized input channel mapping. @@ -311,7 +312,7 @@ function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_d * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized remix matrix. @@ -323,7 +324,7 @@ function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): ci * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Drops the specified number of output samples. @@ -337,7 +338,7 @@ function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_drop_output(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Injects the specified number of silence samples. @@ -351,7 +352,7 @@ function swr_drop_output(s: PSwrContext; count: cint): cint; * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_inject_silence(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Gets the delay the next input sample will experience relative to the next output sample. @@ -378,7 +379,7 @@ function swr_inject_silence(s: PSwrContext; count: cint): cint; * @returns the delay in 1 / @c base units. *) function swr_get_delay(s: PSwrContext; base: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. @@ -389,7 +390,7 @@ function swr_get_delay(s: PSwrContext; base: cint64): cint64; * @returns the unsigned int-typed version *) function swresample_version(): cuint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr build-time configuration. @@ -397,7 +398,7 @@ function swresample_version(): cuint; * @returns the build-time @c ./configure flags *) function swresample_configuration(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr license. @@ -405,7 +406,7 @@ function swresample_configuration(): PAnsiChar; * @returns the license of libswresample, determined at build-time *) function swresample_license(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; implementation diff --git a/src/lib/ffmpeg-2.6/libavcodec/audioconvert.pas b/src/lib/ffmpeg-2.6/libavcodec/audioconvert.pas index 9cc78f97..03e3fb10 100644 --- a/src/lib/ffmpeg-2.6/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-2.6/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -161,14 +161,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -213,7 +213,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -222,7 +222,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-2.6/swresample.pas b/src/lib/ffmpeg-2.6/swresample.pas index 92a14ac0..77d2f95e 100644 --- a/src/lib/ffmpeg-2.6/swresample.pas +++ b/src/lib/ffmpeg-2.6/swresample.pas @@ -47,6 +47,7 @@ interface uses ctypes, + avutil, rational, {$IFDEF UNIX} BaseUnix, @@ -86,7 +87,7 @@ interface LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + - (LIBSWRESAMPLE_VERSION_RELEASE * VERSION_RELEASE); + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); (* Min. supported version by this header *) LIBSWRESAMPLE_MIN_VERSION_MAJOR = 1; @@ -106,7 +107,7 @@ interface {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} {$IFEND} -{$IF LIBRESAMPLE_VERSION_MAJOR < 1} +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} SWR_CH_MAX = 32; (* < Maximum number of channels *) {$ENDIF} SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) @@ -162,7 +163,7 @@ TSwrContext = record * @see av_opt_find(). *) function swr_get_class(): PAVClass; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext. @@ -174,7 +175,7 @@ function swr_get_class(): PAVClass; * @return NULL on error, allocated context otherwise *) function swr_alloc(): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Initialize context after user parameters have been set. @@ -186,7 +187,7 @@ function swr_alloc(): PSwrContext; * @return AVERROR error code in case of failure. *) function swr_init(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Check whether an swr context has been initialized or not. @@ -196,7 +197,7 @@ function swr_init(s: PSwrContext): cint; * @return positive if it has been initialized, 0 if not initialized *) function swr_is_initialized(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext if needed and set/reset common parameters. @@ -206,11 +207,11 @@ function swr_is_initialized(s: PSwrContext): cint; * on the allocated context. * * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). * @param in_sample_rate input sample rate (frequency in Hz) * @param log_offset logging level offset * @param log_ctx parent logging context, can be NULL @@ -222,7 +223,7 @@ function swr_alloc_set_opts(s: PSwrContext; out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; log_offset: cint; log_ctx: pointer): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Free the given SwrContext and set the pointer to NULL. @@ -230,7 +231,7 @@ function swr_alloc_set_opts(s: PSwrContext; * @param[in] s a pointer to a pointer to Swr context *) procedure swr_free(s: PPSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Closes the context so that swr_is_initialized() returns 0. @@ -243,7 +244,7 @@ procedure swr_free(s: PPSwrContext); * @param[in,out] s Swr context to be closed *) procedure swr_close(s: PSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert audio. @@ -265,7 +266,7 @@ procedure swr_close(s: PSwrContext); *) function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; var in_: {const} PByte; in_count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert the next timestamp from input to output @@ -281,7 +282,7 @@ function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; * @return the output timestamp for the next output sample *) function swr_next_pts(s: PSwrContext; pts: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Activate resampling compensation ("soft" compensation). This function is @@ -300,7 +301,7 @@ function swr_next_pts(s: PSwrContext; pts: cint64): cint64; * @li swr_init() fails when called. *) function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized input channel mapping. @@ -311,7 +312,7 @@ function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_d * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized remix matrix. @@ -323,7 +324,7 @@ function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): ci * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Drops the specified number of output samples. @@ -337,7 +338,7 @@ function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_drop_output(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Injects the specified number of silence samples. @@ -351,7 +352,7 @@ function swr_drop_output(s: PSwrContext; count: cint): cint; * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_inject_silence(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Gets the delay the next input sample will experience relative to the next output sample. @@ -378,7 +379,7 @@ function swr_inject_silence(s: PSwrContext; count: cint): cint; * @returns the delay in 1 / @c base units. *) function swr_get_delay(s: PSwrContext; base: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. @@ -389,7 +390,7 @@ function swr_get_delay(s: PSwrContext; base: cint64): cint64; * @returns the unsigned int-typed version *) function swresample_version(): cuint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr build-time configuration. @@ -397,7 +398,7 @@ function swresample_version(): cuint; * @returns the build-time @c ./configure flags *) function swresample_configuration(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr license. @@ -405,7 +406,7 @@ function swresample_configuration(): PAnsiChar; * @returns the license of libswresample, determined at build-time *) function swresample_license(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; implementation diff --git a/src/lib/ffmpeg-2.7/libavcodec/audioconvert.pas b/src/lib/ffmpeg-2.7/libavcodec/audioconvert.pas index 9cc78f97..03e3fb10 100644 --- a/src/lib/ffmpeg-2.7/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-2.7/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -161,14 +161,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -213,7 +213,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -222,7 +222,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-2.7/swresample.pas b/src/lib/ffmpeg-2.7/swresample.pas index 9bb4568c..9d3440eb 100644 --- a/src/lib/ffmpeg-2.7/swresample.pas +++ b/src/lib/ffmpeg-2.7/swresample.pas @@ -47,6 +47,7 @@ interface uses ctypes, + avutil, rational, {$IFDEF UNIX} BaseUnix, @@ -86,7 +87,7 @@ interface LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + - (LIBSWRESAMPLE_VERSION_RELEASE * VERSION_RELEASE); + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); (* Min. supported version by this header *) LIBSWRESAMPLE_MIN_VERSION_MAJOR = 1; @@ -106,7 +107,7 @@ interface {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} {$IFEND} -{$IF LIBRESAMPLE_VERSION_MAJOR < 1} +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} SWR_CH_MAX = 32; (* < Maximum number of channels *) {$ENDIF} SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) @@ -162,7 +163,7 @@ TSwrContext = record * @see av_opt_find(). *) function swr_get_class(): PAVClass; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext. @@ -174,7 +175,7 @@ function swr_get_class(): PAVClass; * @return NULL on error, allocated context otherwise *) function swr_alloc(): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Initialize context after user parameters have been set. @@ -186,7 +187,7 @@ function swr_alloc(): PSwrContext; * @return AVERROR error code in case of failure. *) function swr_init(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Check whether an swr context has been initialized or not. @@ -196,7 +197,7 @@ function swr_init(s: PSwrContext): cint; * @return positive if it has been initialized, 0 if not initialized *) function swr_is_initialized(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext if needed and set/reset common parameters. @@ -206,11 +207,11 @@ function swr_is_initialized(s: PSwrContext): cint; * on the allocated context. * * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). * @param in_sample_rate input sample rate (frequency in Hz) * @param log_offset logging level offset * @param log_ctx parent logging context, can be NULL @@ -222,7 +223,7 @@ function swr_alloc_set_opts(s: PSwrContext; out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; log_offset: cint; log_ctx: pointer): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Free the given SwrContext and set the pointer to NULL. @@ -230,7 +231,7 @@ function swr_alloc_set_opts(s: PSwrContext; * @param[in] s a pointer to a pointer to Swr context *) procedure swr_free(s: PPSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Closes the context so that swr_is_initialized() returns 0. @@ -243,7 +244,7 @@ procedure swr_free(s: PPSwrContext); * @param[in,out] s Swr context to be closed *) procedure swr_close(s: PSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert audio. @@ -266,7 +267,7 @@ procedure swr_close(s: PSwrContext); *) function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; var in_: {const} PByte; in_count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert the next timestamp from input to output @@ -282,7 +283,7 @@ function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; * @return the output timestamp for the next output sample *) function swr_next_pts(s: PSwrContext; pts: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Activate resampling compensation ("soft" compensation). This function is @@ -301,7 +302,7 @@ function swr_next_pts(s: PSwrContext; pts: cint64): cint64; * @li swr_init() fails when called. *) function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized input channel mapping. @@ -312,7 +313,7 @@ function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_d * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized remix matrix. @@ -324,7 +325,7 @@ function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): ci * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Drops the specified number of output samples. @@ -338,7 +339,7 @@ function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_drop_output(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Injects the specified number of silence samples. @@ -352,7 +353,7 @@ function swr_drop_output(s: PSwrContext; count: cint): cint; * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_inject_silence(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Gets the delay the next input sample will experience relative to the next output sample. @@ -379,7 +380,7 @@ function swr_inject_silence(s: PSwrContext; count: cint): cint; * @returns the delay in 1 / @c base units. *) function swr_get_delay(s: PSwrContext; base: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Find an upper bound on the number of samples that the next swr_convert @@ -397,8 +398,8 @@ function swr_get_delay(s: PSwrContext; base: cint64): cint64; * @returns an upper bound on the number of samples that the next swr_convert * will output or a negative value to indicate an error *) -function swr_get_out_samples(s: PSwrContext; in_samples: cint); - cdecl; external swresample; +function swr_get_out_samples(s: PSwrContext; in_samples: cint): cint; + cdecl; external sw__resample; (** * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. @@ -409,7 +410,7 @@ function swr_get_out_samples(s: PSwrContext; in_samples: cint); * @returns the unsigned int-typed version *) function swresample_version(): cuint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr build-time configuration. @@ -417,7 +418,7 @@ function swresample_version(): cuint; * @returns the build-time @c ./configure flags *) function swresample_configuration(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr license. @@ -425,7 +426,7 @@ function swresample_configuration(): PAnsiChar; * @returns the license of libswresample, determined at build-time *) function swresample_license(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; implementation diff --git a/src/lib/ffmpeg-2.8/libavcodec/audioconvert.pas b/src/lib/ffmpeg-2.8/libavcodec/audioconvert.pas index 16d44015..38bef39c 100644 --- a/src/lib/ffmpeg-2.8/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-2.8/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -164,14 +164,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -216,7 +216,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -225,7 +225,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-2.8/swresample.pas b/src/lib/ffmpeg-2.8/swresample.pas index 9bb4568c..de805724 100644 --- a/src/lib/ffmpeg-2.8/swresample.pas +++ b/src/lib/ffmpeg-2.8/swresample.pas @@ -47,6 +47,7 @@ interface uses ctypes, + avutil, rational, {$IFDEF UNIX} BaseUnix, @@ -83,10 +84,10 @@ interface (* Supported version by this header *) LIBSWRESAMPLE_MAX_VERSION_MAJOR = 1; LIBSWRESAMPLE_MAX_VERSION_MINOR = 2; - LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; + LIBSWRESAMPLE_MAX_VERSION_RELEASE = 101; LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + - (LIBSWRESAMPLE_VERSION_RELEASE * VERSION_RELEASE); + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); (* Min. supported version by this header *) LIBSWRESAMPLE_MIN_VERSION_MAJOR = 1; @@ -106,7 +107,7 @@ interface {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} {$IFEND} -{$IF LIBRESAMPLE_VERSION_MAJOR < 1} +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} SWR_CH_MAX = 32; (* < Maximum number of channels *) {$ENDIF} SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) @@ -162,7 +163,7 @@ TSwrContext = record * @see av_opt_find(). *) function swr_get_class(): PAVClass; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext. @@ -174,7 +175,7 @@ function swr_get_class(): PAVClass; * @return NULL on error, allocated context otherwise *) function swr_alloc(): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Initialize context after user parameters have been set. @@ -186,7 +187,7 @@ function swr_alloc(): PSwrContext; * @return AVERROR error code in case of failure. *) function swr_init(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Check whether an swr context has been initialized or not. @@ -196,7 +197,7 @@ function swr_init(s: PSwrContext): cint; * @return positive if it has been initialized, 0 if not initialized *) function swr_is_initialized(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext if needed and set/reset common parameters. @@ -206,11 +207,11 @@ function swr_is_initialized(s: PSwrContext): cint; * on the allocated context. * * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). * @param in_sample_rate input sample rate (frequency in Hz) * @param log_offset logging level offset * @param log_ctx parent logging context, can be NULL @@ -222,7 +223,7 @@ function swr_alloc_set_opts(s: PSwrContext; out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; log_offset: cint; log_ctx: pointer): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Free the given SwrContext and set the pointer to NULL. @@ -230,7 +231,7 @@ function swr_alloc_set_opts(s: PSwrContext; * @param[in] s a pointer to a pointer to Swr context *) procedure swr_free(s: PPSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Closes the context so that swr_is_initialized() returns 0. @@ -243,7 +244,7 @@ procedure swr_free(s: PPSwrContext); * @param[in,out] s Swr context to be closed *) procedure swr_close(s: PSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert audio. @@ -266,7 +267,7 @@ procedure swr_close(s: PSwrContext); *) function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; var in_: {const} PByte; in_count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert the next timestamp from input to output @@ -282,7 +283,7 @@ function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; * @return the output timestamp for the next output sample *) function swr_next_pts(s: PSwrContext; pts: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Activate resampling compensation ("soft" compensation). This function is @@ -301,7 +302,7 @@ function swr_next_pts(s: PSwrContext; pts: cint64): cint64; * @li swr_init() fails when called. *) function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized input channel mapping. @@ -312,7 +313,7 @@ function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_d * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized remix matrix. @@ -324,7 +325,7 @@ function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): ci * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Drops the specified number of output samples. @@ -338,7 +339,7 @@ function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_drop_output(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Injects the specified number of silence samples. @@ -352,7 +353,7 @@ function swr_drop_output(s: PSwrContext; count: cint): cint; * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_inject_silence(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Gets the delay the next input sample will experience relative to the next output sample. @@ -379,7 +380,7 @@ function swr_inject_silence(s: PSwrContext; count: cint): cint; * @returns the delay in 1 / @c base units. *) function swr_get_delay(s: PSwrContext; base: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Find an upper bound on the number of samples that the next swr_convert @@ -397,8 +398,8 @@ function swr_get_delay(s: PSwrContext; base: cint64): cint64; * @returns an upper bound on the number of samples that the next swr_convert * will output or a negative value to indicate an error *) -function swr_get_out_samples(s: PSwrContext; in_samples: cint); - cdecl; external swresample; +function swr_get_out_samples(s: PSwrContext; in_samples: cint): cint; + cdecl; external sw__resample; (** * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. @@ -409,7 +410,7 @@ function swr_get_out_samples(s: PSwrContext; in_samples: cint); * @returns the unsigned int-typed version *) function swresample_version(): cuint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr build-time configuration. @@ -417,7 +418,7 @@ function swresample_version(): cuint; * @returns the build-time @c ./configure flags *) function swresample_configuration(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr license. @@ -425,7 +426,7 @@ function swresample_configuration(): PAnsiChar; * @returns the license of libswresample, determined at build-time *) function swresample_license(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; implementation diff --git a/src/lib/ffmpeg-3.0/avcodec.pas b/src/lib/ffmpeg-3.0/avcodec.pas index 8b8ccf75..d047f870 100644 --- a/src/lib/ffmpeg-3.0/avcodec.pas +++ b/src/lib/ffmpeg-3.0/avcodec.pas @@ -92,8 +92,8 @@ interface (* Min. supported version by this header *) LIBAVCODEC_MIN_VERSION_MAJOR = 57; - LIBAVCODEC_MIN_VERSION_MINOR = 2; - LIBAVCODEC_MIN_VERSION_RELEASE = 100; + LIBAVCODEC_MIN_VERSION_MINOR = 24; + LIBAVCODEC_MIN_VERSION_RELEASE = 102; LIBAVCODEC_MIN_VERSION = (LIBAVCODEC_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVCODEC_MIN_VERSION_MINOR * VERSION_MINOR) + (LIBAVCODEC_MIN_VERSION_RELEASE * VERSION_RELEASE); @@ -141,9 +141,8 @@ interface * * If you add a codec ID to this list, add it so that * 1. no value of a existing codec ID changes (that would break ABI), - * 2. Give it a value which when taken as ASCII is recognized uniquely by a human as this specific codec. - * This ensures that 2 forks can independently add AVCodecIDs without producing conflicts. - * + * 2. it is as close as possible to similar codecs + * * After adding new codec IDs, do not forget to add an entry to the codec * descriptor list and bump libavcodec minor version. *) @@ -291,7 +290,7 @@ interface AV_CODEC_ID_ANM, AV_CODEC_ID_BINKVIDEO, AV_CODEC_ID_IFF_ILBM, - AV_CODEC_ID_IFF_BYTERUN1, + AV_CODEC_ID_IFF_BYTERUN1 = AV_CODEC_ID_IFF_ILBM, AV_CODEC_ID_KGV1, AV_CODEC_ID_YOP, AV_CODEC_ID_VP8, @@ -324,59 +323,49 @@ interface AV_CODEC_ID_MSS2, AV_CODEC_ID_VP9, AV_CODEC_ID_AIC, - AV_CODEC_ID_ESCAPE130_DEPRECATED, - AV_CODEC_ID_G2M_DEPRECATED, + AV_CODEC_ID_ESCAPE130, + AV_CODEC_ID_G2M, + AV_CODEC_ID_WEBP, AV_CODEC_ID_HNM4_VIDEO, - AV_CODEC_ID_HEVC_DEPRECATED, + AV_CODEC_ID_HEVC, AV_CODEC_ID_FIC, AV_CODEC_ID_ALIAS_PIX, - AV_CODEC_ID_BRENDER_PIX_DEPRECATED, - AV_CODEC_ID_PAF_VIDEO_DEPRECATED, - AV_CODEC_ID_EXR_DEPRECATED, - AV_CODEC_ID_VP7_DEPRECATED, - AV_CODEC_ID_SANM_DEPRECATED, - AV_CODEC_ID_SGIRLE_DEPRECATED, - AV_CODEC_ID_MVC1_DEPRECATED, - AV_CODEC_ID_MVC2_DEPRECATED, + AV_CODEC_ID_BRENDER_PIX, + AV_CODEC_ID_PAF_VIDEO, + AV_CODEC_ID_EXR, + AV_CODEC_ID_VP7, + AV_CODEC_ID_SANM, + AV_CODEC_ID_SGIRLE, + AV_CODEC_ID_MVC1, + AV_CODEC_ID_MVC2, AV_CODEC_ID_HQX, AV_CODEC_ID_TDSC, AV_CODEC_ID_HQ_HQA, AV_CODEC_ID_HAP, AV_CODEC_ID_DDS, - -(** see below. they need to be hard coded. - AV_CODEC_ID_BRENDER_PIX= MKBETAG('B','P','I','X'), - AV_CODEC_ID_Y41P = MKBETAG('Y','4','1','P'), - AV_CODEC_ID_ESCAPE130 = MKBETAG('E','1','3','0'), - AV_CODEC_ID_EXR = MKBETAG('0','E','X','R'), - AV_CODEC_ID_AVRP = MKBETAG('A','V','R','P'), - - AV_CODEC_ID_012V = MKBETAG('0','1','2','V'), - AV_CODEC_ID_G2M = MKBETAG( 0 ,'G','2','M'), - AV_CODEC_ID_AVUI = MKBETAG('A','V','U','I'), - AV_CODEC_ID_AYUV = MKBETAG('A','Y','U','V'), - AV_CODEC_ID_TARGA_Y216 = MKBETAG('T','2','1','6'), - AV_CODEC_ID_V308 = MKBETAG('V','3','0','8'), - AV_CODEC_ID_V408 = MKBETAG('V','4','0','8'), - AV_CODEC_ID_YUV4 = MKBETAG('Y','U','V','4'), - AV_CODEC_ID_SANM = MKBETAG('S','A','N','M'), - AV_CODEC_ID_PAF_VIDEO = MKBETAG('P','A','F','V'), - AV_CODEC_ID_AVRN = MKBETAG('A','V','R','n'), - AV_CODEC_ID_CPIA = MKBETAG('C','P','I','A'), - AV_CODEC_ID_XFACE = MKBETAG('X','F','A','C'), - AV_CODEC_ID_SGIRLE = MKBETAG('S','G','I','R'), - AV_CODEC_ID_MVC1 = MKBETAG('M','V','C','1'), - AV_CODEC_ID_MVC2 = MKBETAG('M','V','C','2'), - AV_CODEC_ID_SNOW = MKBETAG('S','N','O','W'), - AV_CODEC_ID_WEBP = MKBETAG('W','E','B','P'), - AV_CODEC_ID_SMVJPEG = MKBETAG('S','M','V','J'), - AV_CODEC_ID_HEVC = MKBETAG('H','2','6','5'), - AV_CODEC_ID_H265 = AV_CODEC_ID_HEVC, - AV_CODEC_ID_VP7 = MKBETAG('V','P','7','0'), - AV_CODEC_ID_APNG = MKBETAG('A','P','N','G') - *) + AV_CODEC_ID_DXV, + AV_CODEC_ID_SCREENPRESSO, + AV_CODEC_ID_RSCC, + + AV_CODEC_ID_Y41P = $8000, + AV_CODEC_ID_AVRP, + AV_CODEC_ID_012V, + AV_CODEC_ID_AVUI, + AV_CODEC_ID_AYUV, + AV_CODEC_ID_TARGA_Y216, + AV_CODEC_ID_V308, + AV_CODEC_ID_V408, + AV_CODEC_ID_YUV4, + AV_CODEC_ID_AVRN, + AV_CODEC_ID_CPIA, + AV_CODEC_ID_XFACE, + AV_CODEC_ID_SNOW, + AV_CODEC_ID_SMVJPEG, + AV_CODEC_ID_APNG, + AV_CODEC_ID_DAALA, + AV_CODEC_ID_CFHD, //* various PCM "codecs" */ -// AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs + AV_CODEC_ID_FIRST_AUDIO = $10000, ///< A dummy id pointing at the start of audio codecs AV_CODEC_ID_PCM_S16LE = $10000, AV_CODEC_ID_PCM_S16BE, AV_CODEC_ID_PCM_U16LE, @@ -405,14 +394,12 @@ interface AV_CODEC_ID_PCM_LXF, AV_CODEC_ID_S302M, AV_CODEC_ID_PCM_S8_PLANAR, - AV_CODEC_ID_PCM_S24LE_PLANAR_DEPRECATED, - AV_CODEC_ID_PCM_S32LE_PLANAR_DEPRECATED, - AV_CODEC_ID_PCM_S16BE_PLANAR_DEPRECATED, -(** see below. they need to be hard coded. - AV_CODEC_ID_PCM_S24LE_PLANAR = MKBETAG(24,'P','S','P'), - AV_CODEC_ID_PCM_S32LE_PLANAR = MKBETAG(32,'P','S','P'), - AV_CODEC_ID_PCM_S16BE_PLANAR = MKBETAG('P','S','P',16), - *) + AV_CODEC_ID_PCM_S24LE_PLANAR, + AV_CODEC_ID_PCM_S32LE_PLANAR, + AV_CODEC_ID_PCM_S16BE_PLANAR, + (* new PCM "codecs" should be added right below this line starting with + * an explicit value of for example 0x10800 + *) //* various ADPCM codecs */ AV_CODEC_ID_ADPCM_IMA_QT = $11000, @@ -445,19 +432,18 @@ interface AV_CODEC_ID_ADPCM_IMA_ISS, AV_CODEC_ID_ADPCM_G722, AV_CODEC_ID_ADPCM_IMA_APC, - AV_CODEC_ID_ADPCM_VIMA_DEPRECATED, -(** see below. they need to be hard coded. - AV_CODEC_ID_ADPCM_VIMA = MKBETAG('V','I','M','A'), + AV_CODEC_ID_ADPCM_VIMA, {$IFDEF FF_API_VIMA_DECODER} - AV_CODEC_ID_VIMA = MKBETAG('V','I','M','A'), + AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA, {$IFEND} - AV_CODEC_ID_ADPCM_AFC = MKBETAG('A','F','C',' '), - AV_CODEC_ID_ADPCM_IMA_OKI = MKBETAG('O','K','I',' '), - AV_CODEC_ID_ADPCM_DTK = MKBETAG('D','T','K',' '), - AV_CODEC_ID_ADPCM_IMA_RAD = MKBETAG('R','A','D',' '), - AV_CODEC_ID_ADPCM_G726LE = MKBETAG('6','2','7','G'), - AV_CODEC_ID_ADPCM_THP_LE = MKBETAG('T','H','P','L'), - *) + AV_CODEC_ID_ADPCM_AFC = $11800, + AV_CODEC_ID_ADPCM_IMA_OKI, + AV_CODEC_ID_ADPCM_DTK, + AV_CODEC_ID_ADPCM_IMA_RAD, + AV_CODEC_ID_ADPCM_G726LE, + AV_CODEC_ID_ADPCM_THP_LE, + AV_CODEC_ID_ADPCM_PSX, + AV_CODEC_ID_ADPCM_AICA, //* AMR */ AV_CODEC_ID_AMR_NB = $12000, @@ -473,6 +459,8 @@ interface AV_CODEC_ID_XAN_DPCM, AV_CODEC_ID_SOL_DPCM, + AV_CODEC_ID_SDX2_DPCM = $14800, + //* audio codecs */ AV_CODEC_ID_MP2 = $15000, AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 @@ -537,31 +525,30 @@ interface AV_CODEC_ID_RALF, AV_CODEC_ID_IAC, AV_CODEC_ID_ILBC, - AV_CODEC_ID_OPUS_DEPRECATED, + AV_CODEC_ID_OPUS, AV_CODEC_ID_COMFORT_NOISE, - AV_CODEC_ID_TAK_DEPRECATED, - AV_CODEC_ID_PAF_AUDIO_DEPRECATED, + AV_CODEC_ID_TAK, + AV_CODEC_ID_PAF_AUDIO, AV_CODEC_ID_ON2AVC, AV_CODEC_ID_DSS_SP, -(** see below. they need to be hard coded. - AV_CODEC_ID_FFWAVESYNTH = MKBETAG('F','F','W','S'), - AV_CODEC_ID_SONIC = MKBETAG('S','O','N','C'), - AV_CODEC_ID_SONIC_LS = MKBETAG('S','O','N','L'), - AV_CODEC_ID_PAF_AUDIO = MKBETAG('P','A','F','A'), - AV_CODEC_ID_OPUS = MKBETAG('O','P','U','S'), - AV_CODEC_ID_TAK = MKBETAG('t','B','a','K'), - AV_CODEC_ID_EVRC = MKBETAG('s','e','v','c'), - AV_CODEC_ID_SMV = MKBETAG('s','s','m','v'), - AV_CODEC_ID_DSD_LSBF = MKBETAG('D','S','D','L'), - AV_CODEC_ID_DSD_MSBF = MKBETAG('D','S','D','M'), - AV_CODEC_ID_DSD_LSBF_PLANAR = MKBETAG('D','S','D','1'), - AV_CODEC_ID_DSD_MSBF_PLANAR = MKBETAG('D','S','D','8'), - AV_CODEC_ID_4GV = MKBETAG('s','4','g','v'), - *) + + AV_CODEC_ID_FFWAVESYNTH = $15800, + AV_CODEC_ID_SONIC, + AV_CODEC_ID_SONIC_LS, + AV_CODEC_ID_EVRC, + AV_CODEC_ID_SMV, + AV_CODEC_ID_DSD_LSBF, + AV_CODEC_ID_DSD_MSBF, + AV_CODEC_ID_DSD_LSBF_PLANAR, + AV_CODEC_ID_DSD_MSBF_PLANAR, + AV_CODEC_ID_4GV, + AV_CODEC_ID_INTERPLAY_ACM, + AV_CODEC_ID_XMA1, + AV_CODEC_ID_XMA2, //* subtitle codecs */ -// AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. - AV_CODEC_ID_DVD_SUBTITLE = $17000, + AV_CODEC_ID_FIRST_SUBTITLE = $17000, ///< A dummy ID pointing at the start of subtitle codecs. + AV_CODEC_ID_DVD_SUBTITLE = $17000, AV_CODEC_ID_DVB_SUBTITLE, AV_CODEC_ID_TEXT, ///< raw UTF-8 text AV_CODEC_ID_XSUB, @@ -570,36 +557,34 @@ interface AV_CODEC_ID_HDMV_PGS_SUBTITLE, AV_CODEC_ID_DVB_TELETEXT, AV_CODEC_ID_SRT, -(** see below. they need to be hard coded. - AV_CODEC_ID_MICRODVD = MKBETAG('m','D','V','D'), - AV_CODEC_ID_EIA_608 = MKBETAG('c','6','0','8'), - AV_CODEC_ID_JACOSUB = MKBETAG('J','S','U','B'), - AV_CODEC_ID_SAMI = MKBETAG('S','A','M','I'), - AV_CODEC_ID_REALTEXT = MKBETAG('R','T','X','T'), - AV_CODEC_ID_STL = MKBETAG('S','p','T','L'), - AV_CODEC_ID_SUBVIEWER1 = MKBETAG('S','b','V','1'), - AV_CODEC_ID_SUBVIEWER = MKBETAG('S','u','b','V'), - AV_CODEC_ID_SUBRIP = MKBETAG('S','R','i','p'), - AV_CODEC_ID_WEBVTT = MKBETAG('W','V','T','T'), - AV_CODEC_ID_MPL2 = MKBETAG('M','P','L','2'), - AV_CODEC_ID_VPLAYER = MKBETAG('V','P','l','r'), - AV_CODEC_ID_PJS = MKBETAG('P','h','J','S'), - AV_CODEC_ID_ASS = MKBETAG('A','S','S',' '), ///< ASS as defined in Matroska - AV_CODEC_ID_HDMV_TEXT_SUBTITLE = MKBETAG('B','D','T','X'), - *) + AV_CODEC_ID_MICRODVD = $17800, + AV_CODEC_ID_EIA_608, + AV_CODEC_ID_JACOSUB, + AV_CODEC_ID_SAMI, + AV_CODEC_ID_REALTEXT, + AV_CODEC_ID_STL, + AV_CODEC_ID_SUBVIEWER1, + AV_CODEC_ID_SUBVIEWER, + AV_CODEC_ID_SUBRIP, + AV_CODEC_ID_WEBVTT, + AV_CODEC_ID_MPL2, + AV_CODEC_ID_VPLAYER, + AV_CODEC_ID_PJS, + AV_CODEC_ID_ASS, + AV_CODEC_ID_HDMV_TEXT_SUBTITLE, //* other specific kind of codecs (generally used for attachments) */ -// AV_CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs. + AV_CODEC_ID_FIRST_UNKNOWN = $18000, ///< A dummy ID pointing at the start of various fake codecs. AV_CODEC_ID_TTF = $18000, -(** see below. they need to be hard coded. - AV_CODEC_ID_BINTEXT = MKBETAG('B','T','X','T'), - AV_CODEC_ID_XBIN = MKBETAG('X','B','I','N'), - AV_CODEC_ID_IDF = MKBETAG( 0 ,'I','D','F'), - AV_CODEC_ID_OTF = MKBETAG( 0 ,'O','T','F'), - AV_CODEC_ID_SMPTE_KLV = MKBETAG('K','L','V','A'), - AV_CODEC_ID_DVD_NAV = MKBETAG('D','N','A','V'), - AV_CODEC_ID_TIMED_ID3 = MKBETAG('T','I','D','3'), - *) + + AV_CODEC_ID_BINTEXT = $18800, + AV_CODEC_ID_XBIN, + AV_CODEC_ID_IDF, + AV_CODEC_ID_OTF, + AV_CODEC_ID_SMPTE_KLV, + AV_CODEC_ID_DVD_NAV, + AV_CODEC_ID_TIMED_ID3, + AV_CODEC_ID_BIN_DATA, AV_CODEC_ID_PROBE = $19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it @@ -608,78 +593,7 @@ interface AV_CODEC_ID_MPEG4SYSTEMS = $20001, (**< _FAKE_ codec to indicate a MPEG-4 Systems * stream (only used by libavformat) *) AV_CODEC_ID_FFMETADATA = $21000, ///< Dummy codec for streams containing only metadata information. - -(** hardcoded codecs from above. pascal needs them to be ordered **) - AV_CODEC_ID_G2M = $0047324D, // MKBETAG( 0 ,'G','2','M'), - AV_CODEC_ID_IDF = $00494446, // MKBETAG( 0 ,'I','D','F'), - AV_CODEC_ID_OTF = $004F5446, // MKBETAG( 0 ,'O','T','F'), - AV_CODEC_ID_PCM_S24LE_PLANAR = $18505350, // MKBETAG(24,'P','S','P'), - AV_CODEC_ID_PCM_S32LE_PLANAR = $20505350, // MKBETAG(32,'P','S','P'), - AV_CODEC_ID_012V = $30313256, // MKBETAG('0','1','2','V'), - AV_CODEC_ID_EXR = $30455852, // MKBETAG('0','E','X','R'), - AV_CODEC_ID_ADPCM_G726LE= $36323747, // MKBETAG('6','2','7','G'), - AV_CODEC_ID_ADPCM_AFC = $41464320, // MKBETAG('A','F','C',' '), - AV_CODEC_ID_ASS = $41534B20, // MKBETAG('A','S','S',' '), ///< ASS as defined in Matroska - AV_CODEC_ID_AVRP = $41565250, // MKBETAG('A','V','R','P'), - AV_CODEC_ID_AVRN = $4156526E, // MKBETAG('A','V','R','n'), - AV_CODEC_ID_AVUI = $41565549, // MKBETAG('A','V','U','I'), - AV_CODEC_ID_AYUV = $41595556, // MKBETAG('A','Y','U','V'), - AV_CODEC_ID_HDMV_TEXT_SUBTITLE = $42445458, // MKBETAG('B','D','T','X'), - AV_CODEC_ID_BRENDER_PIX = $42504958, // MKBETAG('B','P','I','X'), - AV_CODEC_ID_BINTEXT = $42545854, // MKBETAG('B','T','X','T'), - AV_CODEC_ID_CPIA = $43504941, // MKBETAG('C','P','I','A'), - AV_CODEC_ID_DVD_NAV = $444E4156, // MKBETAG('D','N','A','V'), - AV_CODEC_ID_DSD_LSBF_PLANAR = $44534431, // MKBETAG('D','S','D','1'), - AV_CODEC_ID_DSD_MSBF_PLANAR = $44534438, // MKBETAG('D','S','D','8'), - AV_CODEC_ID_DSD_LSBF = $4453444C, // MKBETAG('D','S','D','L'), - AV_CODEC_ID_DSD_MSBF = $4453444D, // MKBETAG('D','S','D','M'), - AV_CODEC_ID_ADPCM_DTK = $44544B20, // MKBETAG('D','T','K',' '), - AV_CODEC_ID_ESCAPE130 = $45313330, // MKBETAG('E','1','3','0'), - AV_CODEC_ID_FFWAVESYNTH = $46465753, // MKBETAG('F','F','W','S'), - AV_CODEC_ID_JACOSUB = $4A535542, // MKBETAG('J','S','U','B'), - AV_CODEC_ID_SMPTE_KLV = $4B4C5641, // MKBETAG('K','L','V','A'), - AV_CODEC_ID_MPL2 = $4D504C32, // MKBETAG('M','P','L','2'), - AV_CODEC_ID_MVC1 = $4D564331, // MKBETAG('M','V','C','1'), - AV_CODEC_ID_MVC2 = $4D564332, // MKBETAG('M','V','C','2'), - AV_CODEC_ID_ADPCM_IMA_OKI=$4F4B4920, // MKBETAG('O','K','I',' '), - AV_CODEC_ID_OPUS = $4F505553, // MKBETAG('O','P','U','S'), - AV_CODEC_ID_PAF_AUDIO = $50414641, // MKBETAG('P','A','F','A'), - AV_CODEC_ID_PAF_VIDEO = $50414656, // MKBETAG('P','A','F','V'), - AV_CODEC_ID_PCM_S16BE_PLANAR = $50535010, // MKBETAG('P','S','P',16), - AV_CODEC_ID_PJS = $50684A53, // MKBETAG('P','h','J','S'), - AV_CODEC_ID_ADPCM_IMA_RAD = $52414420, // MKBETAG('R','A','D',' '), - AV_CODEC_ID_REALTEXT = $52545854, // MKBETAG('R','T','X','T'), - AV_CODEC_ID_SAMI = $53414D49, // MKBETAG('S','A','M','I'), - AV_CODEC_ID_SANM = $53414E4D, // MKBETAG('S','A','N','M'), - AV_CODEC_ID_SGIRLE = $53474952, // MKBETAG('S','G','I','R'), - AV_CODEC_ID_SMVJPEG = $534D564A, // MKBETAG('S','M','V','J'), - AV_CODEC_ID_SNOW = $534E4F57, // MKBETAG('S','N','O','W'), - AV_CODEC_ID_SONIC = $534F4E43, // MKBETAG('S','O','N','C'), - AV_CODEC_ID_SONIC_LS = $534F4E4C, // MKBETAG('S','O','N','L'), - AV_CODEC_ID_SUBRIP = $53526970, // MKBETAG('S','R','i','p'), - AV_CODEC_ID_SUBVIEWER1 = $53625631, // MKBETAG('S','b','V','1'), - AV_CODEC_ID_SUBVIEWER = $53756256, // MKBETAG('S','u','b','V'), - AV_CODEC_ID_TARGA_Y216 = $54323136, // MKBETAG('T','2','1','6'), - AV_CODEC_ID_ADPCM_THP_LE= $5448504C, // MKBETAG('T','H','P','L'), - AV_CODEC_ID_TIMED_ID3 = $54494433, // MKBETAG('T','I','D','3'), - AV_CODEC_ID_V308 = $56333038, // MKBETAG('V','3','0','8'), - AV_CODEC_ID_V408 = $56413038, // MKBETAG('V','4','0','8'), - AV_CODEC_ID_ADPCM_VIMA = $56494D41, // MKBETAG('V','I','M','A'), - AV_CODEC_ID_VIMA = $56494D41, // MKBETAG('V','I','M','A'), - AV_CODEC_ID_VPLAYER = $56506C72, // MKBETAG('V','P','l','r'), - AV_CODEC_ID_WEBP = $57454250, // MKBETAG('W','E','B','P'), - AV_CODEC_ID_WEBVTT = $57565454, // MKBETAG('W','V','T','T'), - AV_CODEC_ID_XBIN = $5842494E, // MKBETAG('X','B','I','N'), - AV_CODEC_ID_XFACE = $58464143, // MKBETAG('X','F','A','C'), - AV_CODEC_ID_Y41P = $59343150, // MKBETAG('Y','4','1','P'), - AV_CODEC_ID_YUV4 = $59555634, // MKBETAG('Y','U','V','4'), - AV_CODEC_ID_EIA_608 = $63363038, // MKBETAG('c','6','0','8'), - AV_CODEC_ID_MICRODVD = $6D445644, // MKBETAG('m','D','V','D'), - AV_CODEC_ID_4GV = $73346776, // MKBETAG('s','4','g','v'), - AV_CODEC_ID_EVRC = $73657663, // MKBETAG('s','e','v','c'), - AV_CODEC_ID_SMV = $73736D76, // MKBETAG('s','s','m','v'), - AV_CODEC_ID_TAK = $7442614B // MKBETAG('t','B','a','K'), - + AV_CODEC_ID_WRAPPED_AVFRAME = $21001 ///< Passthrough codec, AVFrames wrapped in AVPacket ); type @@ -700,6 +614,16 @@ interface * @see avcodec_descriptor_get() *) type + + (** + * AVProfile. + *) + PAVProfile = ^TAVProfile; + TAVProfile = record + profile: cint; + name: {const} PAnsiChar; ///< short name for the profile + end; {TAVProfile} + PAVCodecDescriptor = ^TAVCodecDescriptor; TAVCodecDescriptor = record id: TAVCodecID; @@ -725,6 +649,12 @@ TAVCodecDescriptor = record * The first item is always non-NULL and is the preferred MIME type. *) mime_types: PAnsiChar; + + (** + * If non-NULL, an array of profiles recognized for this codec. + * Terminated with FF_PROFILE_UNKNOWN. + *) + profiles: PAVProfile; end; const @@ -987,11 +917,11 @@ TRcOverride = record {16} * interlaced motion estimation *) AV_CODEC_FLAG_INTERLACED_ME = $20000000; // (1 << 29) + AV_CODEC_FLAG_CLOSED_GOP = $80000000; // (1U << 31) + (** * Allow non spec compliant speedup tricks. *) - AV_CODEC_FLAG_CLOSED_GOP = $80000000; // (1U << 31) - AV_CODEC_FLAG2_FAST = $0001; // (1 << 0) (** * Skip bitstream encoding. @@ -1370,18 +1300,6 @@ TRcOverride = record {16} FF_QSCALE_TYPE_VP56 = 3; {$ENDIF} -{$IFDEF FF_API_GET_BUFFER} - FF_BUFFER_TYPE_INTERNAL = 1; - FF_BUFFER_TYPE_USER = 2; ///< Direct rendering buffers (image is (de)allocated by user) - FF_BUFFER_TYPE_SHARED = 4; ///< buffer from somewhere else, don't dealloc image (data/base), all other tables are not shared - FF_BUFFER_TYPE_COPY = 8; ///< just a (modified) copy of some other buffer, don't dealloc anything. - - FF_BUFFER_HINTS_VALID = $01; // Buffer hints value is meaningful (if 0 ignore) - FF_BUFFER_HINTS_READABLE = $02; // Codec will read from buffer - FF_BUFFER_HINTS_PRESERVE = $04; // User must not alter buffer content - FF_BUFFER_HINTS_REUSABLE = $08; // Codec will reuse the buffer (update) -{$ENDIF} - (** * The decoder will keep a reference to the frame and may reuse it later. *) @@ -1396,9 +1314,11 @@ TRcOverride = record {16} FF_RC_STRATEGY_XVID = 1; {$ENDIF} +{$IFDEF FF_API_PRIVATE_OPT} FF_PRED_LEFT = 0; FF_PRED_PLANE = 1; FF_PRED_MEDIAN = 2; +{$ENDIF} FF_CMP_SAD = 0; FF_CMP_SSE = 1; @@ -1440,14 +1360,15 @@ TRcOverride = record {16} FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits FF_MB_DECISION_RD = 2; ///< rate distortion +{$IFDEF FF_API_CODER_TYPE} FF_CODER_TYPE_VLC = 0; FF_CODER_TYPE_AC = 1; FF_CODER_TYPE_RAW = 2; FF_CODER_TYPE_RLE = 3; {$IFDEF FF_API_UNUSED_MEMBERS} FF_CODER_TYPE_DEFLATE = 4; -{$ENDIF} - +{$ENDIF} {FF_API_UNUSED_MEMBERS} +{$ENDIF} {FF_API_CODER_TYPE} FF_BUG_AUTODETECT = 1; ///< autodetection {$IFDEF FF_API_OLD_MSMPEG4} FF_BUG_OLD_MSMPEG4 = 2; @@ -1655,6 +1576,46 @@ TRcOverride = record {16} FF_LEVEL_UNKNOWN = -99; type + + (** + * This structure describes the bitrate properties of an encoded bitstream. It + * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD + * parameters for H.264/HEVC. + *) + PAVCPBProperties = ^TAVCPBProperties; + TAVCPBProperties = record + (** + * Maximum bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + max_bitrate: cint; + (** + * Minimum bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + min_bitrate: cint; + (** + * Average bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + avg_bitrate: cint; + + (** + * The size of the buffer to which the ratecontrol is applied, in bits. + * Zero if unknown or unspecified. + *) + buffer_size: cint; + + (** + * The delay between the time the packet this structure is associated with + * is received and the time when it should be decoded, in periods of a 27MHz + * clock. + * + * UINT64_MAX when unknown or unspecified. + *) + vbv_delay: cuint64; + end; {TAVCPBProperties} + TAVPacketSideDataType = ( AV_PKT_DATA_PALETTE, AV_PKT_DATA_NEW_EXTRADATA, @@ -1700,7 +1661,7 @@ TRcOverride = record {16} (** * This side data should be associated with an audio stream and contains * ReplayGain information in form of the AVReplayGain struct. - *9 + *) AV_PKT_DATA_REPLAYGAIN, (** @@ -1736,6 +1697,19 @@ TRcOverride = record {16} *) AV_PKT_DATA_QUALITY_STATS, + (** + * This side data contains an integer value representing the stream index + * of a "fallback" track. A fallback track indicates an alternate + * track to use when the current track can not be decoded for some reason. + * e.g. no decoder available for codec. + *) + AV_PKT_DATA_FALLBACK_TRACK, + + (** + * This side data corresponds to the AVCPBProperties struct. + *) + AV_PKT_DATA_CPB_PROPERTIES, + (** * Recommmends skipping the specified number of samples * @code @@ -1814,22 +1788,29 @@ TAVPacketSideData = record * then passed to muxers. * * For video, it should typically contain one compressed frame. For audio it may - * contain several compressed frames. + * contain several compressed frames. Encoders are allowed to output empty + * packets, with no compressed data, containing only side data + * (e.g. to update some stream parameters at the end of encoding). * * AVPacket is one of the few structs in FFmpeg, whose size is a part of public * ABI. Thus it may be allocated on stack and no new fields can be added to it * without libavcodec and libavformat major bump. * - * The semantics of data ownership depends on the buf or destruct (deprecated) - * fields. If either is set, the packet data is dynamically allocated and is - * valid indefinitely until av_free_packet() is called (which in turn calls - * av_buffer_unref()/the destruct callback to free the data). If neither is set, - * the packet data is typically backed by some static buffer somewhere and is - * only valid for a limited time (e.g. until the next read call when demuxing). + * The semantics of data ownership depends on the buf field. + * If it is set, the packet data is dynamically allocated and is + * valid indefinitely until a call to av_packet_unref() reduces the + * reference count to 0. + * + * If the buf field is not set av_packet_ref() would make a copy instead + * of increasing the reference count. + * + * The side data is always allocated with av_malloc(), copied by + * av_packet_ref() and freed by av_packet_unref(). * - * The side data is always allocated with av_malloc() and is freed in - * av_free_packet(). + * @see av_packet_ref + * @see av_packet_unref *) + PPAVPacket= ^PAVPacket; PAVPacket = ^TAVPacket; TAVPacket = record (** @@ -1867,35 +1848,23 @@ TAVPacket = record *) side_data: PAVPacketSideData; side_data_elems: cint; + (* * Duration of this packet in AVStream->time_base units, 0 if unknown. * Equals next_pts - this_pts in presentation order. *) - duration: cint; -{$IFDEF FF_API_DESTRUCT_PACKET} - destruct: procedure (para1: PAVPacket); cdecl; - priv: pointer; -{$ENDIF} + duration: cint64; pos: cint64; // byte position in stream, -1 if unknown - + +{$IFDEF FF_API_CONVERGENCE_DURATION} (* - * Time difference in AVStream->time_base units from the pts of this - * packet to the point at which the output from the decoder has converged - * independent from the availability of previous frames. That is, the - * frames are virtually identical no matter if decoding started from - * the very first frame or from this keyframe. - * Is AV_NOPTS_VALUE if unknown. - * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY - * set. - * - * The purpose of this field is to allow seeking in streams that have no - * keyframes in the conventional sense. It corresponds to the - * recovery point SEI in H.264 and match_time_delta in NUT. It is also - * essential for some types of subtitle streams to ensure that all - * subtitles are correctly displayed after seeking. + * @deprecated Same as the duration field, but as int64_t. This was required + * for Matroska subtitles, whose duration values could overflow when the + * duration field was still an int. *) - convergence_duration: cint64; + convergence_duration: cint64; {deprecated} +{$ENDIF} end; {TAVPacket} const @@ -2490,7 +2459,7 @@ TAVCodecContext = record {720} * - decoding: Set by user, may be overwritten by libavcodec * if this info is available in the stream *) - bit_rate: cint; + bit_rate: cint64; (** * number of bits the bitstream is allowed to diverge from the reference. @@ -2711,7 +2680,10 @@ TAVCodecContext = record {720} rc_strategy: cint; {$ENDIF} - b_frame_strategy: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + b_frame_strategy: cint; {deprecated} +{$ENDIF} (** * qscale offset between IP and B-frames @@ -2728,12 +2700,10 @@ TAVCodecContext = record {720} *) has_b_frames: cint; - (** - * 0-> h263 quant 1-> mpeg quant - * - encoding: Set by user. - * - decoding: unused - *) - mpeg_quant: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + mpeg_quant: cint; {deprecated} +{$ENDIF} (** * qscale factor between P and I-frames @@ -2793,12 +2763,10 @@ TAVCodecContext = record {720} *) slice_count: cint; - (** - * prediction method (needed for huffyuv) - * - encoding: Set by user. - * - decoding: unused - *) - prediction_method: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + prediction_method: cint; {deprecated} +{$ENDIF} (** * slice offsets in the frame in bytes @@ -2856,12 +2824,10 @@ TAVCodecContext = record {720} *) last_predictor_count: cint; - (** - * prepass for motion estimation - * - encoding: Set by user. - * - decoding: unused - *) - pre_me: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + pre_me: cint; {deprecated} +{$ENDIF} (** * motion estimation prepass comparison function @@ -2959,20 +2925,13 @@ TAVCodecContext = record {720} *) inter_matrix: PWord; - (** - * scene change detection threshold - * 0 is default, larger means fewer detected scene changes. - * - encoding: Set by user. - * - decoding: unused - *) - scenechange_threshold: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + scenechange_threshold: cint; {deprecated} - (** - * noise reduction strength - * - encoding: Set by user. - * - decoding: unused - *) - noise_reduction: cint; + (** @deprecated use encoder private options instead *) + noise_reduction: cint; {deprecated} +{$ENDIF} {$IFDEF FF_API_MPV_OPT} (** @@ -3029,12 +2988,12 @@ TAVCodecContext = record {720} *) mb_lmax: cint; +{$IFDEF FF_API_PRIVATE_OPT} (** - * - * - encoding: Set by user. - * - decoding: unused + * @deprecated use encoder private options instead *) - me_penalty_compensation: cint; + me_penalty_compensation: cint; {deprecated} +{$ENDIF} (** * @@ -3043,12 +3002,10 @@ TAVCodecContext = record {720} *) bidir_refine: cint; - (** - * - * - encoding: Set by user. - * - decoding: unused - *) - brd_scale: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + brd_scale: cint; {deprecated} +{$ENDIF} (** * minimum GOP size @@ -3064,12 +3021,10 @@ TAVCodecContext = record {720} *) refs: cint; - (** - * chroma qp offset from luma - * - encoding: Set by user. - * - decoding: unused - *) - chromaoffset: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + chromaoffset: cint; {deprecated} +{$ENDIF} {$IFDEF FF_API_UNUSED_MEMBERS} (** @@ -3088,12 +3043,10 @@ TAVCodecContext = record {720} *) mv0_threshold: cint; - (** - * Adjust sensitivity of b_frame_strategy 1. - * - encoding: Set by user. - * - decoding: unused - *) - b_sensitivity: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + b_sensitivity: cint; {deprecated} +{$ENDIF} (** * Chromaticity coordinates of the source primaries. @@ -3192,16 +3145,6 @@ TAVCodecContext = record {720} *) cutoff: cint; -{$IFDEF FF_API_REQUEST_CHANNELS} - (** - * Decoder should decode to this many channels if it can (0 for default) - * - encoding: unused - * - decoding: Set by user. - * @deprecated Deprecated in favor of request_channel_layout. - *) - request_channels: cint; {deprecated} -{$IFEND} - (** * Audio channel layout. * - encoding: set by user. @@ -3231,97 +3174,6 @@ TAVCodecContext = record {720} *) request_sample_fmt: TAVSampleFormat; -{$IFDEF FF_API_GET_BUFFER} - (** - * Called at the beginning of each frame to get a buffer for it. - * - * The function will set AVFrame.data[], AVFrame.linesize[]. - * AVFrame.extended_data[] must also be set, but it should be the same as - * AVFrame.data[] except for planar audio with more channels than can fit - * in AVFrame.data[]. In that case, AVFrame.data[] shall still contain as - * many data pointers as it can hold. - * - * if CODEC_CAP_DR1 is not set then get_buffer() must call - * avcodec_default_get_buffer() instead of providing buffers allocated by - * some other means. - * - * AVFrame.data[] should be 32- or 16-byte-aligned unless the CPU doesn't - * need it. avcodec_default_get_buffer() aligns the output buffer properly, - * but if get_buffer() is overridden then alignment considerations should - * be taken into account. - * - * @see avcodec_default_get_buffer() - * - * Video: - * - * If pic.reference is set then the frame will be read later by libavcodec. - * avcodec_align_dimensions2() should be used to find the required width and - * height, as they normally need to be rounded up to the next multiple of 16. - * - * If frame multithreading is used and thread_safe_callbacks is set, - * it may be called from a different thread, but not from more than one at - * once. Does not need to be reentrant. - * - * @see release_buffer(), reget_buffer() - * @see avcodec_align_dimensions2() - * - * Audio: - * - * Decoders request a buffer of a particular size by setting - * AVFrame.nb_samples prior to calling get_buffer(). The decoder may, - * however, utilize only part of the buffer by setting AVFrame.nb_samples - * to a smaller value in the output frame. - * - * Decoders cannot use the buffer after returning from - * avcodec_decode_audio4(), so they will not call release_buffer(), as it - * is assumed to be released immediately upon return. In some rare cases, - * a decoder may need to call get_buffer() more than once in a single - * call to avcodec_decode_audio4(). In that case, when get_buffer() is - * called again after it has already been called once, the previously - * acquired buffer is assumed to be released at that time and may not be - * reused by the decoder. - * - * As a convenience, av_samples_get_buffer_size() and - * av_samples_fill_arrays() in libavutil may be used by custom get_buffer() - * functions to find the required data size and to fill data pointers and - * linesize. In AVFrame.linesize, only linesize[0] may be set for audio - * since all planes must be the same size. - * - * @see av_samples_get_buffer_size(), av_samples_fill_arrays() - * - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - * - * @deprecated use get_buffer2() - *) - get_buffer: function (c: PAVCodecContext; pic: PAVFrame): cint; cdecl; {deprecated;} - - (** - * Called to release buffers which were allocated with get_buffer. - * A released buffer can be reused in get_buffer(). - * pic.data[*] must be set to NULL. - * - encoding: unused - * - decoding: Set by libavcodec, user can override. - * - * @deprecated custom freeing callbacks should be set from get_buffer2() - *) - release_buffer: procedure (c: PAVCodecContext; pic: PAVFrame); cdecl; {deprecated;} - - (** - * Called at the beginning of a frame to get cr buffer for it. - * Buffer type (size, hints) must be the same. libavcodec won't check it. - * libavcodec will pass previous buffer in pic, function should return - * same buffer or new buffer with old frame "painted" into it. - * If pic.data[0] == NULL must behave like get_buffer(). - * if CODEC_CAP_DR1 is not set then reget_buffer() must call - * avcodec_default_reget_buffer() instead of providing buffers allocated by - * some other means. - * - encoding: unused - * - decoding: Set by libavcodec, user can override - *) - reget_buffer: function (c: PAVCodecContext; pic: PAVFrame): cint; cdecl; {deprecated;} -{$ENDIF} - (** * This callback is called at the beginning of each frame to get data * buffer(s) for it. There may be one contiguous buffer for all the data or @@ -3478,14 +3330,14 @@ TAVCodecContext = record {720} * - encoding: Set by user. * - decoding: Set by user, may be overwritten by libavcodec. *) - rc_max_rate: cint; + rc_max_rate: cint64; (** * minimum bitrate * - encoding: Set by user. * - decoding: unused *) - rc_min_rate: cint; + rc_min_rate: cint64; {$IFDEF FF_API_MPV_OPT} @@ -3519,19 +3371,17 @@ TAVCodecContext = record {720} *) rc_initial_buffer_occupancy: cint; +{$IFDEF FF_API_CODER_TYPE} (** - * coder type - * - encoding: Set by user. - * - decoding: unused + * @deprecated use encoder private options instead *) - coder_type: cint; + coder_type: cint; {deprecated} +{$ENDIF} - (** - * context model - * - encoding: Set by user. - * - decoding: unused - *) - context_model: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + context_model: cint; {deprecated} +{$ENDIF} {$IFDEF FF_API_MPV_OPT} (** @@ -3546,33 +3396,20 @@ TAVCodecContext = record {720} {attribute_deprecated} lmax: cint; {$ENDIF} - (** - * frame skip threshold - * - encoding: Set by user. - * - decoding: unused - *) - frame_skip_threshold: cint; - (** - * frame skip factor - * - encoding: Set by user. - * - decoding: unused - *) - frame_skip_factor: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + frame_skip_threshold: cint; {deprecated} - (** - * frame skip exponent - * - encoding: Set by user. - * - decoding: unused - *) - frame_skip_exp: cint; + (** @deprecated use encoder private options instead *) + frame_skip_factor: cint; {deprecated} - (** - * frame skip comparison function - * - encoding: Set by user. - * - decoding: unused - *) - frame_skip_cmp: cint; + (** @deprecated use encoder private options instead *) + frame_skip_exp: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + frame_skip_cmp: cint; {deprecated} +{$ENDIF} (** * trellis RD quantization @@ -3581,25 +3418,21 @@ TAVCodecContext = record {720} *) trellis: cint; - (** - * - encoding: Set by user. - * - decoding: unused - *) - min_prediction_order: cint; +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + min_prediction_order: cint; {deprecated} - (** - * - encoding: Set by user. - * - decoding: unused - *) - max_prediction_order: cint; + (** @deprecated use encoder private options instead *) + max_prediction_order: cint; {deprecated} + (** @deprecated use encoder private options instead *) + timecode_frame_start: cint64; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_RTP_CALLBACK} (** - * GOP timecode frame start number, in non drop frame format - * - encoding: Set by user, in non drop frame format - * - decoding: Set by libavcodec (timecode in the 25 bits format, -1 if unset) + * @deprecated unused *) - timecode_frame_start: cint64; - (* The RTP callback: This function is called *) (* every time the encoder has a packet to send *) (* Depends on the encoder if the data starts *) @@ -3607,31 +3440,32 @@ TAVCodecContext = record {720} (* mb_nb contains the number of macroblocks *) (* encoded in the RTP payload *) rtp_callback: procedure (avctx: PAVCodecContext; data: pointer; - size: cint; mb_nb: cint); cdecl; + size: cint; mb_nb: cint); cdecl; {deprecated} +{$ENDIF} - rtp_payload_size: cint; (* The size of the RTP payload: the coder will *) - (* do it's best to deliver a chunk with size *) - (* below rtp_payload_size, the chunk will start *) - (* with a start code on some codecs like H.263 *) - (* This doesn't take account of any particular *) - (* headers inside the transmited RTP payload *) +{$IFDEF FF_API_PRIVATE_OPT} + rtp_payload_size: cint; {deprecated} (* The size of the RTP payload: the coder will *) + (* do it's best to deliver a chunk with size *) + (* below rtp_payload_size, the chunk will start *) + (* with a start code on some codecs like H.263 *) + (* This doesn't take account of any particular *) + (* headers inside the transmited RTP payload *) +{$ENDIF} +{$IFDEF FF_API_STAT_BITS} (* statistics, used for 2-pass encoding *) - mv_bits: cint; - header_bits: cint; - i_tex_bits: cint; - p_tex_bits: cint; - i_count: cint; - p_count: cint; - skip_count: cint; - misc_bits: cint; - - (** - * number of bits used for the previously encoded frame - * - encoding: Set by libavcodec. - * - decoding: unused - *) - frame_bits: cint; + mv_bits: cint; {deprecated} + header_bits: cint; {deprecated} + i_tex_bits: cint; {deprecated} + p_tex_bits: cint; {deprecated} + i_count: cint; {deprecated} + p_count: cint; {deprecated} + skip_count: cint; {deprecated} + misc_bits: cint; {deprecated} + + (** @deprecated this field is unused *) + frame_bits: cint; {deprecated} +{$ENDIF} (** * pass1 encoding statistics output buffer @@ -3849,15 +3683,8 @@ TAVCodecContext = record {720} * - encoding: Set by libavcodec, user can override. * - decoding: Set by libavcodec, user can override. *) - execute2: function (c: PAVCodecContext; func: TExecute2Func; arg2: Pointer; ret: Pcint; count: cint): cint; cdecl; + execute2: function (c: PAVCodecContext; func: TExecute2Func; arg2: Pointer; ret: Pcint; count: cint): cint; cdecl; -{$IFDEF FF_API_THREAD_OPAQUE} - (** - * @deprecated this field should not be used from outside of lavc - *) - thread_opaque: pointer; -{$ENDIF} - (** * noise vs. sse weight for the nsse comparison function * - encoding: Set by user. @@ -3919,35 +3746,31 @@ TAVCodecContext = record {720} error_rate: cint; {$ENDIF} -{$IFDEF FF_API_CODEC_PKT} - (** - * @deprecated this field is not supposed to be accessed from outside lavc - *) - pkt: PAVPacket; -{$ENDIF} - +{$IFDEF FF_API_VBV_DELAY} (** * VBV delay coded in the last frame (in periods of a 27 MHz clock). * Used for compliant TS muxing. * - encoding: Set by libavcodec. * - decoding: unused. + * @deprecated this value is now exported as a part of + * AV_PKT_DATA_CPB_PROPERTIES packet side data *) - vbv_delay: cuint64; + vbv_delay: cuint64; {deprecated} +{$ENDIF} +{$IFDEF FF_API_SIDEDATA_ONLY_PKT} (** - * Encoding only. Allow encoders to output packets that do not contain any - * encoded data, only side data. + * Encoding only and set by default. Allow encoders to output packets + * that do not contain any encoded data, only side data. * * Some encoders need to output such packets, e.g. to update some stream * parameters at the end of encoding. * - * All callers are strongly recommended to set this option to 1 and update - * their code to deal with such packets, since this behaviour may become - * always enabled in the future (then this option will be deprecated and - * later removed). To avoid ABI issues when this happens, the callers should - * use AVOptions to set this field. + * @deprecated this field disables the default behaviour and + * it is kept only for compatibility. *) - side_data_only_packets: cint; + side_data_only_packets: cint; {deprecated} +{$ENDIF} (** * Audio only. The number of "priming" samples (padding) inserted by the @@ -4100,17 +3923,17 @@ TAVCodecContext = record {720} * - decoding: set by libavcodec *) properties: cuint; + + (** + * Additional data associated with the entire coded stream. + * + * - decoding: unused + * - encoding: may be set by libavcodec after avcodec_open2(). + *) + coded_side_data: PAVPacketSideData; + nb_coded_side_data: cint; end; {TAVCodecContext} - (** - * AVProfile. - *) - PAVProfile = ^TAVProfile; - TAVProfile = record - profile: cint; - name: {const} PAnsiChar; ///< short name for the profile - end; {TAVProfile} - TAVSubtitleType = ( SUBTITLE_NONE, @@ -4129,6 +3952,7 @@ TAVProfile = record SUBTITLE_ASS ); {TAVSubtitleType} +{$IFDEF FF_API_AVPICTURE} (** * @defgroup lavc_picture AVPicture * @@ -4137,14 +3961,18 @@ TAVProfile = record *) (** - * four components are given, that's all. - * the last component is alpha - *) + * Picture data structure. + * + * Up to four components can be stored into it, the last component is + * alpha. + * @deprecated use AVFrame or imgutils functions instead + *) PAVPicture = ^TAVPicture; TAVPicture = record - data: array [0..AV_NUM_DATA_POINTERS - 1] of PByteArray; - linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; ///< number of bytes per line + data: array [0..AV_NUM_DATA_POINTERS - 1] of PByteArray; {deprecated} + linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; {deprecated} ///< number of bytes per line end; {TAVPicture} +{$ENDIF} PPAVSubtitleRect = ^PAVSubtitleRect; PAVSubtitleRect = ^TAVSubtitleRect; @@ -4155,11 +3983,19 @@ TAVSubtitleRect = record h: cint; ///< height of pict, undefined when pict is not set nb_colors: cint; ///< number of colors in pict, undefined when pict is not set +{$IFDEF FF_API_AVPICTURE} + (** + * @deprecated unused + *) + pict: TAVPicture; {deprecated} +{$ENDIF} (** * data+linesize for the bitmap of this subtitle. - * can be set for text/ass as well once they are rendered + * Can be set for text/ass as well once they are rendered. *) - pict: TAVPicture; + data: Array [0..4] of PByte; + linesize: Array [0..4] of cint; + type_: TAVSubtitleType; text: PAnsiChar; ///< 0 terminated plain UTF-8 text @@ -4620,24 +4456,6 @@ function avcodec_get_subtitle_rect_class(): {const} PAVClass; function avcodec_copy_context(dest: PAVCodecContext; src: {const} PAVCodecContext): cint; cdecl; external av__codec; - - -(** - * Free the frame and any dynamically allocated objects in it, - * e.g. extended_data. - * - * @param frame frame to be freed. The pointer will be set to NULL. - * - * @warning this function does NOT free the data buffers themselves - * (it does not know how, since they might have been allocated with - * a custom get_buffer()). - * - * @deprecated use av_frame_free() - *) -procedure avcodec_free_frame(frame: PPAVFrame); - cdecl; external av__codec; - - (** * Initialize the AVCodecContext to use the given AVCodec. Prior to using this * function the context has to be allocated with avcodec_alloc_context3(). @@ -4709,14 +4527,42 @@ procedure avsubtitle_free(sub: PAVSubtitle); * @{ *) -{$IFDEF FF_API_DESTRUCT_PACKET} -(* - * Default packet destructor. - * @deprecated use the AVBuffer API instead +(** + * Allocate an AVPacket and set its fields to default values. The resulting + * struct must be freed using av_packet_free(). + * + * @return An AVPacket filled with default values or NULL on failure. + * + * @note this only allocates the AVPacket itself, not the data buffers. Those + * must be allocated through other means such as av_new_packet. + * + * @see av_new_packet *) -procedure av_destruct_packet(pkt: PAVPacket); - cdecl; external av__codec; deprecated; -{$ENDIF} +function av_packet_alloc(): PAVPacket; + cdecl; external av__codec; + +(** + * Create a new packet that references the same data as src. + * + * This is a shortcut for av_packet_alloc()+av_packet_ref(). + * + * @return newly created AVPacket on success, NULL on error. + * + * @see av_packet_alloc + * @see av_packet_ref + *) +function av_packet_clone(src: PAVPacket): PAVPacket; + cdecl; external av__codec; + +(** + * Free the packet, if the packet is reference counted, it will be + * unreferenced first. + * + * @param packet packet to be freed. The pointer will be set to NULL. + * @note passing NULL is a no-op. + *) +procedure av_packet_free(pkt: PPAVPacket); + cdecl; external av__codec; (* * Initialize optional fields of a packet with default values. @@ -4774,12 +4620,16 @@ function av_grow_packet(pkt: PAVPacket; grow_by: cint): cint; function av_packet_from_data(pkt: PAVPacket; data: PByte; size: cint): cint; cdecl; external av__codec; +{$IFDEF FF_API_AVPACKET_OLD_API} (* * @warning This is a hack - the packet memory allocation stuff is broken. The * packet is allocated if it was not really allocated. + * + * @deprecated Use av_packet_ref *) function av_dup_packet(pkt: PAVPacket): cint; - cdecl; external av__codec; + cdecl; external av__codec; deprecated; +{$ENDIF} (** * Copy packet, including contents @@ -4800,10 +4650,12 @@ function av_copy_packet_side_data(dst: PAVPacket; src: {const} PAVPacket): cint; (* * Free a packet. * + * @deprecated Use av_packet_unref + * * @param pkt packet to free *) procedure av_free_packet(pkt: PAVPacket); - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** * Allocate new information of a packet. @@ -4817,6 +4669,23 @@ function av_packet_new_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; size: cint): PByte; cdecl; external av__codec; +(** + * Wrap an existing array as a packet side data. + * + * @param pkt packet + * @param type side information type + * @param data the side data array. It must be allocated with the av_malloc() + * family of functions. The ownership of the data is transferred to + * pkt. + * @param size side information size + * @return a non-negative number on success, a negative AVERROR code on + * failure. On failure, the packet is unchanged and the data remains + * owned by the caller. + *) +function av_packet_add_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + data: Pcuint8; size: size_t): cint; + cdecl; external av__codec; + (** * Shrink the already allocated side data buffer * @@ -4977,15 +4846,6 @@ function avcodec_find_decoder(id: TAVCodecID): PAVCodec; function avcodec_find_decoder_by_name(name: PAnsiChar): PAVCodec; cdecl; external av__codec; -{$IFDEF FF_API_GET_BUFFER} -function avcodec_default_get_buffer (s: PAVCodecContext; pic: PAVFrame): cint; - cdecl; external av__codec; deprecated; -procedure avcodec_default_release_buffer (s: PAVCodecContext; pic: PAVFrame); - cdecl; external av__codec; deprecated; -function avcodec_default_reget_buffer (s: PAVCodecContext; pic: PAVFrame): cint; - cdecl; external av__codec; deprecated; -{$ENDIF} - (** * The default callback for AVCodecContext.get_buffer2(). It is made public so * it can be called by custom get_buffer2() implementations for decoders without @@ -5030,67 +4890,6 @@ procedure avcodec_align_dimensions2(s: PAVCodecContext; width: PCint; height: PC linesize_align: PAVNDPArray); cdecl; external av__codec; -{$IFDEF FF_API_OLD_DECODE_AUDIO} -(** - * Wrapper function which calls avcodec_decode_audio4. - * - * @deprecated Use avcodec_decode_audio4 instead. - * - * Decode the audio frame of size avpkt->size from avpkt->data into samples. - * Some decoders may support multiple frames in a single AVPacket, such - * decoders would then just decode the first frame. In this case, - * avcodec_decode_audio3 has to be called again with an AVPacket that contains - * the remaining data in order to decode the second frame etc. - * If no frame - * could be outputted, frame_size_ptr is zero. Otherwise, it is the - * decompressed frame size in bytes. - * - * @warning You must set frame_size_ptr to the allocated size of the - * output buffer before calling avcodec_decode_audio3(). - * - * @warning The input buffer must be FF_INPUT_BUFFER_PADDING_SIZE larger than - * the actual read bytes because some optimized bitstream readers read 32 or 64 - * bits at once and could read over the end. - * - * @warning The end of the input buffer avpkt->data should be set to 0 to ensure that - * no overreading happens for damaged MPEG streams. - * - * @warning You must not provide a custom get_buffer() when using - * avcodec_decode_audio3(). Doing so will override it with - * avcodec_default_get_buffer. Use avcodec_decode_audio4() instead, - * which does allow the application to provide a custom get_buffer(). - * - * @note You might have to align the input buffer avpkt->data and output buffer - * samples. The alignment requirements depend on the CPU: On some CPUs it isn't - * necessary at all, on others it won't work at all if not aligned and on others - * * it will work but it will have an impact on performance. - * - * In practice, avpkt->data should have 4 byte alignment at minimum and - * samples should be 16 byte aligned unless the CPU doesn't need it - * (AltiVec and SSE do). - * - * @note Codecs which have the CODEC_CAP_DELAY capability set have a delay - * between input and output, these need to be fed with avpkt->data=NULL, - * avpkt->size=0 at the end to return the remaining frames. - * - * @param avctx the codec context - * @param[out] samples the output buffer, sample type in avctx->sample_fmt - * If the sample format is planar, each channel plane will - * be the same size, with no padding between channels. - * @param[in,out] frame_size_ptr the output buffer size in bytes - * @param[in] avpkt The input AVPacket containing the input buffer. - * You can create such packet with av_init_packet() and by then setting - * data and size, some decoders might in addition need other fields. - * All decoders are designed to use the least fields possible though. - * @return On error a negative value is returned, otherwise the number of bytes - * used or zero if no frame data was decompressed (used) from the input AVPacket. - *) -function avcodec_decode_audio3(avctx: PAVCodecContext; samples: PSmallint; - var frame_size_ptr: cint; - avpkt: PAVPacket): cint; - cdecl; external av__codec; deprecated; -{$IFEND} - (** * Decode the audio frame of size avpkt->size from avpkt->data into frame. * @@ -5296,23 +5095,12 @@ TAVCodecParserContext = record *) key_frame: cint; +{$IFDEF FF_API_CONVERGENCE_DURATION} (** - * Time difference in stream time base units from the pts of this - * packet to the point at which the output from the decoder has converged - * independent from the availability of previous frames. That is, the - * frames are virtually identical no matter if decoding started from - * the very first frame or from this keyframe. - * Is AV_NOPTS_VALUE if unknown. - * This field has no meaning if the packet does not have AV_PKT_FLAG_KEY - * set. - * - * The purpose of this field is to allow seeking in streams that have no - * keyframes in the conventional sense. It corresponds to the - * recovery point SEI in H.264 and match_time_delta in NUT. It is also - * essential for some types of subtitle streams to ensure that all - * subtitles are correctly displayed after seeking. + * @deprecated unused *) - convergence_duration: cint64; + convergence_duration: cint64; {deprecated} +{$ENDIF} // Timestamp generation support: (** @@ -5528,36 +5316,6 @@ function avcodec_find_encoder(id: TAVCodecID): PAVCodec; function avcodec_find_encoder_by_name(name: PAnsiChar): PAVCodec; cdecl; external av__codec; -{$IFDEF FF_API_OLD_ENCODE_AUDIO} -(** - * Encode an audio frame from samples into buf. - * - * @deprecated Use avcodec_encode_audio2 instead. - * - * @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. - * However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user - * will know how much space is needed because it depends on the value passed - * in buf_size as described below. In that case a lower value can be used. - * - * @param avctx the codec context - * @param[out] buf the output buffer - * @param[in] buf_size the output buffer size - * @param[in] samples the input buffer containing the samples - * The number of samples read from this buffer is frame_size*channels, - * both of which are defined in avctx. - * For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of - * samples read from samples is equal to: - * buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id)) - * This also implies that av_get_bits_per_sample() must not return 0 for these - * codecs. - * @return On error a negative value is returned, on success zero or the number - * of bytes used to encode the data read from the input buffer. - *) -function avcodec_encode_audio(avctx: PAVCodecContext; buf: PByte; - buf_size: cint; samples: {const} PSmallint): cint; - cdecl; external av__codec; deprecated; -{$IFEND} - (** * Encode a frame of audio. * @@ -5579,8 +5337,7 @@ function avcodec_encode_audio(avctx: PAVCodecContext; buf: PByte; * of the output packet. * * If this function fails or produces no output, avpkt will be - * freed using av_free_packet() (i.e. avpkt->destruct will be - * called to free the user supplied buffer). + * freed using av_packet_unref(). * @param[in] frame AVFrame containing the raw audio data to be encoded. * May be NULL when flushing an encoder that has the * AV_CODEC_CAP_DELAY capability set. @@ -5601,26 +5358,6 @@ function avcodec_encode_audio2(avctx: PAVCodecContext; avpkt: PAVPacket; frame: {const} PAVFrame; got_packet_ptr: Pcint): cint; cdecl; external av__codec; -{$IFDEF FF_API_OLD_ENCODE_AUDIO} -(** - * @deprecated use avcodec_encode_video2() instead. - * - * Encode a video frame from pict into buf. - * The input picture should be - * stored using a specific format, namely avctx.pix_fmt. - * - * @param avctx the codec context - * @param[out] buf the output buffer for the bitstream of encoded frame - * @param[in] buf_size the size of the output buffer in bytes - * @param[in] pict the input picture to encode - * @return On error a negative value is returned, on success zero or the number - * of bytes used from the output buffer. - *) -function avcodec_encode_video(avctx: PAVCodecContext; buf: PByte; - buf_size: cint; pict: {const} PAVFrame): cint; - cdecl; external av__codec; deprecated; -{$IFEND} - (** * Encode a frame of video. * @@ -5642,8 +5379,7 @@ function avcodec_encode_video(avctx: PAVCodecContext; buf: PByte; * caller, he is responsible for freeing it. * * If this function fails or produces no output, avpkt will be - * freed using av_free_packet() (i.e. avpkt->destruct will be - * called to free the user supplied buffer). + * freed using av_packet_unref(). * @param[in] frame AVFrame containing the raw video data to be encoded. * May be NULL when flushing an encoder that has the * AV_CODEC_CAP_DELAY capability set. @@ -5766,102 +5502,73 @@ procedure av_resample_close (c: PAVResampleContext); *) {$ENDIF} +{$IFDEF FF_API_AVPICTURE} (** * @addtogroup lavc_picture * @{ *) (** - * Allocate memory for a picture. Call avpicture_free to free it. - * - * @see avpicture_fill() - * - * @param picture the picture to be filled in. - * @param pix_fmt the format of the picture. - * @param width the width of the picture. - * @param height the height of the picture. - * @return Zero if successful, a negative value if not. - *) + * @deprecated unused + *) function avpicture_alloc (picture: PAVPicture; pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** - * Free a picture previously allocated by avpicture_alloc(). - * - * @param picture the AVPicture to be freed - *) + * @deprecated unused + *) procedure avpicture_free (picture: PAVPicture); - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** - * Fill in the AVPicture fields, always assume a linesize alignment of - * 1. - * - * @see av_image_fill_arrays() - *) + * @deprecated use av_image_fill_arrays() instead. + *) function avpicture_fill (picture: PAVPicture; ptr: pcuint8; pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** - * Copy pixel data from an AVPicture into a buffer, always assume a - * linesize alignment of 1. - * - * @see av_image_copy_to_buffer() - *) + * @deprecated use av_image_copy_to_buffer() instead. + *) function avpicture_layout (src: {const} PAVPicture; pix_fmt: TAVPixelFormat; width: cint; height: cint; dest: PByteArray; dest_size: cint): cint; - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** - * Calculate the size in bytes that a picture of the given width and height - * would occupy if stored in the given picture format. - * Always assume a linesize alignment of 1. - * - * @see av_image_get_buffer_size(). - *) + * @deprecated use av_image_get_buffer_size() instead. + *) function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; - cdecl; external av__codec; - -{$IFDEF FF_API_DEINTERLACE} -(** - * deinterlace - if not supported return -1 - * - * @deprecated - use yadif (in libavfilter) instead - *) -function avpicture_deinterlace (dst: PAVPicture; src: {const} PAVPicture; - pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; cdecl; external av__codec; deprecated; -{$ENDIF} (** - * Copy image src to dst. Wraps av_image_copy(). - *) + * @deprecated av_image_copy() instead. + *) procedure av_picture_copy(dst: PAVPicture; src: {const} PAVPicture; pix_fmt: TAVPixelFormat; width: cint; height: cint); - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** - * Crop image top and left side. - *) + * @deprecated unused + *) function av_picture_crop(dst: PAVPicture; src: {const} PAVPicture; pix_fmt: TAVPixelFormat; top_band: cint; left_band: cint): cint; - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** - * Pad image. - *) + * @deprecated unused + *) function av_picture_pad(dst: PAVPicture; src: {const} PAVPicture; height: cint; width: cint; pix_fmt: TAVPixelFormat; padtop: cint; padbottom: cint; padleft: cint; padright: cint; color: PCint): cint; - cdecl; external av__codec; + cdecl; external av__codec; deprecated; (** * @} *) +{$ENDIF} (** * @defgroup lavc_misc Utility functions @@ -5991,6 +5698,20 @@ procedure avcodec_string(buf: PAnsiChar; buf_size: cint; enc: PAVCodecContext; e function av_get_profile_name(codec: {const} PAVCodec; profile: cint): {const} PAnsiChar; cdecl; external av__codec; +(** + * Return a name for the specified profile, if available. + * + * @param codec_id the ID of the codec to which the requested profile belongs + * @param profile the profile value for which a name is requested + * @return A name for the profile if found, NULL otherwise. + * + * @note unlike av_get_profile_name(), which searches a list of profiles + * supported by a specific decoder or encoder implementation, this + * function searches the list of profiles from the AVCodecDescriptor + *) +function avcodec_profile_name(codec_id: TAVCodecID; profile: cint): {const} PChar; + cdecl; external av__codec; + function avcodec_default_execute(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint; size: cint): cint; cdecl; external av__codec; @@ -6081,6 +5802,11 @@ TAVBitStreamFilterContext = record filter: PAVBitStreamFilter; parser: PAVCodecParserContext; next: PAVBitStreamFilterContext; + (** + * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). + * Not for access by library users. + *) + args: PChar; end; TAVBitStreamFilter = record @@ -6339,6 +6065,18 @@ function avcodec_descriptor_next(prev: {const} PAVCodecDescriptor): PAVCodecDesc function avcodec_descriptor_get_by_name(name: {const} PAnsiChar): PAVCodecDescriptor; cdecl; external av__codec; +(** + * Allocate a CPB properties structure and initialize its fields to default + * values. + * + * @param size if non-NULL, the size of the allocated struct will be written + * here. This is useful for embedding it in side data. + * + * @return the newly allocated struct or NULL on failure + *) +function av_cpb_properties_alloc(size: Psize_t): PAVCPBProperties; + cdecl; external av__codec; + (** * @} *) diff --git a/src/lib/ffmpeg-3.0/avformat.pas b/src/lib/ffmpeg-3.0/avformat.pas index 97ad21ae..2851d0f8 100644 --- a/src/lib/ffmpeg-3.0/avformat.pas +++ b/src/lib/ffmpeg-3.0/avformat.pas @@ -71,7 +71,7 @@ interface (* Min. supported version by this header *) LIBAVFORMAT_MIN_VERSION_MAJOR = 57; - LIBAVFORMAT_MIN_VERSION_MINOR = 1; + LIBAVFORMAT_MIN_VERSION_MINOR = 25; LIBAVFORMAT_MIN_VERSION_RELEASE = 100; LIBAVFORMAT_MIN_VERSION = (LIBAVFORMAT_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVFORMAT_MIN_VERSION_MINOR * VERSION_MINOR) + @@ -144,6 +144,18 @@ interface * if its AVClass is non-NULL, and the protocols layer. See the discussion on * nesting in @ref avoptions documentation to learn how to access those. * + * @section urls + * URL strings in libavformat are made of a scheme/protocol, a ':', and a + * scheme specific string. URLs without a scheme and ':' used for local files + * are supported but deprecated. "file:" should be used for local files. + * + * It is important that the scheme string is not taken from untrusted + * sources without checks. + * + * Note that some schemes/protocols are quite powerful, allowing access to + * both local and remote files, parts of them, concatenations of them, local + * audio and video devices and so on. + * * @defgroup lavf_decoding Demuxing * @ * Demuxers read a media file and split it into chunks of data (@em packets). A @@ -154,10 +166,10 @@ interface * cleanup. * * @section lavf_decoding_open Opening a media file - * The minimum information required to open a file is its URL or filename, which + * The minimum information required to open a file is its URL, which * is passed to avformat_open_input(), as in the following code: * @code - * const char *url = "in.mp3"; + * const char *url = "file:in.mp3"; * AVFormatContext *s = NULL; * int ret = avformat_open_input(&s, url, NULL, NULL); * if (ret < 0) @@ -231,7 +243,7 @@ interface * until the next av_read_frame() call or closing the file. If the caller * requires a longer lifetime, av_dup_packet() will make an av_malloc()ed copy * of it. - * In both cases, the packet must be freed with av_free_packet() when it is no + * In both cases, the packet must be freed with av_packet_unref() when it is no * longer needed. * * @section lavf_decoding_seek Seeking @@ -521,8 +533,10 @@ TAVProbeData = record AVFMT_NOFILE = $0001; AVFMT_NEEDNUMBER = $0002; (**< Needs '%d' in filename. *) AVFMT_SHOW_IDS = $0008; (**< Show format stream IDs numbers. *) +{$IFDEF FF_API_LAVF_FMT_RAWPICTURE} AVFMT_RAWPICTURE = $0020; (**< Format wants AVPicture structure for - raw picture data. *) + raw picture data. @deprecated Not used anymore *) +{$ENDIF} AVFMT_GLOBALHEADER = $0040; (**< Format wants global header. *) AVFMT_NOTIMESTAMPS = $0080; (**< Format does not need / have any timestamps. *) AVFMT_GENERIC_INDEX = $0100; (**< Use generic index building code. *) @@ -534,12 +548,7 @@ TAVProbeData = record AVFMT_NOGENSEARCH = $4000; (**< Format does not allow to fall back to generic search *) AVFMT_NO_BYTE_SEEK = $8000; (**< Format does not allow seeking by bytes *) AVFMT_ALLOW_FLUSH = $10000;(**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. *) -{$IF LIBAVFORMAT_VERSION_MAJOR <= 54} - AVFMT_TS_NONSTRICT = $8020000; //we try to be compatible to the ABIs of ffmpeg and major forks -{$ELSE} - AVFMT_TS_NONSTRICT = $20000; -{$ENDIF} - (**< Format does not require strictly + AVFMT_TS_NONSTRICT = $20000;(**< Format does not require strictly increasing timestamps, but they must still be monotonic *) AVFMT_TS_NEGATIVE = $40000; (**< Format allows muxing negative @@ -586,7 +595,7 @@ TAVProbeData = record // used by AVStream AVSTREAM_EVENT_FLAG_METADATA_UPDATED = $0001; ///< The call resulted in updated metadata. - MAX_STD_TIMEBASES = (60*12+6); + MAX_STD_TIMEBASES = (30*12+30+3+6); MAX_REORDER_DELAY = 16; // used by TAVProgram @@ -724,7 +733,7 @@ TAVOutputFormat = record video_codec: TAVCodecID; (**< default video codec *) subtitle_codec: TAVCodecID; (**< default subtitle codec *) (** - * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE, + * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, * AVFMT_TS_NONSTRICT @@ -802,19 +811,45 @@ TAVOutputFormat = record *) get_device_list: function(s: PAVFormatContext; device_list: PAVDeviceInfoList): cint; cdecl; - (** + (** * Initialize device capabilities submodule. * @see avdevice_capabilities_create() for more details. *) create_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; - (** + (** * Free device capabilities submodule. * @see avdevice_capabilities_free() for more details. *) free_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; data_codec: TAVCodecID; (**< default data codec *) + + (** + * Initialize format. May allocate data here, and set any AVFormatContext or + * AVStream parameters that need to be set before packets are sent. + * This method must not write output. + * + * Any allocations made here must be freed in deinit(). + *) + init: function(s: PAVFormatContext): cint; cdecl; + + (** + * Deinitialize format. If present, this is called whenever the muxer is being + * destroyed, regardless of whether or not the header has been written. + * + * If a trailer is being written, this is called after write_trailer(). + * + * This is called if init() fails as well. + *) + deinit: procedure(s: PAVFormatContext); + + (** + * Set up any necessary bitstream filtering and extract any extra data needed + * for the global header. + * Return 0 if more packets from this stream must be checked; 1 if not. + *) + check_bitstream: function(s: PAVFormatContext; pkt: {const} PAVPacket): cint; cdecl; end; (** * @} @@ -1351,6 +1386,12 @@ TAVStream = record display_aspect_ratio: TAVRational; priv_pts: PFFFrac; + + (** + * An opaque field for libavformat internal usage. + * Must not be accessed in any way by callers. + *) + internal: pointer; end; (** TAVStream **) (** @@ -1530,7 +1571,7 @@ TAVFormatContext = record * available. Never set it directly if the file_size and the * duration are known as ffmpeg can compute it automatically. *) - bit_rate: cint; + bit_rate: cint64; packet_size: cuint; max_delay: cint; @@ -1541,17 +1582,20 @@ TAVFormatContext = record *) flags: cint; -{$IFDEF FF_API_PROBESIZE_32} (** - * @deprecated deprecated in favor of probesize2 + * Maximum size of the data read from input for determining + * the input container format. + * Demuxing only, set by the caller before avformat_open_input(). *) - probesize: cuint; + probesize: cint64; (** - * @deprecated deprecated in favor of max_analyze_duration2 + * Maximum duration (in AV_TIME_BASE units) of the data read + * from input in avformat_find_stream_info(). + * Demuxing only, set by the caller before avformat_find_stream_info(). + * Can be set to 0 to let avformat choose using a heuristic. *) - max_analyze_duration: cint; {attribute_deprecated} -{$ENDIF} + max_analyze_duration: cint64; key: pbyte; keylen: cint; @@ -1867,7 +1911,6 @@ TAVFormatContext = record (** * User data. * This is a place for some private data of the user. - * Mostly usable with control_message_cb or any future callbacks in device's context. *) opaque: pointer; @@ -1882,32 +1925,6 @@ TAVFormatContext = record *) output_ts_offset: cint64; - (** - * Maximum duration (in AV_TIME_BASE units) of the data read - * from input in avformat_find_stream_info(). - * Demuxing only, set by the caller before avformat_find_stream_info() - * via AVOptions (NO direct access). - * Can be set to 0 to let avformat choose using a heuristic. - *) -{$IFDEF FF_API_PROBESIZE_32} - max_analyze_duration2: cint64; -{$ELSE} - max_analyze_duration: cint64; -{$ENDIF} - - (** - * Maximum size of the data read from input for determining - * the input container format. - * Demuxing only, set by the caller before avformat_open_input() - * via AVOptions (NO direct access). - *) -{$IFDEF FF_API_PROBESIZE_32} - probesize2: cint64; -{$ELSE} - probesize: cint64; -{$ENDIF} - - (** * dump format separator. * can be ", " or "\n " or anything else @@ -1923,7 +1940,7 @@ TAVFormatContext = record * Demuxing: Set by user. *) data_codec_id: TAVCodecID; - +{$IFDEF FF_API_OLD_OPEN_CALLBACKS} (** * Called to open further IO contexts when needed for demuxing. * @@ -1938,8 +1955,46 @@ TAVFormatContext = record * @See av_format_set_open_cb() * * Demuxing: Set by user. + * + * @deprecated Use io_open and io_close. + *) + open_cb: function(s: PAVFormatContext; p: PPAVIOContext; url: {const} PAnsiChar; flags: cint; int_cb: {const} PAVIOInterruptCB; options: PPAVDictionary): cint; cdecl; {deprecated} +{$ENDIF} + + (** + * ',' separated list of allowed protocols. + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + protocol_whitelist: pchar; + + (* + * A callback for opening new IO streams. + * + * Certain muxers or demuxers (e.g. for various playlist-based formats) need + * to open additional files during muxing or demuxing. This callback allows + * the caller to provide custom IO in such cases. + * + * @param s the format context + * @param pb on success, the newly opened IO context should be returned here + * @param url the url to open + * @param flags a combination of AVIO_FLAG_* + * @param options a dictionary of additional options, with the same + * semantics as in avio_open2() + * @return 0 on success, a negative AVERROR code on failure + * + * @note Certain muxers and demuxers do nesting, i.e. they open one or more + * additional internal format contexts. Thus the AVFormatContext pointer + * passed to this callback may be different from the one facing the caller. + * It will, however, have the same 'opaque' field. + *) + io_open: function(s: PAVFormatContext; pb: PPAVIOContext; url: {const} pchar; + flags: cint; options: PPAVDictionary): cint; cdecl; + + (** + * A callback for closing the streams opened with AVFormatContext.io_open(). *) - open_cb: function(s: PAVFormatContext; p: PPAVIOContext; url: {const} PAnsiChar; flags: cint; int_cb: {const} PAVIOInterruptCB; options: PPAVDictionary): cint; cdecl; + io_close: procedure(s: PAVFormatContext; pb: PAVIOContext); cdecl; end; (** TAVFormatContext **) function av_format_get_probe_score(s: {const} PAVFormatContext): cint; @@ -1972,10 +2027,12 @@ function av_format_get_control_message_cb(s: {const} PAVFormatContext): TAv_form cdecl; external av__format; procedure av_format_set_control_message_cb(s: PAVFormatContext; callback: TAv_format_control_message); cdecl; external av__format; -function av_format_get_open_cb(s: {const} PAVFormatContext): TAVOpenCallback; +{$IFDEF FF_API_OLD_OPEN_CALLBACKS} +function av_format_get_open_cb(s: {const} PAVFormatContext): TAVOpenCallback; {deprecated} cdecl; external av__format; -procedure av_format_set_open_cb(s: PAVFormatContext; callback: TAVOpenCallback); +procedure av_format_set_open_cb(s: PAVFormatContext; callback: TAVOpenCallback); {deprecated} cdecl; external av__format; +{$ENDIF} (** * This function will cause global side data to be injected in the next packet @@ -2133,6 +2190,18 @@ function avformat_get_class(): {const} PAVClass; function avformat_new_stream(s: PAVFormatContext; c: {const} PAVCodec): PAVStream; cdecl; external av__format; +(** + * Allocate new information from stream. + * + * @param stream stream + * @param type desired side information type + * @param size side information size + * @return pointer to fresh allocated data or NULL otherwise + *) +function av_stream_new_side_data(stream: PAVStream; + type_: TAVPacketSideDataType; size: cint): Pcuint8; + cdecl; external av__format; + (** * Get side information from stream. * @@ -2233,15 +2302,23 @@ function av_probe_input_format3(pd: PAVProbeData; is_opened: cint; score_ret: Pc * * @param pb the bytestream to probe * @param fmt the input format is put here - * @param filename the filename of the stream + * @param url the url of the stream * @param logctx the log context * @param offset the offset within the bytestream to probe from * @param max_probe_size the maximum probe buffer size (zero for default) * @return 0 in case of success, a negative value corresponding to an * AVERROR code otherwise *) +function av_probe_input_buffer2(pb: PAVIOContext; var fmt: PAVInputFormat; + url: {const} PAnsiChar; logctx: pointer; + offset: cuint; max_probe_size: cuint): cint; + cdecl; external av__format; + +(** + * Like av_probe_input_buffer2() but returns 0 on success + *) function av_probe_input_buffer(pb: PAVIOContext; var fmt: PAVInputFormat; - filename: {const} PAnsiChar; logctx: pointer; + url: {const} PAnsiChar; logctx: pointer; offset: cuint; max_probe_size: cuint): cint; cdecl; external av__format; @@ -2253,7 +2330,7 @@ function av_probe_input_buffer(pb: PAVIOContext; var fmt: PAVInputFormat; * May be a pointer to NULL, in which case an AVFormatContext is allocated by this * function and written into ps. * Note that a user-supplied AVFormatContext will be freed on failure. - * @param filename Name of the stream to open. + * @param url URL of the stream to open. * @param fmt If non-NULL, this parameter forces a specific input format. * Otherwise the format is autodetected. * @param options A dictionary filled with AVFormatContext and demuxer-private options. @@ -2264,7 +2341,7 @@ function av_probe_input_buffer(pb: PAVIOContext; var fmt: PAVInputFormat; * * @note If you want to use custom IO, preallocate the format context and set its pb field. *) -function avformat_open_input(ps: PPAVFormatContext; filename: {const} PAnsiChar; fmt: PAVInputFormat; options: PPAVDictionary): cint; +function avformat_open_input(ps: PPAVFormatContext; url: {const} PAnsiChar; fmt: PAVInputFormat; options: PPAVDictionary): cint; cdecl; external av__format; function av_demuxer_open(ic: PAVFormatContext): cint; @@ -2307,6 +2384,9 @@ function avformat_find_stream_info(ic: PAVFormatContext; options: PPAVDictionary function av_find_program_from_stream(ic: PAVFormatContext; last: PAVProgram; s: cint): PAVProgram; cdecl; external av__format; +procedure av_program_add_stream_index(ac: PAVFormatContext; progid: cint; idx: cuint); + cdecl; external av__format; + (** * Find the "best" stream in the file. * The best stream is determined according to various heuristics as the most @@ -2348,9 +2428,9 @@ function av_find_best_stream(ic: PAVFormatContext; * information possible for decoding. * * If pkt->buf is NULL, then the packet is valid until the next - * av_read_frame() or until av_close_input_file(). Otherwise the packet is valid - * indefinitely. In both cases the packet must be freed with - * av_free_packet when it is no longer needed. For video, the packet contains + * av_read_frame() or until avformat_close_input(). Otherwise the packet + * is valid indefinitely. In both cases the packet must be freed with + * av_packet_unref when it is no longer needed. For video, the packet contains * exactly one frame. For audio, it contains an integer number of frames if each * frame has a known fixed size (e.g. PCM or ADPCM data). If the audio frames * have a variable size (e.g. MPEG audio), then it contains one frame. @@ -2509,10 +2589,17 @@ function avformat_write_header(s: PAVFormatContext; options: {PPAVDictionary} po * <br> * Packet's @ref AVPacket.stream_index "stream_index" field must be * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". It is very strongly - * recommended that timing information (@ref AVPacket.pts "pts", @ref - * AVPacket.dts "dts", @ref AVPacket.duration "duration") is set to - * correct values. + * AVFormatContext.streams "s->streams". + * <br> + * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") + * must be set to correct values in the stream's timebase (unless the + * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then + * they can be set to AV_NOPTS_VALUE). + * The dts for subsequent packets passed to this function must be strictly + * increasing when compared in their respective timebases (unless the + * output format is flagged with the AVFMT_TS_NONSTRICT, then they + * merely have to be nondecreasing). @ref AVPacket.duration + * "duration") should also be set if known. * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush * * @see av_interleaved_write_frame() @@ -2543,11 +2630,17 @@ function av_write_frame(s: PAVFormatContext; pkt: PAVPacket): cint; * <br> * Packet's @ref AVPacket.stream_index "stream_index" field must be * set to the index of the corresponding stream in @ref - * AVFormatContext.streams "s->streams". It is very strongly - * recommended that timing information (@ref AVPacket.pts "pts", @ref - * AVPacket.dts "dts", @ref AVPacket.duration "duration") is set to - * correct values. - * + * AVFormatContext.streams "s->streams". + * <br> + * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") + * must be set to correct values in the stream's timebase (unless the + * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then + * they can be set to AV_NOPTS_VALUE). + * The dts for subsequent packets in one stream must be strictly + * increasing (unless the output format is flagged with the + * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). + * @ref AVPacket.duration "duration") should also be set if known. + * * @return 0 on success, a negative AVERROR on error. Libavformat will always * take care of freeing the packet, even if this function fails. * @@ -2982,6 +3075,19 @@ function avformat_match_stream_specifier(s: PAVFormatContext; st: PAVStream; function avformat_queue_attached_pictures(s: PAVFormatContext): cint; cdecl; external av__format; +(** + * Apply a list of bitstream filters to a packet. + * + * @param codec AVCodecContext, usually from an AVStream + * @param pkt the packet to apply filters to + * @param bsfc a NULL-terminated list of filters to apply + * @return >=0 on success; + * AVERROR code on failure + *) +function av_apply_bitstream_filters(codec: PAVCodecContext; pkt: PAVPacket; + bsfc: PAVBitStreamFilterContext): cint; + cdecl; external av__format; + implementation end. diff --git a/src/lib/ffmpeg-3.0/avio.pas b/src/lib/ffmpeg-3.0/avio.pas index aa8fae6e..b04d118c 100644 --- a/src/lib/ffmpeg-3.0/avio.pas +++ b/src/lib/ffmpeg-3.0/avio.pas @@ -167,6 +167,54 @@ TAVIOContext = record * to any av_opt_* functions in that case. *) av_class: {const} PAVClass; + + (* + * The following shows the relationship between buffer, buf_ptr, buf_end, buf_size, + * and pos, when reading and when writing (since AVIOContext is used for both): + * + ********************************************************************************** + * READING + ********************************************************************************** + * + * | buffer_size | + * |---------------------------------------| + * | | + * + * buffer buf_ptr buf_end + * +---------------+-----------------------+ + * |/ / / / / / / /|/ / / / / / /| | + * read buffer: |/ / consumed / | to be read /| | + * |/ / / / / / / /|/ / / / / / /| | + * +---------------+-----------------------+ + * + * pos + * +-------------------------------------------+-----------------+ + * input file: | | | + * +-------------------------------------------+-----------------+ + * + * + ********************************************************************************** + * WRITING + ********************************************************************************** + * + * | buffer_size | + * |-------------------------------| + * | | + * + * buffer buf_ptr buf_end + * +-------------------+-----------+ + * |/ / / / / / / / / /| | + * write buffer: | / to be flushed / | | + * |/ / / / / / / / / /| | + * +-------------------+-----------+ + * + * pos + * +--------------------------+-----------------------------------+ + * output file: | | | + * +--------------------------+-----------------------------------+ + * + *) + buffer: PByteArray; (**< Start of the buffer. *) buffer_size: cint; (**< Maximum buffer size *) buf_ptr: PByteArray; (**< Current position in the buffer *) @@ -247,10 +295,25 @@ TAVIOContext = record * This is current internal only, do not use from outside. *) short_seek_threshold: cint; + + (** + * ',' separated list of allowed protocols. + *) + protocol_whitelist: {const} PAnsiChar; end; (* unbuffered I/O *) - + +(** + * Return the name of the protocol that will handle the passed URL. + * + * NULL is returned if no protocol could be found for the given URL. + * + * @return Name of the protocol or NULL. + *) +function avio_find_protocol_name(url: {const} PAnsiChar): {const} PAnsiChar; + cdecl; external av__format; + (** * Return AVIO_* access flags corresponding to the access permissions * of the resource in url, or a negative value corresponding to an @@ -473,7 +536,7 @@ function url_feof(s: PAVIOContext): cint; cdecl; external av__format; {attribute_deprecated} {$ENDIF} -(** @warning currently size is limited *) +(** @warning Writes up to 4 KiB per call *) function avio_printf(s: PAVIOContext; fmt: {const} PAnsiChar; args: array of const): cint; cdecl; external av__format; diff --git a/src/lib/ffmpeg-3.0/avutil.pas b/src/lib/ffmpeg-3.0/avutil.pas index 56ab2f81..9cd5a319 100644 --- a/src/lib/ffmpeg-3.0/avutil.pas +++ b/src/lib/ffmpeg-3.0/avutil.pas @@ -66,8 +66,8 @@ interface (* Min. supported version by this header *) LIBAVUTIL_MIN_VERSION_MAJOR = 55; - LIBAVUTIL_MIN_VERSION_MINOR = 0; - LIBAVUTIL_MIN_VERSION_RELEASE = 0; + LIBAVUTIL_MIN_VERSION_MINOR = 17; + LIBAVUTIL_MIN_VERSION_RELEASE = 103; LIBAVUTIL_MIN_VERSION = (LIBAVUTIL_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBAVUTIL_MIN_VERSION_MINOR * VERSION_MINOR) + (LIBAVUTIL_MIN_VERSION_RELEASE * VERSION_RELEASE); diff --git a/src/lib/ffmpeg-3.0/ff_api-defines.inc b/src/lib/ffmpeg-3.0/ff_api-defines.inc index 02c62910..5feb89c1 100644 --- a/src/lib/ffmpeg-3.0/ff_api-defines.inc +++ b/src/lib/ffmpeg-3.0/ff_api-defines.inc @@ -9,134 +9,104 @@ (** avcodec defines *) {$ifndef FF_API_VIMA_DECODER} -{$define FF_API_VIMA_DECODER := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_REQUEST_CHANNELS} -{$define FF_API_REQUEST_CHANNELS := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_OLD_DECODE_AUDIO} -{$define FF_API_OLD_DECODE_AUDIO := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_OLD_ENCODE_AUDIO} -{$define FF_API_OLD_ENCODE_AUDIO := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_OLD_ENCODE_VIDEO} -{$define FF_API_OLD_ENCODE_VIDEO := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_CODEC_ID} -{$define FF_API_CODEC_ID := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_VIMA_DECODER := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_AUDIO_CONVERT} -{$define FF_API_AUDIO_CONVERT := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_AUDIO_CONVERT := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_AVCODEC_RESAMPLE} -{$define FF_API_AVCODEC_RESAMPLE := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_DEINTERLACE} -{$define FF_API_DEINTERLACE := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_AVCODEC_RESAMPLE := FF_API_AUDIO_CONVERT} {$endif} -{$ifndef FF_API_DESTRUCT_PACKET} -{$define FF_API_DESTRUCT_PACKET := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_GET_BUFFER} -{$define FF_API_GET_BUFFER := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$ifndef FF_API_GETCHROMA} +{$define FF_API_GETCHROMA := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_MISSING_SAMPLE} -{$define FF_API_MISSING_SAMPLE := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_MISSING_SAMPLE := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_LOWRES} -{$define FF_API_LOWRES := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_LOWRES := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_CAP_VDPAU} -{$define FF_API_CAP_VDPAU := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_CAP_VDPAU := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_BUFS_VDPAU} -{$define FF_API_BUFS_VDPAU := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_BUFS_VDPAU := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_VOXWARE} -{$define FF_API_VOXWARE := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_VOXWARE := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_SET_DIMENSIONS} -{$define FF_API_SET_DIMENSIONS := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_SET_DIMENSIONS := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_DEBUG_MV} -{$define FF_API_DEBUG_MV := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_DEBUG_MV := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_AC_VLC} -{$define FF_API_AC_VLC := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_AC_VLC := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_OLD_MSMPEG4} -{$define FF_API_OLD_MSMPEG4 := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_OLD_MSMPEG4 := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_ASPECT_EXTENDED} -{$define FF_API_ASPECT_EXTENDED := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_THREAD_OPAQUE} -{$define FF_API_THREAD_OPAQUE := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_CODEC_PKT} -{$define FF_API_CODEC_PKT := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_ASPECT_EXTENDED := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_ARCH_ALPHA} -{$define FF_API_ARCH_ALPHA := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_ARCH_ALPHA := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_XVMC} -{$define FF_API_XVMC := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_XVMC := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_ERROR_RATE} -{$define FF_API_ERROR_RATE := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_ERROR_RATE := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_QSCALE_TYPE} -{$define FF_API_QSCALE_TYPE := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_QSCALE_TYPE := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_MB_TYPE} -{$define FF_API_MB_TYPE := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_MB_TYPE := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_MAX_BFRAMES} -{$define FF_API_MAX_BFRAMES := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_MAX_BFRAMES := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_NEG_LINESIZES} -{$define FF_API_NEG_LINESIZES := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_NEG_LINESIZES := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_EMU_EDGE} -{$define FF_API_EMU_EDGE := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_EMU_EDGE := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_ARCH_SH4} -{$define FF_API_ARCH_SH4 := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_ARCH_SH4 := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_ARCH_SPARC} -{$define FF_API_ARCH_SPARC := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_ARCH_SPARC := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_UNUSED_MEMBERS} -{$define FF_API_UNUSED_MEMBERS := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_UNUSED_MEMBERS := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_IDCT_XVIDMMX} -{$define FF_API_IDCT_XVIDMMX := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_IDCT_XVIDMMX := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_INPUT_PRESERVED} -{$define FF_API_INPUT_PRESERVED := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_INPUT_PRESERVED := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_NORMALIZE_AQP} -{$define FF_API_NORMALIZE_AQP := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_NORMALIZE_AQP := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_GMC} -{$define FF_API_GMC := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_GMC := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_MV0} -{$define FF_API_MV0 := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_MV0 := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_CODEC_NAME} -{$define FF_API_CODEC_NAME := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_CODEC_NAME := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_AFD} -{$define FF_API_AFD := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_AFD := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_VISMV} (* XXX: don't forget to drop the -vismv documentation *) -{$define FF_API_VISMV := (LIBAVCODEC_VERSION_MAJOR < 57)} -{$endif} -{$ifndef FF_API_DV_FRAME_PROFILE} -{$define FF_API_DV_FRAME_PROFILE := (LIBAVCODEC_VERSION_MAJOR < 57)} +{$define FF_API_VISMV := (LIBAVCODEC_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_AUDIOENC_DELAY} {$define FF_API_AUDIOENC_DELAY := (LIBAVCODEC_VERSION_MAJOR < 58)} @@ -168,108 +138,89 @@ {$ifndef FF_API_WITHOUT_PREFIX} {$define FF_API_WITHOUT_PREFIX := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} - -(* avutil defines *) -{$ifndef FF_API_GET_BITS_PER_SAMPLE_FMT} -{$define FF_API_GET_BITS_PER_SAMPLE_FMT := (LIBAVUTIL_VERSION_MAJOR < 54)} -{$endif} -{$ifndef FF_API_FIND_OPT} -{$define FF_API_FIND_OPT := (LIBAVUTIL_VERSION_MAJOR < 54)} -{$endif} -{$ifndef FF_API_OLD_AVOPTIONS} -{$define FF_API_OLD_AVOPTIONS := (LIBAVUTIL_VERSION_MAJOR < 55)} -{$endif} -{$ifndef FF_API_PIX_FMT} -{$define FF_API_PIX_FMT := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$ifndef FF_API_SIDEDATA_ONLY_PKT} +{$define FF_API_SIDEDATA_ONLY_PKT:= (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_CONTEXT_SIZE} -{$define FF_API_CONTEXT_SIZE := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$ifndef FF_API_VDPAU_PROFILE} +{$define FF_API_VDPAU_PROFILE := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_PIX_FMT_DESC} -{$define FF_API_PIX_FMT_DESC := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$ifndef FF_API_CONVERGENCE_DURATION} +{$define FF_API_CONVERGENCE_DURATION := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_AV_REVERSE} -{$define FF_API_AV_REVERSE := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$ifndef FF_API_AVPICTURE} +{$define FF_API_AVPICTURE := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_AUDIOCONVERT} -{$define FF_API_AUDIOCONVERT := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$ifndef FF_API_AVPACKET_OLD_API} +{$define FF_API_AVPACKET_OLD_API := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_CPU_FLAG_MMX2} -{$define FF_API_CPU_FLAG_MMX2 := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$ifndef FF_API_RTP_CALLBACK} +{$define FF_API_RTP_CALLBACK := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_SAMPLES_UTILS_RETURN_ZERO} -{$define FF_API_SAMPLES_UTILS_RETURN_ZERO := (LIBAVUTIL_VERSION_MAJOR < 54)} +{$ifndef FF_API_VBV_DELAY} +{$define FF_API_VBV_DELAY := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_LLS_PRIVATE} -{$define FF_API_LLS_PRIVATE := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$ifndef FF_API_CODER_TYPE} +{$define FF_API_CODER_TYPE := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_LLS1} -{$define FF_API_LLS1 :=(LIBAVUTIL_VERSION_MAJOR < 54)} +{$ifndef FF_API_STAT_BITS} +{$define FF_API_STAT_BITS := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} -{$ifndef FF_API_AVFRAME_LAVC} -{$define FF_API_AVFRAME_LAVC := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$ifndef FF_API_PRIVATE_OPT} +{$define FF_API_PRIVATE_OPT := (LIBAVCODEC_VERSION_MAJOR < 59)} {$endif} + +(* avutil defines *) {$ifndef FF_API_VDPAU} -{$define FF_API_VDPAU := (LIBAVUTIL_VERSION_MAJOR < 55)} -{$endif} -{$ifndef FF_API_GET_CHANNEL_LAYOUT_COMPAT} -{$define FF_API_GET_CHANNEL_LAYOUT_COMPAT := (LIBAVUTIL_VERSION_MAJOR < 55)} -{$endif} -{$ifndef FF_API_OLD_OPENCL} -{$define FF_API_OLD_OPENCL := (LIBAVUTIL_VERSION_MAJOR < 54)} +{$define FF_API_VDPAU := (LIBAVUTIL_VERSION_MAJOR < 56)} {$endif} {$ifndef FF_API_XVMC} -{$define FF_API_XVMC := (LIBAVUTIL_VERSION_MAJOR < 55)} -{$endif} -{$ifndef FF_API_INTFLOAT -{$define FF_API_INTFLOAT := (LIBAVUTIL_VERSION_MAJOR < 54)} +{$define FF_API_XVMC := (LIBAVUTIL_VERSION_MAJOR < 56)} {$endif} {$ifndef FF_API_OPT_TYPE_METADATA} -{$define FF_API_OPT_TYPE_METADATA := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$define FF_API_OPT_TYPE_METADATA := (LIBAVUTIL_VERSION_MAJOR < 56)} {$endif} {$ifndef FF_API_DLOG} -{$define FF_API_DLOG := (LIBAVUTIL_VERSION_MAJOR < 55)} -{$endif} -{$ifndef FF_API_HMAC} -{$define FF_API_HMAC := (LIBAVUTIL_VERSION_MAJOR < 55)} +{$define FF_API_DLOG := (LIBAVUTIL_VERSION_MAJOR < 56)} {$endif} {$ifndef FF_API_VAAPI} {$define FF_API_VAAPI := (LIBAVUTIL_VERSION_MAJOR < 56)} {$endif} -{$ifndef FF_CONST_AVUTIL55} -{$IFDEF LIBAVUTIL_VERSION_MAJOR >= 55} - {$define FF_CONST_AVUTIL55 := const} -{$ELSE} - {$define FF_CONST_AVUTIL55} -{$ENDIF} +{$ifndef FF_API_FRAME_QP} +{$define FF_API_FRAME_QP := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_PLUS1_MINUS1} +{$define FF_API_PLUS1_MINUS1 := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_ERROR_FRAME} +{$define FF_API_ERROR_FRAME := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_CRC_BIG_TABLE} +{$define FF_API_CRC_BIG_TABLE := (LIBAVUTIL_VERSION_MAJOR < 56)} {$endif} (** avformat FF_API defines *) {$ifndef FF_API_LAVF_BITEXACT} -{$define FF_API_LAVF_BITEXACT := (LIBAVFORMAT_VERSION_MAJOR < 57)} +{$define FF_API_LAVF_BITEXACT := (LIBAVFORMAT_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_LAVF_FRAC} -{$define FF_API_LAVF_FRAC := (LIBAVFORMAT_VERSION_MAJOR < 57)} +{$define FF_API_LAVF_FRAC := (LIBAVFORMAT_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_LAVF_CODEC_TB} -{$define FF_API_LAVF_CODEC_TB := (LIBAVFORMAT_VERSION_MAJOR < 57)} +{$define FF_API_LAVF_CODEC_TB := (LIBAVFORMAT_VERSION_MAJOR < 58)} {$endif} {$ifndef FF_API_URL_FEOF} -{$define FF_API_URL_FEOF := (LIBAVFORMAT_VERSION_MAJOR < 57)} +{$define FF_API_URL_FEOF := (LIBAVFORMAT_VERSION_MAJOR < 58)} {$endif} -{$ifndef FF_API_PROBESIZE_32} -{$define FF_API_PROBESIZE_32 := (LIBAVFORMAT_VERSION_MAJOR < 57)} +{$ifndef FF_API_LAVF_FMT_RAWPICTURE} +{$define FF_API_LAVF_FMT_RAWPICTURE := (LIBAVFORMAT_VERSION_MAJOR < 58)} {$endif} - -(** swscale FF_API defines *) -{$ifndef FF_API_SWS_CPU_CAPS} -{$define FF_API_SWS_CPU_CAPS := (LIBSWSCALE_VERSION_MAJOR < 4)} +{$ifndef FF_API_COMPUTE_PKT_FIELDS2} +{$define FF_API_COMPUTE_PKT_FIELDS2 := (LIBAVFORMAT_VERSION_MAJOR < 58)} {$endif} -{$ifndef FF_API_SWS_FORMAT_NAME} -{$define FF_API_SWS_FORMAT_NAME := (LIBSWSCALE_VERSION_MAJOR < 3)} -{$endif} -{$ifndef FF_API_ARCH_BFIN} -{$define FF_API_ARCH_BFIN := (LIBSWSCALE_VERSION_MAJOR < 4)} +{$ifndef FF_API_OLD_OPEN_CALLBACKS} +{$define FF_API_OLD_OPEN_CALLBACKS := (LIBAVFORMAT_VERSION_MAJOR < 58)} {$endif} +(** swscale FF_API defines *) + {$ENDIF PASDOC} diff --git a/src/lib/ffmpeg-3.0/libavcodec/audioconvert.pas b/src/lib/ffmpeg-3.0/libavcodec/audioconvert.pas index 16d44015..38bef39c 100644 --- a/src/lib/ffmpeg-3.0/libavcodec/audioconvert.pas +++ b/src/lib/ffmpeg-3.0/libavcodec/audioconvert.pas @@ -63,11 +63,11 @@ AV_CH_TOP_BACK_RIGHT = $00020000; AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. - AV_CH_WIDE_LEFT: cuint64 = $0000000080000000; - AV_CH_WIDE_RIGHT: cuint64 = $0000000100000000; - AV_CH_SURROUND_DIRECT_LEFT: cuint64 = $0000000200000000; - AV_CH_SURROUND_DIRECT_RIGHT: cuint64 = $0000000400000000; - AV_CH_LOW_FREQUENCY_2: cuint64 = $0000000800000000; + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; (** Channel mask value used for AVCodecContext.request_channel_layout * to indicate that the user requests the channel order of the decoder output @@ -164,14 +164,14 @@ procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channe PAVBPrint = ^TAVBPrint; TAVBPrint = record case integer of - 0 : paddedRecord: array[1..1024] of byte; - 1 : begin + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( str: PAnsiChar; //** string so far */ len: cuint; //** length so far */ size: cuint; //** allocated memory */ size_max: cuint; //** maximum allocated memory */ - reserved_internal_buffer: Pchar; - end; + reserved_internal_buffer: Pchar + ); end; (** @@ -216,7 +216,7 @@ function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint) * * @return channel name on success, NULL on error. *) -function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_name(channel: cuint64): PAnsiChar; cdecl; external av__util; (** @@ -225,7 +225,7 @@ function av_get_channel_name(uint64_t channel: cuint64): PAnsiChar; * @param channel a channel layout with a single channel * @return channel description on success, NULL on error *) -function av_get_channel_description(uint64_t channel: cuint64): PAnsiChar; +function av_get_channel_description(channel: cuint64): PAnsiChar; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-3.0/libavutil/cpu.pas b/src/lib/ffmpeg-3.0/libavutil/cpu.pas index a05ee5bf..76d4169e 100644 --- a/src/lib/ffmpeg-3.0/libavutil/cpu.pas +++ b/src/lib/ffmpeg-3.0/libavutil/cpu.pas @@ -44,12 +44,13 @@ AV_CPU_FLAG_ATOM = $10000000; ///< Atom processor, some SSSE3 instructions are slower AV_CPU_FLAG_SSE4 = $0100; ///< Penryn SSE4.1 functions AV_CPU_FLAG_SSE42 = $0200; ///< Nehalem SSE4.2 functions + AV_CPU_FLAG_AESNI = $80000; ///< Advanced Encryption Standard functions AV_CPU_FLAG_AVX = $4000; ///< AVX functions: requires OS support even if YMM registers aren't used AV_CPU_FLAG_AVXSLOW = $8000000; ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) AV_CPU_FLAG_XOP = $0400; ///< Bulldozer XOP functions AV_CPU_FLAG_FMA4 = $0800; ///< Bulldozer FMA4 functions - AV_CPU_FLAG_CMOV = $1001000; ///< supports cmov instruction + AV_CPU_FLAG_CMOV = $1000; ///< supports cmov instruction AV_CPU_FLAG_AVX2 = $8000; ///< AVX2 functions: requires OS support even if YMM registers aren't used AV_CPU_FLAG_FMA3 = $10000; ///< Haswell FMA3 functions @@ -67,6 +68,7 @@ AV_CPU_FLAG_VFPV3 = (1 << 4); AV_CPU_FLAG_NEON = (1 << 5); AV_CPU_FLAG_ARMV8 = (1 << 6); + AV_CPU_FLAG_VFP_VM = (1 << 7); ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations AV_CPU_FLAG_SETEND = (1 <<16); (** diff --git a/src/lib/ffmpeg-3.0/libavutil/dict.pas b/src/lib/ffmpeg-3.0/libavutil/dict.pas index a8cf4e32..4c1bb2c4 100644 --- a/src/lib/ffmpeg-3.0/libavutil/dict.pas +++ b/src/lib/ffmpeg-3.0/libavutil/dict.pas @@ -131,8 +131,10 @@ function av_dict_parse_string(var pm: PAVDictionary; {const} str: PAnsiChar; * @param src pointer to source AVDictionary struct * @param flags flags to use when setting entries in *dst * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag + * @return 0 on success, negative AVERROR code on failure. If dst was allocated + * by this function, callers should free the associated memory. *) -procedure av_dict_copy(var dst: PAVDictionary; {const} src: PAVDictionary; flags: cint); +function av_dict_copy(var dst: PAVDictionary; {const} src: PAVDictionary; flags: cint): cint; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-3.0/libavutil/frame.pas b/src/lib/ffmpeg-3.0/libavutil/frame.pas index befa7276..4bd74b1e 100644 --- a/src/lib/ffmpeg-3.0/libavutil/frame.pas +++ b/src/lib/ffmpeg-3.0/libavutil/frame.pas @@ -158,12 +158,22 @@ TAVPanScan = record {24} * @endcode *) AV_FRAME_DATA_SKIP_SAMPLES, - (** * This side data must be associated with an audio frame and corresponds to * enum AVAudioServiceType defined in avcodec.h. *) - AV_FRAME_DATA_AUDIO_SERVICE_TYPE + AV_FRAME_DATA_AUDIO_SERVICE_TYPE, + (** + * Mastering display metadata associated with a video frame. The payload is + * an AVMasteringDisplayMetadata type and contains information about the + * mastering display color volume. + *) + AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, + (** + * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. + * This is set on the first frame of a GOP that has a temporal reference of 0. + *) + AV_FRAME_DATA_GOP_TIMECODE ); TAVActiveFormatDescription = ( @@ -293,10 +303,6 @@ TAVFrame = record *) pict_type: TAVPictureType; -{$IFDEF FF_API_AVFRAME_LAVC} - base: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; {deprecated} -{$ENDIF} - (** * sample aspect ratio for the video frame, 0/1 if unknown/unspecified *) @@ -334,68 +340,16 @@ TAVFrame = record *) quality: cint; -{$IFDEF FF_API_AVFRAME_LAVC} - reference: cint; {deprecated} - - (** - * QP table - *) - qscale_table: pbyte; {deprecated} - - (** - * QP store stride - *) - qstride: cint; {deprecated} - qscale_type: cint; {deprecated} - - (** - * mbskip_table[mb]>=1 if MB didn't change - * stride= mb_width = (width+15)>>4 - *) - mbskip_table: pbyte; {deprecated} - - (** - * motion vector table - * @code - * example: - * int mv_sample_log2= 4 - motion_subsample_log2; - * int mb_width= (width+15)>>4; - * int mv_stride= (mb_width << mv_sample_log2) + 1; - * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y]; - * @endcode - *) - motion_val: array [0..1] of pointer; - - (** - * macroblock type table - * mb_type_base + mb_width + 2 - *) - mb_type: PCuint; {deprecated} - - (** - * DCT coefficients - *) - dct_coeff: PsmallInt; {deprecated} - - (** - * motion reference frame index - * the order in which these are stored can depend on the codec. - *) - ref_index: array [0..1] of pbyte; {deprecated} -{$ENDIF} - (** * for some private data of the user *) opaque: pointer; +{$IFDEF FF_API_ERROR_FRAME} (** - * error + * @deprecated unused *) - error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; - -{$IFDEF FF_API_AVFRAME_LAVC} - type_: cint; {deprecated} + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; {deprecated} {$ENDIF} (** @@ -419,14 +373,6 @@ TAVFrame = record *) palette_has_changed: cint; -{$IFDEF FF_API_AVFRAME_LAVC} - buffer_hints: cint; {deprecated} - (** - * Pan scan. - *) - pan_scan: PAVPanScan; {deprecated} -{$ENDIF} - (** * reordered opaque 64bit (generally an integer or a double precision float * PTS but can be anything). @@ -438,21 +384,6 @@ TAVFrame = record *) reordered_opaque: cint64; -{$IFDEF FF_API_AVFRAME_LAVC} - (** - * @deprecated this field is unused - *) - hwaccel_picture_private: pointer; {deprecated} - owner: pointer; {deprecated} (** Note: Should be a PAVCodecContext, but a type pointer is used to avoid a reference problem. *) - thread_opaque: pointer; {deprecated} - - (** - * log2 of the size of the block which a single vector in motion_val represents: - * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) - *) - motion_subsample_log2: cuint8; {deprecated} -{$ENDIF} - (** * Sample rate of the audio data. *) @@ -602,10 +533,24 @@ TAVFrame = record *) pkt_size: cint; +{$IFDEF FF_API_FRAME_QP} + (** + * QP table + * Not to be accessed directly from outside libavutil + *) + qscale_table: PByte; {deprecated} (** + * QP store stride * Not to be accessed directly from outside libavutil *) - qp_table_buf: PAVBufferRef; + qstride: cint; {deprecated} + + qscale_type: cint; {deprecated} + (** + * Not to be accessed directly from outside libavutil + *) + qp_table_buf: PAVBufferRef; {deprecated} +{$ENDIF} end; {TAVFrame} (** @@ -651,10 +596,12 @@ procedure av_frame_set_pkt_size (frame: PAVFrame; val: cint); cdecl; external av__codec; function avpriv_frame_get_metadatap(frame: PAVFrame): PPAVDictionary; cdecl; external av__codec; +{$IFDEF FF_API_FRAME_QP} function av_frame_get_qp_table(f: PAVFrame; stride: pcint; type_: pcint): PByte; cdecl; external av__codec; function av_frame_set_qp_table(f: PAVFrame; buf: PAVBufferRef; stride: cint; type_: cint): cint; cdecl; external av__codec; +{$ENDIF} function av_frame_get_colorspace(frame: {const} PAVFrame): TAVColorSpace; cdecl; external av__codec; procedure av_frame_set_colorspace(frame: PAVFrame; val: TAVColorSpace); diff --git a/src/lib/ffmpeg-3.0/libavutil/log.pas b/src/lib/ffmpeg-3.0/libavutil/log.pas index 7c330bc8..cab0a9bf 100644 --- a/src/lib/ffmpeg-3.0/libavutil/log.pas +++ b/src/lib/ffmpeg-3.0/libavutil/log.pas @@ -31,17 +31,6 @@ type (* from opt.h *) TAVOptionType = ( -{$IFDEF FF_API_OLD_AVOPTIONS} - FF_OPT_TYPE_FLAGS = 0, - FF_OPT_TYPE_INT, - FF_OPT_TYPE_INT64, - FF_OPT_TYPE_DOUBLE, - FF_OPT_TYPE_FLOAT, - FF_OPT_TYPE_STRING, - FF_OPT_TYPE_RATIONAL, - FF_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length - FF_OPT_TYPE_CONST = 128 -{$ELSE} AV_OPT_TYPE_FLAGS, AV_OPT_TYPE_INT, AV_OPT_TYPE_INT64, @@ -52,14 +41,14 @@ AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length AV_OPT_TYPE_DICT, AV_OPT_TYPE_CONST = 128, - AV_OPT_TYPE_IMAGE_SIZE = $53495A45, ///< MKBETAG('S','I','Z','E'), offset must point to two consecutive integers - AV_OPT_TYPE_PIXEL_FMT = $50464D54, ///< MKBETAG('P','F','M','T') + AV_OPT_TYPE_BOOL = $424F4F4C, ///< MKBETAG('B','O','O','L'), + AV_OPT_TYPE_CHANNEL_LAYOUT = $43484C41, ///< MKBETAG('C','H','L','A'), + AV_OPT_TYPE_COLOR = $434F4C52, ///< MKBETAG('C','O','L','R'), + AV_OPT_TYPE_DURATION = $44555220, ///< MKBETAG('D','U','R',' '), + AV_OPT_TYPE_PIXEL_FMlT = $50464D54, ///< MKBETAG('P','F','M','T') AV_OPT_TYPE_SAMPLE_FMT = $53464D54, ///< MKBETAG('S','F','M','T') + AV_OPT_TYPE_IMAGE_SIZE = $53495A45, ///< MKBETAG('S','I','Z','E'), offset must point to two consecutive integers AV_OPT_TYPE_VIDEO_RATE = $56524154 ///< MKBETAG('V','R','A','T'), offset must point to TAVRational - AV_OPT_TYPE_DURATION = $44555220, ///< MKBETAG('D','U','R',' '), - AV_OPT_TYPE_COLOR = $434F4C52, ///< MKBETAG('C','O','L','R'), - AV_OPT_TYPE_CHANNEL_LAYOUT = $43484C41, ///< MKBETAG('C','H','L','A'), -{$ENDIF} ); const diff --git a/src/lib/ffmpeg-3.0/libavutil/mathematics.pas b/src/lib/ffmpeg-3.0/libavutil/mathematics.pas index 1025bbf3..3815ea1f 100644 --- a/src/lib/ffmpeg-3.0/libavutil/mathematics.pas +++ b/src/lib/ffmpeg-3.0/libavutil/mathematics.pas @@ -55,9 +55,10 @@ ); (** - * Return the greatest common divisor of a and b. - * If both a or b are 0 or either or both are <0 then behavior is - * undefined. + * Compute the greatest common divisor of a and b. + * + * @return gcd of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; + * if a == 0 and b == 0, returns 0. *) function av_gcd(a, b: cint64): cint64; cdecl; external av__util; {av_const} diff --git a/src/lib/ffmpeg-3.0/libavutil/mem.pas b/src/lib/ffmpeg-3.0/libavutil/mem.pas index 43a38e4d..2d049ae8 100644 --- a/src/lib/ffmpeg-3.0/libavutil/mem.pas +++ b/src/lib/ffmpeg-3.0/libavutil/mem.pas @@ -351,3 +351,19 @@ procedure av_fast_realloc(ptr: pointer; size: Pcuint; min_size: size_t); *) procedure av_fast_malloc(ptr: pointer; size: Pcuint; min_size: size_t); cdecl; external av__util; + +(** + * Allocate a buffer, reusing the given one if large enough. + * + * All newly allocated space is initially cleared + * Contrary to av_fast_realloc the current buffer contents might not be + * preserved and on error the old buffer is freed, thus no special + * handling to avoid memleaks is necessary. + * + * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer + * @param size size of the buffer *ptr points to + * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and + * *size 0 if an error occurred. + *) +procedure av_fast_mallocz(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.0/libavutil/opt.pas b/src/lib/ffmpeg-3.0/libavutil/opt.pas index 524d1384..87ec68aa 100644 --- a/src/lib/ffmpeg-3.0/libavutil/opt.pas +++ b/src/lib/ffmpeg-3.0/libavutil/opt.pas @@ -27,57 +27,6 @@ * *) -{$IFDEF FF_API_OLD_AVOPTIONS} -(** - * Set the field of obj with the given name to value. - * - * @param[in] obj A struct whose first element is a pointer to an - * AVClass. - * @param[in] name the name of the field to set - * @param[in] val The value to set. If the field is not of a string - * type, then the given string is parsed. - * SI postfixes and some named scalars are supported. - * If the field is of a numeric type, it has to be a numeric or named - * scalar. Behavior with more than one scalar and +- infix operators - * is undefined. - * If the field is of a flags type, it has to be a sequence of numeric - * scalars or named flags separated by '+' or '-'. Prefixing a flag - * with '+' causes it to be set without affecting the other flags; - * similarly, '-' unsets a flag. - * @param[out] o_out if non-NULL put here a pointer to the AVOption - * found - * @param alloc when 1 then the old value will be av_freed() and the - * new av_strduped() - * when 0 then no av_free() nor av_strdup() will be used - * @return 0 if the value has been set, or an AVERROR code in case of - * error: - * AVERROR_OPTION_NOT_FOUND if no matching option exists - * AVERROR(ERANGE) if the value is out of range - * AVERROR(EINVAL) if the value is not valid - * @deprecated use av_opt_set() - *) -function av_set_string3(obj: Pointer; name: {const} PAnsiChar; val: {const} PAnsiChar; alloc: cint; out o_out: {const} PAVOption): cint; - cdecl; external av__util; deprecated; - -function av_set_double(obj: pointer; name: {const} PAnsiChar; n: cdouble): PAVOption; - cdecl; external av__util; deprecated; -function av_set_q (obj: pointer; name: {const} PAnsiChar; n: TAVRational): PAVOption; - cdecl; external av__util; deprecated; -function av_set_int (obj: pointer; name: {const} PAnsiChar; n: cint64): PAVOption; - cdecl; external av__util; deprecated; - -function av_get_double(obj: pointer; name: {const} PAnsiChar; out o_out: {const} PAVOption): cdouble; - cdecl; external av__util; deprecated; -function av_get_q (obj: pointer; name: {const} PAnsiChar; out o_out: {const} PAVOption): TAVRational; - cdecl; external av__util; deprecated; -function av_get_int (obj: pointer; name: {const} PAnsiChar; out o_out: {const} PAVOption): cint64; - cdecl; external av__util; deprecated; -function av_get_string(obj: pointer; name: {const} PAnsiChar; out o_out: {const} PAVOption; buf: PAnsiChar; buf_len: cint): PAnsiChar; - cdecl; external av__util; deprecated; -function av_next_option(obj: pointer; last: {const} PAVOption): PAVOption; - cdecl; external av__util; deprecated; -{$ENDIF} - (** * Show the obj options. * @@ -278,7 +227,7 @@ function av_opt_eval_q (obj: pointer; o: {const} PAVOption; val: {const} PAn *) const - AV_OPT_SEARCH_CHILDREN = 0001; (**< Search in possible children of the + AV_OPT_SEARCH_CHILDREN = (1 << 0); (**< Search in possible children of the given object first.*) (** * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass @@ -286,14 +235,19 @@ function av_opt_eval_q (obj: pointer; o: {const} PAVOption; val: {const} PAn * useful for searching for options without needing to allocate the corresponding * object. *) - AV_OPT_SEARCH_FAKE_OBJ = 0002; + AV_OPT_SEARCH_FAKE_OBJ = (1 << 1); +(** + * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, + * rather than returning an empty string. + *) + AV_OPT_ALLOW_NULL = (1 << 2); (** * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than * one component for certain option types. * @see AVOptionRanges for details. *) - AV_OPT_MULTI_COMPONENT_RANGE = 1000; + AV_OPT_MULTI_COMPONENT_RANGE = (1 << 12); (** * Look for an option in an object. Consider only options which @@ -353,7 +307,7 @@ function av_opt_find2(obj: pointer; name: {const} PAnsiChar; unit_: {const} PAns * or NULL * @return next AVOption or NULL *) -function av_opt_next(obj: pointer; prev: {const} PAVOption): {const} PAVOption; +function av_opt_next(obj: {const} pointer; prev: {const} PAVOption): {const} PAVOption; cdecl; external av__util; (** @@ -463,6 +417,10 @@ function av_opt_set_dict_val(obj: pointer; name: {const} PAnsiChar; val: {const} *) (** * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller + * + * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the option has + * AV_OPT_TYPE_STRING or AV_OPT_TYPE_BINARY and is set to NULL, *out_val will be set + * to NULL instead of an allocated empty string. *) function av_opt_get (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out out_val: Pcuint8): cint; cdecl; external av__util; @@ -524,7 +482,7 @@ procedure av_opt_freep_ranges(ranges: PPAVOptionRanges); function av_opt_query_ranges(P: PPAVOptionRanges; obj: pointer; key: {const} PAnsiChar; flags: cint): cint; cdecl; external av__util; -function av_opt_copy(dest: pointer;src: pointer): cint; +function av_opt_copy(dest: pointer;src: {const }pointer): cint; cdecl; external av__util; (** diff --git a/src/lib/ffmpeg-3.0/libavutil/pixfmt.pas b/src/lib/ffmpeg-3.0/libavutil/pixfmt.pas index 93b64f5f..3fc61b20 100644 --- a/src/lib/ffmpeg-3.0/libavutil/pixfmt.pas +++ b/src/lib/ffmpeg-3.0/libavutil/pixfmt.pas @@ -174,12 +174,6 @@ AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian AV_PIX_FMT_VDA_VLD, ///< hardware decoding through VDA -{$IFDEF AV_PIX_FMT_ABI_GIT_MASTER} - AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian -{$ENDIF} AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian @@ -187,15 +181,8 @@ AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian - - (** - * duplicated pixel formats for compatibility with libav. - * FFmpeg supports these formats since May 8 2012 and Jan 28 2012 (commits f9ca1ac7 and 143a5c55) - * Libav added them Oct 12 2012 with incompatible values (commit 6d5600e85) - *) - AV_PIX_FMT_YUVA422P_LIBAV, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) - AV_PIX_FMT_YUVA444P_LIBAV, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - + AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) + AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian @@ -223,16 +210,10 @@ AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian - (** - * duplicated pixel formats for compatibility with libav. - * FFmpeg supports these formats since Sat Sep 24 06:01:45 2011 +0200 (commits 9569a3c9f41387a8c7d1ce97d8693520477a66c3) - * also see Fri Nov 25 01:38:21 2011 +0100 92afb431621c79155fcb7171d26f137eb1bee028 - * Libav added them Sun Mar 16 23:05:47 2014 +0100 with incompatible values (commit 1481d24c3a0abf81e1d7a514547bd5305232be30) - *) - AV_PIX_FMT_RGBA64BE_LIBAV, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_RGBA64LE_LIBAV, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - AV_PIX_FMT_BGRA64BE_LIBAV, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_BGRA64LE_LIBAV, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian + AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian + AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb @@ -241,14 +222,9 @@ AV_PIX_FMT_YA16BE, ///< 16bit gray, 16bit alpha (big-endian) AV_PIX_FMT_YA16LE, ///< 16bit gray, 16bit alpha (little-endian) - (** - * duplicated pixel formats for compatibility with libav. - * FFmpeg supports these formats since May 3 2013 (commit e6d4e687558d08187e7a415a7725e4b1a416f782) - * Libav added them Jan 14 2015 with incompatible values (commit 0e6c7dfa650e8b0497bfa7a06394b7a462ddc33a) - *) - AV_PIX_FMT_GBRAP_LIBAV, ///< planar GBRA 4:4:4:4 32bpp - AV_PIX_FMT_GBRAP16BE_LIBAV, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE_LIBAV, ///< planar GBRA 4:4:4:4 64bpp, little-endian + AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp + AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian + AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian (** * HW acceleration through QSV, data[3] contains a pointer to the * mfxFrameSurface1 structure. @@ -262,18 +238,10 @@ AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer -{$IFNDEF AV_PIX_FMT_ABI_GIT_MASTER} - AV_PIX_FMT_RGBA64BE = $123, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian - AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian - AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian -{$ENDIF} AV_PIX_FMT_0RGB = $123 + 4,///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined - AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) - AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian @@ -291,9 +259,6 @@ AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian - AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp - AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian - AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */ @@ -320,22 +285,12 @@ AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox + AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian + AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions ); -{$IFDEF AV_HAVE_INCOMPATIBLE_LIBAV_ABI} -const - AV_PIX_FMT_YUVA422P = AV_PIX_FMT_YUVA422P_LIBAV; - AV_PIX_FMT_YUVA444P = AV_PIX_FMT_YUVA444P_LIBAV; - AV_PIX_FMT_RGBA64BE = AV_PIX_FMT_RGBA64BE_LIBAV; - AV_PIX_FMT_RGBA64LE = AV_PIX_FMT_RGBA64LE_LIBAV; - AV_PIX_FMT_BGRA64BE = AV_PIX_FMT_BGRA64BE_LIBAV; - AV_PIX_FMT_BGRA64LE = AV_PIX_FMT_BGRA64LE_LIBAV; - AV_PIX_FMT_GBRAP = AV_PIX_FMT_GBRAP_LIBAV; - AV_PIX_FMT_GBRAP16BE = AV_PIX_FMT_GBRAP16BE_LIBAV; - AV_PIX_FMT_GBRAP16LE = AV_PIX_FMT_GBRAP16LE_LIBAV; -{$ENDIF} - const AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8; ///< alias for AV_PIX_FMT_YA8 AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8; ///< alias for AV_PIX_FMT_YA8 @@ -472,56 +427,6 @@ AV_PIX_FMT_AYUV64 = AV_PIX_FMT_AYUV64LE; {$ENDIF} -{$IFDEF FF_API_PIX_FMT} -type - TPixelFormat = TAVPixelFormat; - -const - PIX_FMT_Y400A = AV_PIX_FMT_Y400A; - PIX_FMT_GBR24P = AV_PIX_FMT_GBR24P; - - PIX_FMT_RGB32 = AV_PIX_FMT_RGB32; - PIX_FMT_RGB32_1 = AV_PIX_FMT_RGB32_1; - PIX_FMT_BGR32 = AV_PIX_FMT_BGR32; - PIX_FMT_BGR32_1 = AV_PIX_FMT_BGR32_1; - PIX_FMT_0RGB32 = AV_PIX_FMT_0RGB32; - PIX_FMT_0BGR32 = AV_PIX_FMT_0BGR32; - - PIX_FMT_GRAY16 = AV_PIX_FMT_GRAY16; - PIX_FMT_RGB48 = AV_PIX_FMT_RGB48; - PIX_FMT_RGB565 = AV_PIX_FMT_RGB565; - PIX_FMT_RGB555 = AV_PIX_FMT_RGB555; - PIX_FMT_RGB444 = AV_PIX_FMT_RGB444; - PIX_FMT_BGR48 = AV_PIX_FMT_BGR48; - PIX_FMT_BGR565 = AV_PIX_FMT_BGR565; - PIX_FMT_BGR555 = AV_PIX_FMT_BGR555; - PIX_FMT_BGR444 = AV_PIX_FMT_BGR444; - - PIX_FMT_YUV420P9 = AV_PIX_FMT_YUV420P9; - PIX_FMT_YUV422P9 = AV_PIX_FMT_YUV422P9; - PIX_FMT_YUV444P9 = AV_PIX_FMT_YUV444P9; - PIX_FMT_YUV420P10 = AV_PIX_FMT_YUV420P10; - PIX_FMT_YUV422P10 = AV_PIX_FMT_YUV422P10; - PIX_FMT_YUV444P10 = AV_PIX_FMT_YUV444P10; - PIX_FMT_YUV420P12 = AV_PIX_FMT_YUV420P12; - PIX_FMT_YUV422P12 = AV_PIX_FMT_YUV422P12; - PIX_FMT_YUV444P12 = AV_PIX_FMT_YUV444P12; - PIX_FMT_YUV420P14 = AV_PIX_FMT_YUV420P14; - PIX_FMT_YUV422P14 = AV_PIX_FMT_YUV422P14; - PIX_FMT_YUV444P14 = AV_PIX_FMT_YUV444P14; - PIX_FMT_YUV420P16 = AV_PIX_FMT_YUV420P16; - PIX_FMT_YUV422P16 = AV_PIX_FMT_YUV422P16; - PIX_FMT_YUV444P16 = AV_PIX_FMT_YUV444P16; - - PIX_FMT_RGBA64 = AV_PIX_FMT_RGBA64; - PIX_FMT_BGRA64 = AV_PIX_FMT_BGRA64; - PIX_FMT_GBRP9 = AV_PIX_FMT_GBRP9; - PIX_FMT_GBRP10 = AV_PIX_FMT_GBRP10; - PIX_FMT_GBRP12 = AV_PIX_FMT_GBRP12; - PIX_FMT_GBRP14 = AV_PIX_FMT_GBRP14; - PIX_FMT_GBRP16 = AV_PIX_FMT_GBRP16; -{$ENDIF} - type (** * Chromaticity coordinates of the source primaries. @@ -537,6 +442,7 @@ AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 + AVCOL_PRI_SMPTEST428_1= 10,///< SMPTE ST 428-1 (CIE 1931 XYZ) AVCOL_PRI_NB ///< Not part of ABI ); @@ -560,6 +466,8 @@ AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10 bit system AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12 bit system + AVCOL_TRC_SMPTEST2084 = 16, ///< SMPTE ST 2084 for 10, 12, 14 and 16 bit systems + AVCOL_TRC_SMPTEST428_1 = 17, ///< SMPTE ST 428-1 AVCOL_TRC_NB ///< Not part of ABI ); diff --git a/src/lib/ffmpeg-3.0/swresample.pas b/src/lib/ffmpeg-3.0/swresample.pas index 9bb4568c..a2f4ada9 100644 --- a/src/lib/ffmpeg-3.0/swresample.pas +++ b/src/lib/ffmpeg-3.0/swresample.pas @@ -47,6 +47,7 @@ interface uses ctypes, + avutil, rational, {$IFDEF UNIX} BaseUnix, @@ -81,17 +82,17 @@ interface *) (* Supported version by this header *) - LIBSWRESAMPLE_MAX_VERSION_MAJOR = 1; - LIBSWRESAMPLE_MAX_VERSION_MINOR = 2; - LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; + LIBSWRESAMPLE_MAX_VERSION_MAJOR = 2; + LIBSWRESAMPLE_MAX_VERSION_MINOR = 0; + LIBSWRESAMPLE_MAX_VERSION_RELEASE = 101; LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + - (LIBSWRESAMPLE_VERSION_RELEASE * VERSION_RELEASE); + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); (* Min. supported version by this header *) - LIBSWRESAMPLE_MIN_VERSION_MAJOR = 1; - LIBSWRESAMPLE_MIN_VERSION_MINOR = 2; - LIBSWRESAMPLE_MIN_VERSION_RELEASE = 100; + LIBSWRESAMPLE_MIN_VERSION_MAJOR = 2; + LIBSWRESAMPLE_MIN_VERSION_MINOR = 0; + LIBSWRESAMPLE_MIN_VERSION_RELEASE = 101; LIBSWRESAMPLE_MIN_VERSION = (LIBSWRESAMPLE_MIN_VERSION_MAJOR * VERSION_MAJOR) + (LIBSWRESAMPLE_MIN_VERSION_MINOR * VERSION_MINOR) + (LIBSWRESAMPLE_MIN_VERSION_RELEASE * VERSION_RELEASE); @@ -106,7 +107,7 @@ interface {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} {$IFEND} -{$IF LIBRESAMPLE_VERSION_MAJOR < 1} +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} SWR_CH_MAX = 32; (* < Maximum number of channels *) {$ENDIF} SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) @@ -140,8 +141,8 @@ interface (** Resampling Filter Types *) TSwrFilterType = ( SWR_FILTER_TYPE_CUBIC, (* < Cubic *) - SWR_FILTER_TYPE_BLACKMAN_NUTTALL, (* < Blackman Nuttall Windowed Sinc *) - SWR_FILTER_TYPE_KAISER (* < Kaiser Windowed Sinc *) + SWR_FILTER_TYPE_BLACKMAN_NUTTALL, (* < Blackman Nuttall windowed sinc *) + SWR_FILTER_TYPE_KAISER (* < Kaiser windowed sinc *) ); (** @@ -162,7 +163,7 @@ TSwrContext = record * @see av_opt_find(). *) function swr_get_class(): PAVClass; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext. @@ -174,7 +175,7 @@ function swr_get_class(): PAVClass; * @return NULL on error, allocated context otherwise *) function swr_alloc(): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Initialize context after user parameters have been set. @@ -186,7 +187,7 @@ function swr_alloc(): PSwrContext; * @return AVERROR error code in case of failure. *) function swr_init(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Check whether an swr context has been initialized or not. @@ -196,7 +197,7 @@ function swr_init(s: PSwrContext): cint; * @return positive if it has been initialized, 0 if not initialized *) function swr_is_initialized(s: PSwrContext): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Allocate SwrContext if needed and set/reset common parameters. @@ -206,11 +207,11 @@ function swr_is_initialized(s: PSwrContext): cint; * on the allocated context. * * @param s existing Swr context if available, or NULL if not - * @param out_ch_layout output channel layout (AV_CH_LAYOUT_*) - * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_*). + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). * @param out_sample_rate output sample rate (frequency in Hz) - * @param in_ch_layout input channel layout (AV_CH_LAYOUT_*) - * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_*). + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). * @param in_sample_rate input sample rate (frequency in Hz) * @param log_offset logging level offset * @param log_ctx parent logging context, can be NULL @@ -222,7 +223,7 @@ function swr_alloc_set_opts(s: PSwrContext; out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; log_offset: cint; log_ctx: pointer): PSwrContext; - cdecl; external swresample; + cdecl; external sw__resample; (** * Free the given SwrContext and set the pointer to NULL. @@ -230,7 +231,7 @@ function swr_alloc_set_opts(s: PSwrContext; * @param[in] s a pointer to a pointer to Swr context *) procedure swr_free(s: PPSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Closes the context so that swr_is_initialized() returns 0. @@ -243,7 +244,7 @@ procedure swr_free(s: PPSwrContext); * @param[in,out] s Swr context to be closed *) procedure swr_close(s: PSwrContext); - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert audio. @@ -266,7 +267,7 @@ procedure swr_close(s: PSwrContext); *) function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; var in_: {const} PByte; in_count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Convert the next timestamp from input to output @@ -282,7 +283,7 @@ function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; * @return the output timestamp for the next output sample *) function swr_next_pts(s: PSwrContext; pts: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Activate resampling compensation ("soft" compensation). This function is @@ -301,7 +302,7 @@ function swr_next_pts(s: PSwrContext; pts: cint64): cint64; * @li swr_init() fails when called. *) function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized input channel mapping. @@ -312,7 +313,7 @@ function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_d * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Set a customized remix matrix. @@ -324,7 +325,7 @@ function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): ci * @return >= 0 on success, or AVERROR error code in case of failure. *) function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Drops the specified number of output samples. @@ -338,7 +339,7 @@ function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_drop_output(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Injects the specified number of silence samples. @@ -352,7 +353,7 @@ function swr_drop_output(s: PSwrContext; count: cint): cint; * @return >= 0 on success, or a negative AVERROR code on failure *) function swr_inject_silence(s: PSwrContext; count: cint): cint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Gets the delay the next input sample will experience relative to the next output sample. @@ -379,7 +380,7 @@ function swr_inject_silence(s: PSwrContext; count: cint): cint; * @returns the delay in 1 / @c base units. *) function swr_get_delay(s: PSwrContext; base: cint64): cint64; - cdecl; external swresample; + cdecl; external sw__resample; (** * Find an upper bound on the number of samples that the next swr_convert @@ -397,8 +398,8 @@ function swr_get_delay(s: PSwrContext; base: cint64): cint64; * @returns an upper bound on the number of samples that the next swr_convert * will output or a negative value to indicate an error *) -function swr_get_out_samples(s: PSwrContext; in_samples: cint); - cdecl; external swresample; +function swr_get_out_samples(s: PSwrContext; in_samples: cint): cint; + cdecl; external sw__resample; (** * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. @@ -409,7 +410,7 @@ function swr_get_out_samples(s: PSwrContext; in_samples: cint); * @returns the unsigned int-typed version *) function swresample_version(): cuint; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr build-time configuration. @@ -417,7 +418,7 @@ function swresample_version(): cuint; * @returns the build-time @c ./configure flags *) function swresample_configuration(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; (** * Return the swr license. @@ -425,7 +426,7 @@ function swresample_configuration(): PAnsiChar; * @returns the license of libswresample, determined at build-time *) function swresample_license(): PAnsiChar; - cdecl; external swresample; + cdecl; external sw__resample; implementation diff --git a/src/lib/ffmpeg-3.0/swscale.pas b/src/lib/ffmpeg-3.0/swscale.pas index 871c2ff0..9b768ff3 100644 --- a/src/lib/ffmpeg-3.0/swscale.pas +++ b/src/lib/ffmpeg-3.0/swscale.pas @@ -83,8 +83,6 @@ interface (LIBSWSCALE_MAX_VERSION_MINOR * VERSION_MINOR) + (LIBSWSCALE_MAX_VERSION_RELEASE * VERSION_RELEASE); - - (* Check if linked versions are supported *) {$IF (LIBSWSCALE_VERSION > LIBSWSCALE_MAX_VERSION)} {$MESSAGE Error 'Linked version of libswscale is not yet supported!'} @@ -98,25 +96,6 @@ interface TPCuint8Array = array[0..0] of PCuint8; PPCuint8Array = ^TPCuint8Array; -(* libswscale/version.h start *) - -(** - * FF_API_* defines may be placed below to indicate public API that will be - * dropped at a future version bump. The defines themselves are not part of - * the public API and may change, break or disappear at any time. - *) -{$ifndef FF_API_SWS_GETCONTEXT} -{$define FF_API_SWS_GETCONTEXT := (LIBSWSCALE_VERSION_MAJOR < 3)} -{$endif} -{$ifndef FF_API_SWS_CPU_CAPS} -{$define FF_API_SWS_CPU_CAPS := (LIBSWSCALE_VERSION_MAJOR < 3)} -{$endif} -{$ifndef FF_API_SWS_FORMAT_NAME} -{$define FF_API_SWS_FORMAT_NAME := (LIBSWSCALE_VERSION_MAJOR < 3)} -{$endif} - -(* libswscale/version.h end *) - (** * Return the LIBSWSCALE_VERSION_INT constant. *) @@ -165,22 +144,6 @@ function swscale_license(): PAnsiChar; SWS_ACCURATE_RND = $40000; SWS_BITEXACT = $80000; -{$IFDEF FF_API_SWS_CPU_CAPS} -(** - * CPU caps are autodetected now, those flags - * are only provided for API compatibility. - *) - SWS_CPU_CAPS_MMX = $80000000; - SWS_CPU_CAPS_MMXEXT = $20000000; - SWS_CPU_CAPS_MMX2 = $20000000; - SWS_CPU_CAPS_3DNOW = $40000000; - SWS_CPU_CAPS_ALTIVEC = $10000000; -{$IFDEF FF_API_ARCH_BFIN} - SWS_CPU_CAPS_BFIN = $01000000; -{$IFEND} - SWS_CPU_CAPS_SSE2 = $02000000; -{$IFEND} - SWS_MAX_REDUCE_CUTOFF = 0.002; SWS_CS_ITU709 = 1; @@ -284,7 +247,7 @@ procedure sws_freeContext(swsContext: PSwsContext); * @param flags specify which algorithm and options to use for rescaling * @param param extra parameters to tune the used scaler * For SWS_BICUBIC param[0] and [1] tune the shape of the basis - * function, param[0] tunes f(1) and param[1] f´(1) + * function, param[0] tunes f(1) and param[1] f??(1) * For SWS_GAUSS param[0] tunes the exponent and thus cutoff * frequency * For SWS_LANCZOS param[0] tunes the width of the window function diff --git a/src/lib/ffmpeg-3.1/How to update the ffmpeg files.txt b/src/lib/ffmpeg-3.1/How to update the ffmpeg files.txt new file mode 100644 index 00000000..ae65d477 --- /dev/null +++ b/src/lib/ffmpeg-3.1/How to update the ffmpeg files.txt @@ -0,0 +1,20 @@ +how to update the ffmpeg files: + +1) buffer.pas + cpu.pas + dict.pas + error.pas + frame.pas + log.pas + mathematics.pas + mem.pas + opt.pas + pixfmt.pas + samplefmt.pas +2) rational.pas +3) avutil.pas +4) avcodec.pas +5) avio.pas + swscale.pas + swresample.pas +6) avformat.pas \ No newline at end of file diff --git a/src/lib/ffmpeg-3.1/ToDo.txt b/src/lib/ffmpeg-3.1/ToDo.txt new file mode 100644 index 00000000..b0bd305e --- /dev/null +++ b/src/lib/ffmpeg-3.1/ToDo.txt @@ -0,0 +1,112 @@ +1) avutil.pas + +from mem.pas: +inline function av_x_if_null +inline function av_size_mult + +from log.pas: +inline function av_log +inline function av_log_set_callback +inline function av_log_default_callback +inline function av_dlog + + +FFmpeg 3.0 changes: +2016-02-10 - bc9a596 / 9f61abc - lavf 57.25.100 / 57.3.0 - avformat.h + Add AVFormatContext.opaque, io_open and io_close, allowing custom IO + +2016-02-01 - 1dba837 - lavf 57.24.100 - avformat.h, avio.h + Add protocol_whitelist to AVFormatContext, AVIOContext + +2016-01-31 - 66e9d2f - lavu 55.17.100 - frame.h + Add AV_FRAME_DATA_GOP_TIMECODE for exporting MPEG1/2 GOP timecodes. + +2016-01-01 - 5e8b053 / 2c68113 - lavc 57.21.100 / 57.12.0 - avcodec.h + Add AVCodecDescriptor.profiles and avcodec_profile_name(). + +2015-12-28 - 1f9139b - lavf 57.21.100 - avformat.h + Add automatic bitstream filtering; add av_apply_bitstream_filters() + +2015-12-22 - 39a09e9 - lavfi 6.21.101 - avfilter.h + Deprecate avfilter_link_set_closed(). + Applications are not supposed to mess with links, + they should close the sinks. + +2015-12-17 - lavc 57.18.100 / 57.11.0 - avcodec.h dirac.h + xxxxxxx - Add av_packet_add_side_data(). + xxxxxxx - Add AVCodecContext.coded_side_data. + xxxxxxx - Add AVCPBProperties API. + xxxxxxx - Add a new public header dirac.h containing + av_dirac_parse_sequence_header() + +2015-12-11 - 676a93f - lavf 57.20.100 - avformat.h + Add av_program_add_stream_index() + +2015-11-29 - 93fb4a4 - lavc 57.16.101 - avcodec.h + Deprecate rtp_callback without replacement, i.e. it won't be possible to + get image slices before the full frame is encoded any more. The libavformat + rtpenc muxer can still be used for RFC-2190 packetization. + +2015-11-22 - fe20e34 - lavc 57.16.100 - avcodec.h + Add AV_PKT_DATA_FALLBACK_TRACK for making fallback associations between + streams. + +2015-11-22 - ad317c9 - lavf 57.19.100 - avformat.h + Add av_stream_new_side_data(). + +2015-11-22 - e12f403 - lavu 55.8.100 - xtea.h + Add av_xtea_le_init and av_xtea_le_crypt + +2015-11-18 - lavu 55.7.100 - mem.h + Add av_fast_mallocz() + +2015-10-29 - lavc 57.12.100 / 57.8.0 - avcodec.h + xxxxxx - Deprecate av_free_packet(). Use av_packet_unref() as replacement, + it resets the packet in a more consistent way. + xxxxxx - Deprecate av_dup_packet(), it is a no-op for most cases. + Use av_packet_ref() to make a non-refcounted AVPacket refcounted. + xxxxxx - Add av_packet_alloc(), av_packet_clone(), av_packet_free(). + They match the AVFrame functions with the same name. + +2015-10-27 - 1e477a9 - lavu 55.5.100 - cpu.h + Add AV_CPU_FLAG_AESNI. + +2015-10-22 - ee573b4 / a17a766 - lavc 57.9.100 / 57.5.0 - avcodec.h + Add data and linesize array to AVSubtitleRect, to be used instead of + the ones from the embedded AVPicture. + +2015-10-22 - 866a417 / dc923bc - lavc 57.8.100 / 57.0.0 - qsv.h + Add an API for allocating opaque surfaces. + +2015-10-15 - 2c2d162 - lavf 57.4.100 + Remove the latm demuxer that was a duplicate of the loas demuxer. + +2015-10-14 - b994788 / 11c5f43 - lavu 55.4.100 / 55.2.0 - dict.h + Change return type of av_dict_copy() from void to int, so that a proper + error code can be reported. + +2015-09-29 - b01891a / 948f3c1 - lavc 57.3.100 / 57.2.0 - avcodec.h + Change type of AVPacket.duration from int to int64_t. + +2015-09-17 - 7c46f24 / e3d4784 - lavc 57.3.100 / 57.2.0 - d3d11va.h + Add av_d3d11va_alloc_context(). This function must from now on be used for + allocating AVD3D11VAContext. + +2015-09-15 - lavf 57.2.100 - avformat.h + probesize and max_analyze_duration switched to 64bit, both + are only accessible through AVOptions + +2015-09-15 - lavf 57.1.100 - avformat.h + bit_rate was changed to 64bit, make sure you update any + printf() or other type sensitive code + +2015-09-15 - lavc 57.2.100 - avcodec.h + bit_rate/rc_max_rate/rc_min_rate were changed to 64bit, make sure you update + any printf() or other type sensitive code + +2015-09-07 - lavu 55.0.100 / 55.0.0 + c734b34 / b8b5d82 - Change type of AVPixFmtDescriptor.flags from uint8_t to uint64_t. + f53569a / 6b3ef7f - Change type of AVComponentDescriptor fields from uint16_t to int + and drop bit packing. + 151aa2e / 2268db2 - Add step, offset, and depth to AVComponentDescriptor to replace + the deprecated step_minus1, offset_plus1, and depth_minus1. \ No newline at end of file diff --git a/src/lib/ffmpeg-3.1/avcodec.pas b/src/lib/ffmpeg-3.1/avcodec.pas new file mode 100644 index 00000000..dccb6123 --- /dev/null +++ b/src/lib/ffmpeg-3.1/avcodec.pas @@ -0,0 +1,6802 @@ +(* + * copyright (c) 2001 Fabrice Bellard + * + * 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 St, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavcodec/avcodec.h + * version: 56.1.100 + * + *) + +unit avcodec; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} (* for ffmpeg defines *) +{$I ff_api-defines.inc} (* FF_API_* defines *) + +{$IFDEF DARWIN} + {$linklib libavcodec} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + SysUtils, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + (* + * IMPORTANT: The official FFmpeg C headers change very quickly. Often some + * of the data structures are changed so that they become incompatible with + * older header files. The Pascal headers have to be adjusted to those changes, + * otherwise the application might crash randomly or strange bugs (not + * necessarily related to video or audio due to buffer overflows etc.) might + * occur. + * + * In the past users reported problems with USDX that took hours to fix and + * the problem was an unsupported version of FFmpeg. So we decided to disable + * support for future versions of FFmpeg until the headers are revised by us + * for that version as they otherwise most probably will break USDX. + * + * If the headers do not yet support your FFmpeg version you may want to + * adjust the max. version numbers manually but please note: it may work but + * in many cases it does not. The USDX team does NOT PROVIDE ANY SUPPORT + * for the game if the MAX. VERSION WAS CHANGED. + * + * The only safe way to support new versions of FFmpeg is to add the changes + * of the FFmpeg git repository C headers to the Pascal headers. + * You can accelerate this process by posting a patch with the git changes + * translated to Pascal to our bug tracker (please join our IRC chat before + * you start working on it). Simply adjusting the max. versions is NOT a valid + * fix. + *) + + (* Supported version by this header *) + LIBAVCODEC_MAX_VERSION_MAJOR = 57; + LIBAVCODEC_MAX_VERSION_MINOR = 48; + LIBAVCODEC_MAX_VERSION_RELEASE = 101; + LIBAVCODEC_MAX_VERSION = (LIBAVCODEC_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVCODEC_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVCODEC_MAX_VERSION_RELEASE * VERSION_RELEASE); + + (* Min. supported version by this header *) + LIBAVCODEC_MIN_VERSION_MAJOR = 57; + LIBAVCODEC_MIN_VERSION_MINOR = 48; + LIBAVCODEC_MIN_VERSION_RELEASE = 101; + LIBAVCODEC_MIN_VERSION = (LIBAVCODEC_MIN_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVCODEC_MIN_VERSION_MINOR * VERSION_MINOR) + + (LIBAVCODEC_MIN_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBAVCODEC_VERSION < LIBAVCODEC_MIN_VERSION)} + {$MESSAGE Error 'Linked version of libavcodec is too old!'} +{$IFEND} + +(* Check if linked version is supported *) +{$IF (LIBAVCODEC_VERSION > LIBAVCODEC_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libavcodec is not yet supported!'} +{$IFEND} + +{$IFNDEF FPC} +type + // defines for Delphi + size_t = cardinal; +{$ENDIF} + +type + FF_INTERNALC_MEM_TYPE = cuint; + +const + AV_NOPTS_VALUE: cint64 = $8000000000000000; + AV_TIME_BASE = 1000000; + AV_TIME_BASE_Q: TAVRational = (num: 1; den: AV_TIME_BASE); + +(** + * @ingroup libavc + * @defgroup lavc_encdec send/receive encoding and decoding API overview + * @{ + * + * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ + * avcodec_receive_packet() functions provide an encode/decode API, which + * decouples input and output. + * + * The API is very similar for encoding/decoding and audio/video, and works as + * follows: + * - Set up and open the AVCodecContext as usual. + * - Send valid input: + * - For decoding, call avcodec_send_packet() to give the decoder raw + * compressed data in an AVPacket. + * - For encoding, call avcodec_send_frame() to give the decoder an AVFrame + * containing uncompressed audio or video. + * In both cases, it is recommended that AVPackets and AVFrames are + * refcounted, or libavcodec might have to copy the input data. (libavformat + * always returns refcounted AVPackets, and av_frame_get_buffer() allocates + * refcounted AVFrames.) + * - Receive output in a loop. Periodically call one of the avcodec_receive_*() + * functions and process their output: + * - For decoding, call avcodec_receive_frame(). On success, it will return + * an AVFrame containing uncompressed audio or video data. + * - For encoding, call avcodec_receive_packet(). On success, it will return + * an AVPacket with a compressed frame. + * Repeat this call until it returns AVERROR(EAGAIN) or an error. The + * AVERROR(EAGAIN) return value means that new input data is required to + * return new output. In this case, continue with sending input. For each + * input frame/packet, the codec will typically return 1 output frame/packet, + * but it can also be 0 or more than 1. + * + * At the beginning of decoding or encoding, the codec might accept multiple + * input frames/packets without returning a frame, until its internal buffers + * are filled. This situation is handled transparently if you follow the steps + * outlined above. + * + * End of stream situations. These require "flushing" (aka draining) the codec, + * as the codec might buffer multiple frames or packets internally for + * performance or out of necessity (consider B-frames). + * This is handled as follows: + * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) + * or avcodec_send_frame() (encoding) functions. This will enter draining + * mode. + * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() + * (encoding) in a loop until AVERROR_EOF is returned. The functions will + * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. + * - Before decoding can be resumed again, the codec has to be reset with + * avcodec_flush_buffers(). + * + * Using the API as outlined above is highly recommended. But it is also + * possible to call functions outside of this rigid schema. For example, you can + * call avcodec_send_packet() repeatedly without calling + * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed + * until the codec's internal buffer has been filled up (which is typically of + * size 1 per output frame, after initial input), and then reject input with + * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to + * read at least some output. + * + * Not all codecs will follow a rigid and predictable dataflow; the only + * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on + * one end implies that a receive/send call on the other end will succeed. In + * general, no codec will permit unlimited buffering of input or output. + * + * This API replaces the following legacy functions: + * - avcodec_decode_video2() and avcodec_decode_audio4(): + * Use avcodec_send_packet() to feed input to the decoder, then use + * avcodec_receive_frame() to receive decoded frames after each packet. + * Unlike with the old video decoding API, multiple frames might result from + * a packet. For audio, splitting the input packet into frames by partially + * decoding packets becomes transparent to the API user. You never need to + * feed an AVPacket to the API twice. + * Additionally, sending a flush/draining packet is required only once. + * - avcodec_encode_video2()/avcodec_encode_audio2(): + * Use avcodec_send_frame() to feed input to the encoder, then use + * avcodec_receive_packet() to receive encoded packets. + * Providing user-allocated buffers for avcodec_receive_packet() is not + * possible. + * - The new API does not handle subtitles yet. + * + * Mixing new and old function calls on the same AVCodecContext is not allowed, + * and will result in undefined behavior. + * + * Some codecs might require using the new API; using the old API will return + * an error when calling it. + * @} + *) + +(** + * @defgroup lavc_core Core functions/structures. + * @ingroup libavc + * + * Basic definitions, functions for querying libavcodec capabilities, + * allocating core structures, etc. + * @ + *) + +(** + * Identify the syntax and semantics of the bitstream. + * The principle is roughly: + * Two decoders with the same ID can decode the same streams. + * Two encoders with the same ID can encode compatible streams. + * There may be slight deviations from the principle due to implementation + * details. + * + * If you add a codec ID to this list, add it so that + * 1. no value of an existing codec ID changes (that would break ABI), + * 2. it is as close as possible to similar codecs + * + * After adding new codec IDs, do not forget to add an entry to the codec + * descriptor list and bump libavcodec minor version. + *) +type + PAVCodecID = ^TAVCodecID; + TAVCodecID = ( + AV_CODEC_ID_NONE, + + //* video codecs */ + AV_CODEC_ID_MPEG1VIDEO, + AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding +{$IFDEF FF_API_XVMC} + AV_CODEC_ID_MPEG2VIDEO_XVMC, +{$IFEND} + AV_CODEC_ID_H261, + AV_CODEC_ID_H263, + AV_CODEC_ID_RV10, + AV_CODEC_ID_RV20, + AV_CODEC_ID_MJPEG, + AV_CODEC_ID_MJPEGB, + AV_CODEC_ID_LJPEG, + AV_CODEC_ID_SP5X, + AV_CODEC_ID_JPEGLS, + AV_CODEC_ID_MPEG4, + AV_CODEC_ID_RAWVIDEO, + AV_CODEC_ID_MSMPEG4V1, + AV_CODEC_ID_MSMPEG4V2, + AV_CODEC_ID_MSMPEG4V3, + AV_CODEC_ID_WMV1, + AV_CODEC_ID_WMV2, + AV_CODEC_ID_H263P, + AV_CODEC_ID_H263I, + AV_CODEC_ID_FLV1, + AV_CODEC_ID_SVQ1, + AV_CODEC_ID_SVQ3, + AV_CODEC_ID_DVVIDEO, + AV_CODEC_ID_HUFFYUV, + AV_CODEC_ID_CYUV, + AV_CODEC_ID_H264, + AV_CODEC_ID_INDEO3, + AV_CODEC_ID_VP3, + AV_CODEC_ID_THEORA, + AV_CODEC_ID_ASV1, + AV_CODEC_ID_ASV2, + AV_CODEC_ID_FFV1, + AV_CODEC_ID_4XM, + AV_CODEC_ID_VCR1, + AV_CODEC_ID_CLJR, + AV_CODEC_ID_MDEC, + AV_CODEC_ID_ROQ, + AV_CODEC_ID_INTERPLAY_VIDEO, + AV_CODEC_ID_XAN_WC3, + AV_CODEC_ID_XAN_WC4, + AV_CODEC_ID_RPZA, + AV_CODEC_ID_CINEPAK, + AV_CODEC_ID_WS_VQA, + AV_CODEC_ID_MSRLE, + AV_CODEC_ID_MSVIDEO1, + AV_CODEC_ID_IDCIN, + AV_CODEC_ID_8BPS, + AV_CODEC_ID_SMC, + AV_CODEC_ID_FLIC, + AV_CODEC_ID_TRUEMOTION1, + AV_CODEC_ID_VMDVIDEO, + AV_CODEC_ID_MSZH, + AV_CODEC_ID_ZLIB, + AV_CODEC_ID_QTRLE, + AV_CODEC_ID_TSCC, + AV_CODEC_ID_ULTI, + AV_CODEC_ID_QDRAW, + AV_CODEC_ID_VIXL, + AV_CODEC_ID_QPEG, + AV_CODEC_ID_PNG, + AV_CODEC_ID_PPM, + AV_CODEC_ID_PBM, + AV_CODEC_ID_PGM, + AV_CODEC_ID_PGMYUV, + AV_CODEC_ID_PAM, + AV_CODEC_ID_FFVHUFF, + AV_CODEC_ID_RV30, + AV_CODEC_ID_RV40, + AV_CODEC_ID_VC1, + AV_CODEC_ID_WMV3, + AV_CODEC_ID_LOCO, + AV_CODEC_ID_WNV1, + AV_CODEC_ID_AASC, + AV_CODEC_ID_INDEO2, + AV_CODEC_ID_FRAPS, + AV_CODEC_ID_TRUEMOTION2, + AV_CODEC_ID_BMP, + AV_CODEC_ID_CSCD, + AV_CODEC_ID_MMVIDEO, + AV_CODEC_ID_ZMBV, + AV_CODEC_ID_AVS, + AV_CODEC_ID_SMACKVIDEO, + AV_CODEC_ID_NUV, + AV_CODEC_ID_KMVC, + AV_CODEC_ID_FLASHSV, + AV_CODEC_ID_CAVS, + AV_CODEC_ID_JPEG2000, + AV_CODEC_ID_VMNC, + AV_CODEC_ID_VP5, + AV_CODEC_ID_VP6, + AV_CODEC_ID_VP6F, + AV_CODEC_ID_TARGA, + AV_CODEC_ID_DSICINVIDEO, + AV_CODEC_ID_TIERTEXSEQVIDEO, + AV_CODEC_ID_TIFF, + AV_CODEC_ID_GIF, + AV_CODEC_ID_DXA, + AV_CODEC_ID_DNXHD, + AV_CODEC_ID_THP, + AV_CODEC_ID_SGI, + AV_CODEC_ID_C93, + AV_CODEC_ID_BETHSOFTVID, + AV_CODEC_ID_PTX, + AV_CODEC_ID_TXD, + AV_CODEC_ID_VP6A, + AV_CODEC_ID_AMV, + AV_CODEC_ID_VB, + AV_CODEC_ID_PCX, + AV_CODEC_ID_SUNRAST, + AV_CODEC_ID_INDEO4, + AV_CODEC_ID_INDEO5, + AV_CODEC_ID_MIMIC, + AV_CODEC_ID_RL2, + AV_CODEC_ID_ESCAPE124, + AV_CODEC_ID_DIRAC, + AV_CODEC_ID_BFI, + AV_CODEC_ID_CMV, + AV_CODEC_ID_MOTIONPIXELS, + AV_CODEC_ID_TGV, + AV_CODEC_ID_TGQ, + AV_CODEC_ID_TQI, + AV_CODEC_ID_AURA, + AV_CODEC_ID_AURA2, + AV_CODEC_ID_V210X, + AV_CODEC_ID_TMV, + AV_CODEC_ID_V210, + AV_CODEC_ID_DPX, + AV_CODEC_ID_MAD, + AV_CODEC_ID_FRWU, + AV_CODEC_ID_FLASHSV2, + AV_CODEC_ID_CDGRAPHICS, + AV_CODEC_ID_R210, + AV_CODEC_ID_ANM, + AV_CODEC_ID_BINKVIDEO, + AV_CODEC_ID_IFF_ILBM, + AV_CODEC_ID_IFF_BYTERUN1 = AV_CODEC_ID_IFF_ILBM, + AV_CODEC_ID_KGV1, + AV_CODEC_ID_YOP, + AV_CODEC_ID_VP8, + AV_CODEC_ID_PICTOR, + AV_CODEC_ID_ANSI, + AV_CODEC_ID_A64_MULTI, + AV_CODEC_ID_A64_MULTI5, + AV_CODEC_ID_R10K, + AV_CODEC_ID_MXPEG, + AV_CODEC_ID_LAGARITH, + AV_CODEC_ID_PRORES, + AV_CODEC_ID_JV, + AV_CODEC_ID_DFA, + AV_CODEC_ID_WMV3IMAGE, + AV_CODEC_ID_VC1IMAGE, + AV_CODEC_ID_UTVIDEO, + AV_CODEC_ID_BMV_VIDEO, + AV_CODEC_ID_VBLE, + AV_CODEC_ID_DXTORY, + AV_CODEC_ID_V410, + AV_CODEC_ID_XWD, + AV_CODEC_ID_CDXL, + AV_CODEC_ID_XBM, + AV_CODEC_ID_ZEROCODEC, + AV_CODEC_ID_MSS1, + AV_CODEC_ID_MSA1, + AV_CODEC_ID_TSCC2, + AV_CODEC_ID_MTS2, + AV_CODEC_ID_CLLC, + AV_CODEC_ID_MSS2, + AV_CODEC_ID_VP9, + AV_CODEC_ID_AIC, + AV_CODEC_ID_ESCAPE130, + AV_CODEC_ID_G2M, + AV_CODEC_ID_WEBP, + AV_CODEC_ID_HNM4_VIDEO, + AV_CODEC_ID_HEVC, + AV_CODEC_ID_FIC, + AV_CODEC_ID_ALIAS_PIX, + AV_CODEC_ID_BRENDER_PIX, + AV_CODEC_ID_PAF_VIDEO, + AV_CODEC_ID_EXR, + AV_CODEC_ID_VP7, + AV_CODEC_ID_SANM, + AV_CODEC_ID_SGIRLE, + AV_CODEC_ID_MVC1, + AV_CODEC_ID_MVC2, + AV_CODEC_ID_HQX, + AV_CODEC_ID_TDSC, + AV_CODEC_ID_HQ_HQA, + AV_CODEC_ID_HAP, + AV_CODEC_ID_DDS, + AV_CODEC_ID_DXV, + AV_CODEC_ID_SCREENPRESSO, + AV_CODEC_ID_RSCC, + + AV_CODEC_ID_Y41P = $8000, + AV_CODEC_ID_AVRP, + AV_CODEC_ID_012V, + AV_CODEC_ID_AVUI, + AV_CODEC_ID_AYUV, + AV_CODEC_ID_TARGA_Y216, + AV_CODEC_ID_V308, + AV_CODEC_ID_V408, + AV_CODEC_ID_YUV4, + AV_CODEC_ID_AVRN, + AV_CODEC_ID_CPIA, + AV_CODEC_ID_XFACE, + AV_CODEC_ID_SNOW, + AV_CODEC_ID_SMVJPEG, + AV_CODEC_ID_APNG, + AV_CODEC_ID_DAALA, + AV_CODEC_ID_CFHD, + AV_CODEC_ID_TRUEMOTION2RT, + AV_CODEC_ID_M101, + AV_CODEC_ID_MAGICYUV, + AV_CODEC_ID_SHEERVIDEO, + AV_CODEC_ID_YLC, + + //* various PCM "codecs" */ + AV_CODEC_ID_FIRST_AUDIO = $10000, ///< A dummy id pointing at the start of audio codecs + AV_CODEC_ID_PCM_S16LE = $10000, + AV_CODEC_ID_PCM_S16BE, + AV_CODEC_ID_PCM_U16LE, + AV_CODEC_ID_PCM_U16BE, + AV_CODEC_ID_PCM_S8, + AV_CODEC_ID_PCM_U8, + AV_CODEC_ID_PCM_MULAW, + AV_CODEC_ID_PCM_ALAW, + AV_CODEC_ID_PCM_S32LE, + AV_CODEC_ID_PCM_S32BE, + AV_CODEC_ID_PCM_U32LE, + AV_CODEC_ID_PCM_U32BE, + AV_CODEC_ID_PCM_S24LE, + AV_CODEC_ID_PCM_S24BE, + AV_CODEC_ID_PCM_U24LE, + AV_CODEC_ID_PCM_U24BE, + AV_CODEC_ID_PCM_S24DAUD, + AV_CODEC_ID_PCM_ZORK, + AV_CODEC_ID_PCM_S16LE_PLANAR, + AV_CODEC_ID_PCM_DVD, + AV_CODEC_ID_PCM_F32BE, + AV_CODEC_ID_PCM_F32LE, + AV_CODEC_ID_PCM_F64BE, + AV_CODEC_ID_PCM_F64LE, + AV_CODEC_ID_PCM_BLURAY, + AV_CODEC_ID_PCM_LXF, + AV_CODEC_ID_S302M, + AV_CODEC_ID_PCM_S8_PLANAR, + AV_CODEC_ID_PCM_S24LE_PLANAR, + AV_CODEC_ID_PCM_S32LE_PLANAR, + AV_CODEC_ID_PCM_S16BE_PLANAR, + (* new PCM "codecs" should be added right below this line starting with + * an explicit value of for example 0x10800 + *) + + //* various ADPCM codecs */ + AV_CODEC_ID_ADPCM_IMA_QT = $11000, + AV_CODEC_ID_ADPCM_IMA_WAV, + AV_CODEC_ID_ADPCM_IMA_DK3, + AV_CODEC_ID_ADPCM_IMA_DK4, + AV_CODEC_ID_ADPCM_IMA_WS, + AV_CODEC_ID_ADPCM_IMA_SMJPEG, + AV_CODEC_ID_ADPCM_MS, + AV_CODEC_ID_ADPCM_4XM, + AV_CODEC_ID_ADPCM_XA, + AV_CODEC_ID_ADPCM_ADX, + AV_CODEC_ID_ADPCM_EA, + AV_CODEC_ID_ADPCM_G726, + AV_CODEC_ID_ADPCM_CT, + AV_CODEC_ID_ADPCM_SWF, + AV_CODEC_ID_ADPCM_YAMAHA, + AV_CODEC_ID_ADPCM_SBPRO_4, + AV_CODEC_ID_ADPCM_SBPRO_3, + AV_CODEC_ID_ADPCM_SBPRO_2, + AV_CODEC_ID_ADPCM_THP, + AV_CODEC_ID_ADPCM_IMA_AMV, + AV_CODEC_ID_ADPCM_EA_R1, + AV_CODEC_ID_ADPCM_EA_R3, + AV_CODEC_ID_ADPCM_EA_R2, + AV_CODEC_ID_ADPCM_IMA_EA_SEAD, + AV_CODEC_ID_ADPCM_IMA_EA_EACS, + AV_CODEC_ID_ADPCM_EA_XAS, + AV_CODEC_ID_ADPCM_EA_MAXIS_XA, + AV_CODEC_ID_ADPCM_IMA_ISS, + AV_CODEC_ID_ADPCM_G722, + AV_CODEC_ID_ADPCM_IMA_APC, + AV_CODEC_ID_ADPCM_VIMA, +{$IFDEF FF_API_VIMA_DECODER} + AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA, +{$IFEND} + AV_CODEC_ID_ADPCM_AFC = $11800, + AV_CODEC_ID_ADPCM_IMA_OKI, + AV_CODEC_ID_ADPCM_DTK, + AV_CODEC_ID_ADPCM_IMA_RAD, + AV_CODEC_ID_ADPCM_G726LE, + AV_CODEC_ID_ADPCM_THP_LE, + AV_CODEC_ID_ADPCM_PSX, + AV_CODEC_ID_ADPCM_AICA, + AV_CODEC_ID_ADPCM_IMA_DAT4, + AV_CODEC_ID_ADPCM_MTAF, + + //* AMR */ + AV_CODEC_ID_AMR_NB = $12000, + AV_CODEC_ID_AMR_WB, + + //* RealAudio codecs*/ + AV_CODEC_ID_RA_144 = $13000, + AV_CODEC_ID_RA_288, + + //* various DPCM codecs */ + AV_CODEC_ID_ROQ_DPCM = $14000, + AV_CODEC_ID_INTERPLAY_DPCM, + AV_CODEC_ID_XAN_DPCM, + AV_CODEC_ID_SOL_DPCM, + + AV_CODEC_ID_SDX2_DPCM = $14800, + + //* audio codecs */ + AV_CODEC_ID_MP2 = $15000, + AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 + AV_CODEC_ID_AAC, + AV_CODEC_ID_AC3, + AV_CODEC_ID_DTS, + AV_CODEC_ID_VORBIS, + AV_CODEC_ID_DVAUDIO, + AV_CODEC_ID_WMAV1, + AV_CODEC_ID_WMAV2, + AV_CODEC_ID_MACE3, + AV_CODEC_ID_MACE6, + AV_CODEC_ID_VMDAUDIO, + AV_CODEC_ID_FLAC, + AV_CODEC_ID_MP3ADU, + AV_CODEC_ID_MP3ON4, + AV_CODEC_ID_SHORTEN, + AV_CODEC_ID_ALAC, + AV_CODEC_ID_WESTWOOD_SND1, + AV_CODEC_ID_GSM, ///< as in Berlin toast format + AV_CODEC_ID_QDM2, + AV_CODEC_ID_COOK, + AV_CODEC_ID_TRUESPEECH, + AV_CODEC_ID_TTA, + AV_CODEC_ID_SMACKAUDIO, + AV_CODEC_ID_QCELP, + AV_CODEC_ID_WAVPACK, + AV_CODEC_ID_DSICINAUDIO, + AV_CODEC_ID_IMC, + AV_CODEC_ID_MUSEPACK7, + AV_CODEC_ID_MLP, + AV_CODEC_ID_GSM_MS, { as found in WAV } + AV_CODEC_ID_ATRAC3, +{$IFDEF FF_API_VOXWARE} + AV_CODEC_ID_VOXWARE, +{$IFEND} + AV_CODEC_ID_APE, + AV_CODEC_ID_NELLYMOSER, + AV_CODEC_ID_MUSEPACK8, + AV_CODEC_ID_SPEEX, + AV_CODEC_ID_WMAVOICE, + AV_CODEC_ID_WMAPRO, + AV_CODEC_ID_WMALOSSLESS, + AV_CODEC_ID_ATRAC3P, + AV_CODEC_ID_EAC3, + AV_CODEC_ID_SIPR, + AV_CODEC_ID_MP1, + AV_CODEC_ID_TWINVQ, + AV_CODEC_ID_TRUEHD, + AV_CODEC_ID_MP4ALS, + AV_CODEC_ID_ATRAC1, + AV_CODEC_ID_BINKAUDIO_RDFT, + AV_CODEC_ID_BINKAUDIO_DCT, + AV_CODEC_ID_AAC_LATM, + AV_CODEC_ID_QDMC, + AV_CODEC_ID_CELT, + AV_CODEC_ID_G723_1, + AV_CODEC_ID_G729, + AV_CODEC_ID_8SVX_EXP, + AV_CODEC_ID_8SVX_FIB, + AV_CODEC_ID_BMV_AUDIO, + AV_CODEC_ID_RALF, + AV_CODEC_ID_IAC, + AV_CODEC_ID_ILBC, + AV_CODEC_ID_OPUS, + AV_CODEC_ID_COMFORT_NOISE, + AV_CODEC_ID_TAK, + AV_CODEC_ID_PAF_AUDIO, + AV_CODEC_ID_ON2AVC, + AV_CODEC_ID_DSS_SP, + + AV_CODEC_ID_FFWAVESYNTH = $15800, + AV_CODEC_ID_SONIC, + AV_CODEC_ID_SONIC_LS, + AV_CODEC_ID_EVRC, + AV_CODEC_ID_SMV, + AV_CODEC_ID_DSD_LSBF, + AV_CODEC_ID_DSD_MSBF, + AV_CODEC_ID_DSD_LSBF_PLANAR, + AV_CODEC_ID_DSD_MSBF_PLANAR, + AV_CODEC_ID_4GV, + AV_CODEC_ID_INTERPLAY_ACM, + AV_CODEC_ID_XMA1, + AV_CODEC_ID_XMA2, + AV_CODEC_ID_DST, + + //* subtitle codecs */ + AV_CODEC_ID_FIRST_SUBTITLE = $17000, ///< A dummy ID pointing at the start of subtitle codecs. + AV_CODEC_ID_DVD_SUBTITLE = $17000, + AV_CODEC_ID_DVB_SUBTITLE, + AV_CODEC_ID_TEXT, ///< raw UTF-8 text + AV_CODEC_ID_XSUB, + AV_CODEC_ID_SSA, + AV_CODEC_ID_MOV_TEXT, + AV_CODEC_ID_HDMV_PGS_SUBTITLE, + AV_CODEC_ID_DVB_TELETEXT, + AV_CODEC_ID_SRT, + AV_CODEC_ID_MICRODVD = $17800, + AV_CODEC_ID_EIA_608, + AV_CODEC_ID_JACOSUB, + AV_CODEC_ID_SAMI, + AV_CODEC_ID_REALTEXT, + AV_CODEC_ID_STL, + AV_CODEC_ID_SUBVIEWER1, + AV_CODEC_ID_SUBVIEWER, + AV_CODEC_ID_SUBRIP, + AV_CODEC_ID_WEBVTT, + AV_CODEC_ID_MPL2, + AV_CODEC_ID_VPLAYER, + AV_CODEC_ID_PJS, + AV_CODEC_ID_ASS, + AV_CODEC_ID_HDMV_TEXT_SUBTITLE, + + //* other specific kind of codecs (generally used for attachments) */ + AV_CODEC_ID_FIRST_UNKNOWN = $18000, ///< A dummy ID pointing at the start of various fake codecs. + AV_CODEC_ID_TTF = $18000, + + AV_CODEC_ID_BINTEXT = $18800, + AV_CODEC_ID_XBIN, + AV_CODEC_ID_IDF, + AV_CODEC_ID_OTF, + AV_CODEC_ID_SMPTE_KLV, + AV_CODEC_ID_DVD_NAV, + AV_CODEC_ID_TIMED_ID3, + AV_CODEC_ID_BIN_DATA, + + AV_CODEC_ID_PROBE = $19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it + + AV_CODEC_ID_MPEG2TS = $20000, (**< _FAKE_ codec to indicate a raw MPEG-2 TS + * stream (only used by libavformat) *) + AV_CODEC_ID_MPEG4SYSTEMS = $20001, (**< _FAKE_ codec to indicate a MPEG-4 Systems + * stream (only used by libavformat) *) + AV_CODEC_ID_FFMETADATA = $21000, ///< Dummy codec for streams containing only metadata information. + AV_CODEC_ID_WRAPPED_AVFRAME = $21001 ///< Passthrough codec, AVFrames wrapped in AVPacket + ); + +type + TCodecType = TAVMediaType; + +const + CODEC_TYPE_UNKNOWN = AVMEDIA_TYPE_UNKNOWN; + CODEC_TYPE_VIDEO = AVMEDIA_TYPE_VIDEO; + CODEC_TYPE_AUDIO = AVMEDIA_TYPE_AUDIO; + CODEC_TYPE_DATA = AVMEDIA_TYPE_DATA; + CODEC_TYPE_SUBTITLE = AVMEDIA_TYPE_SUBTITLE; + CODEC_TYPE_ATTACHMENT = AVMEDIA_TYPE_ATTACHMENT; + CODEC_TYPE_NB = AVMEDIA_TYPE_NB; + +(** + * This struct describes the properties of a single codec described by an + * AVCodecID. + * @see avcodec_descriptor_get() + *) +type + + (** + * AVProfile. + *) + PAVProfile = ^TAVProfile; + TAVProfile = record + profile: cint; + name: {const} PAnsiChar; ///< short name for the profile + end; {TAVProfile} + + PAVCodecDescriptor = ^TAVCodecDescriptor; + TAVCodecDescriptor = record + id: TAVCodecID; + type_: TAVMediaType; + (** + * Name of the codec described by this descriptor. It is non-empty and + * unique for each codec descriptor. It should contain alphanumeric + * characters and '_' only. + *) + name: PAnsiChar; + (** + * A more descriptive name for this codec. May be NULL. + *) + long_name: PAnsiChar; + (** + * Codec properties, a combination of AV_CODEC_PROP_* flags. + *) + props: cint; + + (** + * MIME type(s) associated with the codec. + * May be NULL; if not, a NULL-terminated array of MIME types. + * The first item is always non-NULL and is the preferred MIME type. + *) + mime_types: PAnsiChar; + + (** + * If non-NULL, an array of profiles recognized for this codec. + * Terminated with FF_PROFILE_UNKNOWN. + *) + profiles: PAVProfile; + end; + +const +(** + * Codec uses only intra compression. + * Video codecs only. + *) + AV_CODEC_PROP_INTRA_ONLY = 1 << 0; +(** + * Codec supports lossy compression. Audio and video codecs only. + * @note a codec may support both lossy and lossless + * compression modes + *) + AV_CODEC_PROP_LOSSY = 1 << 1; +(** + * Codec supports lossless compression. Audio and video codecs only. + *) + AV_CODEC_PROP_LOSSLESS = 1 << 2; +(** + * Codec supports frame reordering. That is, the coded order (the order in which + * the encoded packets are output by the encoders / stored / input to the + * decoders) may be different from the presentation order of the corresponding + * frames. + * + * For codecs that do not have this property set, PTS and DTS should always be + * equal. + *) + AV_CODEC_PROP_REORDER = 1 << 3; +(** + * Subtitle codec is bitmap based + * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. + *) + AV_CODEC_PROP_BITMAP_SUB = 1 << 16; +(** + * Subtitle codec is text based. + * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. + *) + AV_CODEC_PROP_TEXT_SUB = 1 << 17; + +(** + * @ingroup lavc_decoding + * Required number of additionally allocated bytes at the end of the input bitstream for decoding. + * This is mainly needed because some optimized bitstream readers read + * 32 or 64 bit at once and could read over the end.<br> + * Note: If the first 23 bits of the additional bytes are not 0, then damaged + * MPEG bitstreams could cause overread and segfault. + *) + AV_INPUT_BUFFER_PADDING_SIZE = 32; + +(** + * @ingroup lavc_decoding + * minimum encoding buffer size. + * Used to avoid some checks during header writing. + *) + AV_INPUT_BUFFER_MIN_SIZE = 16384; + +{$IFDEF FF_API_WITHOUT_PREFIX} +(** + * @deprecated use AV_INPUT_BUFFER_PADDING_SIZE instead + *) + FF_INPUT_BUFFER_PADDING_SIZE = 32; + +(** + * @deprecated use AV_INPUT_BUFFER_MIN_SIZE instead + *) + FF_MIN_BUFFER_SIZE = 16384; +{$ENDIF} + +type +(* + * @ingroup lavc_decoding + * motion estimation type. + * @deprecated use codec private option instead + *) +{$IFDEF FF_API_MOTION_EST} + TMotion_Est_ID = ( + ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed + ME_FULL, + ME_LOG, + ME_PHODS, + ME_EPZS, ///< enhanced predictive zonal search + ME_X1, ///< reserved for experiments + ME_HEX, ///< hexagon based search + ME_UMH, ///< uneven multi-hexagon search + ME_ITER = 50, ///< iterative search + ME_TESA ///< transformed exhaustive search algorithm + ); +{$ENDIF} + +(** + * @ingroup lavc_decoding + *) + TAVDiscard = ( + (* We leave some space between them for extensions (drop some + * keyframes for intra-only or drop just some bidir frames). + *) + AVDISCARD_NONE = -16, ///< discard nothing + AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi + AVDISCARD_NONREF = 8, ///< discard all non reference + AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames + AVDISCARD_NONINTRA= 24, ///< discard all non intra frames + AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes + AVDISCARD_ALL = 48 ///< discard all + ); + +{ removed, kept for the moment + TAVColorPrimaries = ( + AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B + AVCOL_PRI_UNSPECIFIED = 2, + AVCOL_PRI_BT470M = 4, + AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above + AVCOL_PRI_FILM = 8, + AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 + AVCOL_PRI_NB ///< Not part of ABI + ); + + TAVColorTransferCharacteristic = ( + AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 + AVCOL_TRC_UNSPECIFIED = 2, + AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM + AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG + AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC + AVCOL_TRC_SMPTE240M = 7, + AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" + AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" + AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt( 10 ) : 1 range)" + AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 + AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut + AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) + AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10 bit system + AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12 bit system + AVCOL_TRC_NB ///< Not part of ABI + ); + +(** + * X X 3 4 X X are luma samples, + * 1 2 1-6 are possible chroma positions + * X X 5 6 X 0 is undefined/unknown position + *) + TAVChromaLocation = ( + AVCHROMA_LOC_UNSPECIFIED = 0, + AVCHROMA_LOC_LEFT = 1, ///< mpeg2/4, h264 default + AVCHROMA_LOC_CENTER = 2, ///< mpeg1, jpeg, h263 + AVCHROMA_LOC_TOPLEFT = 3, ///< DV + AVCHROMA_LOC_TOP = 4, + AVCHROMA_LOC_BOTTOMLEFT = 5, + AVCHROMA_LOC_BOTTOM = 6, + AVCHROMA_LOC_NB ///< Not part of ABI + ); +} + TAVAudioServiceType =( + AV_AUDIO_SERVICE_TYPE_MAIN = 0, + AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, + AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, + AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, + AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, + AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, + AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, + AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, + AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, + AV_AUDIO_SERVICE_TYPE_NB ///< Not part of ABI + ); + +(** + * @ingroup lavc_decoding + *) + PRcOverride = ^TRcOverride; + TRcOverride = record {16} + start_frame: cint; + end_frame: cint; + qscale: cint; // if this is 0 then quality_factor will be used instead + quality_factor: cfloat; + end; + +{$IFDEF FF_API_MAX_BFRAMES} + +(** + * @deprecated there is no libavcodec-wide limit on the number of B-frames + *) +const + FF_MAX_B_FRAMES = 16; + +{$IFEND} + +(* encoding support + These flags can be passed in AVCodecContext.flags before initialization. + Note: Not everything is supported yet. +*) + +(** + * Allow decoders to produce frames with data planes that are not aligned + * to CPU requirements (e.g. due to cropping). + *) + AV_CODEC_FLAG_UNALIGNED = $0001; // (1 << 0) +(** + * Use fixed qscale. + *) + AV_CODEC_FLAG_QSCALE = $0002; // (1 << 1) +(** + * 4 MV per MB allowed / advanced prediction for H.263. + *) + AV_CODEC_FLAG_4MV = $0004; // (1 << 2) +(** + * Output even those frames that might be corrupted. + *) + AV_CODEC_FLAG_OUTPUT_CORRUPT = $0008; // (1 << 3) +(** + * Use qpel MC. + *) + AV_CODEC_FLAG_QPEL = $0010; // (1 << 4) +(** + * Use internal 2pass ratecontrol in first pass mode. + *) + AV_CODEC_FLAG_PASS1 = $0200; // (1 << 9) +(** + * Use internal 2pass ratecontrol in second pass mode. + *) + AV_CODEC_FLAG_PASS2 = $0400; // (1 << 10) +(** + * loop filter. + *) + AV_CODEC_FLAG_LOOP_FILTER = $0800; // (1 << 11) +(** + * Only decode/encode grayscale. + *) + AV_CODEC_FLAG_GRAY = $2000; // (1 << 13) +(** + * error[?] variables will be set during encoding. + *) + AV_CODEC_FLAG_PSNR = $8000; // (1 << 15) +(** + * Input bitstream might be truncated at a random location + * instead of only at frame boundaries. + *) + AV_CODEC_FLAG_TRUNCATED = $10000; // (1 << 16) +(** + * Use interlaced DCT. + *) + AV_CODEC_FLAG_INTERLACED_DCT = $40000; // (1 << 18) +(** + * Force low delay. + *) + AV_CODEC_FLAG_LOW_DELAY = $80000; // (1 << 19) +(** + * Place global headers in extradata instead of every keyframe. + *) + AV_CODEC_FLAG_GLOBAL_HEADER = $400000; // (1 << 22) +(** + * Use only bitexact stuff (except (I)DCT). + *) + AV_CODEC_FLAG_BITEXACT = $800000; // (1 << 23) +(* Fx : Flag for H.263+ extra options *) +(** + * H.263 advanced intra coding / MPEG-4 AC prediction + *) + AV_CODEC_FLAG_AC_PRED = $1000000; // (1 << 24) +(** + * interlaced motion estimation + *) + AV_CODEC_FLAG_INTERLACED_ME = $20000000; // (1 << 29) + AV_CODEC_FLAG_CLOSED_GOP = $80000000; // (1U << 31) + +(** + * Allow non spec compliant speedup tricks. + *) + AV_CODEC_FLAG2_FAST = $0001; // (1 << 0) +(** + * Skip bitstream encoding. + *) + AV_CODEC_FLAG2_NO_OUTPUT = $0004; // (1 << 2) +(** + * Place global headers at every keyframe instead of in extradata. + *) + AV_CODEC_FLAG2_LOCAL_HEADER = $0008; // (1 << 3) + +(** + * timecode is in drop frame format. DEPRECATED!!!! + *) + AV_CODEC_FLAG2_DROP_FRAME_TIMECODE = $2000; // (1 << 13) + +(** + * Input bitstream might be truncated at a packet boundaries + * instead of only at frame boundaries. + *) + AV_CODEC_FLAG2_CHUNKS = $8000; // (1 << 15) +(** + * Discard cropping information from SPS. + *) + AV_CODEC_FLAG2_IGNORE_CROP = $10000; // (1 << 16) + +(** + * Show all frames before the first keyframe + *) + AV_CODEC_FLAG2_SHOW_ALL = $400000; // (1 << 22) +(** + * Export motion vectors through frame side data + *) + AV_CODEC_FLAG2_EXPORT_MVS = $10000000; // (1 << 28) +(** + * Do not skip samples and export skip information as frame side data + *) + AV_CODEC_FLAG2_SKIP_MANUAL = $20000000; // (1 << 29) +(** + * Do not reset ASS ReadOrder field on flush (subtitles decoding) + *) + AV_CODEC_FLAG2_RO_FLUSH_NOOP = $40000000; + +(* Unsupported options : + * Syntax Arithmetic coding (SAC) + * Reference Picture Selection + * Independent Segment Decoding *) +(* /Fx *) +(* codec capabilities *) + +(** + * Decoder can use draw_horiz_band callback. + *) + AV_CODEC_CAP_DRAW_HORIZ_BAND = $0001; // (1 << 0) +(** + * Codec uses get_buffer() for allocating buffers and supports custom allocators. + * If not set, it might not use get_buffer() at all or use operations that + * assume the buffer was allocated by avcodec_default_get_buffer. + *) + AV_CODEC_CAP_DR1 = $0002; // (1 << 1) + AV_CODEC_CAP_TRUNCATED = $0008; // (1 << 3) +(** + * Encoder or decoder requires flushing with NULL input at the end in order to + * give the complete and correct output. + * + * NOTE: If this flag is not set, the codec is guaranteed to never be fed with + * with NULL data. The user can still send NULL data to the public encode + * or decode function, but libavcodec will not pass it along to the codec + * unless this flag is set. + * + * Decoders: + * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, + * avpkt->size=0 at the end to get the delayed data until the decoder no longer + * returns frames. + * + * Encoders: + * The encoder needs to be fed with NULL data at the end of encoding until the + * encoder no longer returns data. + * + * NOTE: For encoders implementing the AVCodec.encode2() function, setting this + * flag also means that the encoder must set the pts and duration for + * each output packet. If this flag is not set, the pts and duration will + * be determined by libavcodec from the input frame. + *) + AV_CODEC_CAP_DELAY = $0020; // (1 << 5) +(** + * Codec can be fed a final frame with a smaller size. + * This can be used to prevent truncation of the last audio samples. + *) + AV_CODEC_CAP_SMALL_LAST_FRAME = $0040; // (1 << 6) + +{$IFDEF FF_API_CAP_VDPAU} +(** + * Codec can export data for HW decoding (VDPAU). + *) + AV_CODEC_CAP_HWACCEL_VDPAU = $0080; // (1 << 7) +{$ENDIF} + +(** + * Codec can output multiple frames per AVPacket + * Normally demuxers return one frame at a time, demuxers which do not do + * are connected to a parser to split what they return into proper frames. + * This flag is reserved to the very rare category of codecs which have a + * bitstream that cannot be split into frames without timeconsuming + * operations like full decoding. Demuxers carrying such bitstreams thus + * may return multiple frames in a packet. This has many disadvantages like + * prohibiting stream copy in many cases thus it should only be considered + * as a last resort. + *) + AV_CODEC_CAP_SUBFRAMES = $0100; // (1 << 8) +(** + * Codec is experimental and is thus avoided in favor of non experimental + * encoders + *) + AV_CODEC_CAP_EXPERIMENTAL = $0200; // (1 << 9) +(** + * Codec should fill in channel configuration and samplerate instead of container + *) + AV_CODEC_CAP_CHANNEL_CONF = $0400; // (1 << 10) +(** + * Codec supports frame-level multithreading. + *) + AV_CODEC_CAP_FRAME_THREADS = $1000; // (1 << 12) +(** + * Codec supports slice-based (or partition-based) multithreading. + *) + AV_CODEC_CAP_SLICE_THREADS = $2000; // (1 << 13) +(** + * Codec supports changed parameters at any point. + *) + AV_CODEC_CAP_PARAM_CHANGE = $4000; // (1 << 14) +(** + * Codec supports avctx->thread_count == 0 (auto). + *) + AV_CODEC_CAP_AUTO_THREADS = $8000; // (1 << 15) +(** + * Audio encoder supports receiving a different number of samples in each call. + *) + AV_CODEC_CAP_VARIABLE_FRAME_SIZE = $10000; // (1 << 16) +(** + * Codec is intra only. + *) + AV_CODEC_CAP_INTRA_ONLY = $40000000; +(** + * Codec is lossless. + *) + AV_CODEC_CAP_LOSSLESS = $80000000; + + +{$IFDEF FF_API_WITHOUT_PREFIX} +(** + * Allow decoders to produce frames with data planes that are not aligned + * to CPU requirements (e.g. due to cropping). + *) + CODEC_FLAG_UNALIGNED = AV_CODEC_FLAG_UNALIGNED; + CODEC_FLAG_QSCALE = AV_CODEC_FLAG_QSCALE; + CODEC_FLAG_4MV = AV_CODEC_FLAG_4MV; + CODEC_FLAG_OUTPUT_CORRUPT = AV_CODEC_FLAG_OUTPUT_CORRUPT; + CODEC_FLAG_QPEL = AV_CODEC_FLAG_QPEL; +{$IFDEF FF_API_GMC} +(** + * @deprecated use the "gmc" private option of the libxvid encoder + *) + CODEC_FLAG_GMC = $0020; ///< use GMC. +{$IFEND} +{$IFDEF FF_API_MV0} +(** + * @deprecated use the flag "mv0" in the "mpv_flags" private option of the + * mpegvideo encoders + *) + CODEC_FLAG_MV0 = $0040; ///< always try a MB with MV=<0,0>. +{$IFEND} +{$IFDEF FF_API_INPUT_PRESERVED} +(** + * @deprecated passing reference-counted frames to the encoders replaces this + * flag + *) + CODEC_FLAG_INPUT_PRESERVED = $0100; +{$IFEND} + CODEC_FLAG_PASS1 = AV_CODEC_FLAG_PASS1; + CODEC_FLAG_PASS2 = AV_CODEC_FLAG_PASS2; + CODEC_FLAG_GRAY = AV_CODEC_FLAG_GRAY; +{$IFDEF FF_API_EMU_EDGE} + (** + * @deprecated edges are not used/required anymore. I.e. this flag is now always + * set. + *) + CODEC_FLAG_EMU_EDGE = $4000; ///< don't draw edges +{$IFEND} + CODEC_FLAG_PSNR = AV_CODEC_FLAG_PSNR; + CODEC_FLAG_TRUNCATED = AV_CODEC_FLAG_TRUNCATED; + +{$IFDEF FF_API_NORMALIZE_AQP} +(** + * @deprecated use the flag "naq" in the "mpv_flags" private option of the + * mpegvideo encoders + *) + CODEC_FLAG_NORMALIZE_AQP = $00020000; ///< normalize adaptive quantization +{$IFEND} + CODEC_FLAG_INTERLACED_DCT = AV_CODEC_FLAG_INTERLACED_DCT; + CODEC_FLAG_LOW_DELAY = AV_CODEC_FLAG_LOW_DELAY; + CODEC_FLAG_GLOBAL_HEADER = AV_CODEC_FLAG_GLOBAL_HEADER; + CODEC_FLAG_BITEXACT = AV_CODEC_FLAG_BITEXACT; + CODEC_FLAG_AC_PRED = AV_CODEC_FLAG_AC_PRED; + CODEC_FLAG_LOOP_FILTER = AV_CODEC_FLAG_LOOP_FILTER; + CODEC_FLAG_INTERLACED_ME = AV_CODEC_FLAG_INTERLACED_ME; + CODEC_FLAG_CLOSED_GOP = AV_CODEC_FLAG_CLOSED_GOP; + CODEC_FLAG2_FAST = AV_CODEC_FLAG2_FAST; + CODEC_FLAG2_NO_OUTPUT = AV_CODEC_FLAG2_NO_OUTPUT; + CODEC_FLAG2_LOCAL_HEADER = AV_CODEC_FLAG2_LOCAL_HEADER; + CODEC_FLAG2_DROP_FRAME_TIMECODE = AV_CODEC_FLAG2_DROP_FRAME_TIMECODE; + CODEC_FLAG2_IGNORE_CROP = AV_CODEC_FLAG2_IGNORE_CROP; + + CODEC_FLAG2_CHUNKS = AV_CODEC_FLAG2_CHUNKS; + CODEC_FLAG2_SHOW_ALL = AV_CODEC_FLAG2_SHOW_ALL; + CODEC_FLAG2_EXPORT_MVS = AV_CODEC_FLAG2_EXPORT_MVS; + CODEC_FLAG2_SKIP_MANUAL = AV_CODEC_FLAG2_SKIP_MANUAL; + +(* Unsupported options : + * Syntax Arithmetic coding (SAC) + * Reference Picture Selection + * Independant Segment Decoding *) +(* /Fx *) +(* codec capabilities *) + + CODEC_CAP_DRAW_HORIZ_BAND = AV_CODEC_CAP_DRAW_HORIZ_BAND; ///< decoder can use draw_horiz_band callback + +(** + * Codec uses get_buffer() for allocating buffers and supports custom allocators. + * If not set, it might not use get_buffer() at all or use operations that + * assume the buffer was allocated by avcodec_default_get_buffer. + *) + CODEC_CAP_DR1 = AV_CODEC_CAP_DR1; + CODEC_CAP_TRUNCATED = AV_CODEC_CAP_TRUNCATED; +{$IFDEF FF_API_XVMC} +(* Codec can export data for HW decoding. This flag indicates that + * the codec would call get_format() with list that might contain HW accelerated + * pixel formats (XvMC, VDPAU, VAAPI, etc). The application can pick any of them + * including raw image format. + * The application can use the passed context to determine bitstream version, + * chroma format, resolution etc. + *) + CODEC_CAP_HWACCEL = $0010; +{$IFEND} + +(** + * Encoder or decoder requires flushing with NULL input at the end in order to + * give the complete and correct output. + * + * NOTE: If this flag is not set, the codec is guaranteed to never be fed with + * with NULL data. The user can still send NULL data to the public encode + * or decode function, but libavcodec will not pass it along to the codec + * unless this flag is set. + * + * Decoders: + * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, + * avpkt->size=0 at the end to get the delayed data until the decoder no longer + * returns frames. + * + * Encoders: + * The encoder needs to be fed with NULL data at the end of encoding until the + * encoder no longer returns data. + * + * NOTE: For encoders implementing the AVCodec.encode2() function, setting this + * flag also means that the encoder must set the pts and duration for + * each output packet. If this flag is not set, the pts and duration will + * be determined by libavcodec from the input frame. + *) + CODEC_CAP_DELAY = AV_CODEC_CAP_DELAY; + +(** + * Codec can be fed a final frame with a smaller size. + * This can be used to prevent truncation of the last audio samples. + *) + CODEC_CAP_SMALL_LAST_FRAME = AV_CODEC_CAP_SMALL_LAST_FRAME; + +(** + * Codec can export data for HW decoding (VDPAU). + *) + CODEC_CAP_HWACCEL_VDPAU = AV_CODEC_CAP_HWACCEL_VDPAU; + +(** + * Codec can output multiple frames per AVPacket + * Normally demuxers return one frame at a time, demuxers which do not do + * are connected to a parser to split what they return into proper frames. + * This flag is reserved to the very rare category of codecs which have a + * bitstream that cannot be split into frames without timeconsuming + * operations like full decoding. Demuxers carrying such bitstreams thus + * may return multiple frames in a packet. This has many disadvantages like + * prohibiting stream copy in many cases thus it should only be considered + * as a last resort. + *) + CODEC_CAP_SUBFRAMES = AV_CODEC_CAP_SUBFRAMES; + +(** + * Codec is experimental and is thus avoided in favor of non experimental + * encoders + *) + CODEC_CAP_EXPERIMENTAL = AV_CODEC_CAP_EXPERIMENTAL; + +(** + * Codec should fill in channel configuration and samplerate instead of container + *) + CODEC_CAP_CHANNEL_CONF = AV_CODEC_CAP_CHANNEL_CONF; + +{$IFDEF FF_API_NEG_LINESIZES} +(** + * @deprecated no codecs use this capability + *) + CODEC_CAP_NEG_LINESIZES = $0800; +{$IFEND} + +(** + * Codec supports frame-level multithreading. + *) + CODEC_CAP_FRAME_THREADS = AV_CODEC_CAP_FRAME_THREADS; + +(** + * Codec supports slice-based (or partition-based) multithreading. + *) + CODEC_CAP_SLICE_THREADS = AV_CODEC_CAP_SLICE_THREADS; + +(** + * Codec supports changed parameters at any point. + *) + CODEC_CAP_PARAM_CHANGE = AV_CODEC_CAP_PARAM_CHANGE; + +(** + * Codec supports avctx->thread_count == 0 (auto). + *) + CODEC_CAP_AUTO_THREADS = AV_CODEC_CAP_AUTO_THREADS; + +(** + * Audio encoder supports receiving a different number of samples in each call. + *) + CODEC_CAP_VARIABLE_FRAME_SIZE = AV_CODEC_CAP_VARIABLE_FRAME_SIZE; + +(** + * Codec is intra only. + *) + CODEC_CAP_INTRA_ONLY = AV_CODEC_CAP_INTRA_ONLY; + +(** + * Codec is lossless. + *) + CODEC_CAP_LOSSLESS = AV_CODEC_CAP_LOSSLESS; +{$ENDIF} (* FF_API_WITHOUT_PREFIX *) + +{$IFDEF FF_API_MB_TYPE} + //the following defines may change, don't expect compatibility if you use them + MB_TYPE_INTRA4x4 = $001; + MB_TYPE_INTRA16x16 = $002; //FIXME h264 specific + MB_TYPE_INTRA_PCM = $004; //FIXME h264 specific + MB_TYPE_16x16 = $008; + MB_TYPE_16x8 = $010; + MB_TYPE_8x16 = $020; + MB_TYPE_8x8 = $040; + MB_TYPE_INTERLACED = $080; + MB_TYPE_DIRECT2 = $100; //FIXME + MB_TYPE_ACPRED = $200; + MB_TYPE_GMC = $400; + MB_TYPE_SKIP = $800; + MB_TYPE_P0L0 = $1000; + MB_TYPE_P1L0 = $2000; + MB_TYPE_P0L1 = $4000; + MB_TYPE_P1L1 = $8000; + MB_TYPE_L0 = (MB_TYPE_P0L0 or MB_TYPE_P1L0); + MB_TYPE_L1 = (MB_TYPE_P0L1 or MB_TYPE_P1L1); + MB_TYPE_L0L1 = (MB_TYPE_L0 or MB_TYPE_L1); + MB_TYPE_QUANT = $0010000; + MB_TYPE_CBP = $0020000; + // Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...) +{$IFEND} + +(** Note bits 24-31 are reserved for codec specific use (H.264 ref0, MPEG-1 0mv, ...) *) + +{$IFDEF FF_API_QSCALE_TYPE} + FF_QSCALE_TYPE_MPEG1 = 0; + FF_QSCALE_TYPE_MPEG2 = 1; + FF_QSCALE_TYPE_H264 = 2; + FF_QSCALE_TYPE_VP56 = 3; +{$ENDIF} + +(** + * The decoder will keep a reference to the frame and may reuse it later. + *) + AV_GET_BUFFER_FLAG_REF = 1 << 0; + + FF_COMPRESSION_DEFAULT = -1; +{$IFDEF FF_API_ASPECT_EXTENDED} + FF_ASPECT_EXTENDED = 15; +{$ENDIF} + +{$IFDEF FF_API_RC_STRATEGY} + FF_RC_STRATEGY_XVID = 1; +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + FF_PRED_LEFT = 0; + FF_PRED_PLANE = 1; + FF_PRED_MEDIAN = 2; +{$ENDIF} + + FF_CMP_SAD = 0; + FF_CMP_SSE = 1; + FF_CMP_SATD = 2; + FF_CMP_DCT = 3; + FF_CMP_PSNR = 4; + FF_CMP_BIT = 5; + FF_CMP_RD = 6; + FF_CMP_ZERO = 7; + FF_CMP_VSAD = 8; + FF_CMP_VSSE = 9; + FF_CMP_NSSE = 10; + FF_CMP_W53 = 11; + FF_CMP_W97 = 12; + FF_CMP_DCTMAX = 13; + FF_CMP_DCT264 = 14; + FF_CMP_CHROMA = 256; + +{$IFDEF FF_API_AFD} + {attribute_deprecated} + FF_DTG_AFD_SAME = 8; + FF_DTG_AFD_4_3 = 9; + FF_DTG_AFD_16_9 = 10; + FF_DTG_AFD_14_9 = 11; + FF_DTG_AFD_4_3_SP_14_9 = 13; + FF_DTG_AFD_16_9_SP_14_9 = 14; + FF_DTG_AFD_SP_4_3 = 15; +{$IFEND} + +{$IFDEF FF_API_QUANT_BIAS} + FF_DEFAULT_QUANT_BIAS = 999999; +{$ENDIF} + + SLICE_FLAG_CODED_ORDER = $0001; ///< draw_horiz_band() is called in coded order instead of display + SLICE_FLAG_ALLOW_FIELD = $0002; ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) + SLICE_FLAG_ALLOW_PLANE = $0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1) + + FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp + FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits + FF_MB_DECISION_RD = 2; ///< rate distortion + +{$IFDEF FF_API_CODER_TYPE} + FF_CODER_TYPE_VLC = 0; + FF_CODER_TYPE_AC = 1; + FF_CODER_TYPE_RAW = 2; + FF_CODER_TYPE_RLE = 3; +{$IFDEF FF_API_UNUSED_MEMBERS} + FF_CODER_TYPE_DEFLATE = 4; +{$ENDIF} {FF_API_UNUSED_MEMBERS} +{$ENDIF} {FF_API_CODER_TYPE} + FF_BUG_AUTODETECT = 1; ///< autodetection +{$IFDEF FF_API_OLD_MSMPEG4} + FF_BUG_OLD_MSMPEG4 = 2; +{$ENDIF} + FF_BUG_XVID_ILACE = 4; + FF_BUG_UMP4 = 8; + FF_BUG_NO_PADDING = 16; + FF_BUG_AMV = 32; +{$IFDEF FF_API_AC_VLC} + FF_BUG_AC_VLC = 0; ///< will be removed, libavcodec can now handle these non compliant files by default +{$ENDIF} + FF_BUG_QPEL_CHROMA = 64; + FF_BUG_STD_QPEL = 128; + FF_BUG_QPEL_CHROMA2 = 256; + FF_BUG_DIRECT_BLOCKSIZE = 512; + FF_BUG_EDGE = 1024; + FF_BUG_HPEL_CHROMA = 2048; + FF_BUG_DC_CLIP = 4096; + FF_BUG_MS = 8192; ///< workaround various bugs in microsofts broken decoders + FF_BUG_TRUNCATED = 16384; + + FF_COMPLIANCE_VERY_STRICT = 2; ///< strictly conform to an older more strict version of the spec or reference software + FF_COMPLIANCE_STRICT = 1; ///< strictly conform to all the things in the spec no matter what consequences + FF_COMPLIANCE_NORMAL = 0; + FF_COMPLIANCE_UNOFFICIAL = -1; ///< Allow unofficial extensions + FF_COMPLIANCE_EXPERIMENTAL = -2; ///< Allow nonstandardized experimental things. + + FF_EC_GUESS_MVS = 1; + FF_EC_DEBLOCK = 2; + FF_EC_FAVOR_INTER = 256; + + FF_DEBUG_PICT_INFO = 1; + FF_DEBUG_RC = 2; + FF_DEBUG_BITSTREAM = 4; + FF_DEBUG_MB_TYPE = 8; + FF_DEBUG_QP = 16; +{$IFDEF FF_API_DEBUG_MV} +(** + * @deprecated this option does nothing + *) + FF_DEBUG_MV = 32; +{$ENDIF} + FF_DEBUG_DCT_COEFF = $00000040; + FF_DEBUG_SKIP = $00000080; + FF_DEBUG_STARTCODE = $00000100; +{$IFDEF FF_API_UNUSED_MEMBERS} + FF_DEBUG_PTS = $00000200; +{$ENDIF} + FF_DEBUG_ER = $00000400; + FF_DEBUG_MMCO = $00000800; + FF_DEBUG_BUGS = $00001000; +{$IFDEF FF_API_DEBUG_MV} + FF_DEBUG_VIS_QP = $00002000; ///< only access through AVOptions from outside libavcodec + FF_DEBUG_VIS_MB_TYPE = $00004000; ///< only access through AVOptions from outside libavcodec +{$ENDIF} + FF_DEBUG_BUFFERS = $00008000; + FF_DEBUG_THREADS = $00010000; + FF_DEBUG_GREEN_MD = $00800000; + FF_DEBUG_NOMC = $01000000; + + FF_DEBUG_VIS_MV_P_FOR = $00000001; // visualize forward predicted MVs of P-frames + FF_DEBUG_VIS_MV_B_FOR = $00000002; // visualize forward predicted MVs of B-frames + FF_DEBUG_VIS_MV_B_BACK = $00000004; // visualize backward predicted MVs of B-frames + +(** + * Verify checksums embedded in the bitstream (could be of either encoded or + * decoded data, depending on the codec) and print an error message on mismatch. + * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the + * decoder returning an error. + *) + AV_EF_CRCCHECK = 1; + AV_EF_BITSTREAM = 2; ///< detect bitstream specification deviations + AV_EF_BUFFER = 4; ///< detect improper bitstream length + AV_EF_EXPLODE = 8; ///< abort decoding on minor error detection + + AV_EF_IGNORE_ERR = 32768; ///< ignore errors and continue + AV_EF_CAREFUL = 65536; ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors + AV_EF_COMPLIANT = 131072; ///< consider all spec non compliances as errors + AV_EF_AGGRESSIVE = 262144; ///< consider things that a sane encoder should not do as an error + + FF_DCT_AUTO = 0; + FF_DCT_FASTINT = 1; + FF_DCT_INT = 2; + FF_DCT_MMX = 3; + FF_DCT_MLIB = 4; + FF_DCT_ALTIVEC = 5; + FF_DCT_FAAN = 6; + + FF_IDCT_AUTO = 0; + FF_IDCT_INT = 1; + FF_IDCT_SIMPLE = 2; + FF_IDCT_SIMPLEMMX = 3; + FF_IDCT_ARM = 7; + FF_IDCT_ALTIVEC = 8; +{$IFDEF FF_API_ARCH_SH4} + FF_IDCT_SH4 = 9; +{$ENDIF} + FF_IDCT_SIMPLEARM = 10; +{$IFDEF FF_API_UNUSED_MEMBERS} + FF_IDCT_IPP = 13; +{$ENDIF} + FF_IDCT_XVID = 14; +{$IFDEF FF_API_IDCT_XVIDMMX} + FF_IDCT_XVIDMMX = 14; +{$ENDIF} + FF_IDCT_SIMPLEARMV5TE= 16; + FF_IDCT_SIMPLEARMV6 = 17; +{$IFDEF FF_API_ARCH_SPARC} + FF_IDCT_SIMPLEVIS = 18; +{$ENDIF} + FF_IDCT_FAAN = 20; + FF_IDCT_SIMPLENEON = 22; +{$IFDEF FF_API_ARCH_ALPHA} + FF_IDCT_SIMPLEALPHA = 23; +{$ENDIF} + FF_IDCT_SIMPLEAUTO = 128; + + FF_THREAD_FRAME = 1; ///< Decode more than one frame at once + FF_THREAD_SLICE = 2; ///< Decode more than one part of a single frame at once + + FF_PROFILE_UNKNOWN = -99; + FF_PROFILE_RESERVED = -100; + + FF_PROFILE_AAC_MAIN = 0; + FF_PROFILE_AAC_LOW = 1; + FF_PROFILE_AAC_SSR = 2; + FF_PROFILE_AAC_LTP = 3; + FF_PROFILE_AAC_HE = 4; + FF_PROFILE_AAC_HE_V2 = 28; + FF_PROFILE_AAC_LD = 22; + FF_PROFILE_AAC_ELD = 38; + FF_PROFILE_MPEG2_AAC_LOW = 128; + FF_PROFILE_MPEG2_AAC_HE = 131; + + FF_PROFILE_DTS = 20; + FF_PROFILE_DTS_ES = 30; + FF_PROFILE_DTS_96_24 = 40; + FF_PROFILE_DTS_HD_HRA = 50; + FF_PROFILE_DTS_HD_MA = 60; + FF_PROFILE_DTS_EXPRESS = 70; + + FF_PROFILE_MPEG2_422 = 0; + FF_PROFILE_MPEG2_HIGH = 1; + FF_PROFILE_MPEG2_SS = 2; + FF_PROFILE_MPEG2_SNR_SCALABLE = 3; + FF_PROFILE_MPEG2_MAIN = 4; + FF_PROFILE_MPEG2_SIMPLE= 5; + + FF_PROFILE_H264_CONSTRAINED = (1 shl 9); // 8+1; constraint_set1_flag + FF_PROFILE_H264_INTRA = (1 shl 11); // 8+3; constraint_set3_flag + + FF_PROFILE_H264_BASELINE = 66; + FF_PROFILE_H264_CONSTRAINED_BASELINE = (66 or FF_PROFILE_H264_CONSTRAINED); + FF_PROFILE_H264_MAIN = 77; + FF_PROFILE_H264_EXTENDED = 88; + FF_PROFILE_H264_HIGH = 100; + FF_PROFILE_H264_HIGH_10 = 110; + FF_PROFILE_H264_HIGH_10_INTRA = (110 or FF_PROFILE_H264_INTRA); + FF_PROFILE_H264_HIGH_422 = 122; + FF_PROFILE_H264_HIGH_422_INTRA = (122 or FF_PROFILE_H264_INTRA); + FF_PROFILE_H264_HIGH_444 = 144; + FF_PROFILE_H264_HIGH_444_PREDICTIVE = 244; + FF_PROFILE_H264_HIGH_444_INTRA = (244 or FF_PROFILE_H264_INTRA); + FF_PROFILE_H264_CAVLC_444 = 44; + + FF_PROFILE_VC1_SIMPLE = 0; + FF_PROFILE_VC1_MAIN = 1; + FF_PROFILE_VC1_COMPLEX = 2; + FF_PROFILE_VC1_ADVANCED = 3; + + FF_PROFILE_MPEG4_SIMPLE = 0; + FF_PROFILE_MPEG4_SIMPLE_SCALABLE = 1; + FF_PROFILE_MPEG4_CORE = 2; + FF_PROFILE_MPEG4_MAIN = 3; + FF_PROFILE_MPEG4_N_BIT = 4; + FF_PROFILE_MPEG4_SCALABLE_TEXTURE = 5; + FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION = 6; + FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE = 7; + FF_PROFILE_MPEG4_HYBRID = 8; + FF_PROFILE_MPEG4_ADVANCED_REAL_TIME = 9; + FF_PROFILE_MPEG4_CORE_SCALABLE = 10; + FF_PROFILE_MPEG4_ADVANCED_CODING = 11; + FF_PROFILE_MPEG4_ADVANCED_CORE = 12; + FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE = 13; + FF_PROFILE_MPEG4_SIMPLE_STUDIO = 14; + FF_PROFILE_MPEG4_ADVANCED_SIMPLE = 15; + + FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 = 1; + FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 = 2; + FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION = 32768; + FF_PROFILE_JPEG2000_DCINEMA_2K = 3; + FF_PROFILE_JPEG2000_DCINEMA_4K = 4; + + FF_PROFILE_VP9_0 = 0; + FF_PROFILE_VP9_1 = 1; + FF_PROFILE_VP9_2 = 2; + FF_PROFILE_VP9_3 = 3; + + FF_PROFILE_HEVC_MAIN = 1; + FF_PROFILE_HEVC_MAIN_10 = 2; + FF_PROFILE_HEVC_MAIN_STILL_PICTURE = 3; + FF_PROFILE_HEVC_REXT = 4; + + + FF_LEVEL_UNKNOWN = -99; + +type + + (** + * This structure describes the bitrate properties of an encoded bitstream. It + * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD + * parameters for H.264/HEVC. + *) + PAVCPBProperties = ^TAVCPBProperties; + TAVCPBProperties = record + (** + * Maximum bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + max_bitrate: cint; + (** + * Minimum bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + min_bitrate: cint; + (** + * Average bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + avg_bitrate: cint; + + (** + * The size of the buffer to which the ratecontrol is applied, in bits. + * Zero if unknown or unspecified. + *) + buffer_size: cint; + + (** + * The delay between the time the packet this structure is associated with + * is received and the time when it should be decoded, in periods of a 27MHz + * clock. + * + * UINT64_MAX when unknown or unspecified. + *) + vbv_delay: cuint64; + end; {TAVCPBProperties} + + TAVPacketSideDataType = ( + AV_PKT_DATA_PALETTE, + AV_PKT_DATA_NEW_EXTRADATA, + + (** + * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: + * @code + * u32le param_flags + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) + * s32le channel_count + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) + * u64le channel_layout + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) + * s32le sample_rate + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) + * s32le width + * s32le height + * @endcode + *) + AV_PKT_DATA_PARAM_CHANGE, + + (** + * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of + * structures with info about macroblocks relevant to splitting the + * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). + * That is, it does not necessarily contain info about all macroblocks, + * as long as the distance between macroblocks in the info is smaller + * than the target payload size. + * Each MB info structure is 12 bytes, and is laid out as follows: + * @code + * u32le bit offset from the start of the packet + * u8 current quantizer at the start of the macroblock + * u8 GOB number + * u16le macroblock address within the GOB + * u8 horizontal MV predictor + * u8 vertical MV predictor + * u8 horizontal MV predictor for block number 3 + * u8 vertical MV predictor for block number 3 + * @endcode + *) + AV_PKT_DATA_H263_MB_INFO, + + (** + * This side data should be associated with an audio stream and contains + * ReplayGain information in form of the AVReplayGain struct. + *) + AV_PKT_DATA_REPLAYGAIN, + + (** + * This side data contains a 3x3 transformation matrix describing an affine + * transformation that needs to be applied to the decoded video frames for + * correct presentation. + * + * See libavutil/display.h for a detailed description of the data. + *) + AV_PKT_DATA_DISPLAYMATRIX, + + (** + * This side data should be associated with a video stream and contains + * Stereoscopic 3D information in form of the AVStereo3D struct. + *) + AV_PKT_DATA_STEREO3D, + + (** + * This side data should be associated with an audio stream and corresponds + * to enum AVAudioServiceType. + *) + AV_PKT_DATA_AUDIO_SERVICE_TYPE, + + (** + * This side data contains quality related information from the encoder. + * @code + * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). + * u8 picture type + * u8 error count + * u16 reserved + * u64le[error count] sum of squared differences between encoder in and output + * @endcode + *) + AV_PKT_DATA_QUALITY_STATS, + + (** + * This side data contains an integer value representing the stream index + * of a "fallback" track. A fallback track indicates an alternate + * track to use when the current track can not be decoded for some reason. + * e.g. no decoder available for codec. + *) + AV_PKT_DATA_FALLBACK_TRACK, + + (** + * This side data corresponds to the AVCPBProperties struct. + *) + AV_PKT_DATA_CPB_PROPERTIES, + + (** + * Recommmends skipping the specified number of samples + * @code + * u32le number of samples to skip from start of this packet + * u32le number of samples to skip from end of this packet + * u8 reason for start skip + * u8 reason for end skip (0=padding silence, 1=convergence) + * @endcode + *) + AV_PKT_DATA_SKIP_SAMPLES=70, + + (** + * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that + * the packet may contain "dual mono" audio specific to Japanese DTV + * and if it is true, recommends only the selected channel to be used. + * @code + * u8 selected channels (0=mail/left, 1=sub/right, 2=both) + * @endcode + *) + AV_PKT_DATA_JP_DUALMONO, + + (** + * A list of zero terminated key/value strings. There is no end marker for + * the list, so it is required to rely on the side data size to stop. + *) + AV_PKT_DATA_STRINGS_METADATA, + + (** + * Subtitle event position + * @code + * u32le x1 + * u32le y1 + * u32le x2 + * u32le y2 + * @endcode + *) + AV_PKT_DATA_SUBTITLE_POSITION, + + (** + * Data found in BlockAdditional element of matroska container. There is + * no end marker for the data, so it is required to rely on the side data + * size to recognize the end. 8 byte id (as found in BlockAddId) followed + * by data. + *) + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + + (** + * The optional first identifier line of a WebVTT cue. + *) + AV_PKT_DATA_WEBVTT_IDENTIFIER, + + (** + * The optional settings (rendering instructions) that immediately + * follow the timestamp specifier of a WebVTT cue. + *) + AV_PKT_DATA_WEBVTT_SETTINGS, + + (** + * A list of zero terminated key/value strings. There is no end marker for + * the list, so it is required to rely on the side data size to stop. This + * side data includes updated metadata which appeared in the stream. + *) + AV_PKT_DATA_METADATA_UPDATE, + + (** + * MPEGTS stream ID, this is required to pass the stream ID + * information from the demuxer to the corresponding muxer. + *) + AV_PKT_DATA_MPEGTS_STREAM_ID, + + (** + * Mastering display metadata (based on SMPTE-2086:2014). This metadata + * should be associated with a video stream and containts data in the form + * of the AVMasteringDisplayMetadata struct. + *) + AV_PKT_DATA_MASTERING_DISPLAY_METADATA + ); + + PAVPacketSideData = ^TAVPacketSideData; + TAVPacketSideData = record + data: PByte; + size: cint; + type_: TAVPacketSideDataType; + end; + +(** + * This structure stores compressed data. It is typically exported by demuxers + * and then passed as input to decoders, or received as output from encoders and + * then passed to muxers. + * + * For video, it should typically contain one compressed frame. For audio it may + * contain several compressed frames. Encoders are allowed to output empty + * packets, with no compressed data, containing only side data + * (e.g. to update some stream parameters at the end of encoding). + * + * AVPacket is one of the few structs in FFmpeg, whose size is a part of public + * ABI. Thus it may be allocated on stack and no new fields can be added to it + * without libavcodec and libavformat major bump. + * + * The semantics of data ownership depends on the buf field. + * If it is set, the packet data is dynamically allocated and is + * valid indefinitely until a call to av_packet_unref() reduces the + * reference count to 0. + * + * If the buf field is not set av_packet_ref() would make a copy instead + * of increasing the reference count. + * + * The side data is always allocated with av_malloc(), copied by + * av_packet_ref() and freed by av_packet_unref(). + * + * @see av_packet_ref + * @see av_packet_unref + *) + PPAVPacket= ^PAVPacket; + PAVPacket = ^TAVPacket; + TAVPacket = record + (** + * A reference to the reference-counted buffer where the packet data is + * stored. + * May be NULL, then the packet data is not reference-counted. + *) + buf: PAVBufferRef; + (* + * Presentation timestamp in AVStream->time_base units; the time at which + * the decompressed packet will be presented to the user. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + * pts MUST be larger or equal to dts as presentation cannot happen before + * decompression, unless one wants to view hex dumps. Some formats misuse + * the terms dts and pts/cts to mean something different. Such timestamps + * must be converted to true pts/dts before they are stored in AVPacket. + *) + pts: cint64; + (* + * Decompression timestamp in AVStream->time_base units; the time at which + * the packet is decompressed. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + *) + dts: cint64; + data: PByteArray; + size: cint; + stream_index: cint; + (** + * A combination of AV_PKT_FLAG values + *) + flags: cint; + (** + * Additional packet data that can be provided by the container. + * Packet can contain several types of side information. + *) + side_data: PAVPacketSideData; + side_data_elems: cint; + + (* + * Duration of this packet in AVStream->time_base units, 0 if unknown. + * Equals next_pts - this_pts in presentation order. + *) + duration: cint64; + + pos: cint64; // byte position in stream, -1 if unknown + +{$IFDEF FF_API_CONVERGENCE_DURATION} + (* + * @deprecated Same as the duration field, but as int64_t. This was required + * for Matroska subtitles, whose duration values could overflow when the + * duration field was still an int. + *) + convergence_duration: cint64; {deprecated} +{$ENDIF} + end; {TAVPacket} + +const + AV_PKT_FLAG_KEY = $0001; ///< The packet contains a keyframe + AV_PKT_FLAG_CORRUPT = $0002; ///< The packet content is corrupted + + AV_NUM_DATA_POINTERS = 8; + + AV_PKT_DATA_QUALITY_FACTOR = AV_PKT_DATA_QUALITY_STATS; //DEPRECATED + +type + AVSideDataParamChangeFlags = ( + AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = $0001, + AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = $0002, + AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = $0004, + AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = $0008 + ); + +{ This is removed in avcodec.h. For the time being (2013) only commented +const + FF_DECODE_ERROR_INVALID_BITSTREAM = 1; + FF_DECODE_ERROR_MISSING_REFERENCE = 2; +} + + +{ This is removed in avcodec.h. For the time being (2013) only commented +(** + * This structure describes decoded (raw) audio or video data. + * + * AVFrame must be allocated using avcodec_alloc_frame() and freed with + * avcodec_free_frame(). Note that this allocates only the AVFrame itself. The + * buffers for the data must be managed through other means. + * + * AVFrame is typically allocated once and then reused multiple times to hold + * different data (e.g. a single AVFrame to hold frames received from a + * decoder). In such a case, avcodec_get_frame_defaults() should be used to + * reset the frame to its original clean state before it is reused again. + * + * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added + * to the end with a minor bump. + * Similarly fields that are marked as to be only accessed by + * av_opt_ptr() can be reordered. This allows 2 forks to add fields + * without breaking compatibility with each other. + *) + PAVFrame = ^TAVFrame; + TAVFrame = record + (** + * pointer to the picture/channel planes. + * This might be different from the first allocated byte + * - encoding: Set by user + * - decoding: set by AVCodecContext.get_buffer() + *) + data: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; + + (** + * Size, in bytes, of the data for each picture/channel plane. + * + * For audio, only linesize[0] may be set. For planar audio, each channel + * plane must be the same size. + * + * - encoding: Set by user + * - decoding: set by AVCodecContext.get_buffer() + *) + linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; + + (** + * pointers to the data planes/channels. + * + * For video, this should simply point to data[]. + * + * For planar audio, each channel has a separate data pointer, and + * linesize[0] contains the size of each channel buffer. + * For packed audio, there is just one data pointer, and linesize[0] + * contains the total size of the buffer for all channels. + * + * Note: Both data and extended_data will always be set by get_buffer(), + * but for planar audio with more channels that can fit in data, + * extended_data must be used by the decoder in order to access all + * channels. + * + * encoding: set by user + * decoding: set by AVCodecContext.get_buffer() + *) + extended_data: pointer of pbyte; + + (** + * width and height of the video frame + * - encoding: unused + * - decoding: Read by user. + *) + width, height: cint; + + (** + * number of audio samples (per channel) described by this frame + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + nb_samples: cint; + + (** + * format of the frame, -1 if unknown or unset + * Values correspond to enum AVPixelFormat for video frames, + * enum AVSampleFormat for audio) + * - encoding: unused + * - decoding: Read by user. + *) + format: cint; + + (** + * 1 -> keyframe, 0-> not + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + key_frame: cint; + + (** + * Picture type of the frame, see ?_TYPE below. + * - encoding: Set by libavcodec. for coded_picture (and set by user for input). + * - decoding: Set by libavcodec. + *) + pict_type: TAVPictureType; + + (** + * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer. + * This isn't used by libavcodec unless the default get/release_buffer() is used. + * - encoding: + * - decoding: + *) + base: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; + + (** + * sample aspect ratio for the video frame, 0/1 if unknown/unspecified + * - encoding: unused + * - decoding: Read by user. + *) + sample_aspect_ratio: TAVRational; + + (** + * presentation timestamp in time_base units (time when frame should be shown to user) + * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed. + * - encoding: MUST be set by user. + * - decoding: Set by libavcodec. + *) + pts: cint64; + + (** + * pts copied from the AVPacket that was decoded to produce this frame + * - encoding: unused + * - decoding: Read by user. + *) + pkt_pts: cint64; + + (** + * dts copied from the AVPacket that triggered returning this frame + * - encoding: unused + * - decoding: Read by user. + *) + pkt_dts: cint64; + + (** + * picture number in bitstream order + * - encoding: set by + * - decoding: Set by libavcodec. + *) + coded_picture_number: cint; + + (** + * picture number in display order + * - encoding: set by + * - decoding: Set by libavcodec. + *) + display_picture_number: cint; + + (** + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) + * - encoding: Set by libavcodec. for coded_picture (and set by user for input). + * - decoding: Set by libavcodec. + *) + quality: cint; + + (** + * is this picture used as reference + * The values for this are the same as the MpegEncContext.picture_structure + * variable, that is 1->top field, 2->bottom field, 3->frame/both fields. + * Set to 4 for delayed, non-reference frames. + * - encoding: unused + * - decoding: Set by libavcodec. (before get_buffer() call)). + *) + reference: cint; + + (** + * QP table + * - encoding: unused + * - decoding: Set by libavcodec. + *) + qscale_table: PShortint; + + (** + * QP store stride + * - encoding: unused + * - decoding: Set by libavcodec. + *) + qstride: cint; + + (** + * + *) + qscale_type: cint; + + (** + * mbskip_table[mb]>=1 if MB didn't change + * stride= mb_width = (width+15)>>4 + * - encoding: unused + * - decoding: Set by libavcodec. + *) + mbskip_table: pbyte; + + (** + * motion vector table + * @code + * example: + * int mv_sample_log2= 4 - motion_subsample_log2; + * int mb_width= (width+15)>>4; + * int mv_stride= (mb_width << mv_sample_log2) + 1; + * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y]; + * @endcode + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + //int16_t (*motion_val[2])[2]; + motion_val: array [0..1] of pointer; + + (** + * macroblock type table + * mb_type_base + mb_width + 2 + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + mb_type: PCuint; + + (** + * DCT coefficients + * - encoding: unused + * - decoding: Set by libavcodec. + *) + dct_coeff: PsmallInt; + + (** + * motion reference frame index + * the order in which these are stored can depend on the codec. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + ref_index: array [0..1] of PShortint; + + (** + * for some private data of the user + * - encoding: unused + * - decoding: Set by user. + *) + opaque: pointer; + + (** + * error + * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR. + * - decoding: unused + *) + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; + + (** + * type of the buffer (to keep track of who has to deallocate data[*]) + * - encoding: Set by the one who allocates it. + * - decoding: Set by the one who allocates it. + * Note: User allocated (direct rendering) & internal buffers cannot coexist currently. + *) + type_: cint; + + (** + * When decoding, this signals how much the picture must be delayed. + * extra_delay = repeat_pict / (2*fps) + * - encoding: unused + * - decoding: Set by libavcodec. + *) + repeat_pict: cint; + + (** + * The content of the picture is interlaced. + * - encoding: Set by user. + * - decoding: Set by libavcodec. (default 0) + *) + interlaced_frame: cint; + + (** + * If the content is interlaced, is top field displayed first. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + top_field_first: cint; + + (** + * Tell user application that palette has changed from previous frame. + * - encoding: ??? (no palette-enabled encoder yet) + * - decoding: Set by libavcodec. (default 0). + *) + palette_has_changed: cint; + + (** + * codec suggestion on buffer type if != 0 + * - encoding: unused + * - decoding: Set by libavcodec. (before get_buffer() call)). + *) + buffer_hints: cint; + + (** + * Pan scan. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + pan_scan: PAVPanScan; + + (** + * reordered opaque 64bit number (generally a PTS) from AVCodecContext.reordered_opaque + * PTS but can be anything). + * The user sets AVCodecContext.reordered_opaque to represent the input at + * that time, + * the decoder reorders values as needed and sets AVFrame.reordered_opaque + * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque + * @deprecated in favor of pkt_pts + * - encoding: unused + * - decoding: Read by user. + *) + reordered_opaque: cint64; + + (** + * hardware accelerator private data (FFmpeg allocated) + * - encoding: unused + * - decoding: Set by libavcodec + *) + hwaccel_picture_private: pointer; + + (** + * the AVCodecContext which ff_thread_get_buffer() was last called on + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + owner: PAVCodecContext; + + (** + * used by multithreading to store frame-specific info + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + thread_opaque: pointer; + + (** + * log2 of the size of the block which a single vector in motion_val represents: + * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) + * - encoding: unused + * - decoding: Set by libavcodec. + *) + motion_subsample_log2: cuint8; + + (** + * Sample rate of the audio data. + * + * - encoding: unused + * - decoding: read by user + *) + sample_rate: cint; + + (** + * Channel layout of the audio data. + * + * - encoding: unused + * - decoding: read by user. + *) + channel_layout: cuint64; + + (** + * frame timestamp estimated using various heuristics, in stream time base + * Code outside libavcodec should access this field using: + * av_frame_get_best_effort_timestamp(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + best_effort_timestamp: cint64; + + (** + * reordered pos from the last AVPacket that has been input into the decoder + * Code outside libavcodec should access this field using: + * av_frame_get_pkt_pos(frame) + * - encoding: unused + * - decoding: Read by user. + *) + pkt_pos: cint64; + + (** + * duration of the corresponding packet, expressed in + * AVStream->time_base units, 0 if unknown. + * Code outside libavcodec should access this field using: + * av_frame_get_pkt_duration(frame) + * - encoding: unused + * - decoding: Read by user. + *) + pkt_duration: cint64; + + (** + * metadata. + * Code outside libavcodec should access this field using: + * av_frame_get_metadata(frame) + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + metadata: PAVDictionary; + + (** + * decode error flags of the frame, set to a combination of + * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there + * were errors during the decoding. + * Code outside libavcodec should access this field using: + * av_frame_get_decode_error_flags(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + decode_error_flags: cint; + + (** + * number of audio channels, only used for audio. + * Code outside libavcodec should access this field using: + * av_frame_get_channels(frame) + * - encoding: unused + * - decoding: Read by user. + *) + channels: cint; + + (** + * size of the corresponding packet containing the compressed + * frame. It must be accessed using av_frame_get_pkt_size() and + * av_frame_set_pkt_size(). + * It is set to a negative value if unknown. + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + pkt_size: cint; + end; (** TAVFrame **) + +(** + * Accessors for some AVFrame fields. + * The position of these field in the structure is not part of the ABI, + * they should not be accessed directly outside libavcodec. + *) +function av_frame_get_best_effort_timestamp(frame: {const PAVFrame): cint64; + cdecl; external av__codec; +procedure av_frame_set_best_effort_timestamp(frame: PAVFrame; val: cint64); + cdecl; external av__codec; +function av_frame_get_pkt_duration (frame: {const PAVFrame): cint64; + cdecl; external av__codec; +procedure av_frame_get_pkt_duration (frame: PAVFrame; val: cint64); + cdecl; external av__codec; +function av_frame_get_pkt_pos (frame: {const PAVFrame): cint64; + cdecl; external av__codec; +procedure av_frame_get_pkt_pos (frame: PAVFrame; val: cint64); + cdecl; external av__codec; +function av_frame_get_channel_layout (frame: {const PAVFrame): cint64; + cdecl; external av__codec; +procedure av_frame_get_channel_layout (frame: PAVFrame; val: cint64); + cdecl; external av__codec; +function av_frame_get_channels (frame: {const PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_channels (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_sample_rate (frame: {const PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_sample_rate (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_metadata (frame: {const PAVFrame): PAVDictionary; + cdecl; external av__codec; +procedure av_frame_set_metadata (frame: PAVFrame; val: PAVDictionary); + cdecl; external av__codec; +function av_frame_get_decode_error_flags (frame: {const PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_decode_error_flags (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_pkt_size(frame: {const PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_pkt_size(frame: PAVFrame; val: cint); + cdecl; external av__codec; +} + +type + TAVCodecInternal = record + end; + + PAVCodecInternal = ^TAVCodecInternal; + PAVCodecContext = ^TAVCodecContext; + + PAVClass = ^TAVClass; + + PPAVCodec = ^PAVCodec; + PAVCodec = ^TAVCodec; + + PAVHWAccel = ^TAVHWAccel; + + // int[4] + PAVNDPArray = ^TAVNDPArray; + TAVNDPArray = array [0..AV_NUM_DATA_POINTERS - 1] of cint; + // int (*func)(struct AVCodecContext *c2, void *arg) + TExecuteFunc = function(c2: PAVCodecContext; arg: Pointer): cint; cdecl; + // int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr) + TExecute2Func = function(c2: PAVCodecContext; arg: Pointer; jobnr: cint; threadnr: cint): cint; cdecl; + + TAVFieldOrder = ( + AV_FIELD_UNKNOWN, + AV_FIELD_PROGRESSIVE, + AV_FIELD_TT, //< Top coded_first, top displayed first + AV_FIELD_BB, //< Bottom coded first, bottom displayed first + AV_FIELD_TB, //< Top coded first, bottom displayed first + AV_FIELD_BT //< Bottom coded first, top displayed first + ); + +(** + * main external API structure. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user + * applications. + * The name string for AVOptions options matches the associated command line + * parameter name and can be found in libavcodec/options_table.h + * The AVOption/command line parameter names differ in some cases from the C + * structure field names for historic reasons or brevity. + * sizeof(AVCodecContext) must not be used outside libav*. + *) + TAVCodecContext = record {720} + (** + * information on struct for av_log + * - set by avcodec_alloc_context3 + *) + av_class: PAVClass; + log_level_offset: cint; + + codec_type: TAVMediaType; (* see AVMEDIA_TYPE_xxx *) + codec: PAVCodec; +{$IFDEF FF_API_CODEC_NAME} + (** + * @deprecated this field is not used for anything in libavcodec + *) + {attribute_deprecated} + codec_name: array [0..31] of AnsiChar; +{$IFEND} + codec_id: TAVCodecID; (* see AV_CODEC_ID_xxx *) + + (** + * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * A demuxer should set this to what is stored in the field used to identify the codec. + * If there are multiple such fields in a container then the demuxer should choose the one + * which maximizes the information about the used codec. + * If the codec tag field in a container is larger than 32 bits then the demuxer should + * remap the longer ID to 32 bits with a table or other structure. Alternatively a new + * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated + * first. + * - encoding: Set by user, if not then the default based on codec_id will be used. + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + *) + codec_tag: cuint; + +{$IFDEF FF_API_STREAM_CODEC_TAG} + (** + * @deprecated this field is unused + *) + {attribute_deprecated} + stream_codec_tag: cuint; +{$IFEND} + + priv_data: pointer; + + (** + * Private context used for internal data. + * + * Unlike priv_data, this is not codec-specific. It is used in general + * libavcodec functions. + *) + internal: PAVCodecInternal; + + (** + * Private data of the user, can be used to carry app specific stuff. + * - encoding: Set by user. + * - decoding: Set by user. + *) + opaque: pointer; + + (** + * the average bitrate + * - encoding: Set by user; unused for constant quantizer encoding. + * - decoding: Set by user, may be overwritten by libavcodec + * if this info is available in the stream + *) + bit_rate: cint64; + + (** + * number of bits the bitstream is allowed to diverge from the reference. + * the reference can be CBR (for CBR pass1) or VBR (for pass2) + * - encoding: Set by user; unused for constant quantizer encoding. + * - decoding: unused + *) + bit_rate_tolerance: cint; + + (** + * Global quality for codecs which cannot change it per frame. + * This should be proportional to MPEG-1/2/4 qscale. + * - encoding: Set by user. + * - decoding: unused + *) + global_quality: cint; + + (** + * - encoding: Set by user. + * - decoding: unused + *) + compression_level: cint; + + (** + * AV_CODEC_FLAG_*. + * - encoding: Set by user. + * - decoding: Set by user. + *) + flags: cint; + + (** + * AV_CODEC_FLAG2_* + * - encoding: Set by user. + * - decoding: Set by user. + *) + flags2: cint; + + (** + * some codecs need / can use extradata like Huffman tables. + * MJPEG: Huffman tables + * rv10: additional flags + * MPEG-4: global headers (they can be in the bitstream or here) + * The allocated memory should be AV_FF_INPUT_BUFFER_PADDING_SIZE bytes larger + * than extradata_size to avoid problems if it is read with the bitstream reader. + * The bytewise contents of extradata must not depend on the architecture or CPU endianness. + * - encoding: Set/allocated/freed by libavcodec. + * - decoding: Set/allocated/freed by user. + *) + extradata: pbyte; + extradata_size: cint; + + (** + * This is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. For fixed-fps content, + * timebase should be 1/framerate and timestamp increments should be + * identically 1. + * This often, but not always is the inverse of the frame rate or field rate + * for video. 1/time_base is not the average frame rate if the frame rate is not + * constant. + * + * Like containers, elementary streams also can store timestamps, 1/time_base + * is the unit in which these timestamps are specified. + * As example of such codec time base see ISO/IEC 14496-2:2001(E) + * vop_time_increment_resolution and fixed_vop_rate + * (fixed_vop_rate == 0 implies that it is different from the framerate) + * + * - encoding: MUST be set by user. + * - decoding: the use of this field for decoding is deprecated. + * Use framerate instead. + *) + time_base: TAVRational; + + (** + * For some codecs, the time base is closer to the field rate than the frame rate. + * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration + * if no telecine is used ... + * + * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. + *) + ticks_per_frame: cint; + + (** + * Codec delay. + * + * Encoding: Number of frames delay there will be from the encoder input to + * the decoder output. (we assume the decoder matches the spec) + * Decoding: Number of frames delay in addition to what a standard decoder + * as specified in the spec would produce. + * + * Video: + * Number of frames the decoded output will be delayed relative to the + * encoded input. + * + * Audio: + * For encoding, this field is unused (see initial_padding). + * + * For decoding, this is the number of samples the decoder needs to + * output before the decoder's output is valid. When seeking, you should + * start decoding this many samples prior to your desired seek point. + * + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + delay: cint; + + (* video only *) + (** + * picture width / height. + * + * @note Those fields may not match the values of the last + * AVFrame output by avcodec_decode_video2 due frame + * reordering. + * + * - encoding: MUST be set by user. + * - decoding: May be set by the user before opening the decoder if known e.g. + * from the container. Some decoders will require the dimensions + * to be set by the caller. During decoding, the decoder may + * overwrite those values as required while parsing the data. + *) + width, height: cint; + + (** + * Bitstream width / height, may be different from width/height e.g. when + * the decoded frame is cropped before being output or lowres is enabled. + * + * @note Those field may not match the value of the last + * AVFrame output by avcodec_receive_frame() due frame + * reordering. + * + * - encoding: unused + * - decoding: May be set by the user before opening the decoder if known + * e.g. from the container. During decoding, the decoder may + * overwrite those values as required while parsing the data. + *) + coded_width, coded_height: cint; + + (** + * the number of pictures in a group of pictures, or 0 for intra_only + * - encoding: Set by user. + * - decoding: unused + *) + gop_size: cint; + + (** + * Pixel format, see AV_PIX_FMT_xxx. + * May be set by the demuxer if known from headers. + * May be overridden by the decoder if it knows better. + * + * @note This field may not match the value of the last + * AVFrame output by avcodec_receive_frame() due frame + * reordering. + * + * - encoding: Set by user. + * - decoding: Set by user if known, overridden by libavcodec while + * parsing the data. + *) + pix_fmt: TAVPixelFormat; + +{$IFDEF FF_API_MOTION_EST} + (** + * This option does nothing + *@deprecated use codec private options instead + *) + {attribute_deprecated} + me_method: cint; +{$ENDIF} + + (** + * If non NULL, 'draw_horiz_band' is called by the libavcodec + * decoder to draw a horizontal band. It improves cache usage. Not + * all codecs can do that. You must check the codec capabilities + * beforehand. + * The function is also used by hardware acceleration APIs. + * It is called at least once during frame decoding to pass + * the data needed for hardware render. + * In that mode instead of pixel data, AVFrame points to + * a structure specific to the acceleration API. The application + * reads the structure and can change some fields to indicate progress + * or mark state. + * - encoding: unused + * - decoding: Set by user. + * @param height the height of the slice + * @param y the y position of the slice + * @param type 1->top field, 2->bottom field, 3->frame + * @param offset offset into the AVFrame.data from which the slice should be read + *) + draw_horiz_band: procedure (s: PAVCodecContext; + src: {const} PAVFrame; offset: PAVNDPArray; + y: cint; type_: cint; height: cint); cdecl; + + (** + * callback to negotiate the pixelFormat + * @param fmt is the list of formats which are supported by the codec, + * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. + * The first is always the native one. + * @note The callback may be called again immediately if initialization for + * the selected (hardware-accelerated) pixel format failed. + * @warning Behavior is undefined if the callback returns a value not + * in the fmt list of formats. + * @return the chosen format + * - encoding: unused + * - decoding: Set by user, if not set the native format will be chosen. + *) + get_format: function (s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; cdecl; + + (** + * maximum number of B-frames between non-B-frames + * Note: The output will be delayed by max_b_frames+1 relative to the input. + * - encoding: Set by user. + * - decoding: unused + *) + max_b_frames: cint; + + (** + * qscale factor between IP and B-frames + * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). + * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). + * - encoding: Set by user. + * - decoding: unused + *) + b_quant_factor: cfloat; + +{$IFDEF FF_API_RC_STRATEGY} + (** @deprecated use codec private option instead *) + {attribute_deprecated} + rc_strategy: cint; +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + b_frame_strategy: cint; {deprecated} +{$ENDIF} + + (** + * qscale offset between IP and B-frames + * - encoding: Set by user. + * - decoding: unused + *) + b_quant_offset: cfloat; + + (** + * Size of the frame reordering buffer in the decoder. + * For MPEG-2 it is 1 IPB or 0 low delay IP. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + has_b_frames: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + mpeg_quant: cint; {deprecated} +{$ENDIF} + + (** + * qscale factor between P- and I-frames + * If > 0 then the last P- frame quantizer will be used (q = lastp_q * factor + offset). + * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). + * - encoding: Set by user. + * - decoding: unused + *) + i_quant_factor: cfloat; + + (** + * qscale offset between P and I-frames + * - encoding: Set by user. + * - decoding: unused + *) + i_quant_offset: cfloat; + + (** + * luminance masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + lumi_masking: cfloat; + + (** + * temporary complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + temporal_cplx_masking: cfloat; + + (** + * spatial complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + spatial_cplx_masking: cfloat; + + (** + * p block masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + p_masking: cfloat; + + (** + * darkness masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + dark_masking: cfloat; + + (** + * slice count + * - encoding: Set by libavcodec. + * - decoding: Set by user (or 0). + *) + slice_count: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + prediction_method: cint; {deprecated} +{$ENDIF} + + (** + * slice offsets in the frame in bytes + * - encoding: Set/allocated by libavcodec. + * - decoding: Set/allocated by user (or NULL). + *) + slice_offset: PCint; + + (** + * sample aspect ratio (0 if unknown) + * That is the width of a pixel divided by the height of the pixel. + * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + sample_aspect_ratio: TAVRational; + + (** + * motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_cmp: cint; + + (** + * subpixel motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_sub_cmp: cint; + (** + * macroblock comparison function (not supported yet) + * - encoding: Set by user. + * - decoding: unused + *) + mb_cmp: cint; + (** + * interlaced DCT comparison function + * - encoding: Set by user. + * - decoding: unused + *) + ildct_cmp: cint; + + (** + * ME diamond size & shape + * - encoding: Set by user. + * - decoding: unused + *) + dia_size: cint; + + (** + * amount of previous MV predictors (2a+1 x 2a+1 square) + * - encoding: Set by user. + * - decoding: unused + *) + last_predictor_count: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + pre_me: cint; {deprecated} +{$ENDIF} + + (** + * motion estimation prepass comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_pre_cmp: cint; + + (** + * ME prepass diamond size & shape + * - encoding: Set by user. + * - decoding: unused + *) + pre_dia_size: cint; + + (** + * subpel ME quality + * - encoding: Set by user. + * - decoding: unused + *) + me_subpel_quality: cint; + +{$IFDEF FF_API_AFD} + (** + * DTG active format information (additional aspect ratio + * information only used in DVB MPEG-2 transport streams) + * 0 if not set. + * + * - encoding: unused + * - decoding: Set by decoder. + * @deprecated Deprecated in favor of AVSideData + *) + {attribute_deprecated} + dtg_active_format: cint; +{$IFEND} + + (** + * maximum motion estimation search range in subpel units + * If 0 then no limit. + * + * - encoding: Set by user. + * - decoding: unused + *) + me_range: cint; + +{$IFDEF FF_API_QUANT_BIAS} + (** + * @deprecated use encoder private option instead + *) + {attribute_deprecated} + intra_quant_bias: cint; + + (** + * @deprecated use encoder private option instead + *) + {attribute_deprecated} + inter_quant_bias: cint; +{$ENDIF} + + (** + * slice flags + * - encoding: unused + * - decoding: Set by user. + *) + slice_flags: cint; + +{$IFDEF FF_API_XVMC} + (** + * XVideo Motion Acceleration + * - encoding: forbidden + * - decoding: set by decoder + * @deprecated XvMC doesn't need it anymore. + *) + xvmc_acceleration: cint; +{$ENDIF} + + (** + * macroblock decision mode + * - encoding: Set by user. + * - decoding: unused + *) + mb_decision: cint; + + (** + * custom intra quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. + *) + intra_matrix: PWord; + + (** + * custom inter quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. + *) + inter_matrix: PWord; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + scenechange_threshold: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + noise_reduction: cint; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated this field is unused + *) + {attribute_deprecated} + me_threshold: cint; + + (** + * @deprecated this field is unused + *) + {attribute_deprecated} + mb_threshold: cint; +{$ENDIF} + (** + * precision of the intra DC coefficient - 8 + * - encoding: Set by user. + * - decoding: Set by libavcodec + *) + intra_dc_precision: cint; + + (** + * Number of macroblock rows at the top which are skipped. + * - encoding: unused + * - decoding: Set by user. + *) + skip_top: cint; + + (** + * Number of macroblock rows at the bottom which are skipped. + * - encoding: unused + * - decoding: Set by user. + *) + skip_bottom: cint; + +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + border_masking: cfloat; +{$ENDIF} + (** + * minimum MB Lagrange multiplier + * - encoding: Set by user. + * - decoding: unused + *) + mb_lmin: cint; + + (** + * maximum MB Lagrange multiplier + * - encoding: Set by user. + * - decoding: unused + *) + mb_lmax: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** + * @deprecated use encoder private options instead + *) + me_penalty_compensation: cint; {deprecated} +{$ENDIF} + + (** + * - encoding: Set by user. + * - decoding: unused + *) + bidir_refine: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + brd_scale: cint; {deprecated} +{$ENDIF} + + (** + * minimum GOP size + * - encoding: Set by user. + * - decoding: unused + *) + keyint_min: cint; + + (** + * number of reference frames + * - encoding: Set by user. + * - decoding: Set by lavc. + *) + refs: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + chromaoffset: cint; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_UNUSED_MEMBERS} + (** + * Multiplied by qscale for each frame and added to scene_change_score. + * - encoding: Set by user. + * - decoding: unused + *) + scenechange_factor: cint; {attribute_deprecated} +{$IFEND} + + (** + * Note: Value depends upon the compare function used for fullpel ME. + * - encoding: Set by user. + * - decoding: unused + *) + mv0_threshold: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + b_sensitivity: cint; {deprecated} +{$ENDIF} + + (** + * Chromaticity coordinates of the source primaries. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_primaries: TAVColorPrimaries; + + (** + * Color Transfer Characteristic. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_trc: TAVColorTransferCharacteristic; + + (** + * YUV colorspace type. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + colorspace: TAVColorSpace; + + (** + * MPEG vs JPEG YUV range. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_range: TAVColorRange; + + (** + * This defines the location of chroma samples. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + chroma_sample_location: TAVChromaLocation; + + (** + * Number of slices. + * Indicates number of picture subdivisions. Used for parallelized + * decoding. + * - encoding: Set by user + * - decoding: unused + *) + slices: cint; + + (** Field order + * - encoding: set by libavcodec + * - decoding: Set by user. + *) + field_order: TAVFieldOrder; + + (* audio only *) + sample_rate: cint; ///< samples per second + channels: cint; ///< number of audio channels + + (** + * audio sample format + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + sample_fmt: TAVSampleFormat; ///< sample format + + (* The following data should not be initialized. *) + (** + * Number of samples per channel in an audio frame. + * + * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame + * except the last must contain exactly frame_size samples per channel. + * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the + * frame size is not restricted. + * - decoding: may be set by some decoders to indicate constant frame size + *) + frame_size: cint; + + (** + * Frame counter, set by libavcodec. + * + * - decoding: total number of frames returned from the decoder so far. + * - encoding: total number of frames passed to the encoder so far. + * + * @note the counter is not incremented if encoding/decoding resulted in + * an error. + *) + frame_number: cint; ///< audio or video frame number + + (** + * number of bytes per packet if constant and known or 0 + * Used by some WAV based audio codecs. + *) + block_align: cint; + + (** + * Audio cutoff bandwidth (0 means "automatic") + * - encoding: Set by user. + * - decoding: unused + *) + cutoff: cint; + + (** + * Audio channel layout. + * - encoding: set by user. + * - decoding: set by user, may be overwritten by libavcodec. + *) + channel_layout: cuint64; + + (** + * Request decoder to use this channel layout if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. + *) + request_channel_layout: cuint64; + + (** + * Type of service that the audio stream conveys. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + audio_service_type: TAVAudioServiceType; + + (** + * desired sample format + * - encoding: Not used. + * - decoding: Set by user. + * Decoder will decode to this format if it can. + *) + request_sample_fmt: TAVSampleFormat; + + (** + * This callback is called at the beginning of each frame to get data + * buffer(s) for it. There may be one contiguous buffer for all the data or + * there may be a buffer per each data plane or anything in between. What + * this means is, you may set however many entries in buf[] you feel necessary. + * Each buffer must be reference-counted using the AVBuffer API (see description + * of buf[] below). + * + * The following fields will be set in the frame before this callback is + * called: + * - format + * - width, height (video only) + * - sample_rate, channel_layout, nb_samples (audio only) + * Their values may differ from the corresponding values in + * AVCodecContext. This callback must use the frame values, not the codec + * context values, to calculate the required buffer size. + * + * This callback must fill the following fields in the frame: + * - data[] + * - linesize[] + * - extended_data: + * * if the data is planar audio with more than 8 channels, then this + * callback must allocate and fill extended_data to contain all pointers + * to all data planes. data[] must hold as many pointers as it can. + * extended_data must be allocated with av_malloc() and will be freed in + * av_frame_unref(). + * * otherwise extended_data must point to data + * - buf[] must contain one or more pointers to AVBufferRef structures. Each of + * the frame's data and extended_data pointers must be contained in these. That + * is, one AVBufferRef for each allocated chunk of memory, not necessarily one + * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), + * and av_buffer_ref(). + * - extended_buf and nb_extended_buf must be allocated with av_malloc() by + * this callback and filled with the extra buffers if there are more + * buffers than buf[] can hold. extended_buf will be freed in + * av_frame_unref(). + * + * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call + * avcodec_default_get_buffer2() instead of providing buffers allocated by + * some other means. + * + * Each data plane must be aligned to the maximum required by the target + * CPU. + * + * @see avcodec_default_get_buffer2() + * + * Video: + * + * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused + * (read and/or written to if it is writable) later by libavcodec. + * + * avcodec_align_dimensions2() should be used to find the required width and + * height, as they normally need to be rounded up to the next multiple of 16. + * + * Some decoders do not support linesizes changing between frames. + * + * If frame multithreading is used and thread_safe_callbacks is set, + * this callback may be called from a different thread, but not from more + * than one at once. Does not need to be reentrant. + * + * @see avcodec_align_dimensions2() + * + * Audio: + * + * Decoders request a buffer of a particular size by setting + * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, + * however, utilize only part of the buffer by setting AVFrame.nb_samples + * to a smaller value in the output frame. + * + * As a convenience, av_samples_get_buffer_size() and + * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() + * functions to find the required data size and to fill data pointers and + * linesize. In AVFrame.linesize, only linesize[0] may be set for audio + * since all planes must be the same size. + * + * @see av_samples_get_buffer_size(), av_samples_fill_arrays() + * + * - encoding: unused + * - decoding: Set by libavcodec, user can override. + *) + get_buffer2: function (s: PAVCodecContext; frame: PAVFrame; flags: cint): cint; cdecl; + + (** + * If non-zero, the decoded audio and video frames returned from + * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted + * and are valid indefinitely. The caller must free them with + * av_frame_unref() when they are not needed anymore. + * Otherwise, the decoded frames must not be freed by the caller and are + * only valid until the next decode call. + * + * This is always automatically enabled if avcodec_receive_frame() is used. + * + * - encoding: unused + * - decoding: set by the caller before avcodec_open2(). + *) + refcounted_frames: cint; + + (* - encoding parameters *) + qcompress: cfloat; ///< amount of qscale change between easy & hard scenes (0.0-1.0) + qblur: cfloat; ///< amount of qscale smoothing over time (0.0-1.0) + + (** + * minimum quantizer + * - encoding: Set by user. + * - decoding: unused + *) + qmin: cint; + + (** + * maximum quantizer + * - encoding: Set by user. + * - decoding: unused + *) + qmax: cint; + + (** + * maximum quantizer difference between frames + * - encoding: Set by user. + * - decoding: unused + *) + max_qdiff: cint; +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + rc_qsquish: cfloat; + + {attribute_deprecated} + rc_qmod_amp: cfloat; + {attribute_deprecated} + rc_qmod_freq: cint; +{$ENDIF} + (** + * decoder bitstream buffer size + * - encoding: Set by user. + * - decoding: unused + *) + rc_buffer_size: cint; + (** + * ratecontrol override, see RcOverride + * - encoding: Allocated/set/freed by user. + * - decoding: unused + *) + rc_override_count: cint; + rc_override: PRcOverride; +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + rc_eq: {const} PAnsiChar; +{$ENDIF} + (** + * maximum bitrate + * - encoding: Set by user. + * - decoding: Set by user, may be overwritten by libavcodec. + *) + rc_max_rate: cint64; + + (** + * minimum bitrate + * - encoding: Set by user. + * - decoding: unused + *) + rc_min_rate: cint64; + +{$IFDEF FF_API_MPV_OPT} + + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + rc_buffer_aggressivity: cfloat; + + {attribute_deprecated} + rc_initial_cplx: cfloat; +{$ENDIF} + (** + * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. + * - encoding: Set by user. + * - decoding: unused. + *) + rc_max_available_vbv_use: cfloat; + + (** + * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow. + * - encoding: Set by user. + * - decoding: unused. + *) + rc_min_vbv_overflow_use: cfloat; + + (** + * Number of bits which should be loaded into the rc buffer before decoding starts. + * - encoding: Set by user. + * - decoding: unused + *) + rc_initial_buffer_occupancy: cint; + +{$IFDEF FF_API_CODER_TYPE} + (** + * @deprecated use encoder private options instead + *) + coder_type: cint; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + context_model: cint; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + lmin: cint; + + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + lmax: cint; +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + frame_skip_threshold: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + frame_skip_factor: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + frame_skip_exp: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + frame_skip_cmp: cint; {deprecated} +{$ENDIF} + + (** + * trellis RD quantization + * - encoding: Set by user. + * - decoding: unused + *) + trellis: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + min_prediction_order: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + max_prediction_order: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + timecode_frame_start: cint64; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_RTP_CALLBACK} + (** + * @deprecated unused + *) + (* The RTP callback: This function is called *) + (* every time the encoder has a packet to send *) + (* Depends on the encoder if the data starts *) + (* with a Start Code (it should) H.263 does. *) + (* mb_nb contains the number of macroblocks *) + (* encoded in the RTP payload *) + rtp_callback: procedure (avctx: PAVCodecContext; data: pointer; + size: cint; mb_nb: cint); cdecl; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + rtp_payload_size: cint; {deprecated} (* The size of the RTP payload: the coder will *) + (* do it's best to deliver a chunk with size *) + (* below rtp_payload_size, the chunk will start *) + (* with a start code on some codecs like H.263 *) + (* This doesn't take account of any particular *) + (* headers inside the transmited RTP payload *) +{$ENDIF} + +{$IFDEF FF_API_STAT_BITS} + (* statistics, used for 2-pass encoding *) + mv_bits: cint; {deprecated} + header_bits: cint; {deprecated} + i_tex_bits: cint; {deprecated} + p_tex_bits: cint; {deprecated} + i_count: cint; {deprecated} + p_count: cint; {deprecated} + skip_count: cint; {deprecated} + misc_bits: cint; {deprecated} + + (** @deprecated this field is unused *) + frame_bits: cint; {deprecated} +{$ENDIF} + + (** + * pass1 encoding statistics output buffer + * - encoding: Set by libavcodec. + * - decoding: unused + *) + stats_out: PAnsiChar; + + (** + * pass2 encoding statistics input buffer + * Concatenated stuff from stats_out of pass1 should be placed here. + * - encoding: Allocated/set/freed by user. + * - decoding: unused + *) + stats_in: PAnsiChar; + + (** + * Work around bugs in encoders which sometimes cannot be detected automatically. + * - encoding: Set by user + * - decoding: Set by user + *) + workaround_bugs: cint; + + (** + * strictly follow the standard (MPEG-4, ...). + * - encoding: Set by user. + * - decoding: Set by user. + * Setting this to STRICT or higher means the encoder and decoder will + * generally do stupid things, whereas setting it to unofficial or lower + * will mean the encoder might produce output that is not supported by all + * spec-compliant decoders. Decoders don't differentiate between normal, + * unofficial and experimental (that is, they always try to decode things + * when they can) unless they are explicitly asked to behave stupidly + * (=strictly conform to the specs) + *) + strict_std_compliance: cint; + + (** + * error concealment flags + * - encoding: unused + * - decoding: Set by user. + *) + error_concealment: cint; + + (** + * debug + * Code outside libavcodec should access this field using AVOptions + * - encoding: Set by user. + * - decoding: Set by user. + *) + debug: cint; + +{$IFDEF FF_API_DEBUG_MV} + (** + * debug + * - encoding: Set by user. + * - decoding: Set by user. + *) + debug_mv: cint; +{$ENDIF} + + (** + * Error recognition; may misdetect some more or less valid parts as errors. + * - encoding: unused + * - decoding: Set by user. + *) + err_recognition: cint; + + (** + * opaque 64-bit number (generally a PTS) that will be reordered and + * output in AVFrame.reordered_opaque + * - encoding: unused + * - decoding: Set by user. + *) + reordered_opaque: cint64; + + (** + * Hardware accelerator in use + * - encoding: unused. + * - decoding: Set by libavcodec + *) + hwaccel: PAVHWAccel; + + (** + * Hardware accelerator context. + * For some hardware accelerators, a global context needs to be + * provided by the user. In that case, this holds display-dependent + * data FFmpeg cannot instantiate itself. Please refer to the + * FFmpeg HW accelerator documentation to know how to fill this + * is. e.g. for VA API, this is a struct vaapi_context. + * - encoding: unused + * - decoding: Set by user + *) + hwaccel_context: pointer; + + (** + * error + * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. + * - decoding: unused + *) + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; + + (** + * DCT algorithm, see FF_DCT_* below + * - encoding: Set by user. + * - decoding: unused + *) + dct_algo: cint; + + (** + * IDCT algorithm, see FF_IDCT_* below. + * - encoding: Set by user. + * - decoding: Set by user. + *) + idct_algo: cint; + + (** + * bits per sample/pixel from the demuxer (needed for huffyuv). + * - encoding: Set by libavcodec. + * - decoding: Set by user. + *) + bits_per_coded_sample: cint; + + (** + * Bits per sample/pixel of internal libavcodec pixel/sample format. + * - encoding: set by user. + * - decoding: set by libavcodec. + *) + bits_per_raw_sample: cint; + +{$IFDEF FF_API_LOWRES} + (** + * low resolution decoding, 1-> 1/2 size, 2->1/4 size + * - encoding: unused + * - decoding: Set by user. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_lowres(avctx) + *) + lowres: cint; +{$ENDIF} + +{$IFDEF FF_API_CODED_FRAME} + (** + * the picture in the bitstream + * - encoding: Set by libavcodec. + * - decoding: unused + * + * @deprecated use the quality factor packet side data instead + *) + {attribute_deprecated} + coded_frame: PAVFrame; +{$ENDIF} + + (** + * thread count + * is used to decide how many independent tasks should be passed to execute() + * - encoding: Set by user. + * - decoding: Set by user. + *) + thread_count: cint; + + (** + * Which multithreading methods to use. + * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, + * so clients which cannot provide future frames should not use it. + * + * - encoding: Set by user, otherwise the default is used. + * - decoding: Set by user, otherwise the default is used. + *) + thread_type: cint; + + (** + * Which multithreading methods are in use by the codec. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + active_thread_type: cint; + + (** + * Set by the client if its custom get_buffer() callback can be called + * from another thread, which allows faster multithreaded decoding. + * draw_horiz_band() will be called from other threads regardless of this setting. + * Ignored if the default get_buffer() is used. + * - encoding: Set by user. + * - decoding: Set by user. + *) + thread_safe_callbacks: cint; + + (** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. + * @param count the number of things to execute + * - encoding: Set by libavcodec, user can override. + * - decoding: Set by libavcodec, user can override. + *) + execute: function (c: PAVCodecContext; func: TExecuteFunc; arg: Pointer; ret: PCint; count: cint; size: cint): cint; cdecl; + + (** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. + * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. + * @param c context passed also to func + * @param count the number of things to execute + * @param arg2 argument passed unchanged to func + * @param ret return values of executed functions, must have space for "count" values. May be NULL. + * @param func function that will be called count times, with jobnr from 0 to count-1. + * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no + * two instances of func executing at the same time will have the same threadnr. + * @return always 0 currently, but code should handle a future improvement where when any call to func + * returns < 0 no further calls to func may be done and < 0 is returned. + * - encoding: Set by libavcodec, user can override. + * - decoding: Set by libavcodec, user can override. + *) + execute2: function (c: PAVCodecContext; func: TExecute2Func; arg2: Pointer; ret: Pcint; count: cint): cint; cdecl; + + (** + * noise vs. sse weight for the nsse comparison function + * - encoding: Set by user. + * - decoding: unused + *) + nsse_weight: cint; + + (** + * profile + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + profile: cint; + + (** + * level + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + level: cint; + + (** + * Skip loop filtering for selected frames. + * - encoding: unused + * - decoding: Set by user. + *) + skip_loop_filter: TAVDiscard; + + (** + * Skip IDCT/dequantization for selected frames. + * - encoding: unused + * - decoding: Set by user. + *) + skip_idct: TAVDiscard; + + (** + * Skip decoding for selected frames. + * - encoding: unused + * - decoding: Set by user. + *) + skip_frame: TAVDiscard; + + (** + * Header containing style information for text subtitles. + * For SUBTITLE_ASS subtitle type, it should contain the whole ASS + * [Script Info] and [V4+ Styles] section, plus the [Events] line and + * the Format line following. It shouldn't include any Dialogue line. + * - encoding: Set/allocated/freed by user (before avcodec_open2()) + * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) + *) + subtitle_header: Pcuint8; + subtitle_header_size: cint; + +{$IFDEF FF_API_ERROR_RATE} + (** + * @deprecated use the 'error_rate' private AVOption of the mpegvideo + * encoders + *) + error_rate: cint; +{$ENDIF} + +{$IFDEF FF_API_VBV_DELAY} + (** + * VBV delay coded in the last frame (in periods of a 27 MHz clock). + * Used for compliant TS muxing. + * - encoding: Set by libavcodec. + * - decoding: unused. + * @deprecated this value is now exported as a part of + * AV_PKT_DATA_CPB_PROPERTIES packet side data + *) + vbv_delay: cuint64; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_SIDEDATA_ONLY_PKT} + (** + * Encoding only and set by default. Allow encoders to output packets + * that do not contain any encoded data, only side data. + * + * Some encoders need to output such packets, e.g. to update some stream + * parameters at the end of encoding. + * + * @deprecated this field disables the default behaviour and + * it is kept only for compatibility. + *) + side_data_only_packets: cint; {deprecated} +{$ENDIF} + + (** + * Audio only. The number of "priming" samples (padding) inserted by the + * encoder at the beginning of the audio. I.e. this number of leading + * decoded samples must be discarded by the caller to get the original audio + * without leading padding. + * + * - decoding: unused + * - encoding: Set by libavcodec. The timestamps on the output packets are + * adjusted by the encoder so that they always refer to the + * first sample of the data actually contained in the packet, + * including any added padding. E.g. if the timebase is + * 1/samplerate and the timestamp of the first input sample is + * 0, the timestamp of the first output packet will be + * -initial_padding. + *) + initial_padding: cint; + + (** + * - decoding: For codecs that store a framerate value in the compressed + * bitstream, the decoder may export it here. { 0, 1} when + * unknown. + * - encoding: May be used to signal the framerate of CFR content to an + * encoder. + *) + framerate: TAVRational; + + (** + * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. + * - encoding: unused. + * - decoding: Set by libavcodec before calling get_format() + *) + sw_pix_fmt: TAVPixelFormat; + + (** + * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_pkt_timebase(avctx) + * - encoding unused. + * - decoding set by user + *) + pkt_timebase: TAVRational; + + (** + * AVCodecDescriptor + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_codec_descriptor(avctx) + * - encoding: unused. + * - decoding: set by libavcodec. + *) + codec_descriptor: PAVCodecDescriptor; + +{$IFNDEF FF_API_LOWRES} + (** + * low resolution decoding, 1-> 1/2 size, 2->1/4 size + * - encoding: unused + * - decoding: Set by user. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_lowres(avctx) + *) + lowres: cint; +{$ENDIF} + + (** + * Current statistics for PTS correction. + * - decoding: maintained and used by libavcodec, not intended to be used by user apps + * - encoding: unused + *) + pts_correction_num_faulty_pts: cint64; /// Number of incorrect PTS values so far + pts_correction_num_faulty_dts: cint64; /// Number of incorrect DTS values so far + pts_correction_last_pts: cint64; /// PTS of the last frame + pts_correction_last_dts: cint64; /// DTS of the last frame + + (** + * Character encoding of the input subtitles file. + * - decoding: set by user + * - encoding: unused + *) + sub_charenc: PAnsiChar; + + (** + * Subtitles character encoding mode. Formats or codecs might be adjusting + * this setting (if they are doing the conversion themselves for instance). + * - decoding: set by libavcodec + * - encoding: unused + *) + sub_charenc_mode: cint; + + (** + * Skip processing alpha if supported by codec. + * Note that if the format uses pre-multiplied alpha (common with VP6, + * and recommended due to better video quality/compression) + * the image will look as if alpha-blended onto a black background. + * However for formats that do not use pre-multiplied alpha + * there might be serious artefacts (though e.g. libswscale currently + * assumes pre-multiplied alpha anyway). + * Code outside libavcodec should access this field using AVOptions + * + * - decoding: set by user + * - encoding: unused + *) + skip_alpha: cint; + + (** + * Number of samples to skip after a discontinuity + * - decoding: unused + * - encoding: set by libavcodec + *) + seek_preroll: cint; + +{$IFNDEF FF_API_DEBUG_MV} + (** + * debug motion vectors + * Code outside libavcodec should access this field using AVOptions + * - encoding: Set by user. + * - decoding: Set by user. + *) + debug_mv: cint; +{$ENDIF} + + (** + * custom intra quantization matrix + * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix() + * - encoding: Set by user, can be NULL. + * - decoding: unused. + *) + chroma_intra_matrix: PWord; + + (** + * dump format separator. + * can be ", " or "\n " or anything else + * Code outside libavcodec should access this field using AVOptions + * (NO direct access). + * - encoding: Set by user. + * - decoding: Set by user. + *) + dump_separator: Pcuint8; + + (** + * ',' separated list of allowed decoders. + * If NULL then all are allowed + * - encoding: unused + * - decoding: set by user through AVOPtions (NO direct access) + *) + codec_whitelist: PAnsiChar; + + (* + * Properties of the stream that gets decoded + * To be accessed through av_codec_get_properties() (NO direct access) + * - encoding: unused + * - decoding: set by libavcodec + *) + properties: cuint; + + (** + * Additional data associated with the entire coded stream. + * + * - decoding: unused + * - encoding: may be set by libavcodec after avcodec_open2(). + *) + coded_side_data: PAVPacketSideData; + nb_coded_side_data: cint; + + (** + * Encoding only. + * + * For hardware encoders configured to use a hwaccel pixel format, this + * field should be set by the caller to a reference to the AVHWFramesContext + * describing input frames. AVHWFramesContext.format must be equal to + * AVCodecContext.pix_fmt. + * + * This field should be set before avcodec_open2() is called and is + * afterwards owned and managed by libavcodec. + *) + hw_frames_ctx: PAVBufferRef; + + (** + * Control the form of AVSubtitle.rects[N]->ass + * - decoding: set by user + * - encoding: unused + *) + sub_text_format: cint; + end; {TAVCodecContext} + + TAVSubtitleType = ( + SUBTITLE_NONE, + + SUBTITLE_BITMAP, ///< A bitmap, pict will be set + + (** + * Plain text, the text field must be set by the decoder and is + * authoritative. ass and pict fields may contain approximations. + *) + SUBTITLE_TEXT, + + (** + * Formatted text, the ass field must be set by the decoder and is + * authoritative. pict and text fields may contain approximations. + *) + SUBTITLE_ASS + ); {TAVSubtitleType} + +{$IFDEF FF_API_AVPICTURE} + (** + * @defgroup lavc_picture AVPicture + * + * Functions for working with AVPicture + * @{ + *) + + (** + * Picture data structure. + * + * Up to four components can be stored into it, the last component is + * alpha. + * @deprecated use AVFrame or imgutils functions instead + *) + PAVPicture = ^TAVPicture; + TAVPicture = record + data: array [0..AV_NUM_DATA_POINTERS - 1] of PByteArray; {deprecated} + linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; {deprecated} ///< number of bytes per line + end; {TAVPicture} +{$ENDIF} + + PPAVSubtitleRect = ^PAVSubtitleRect; + PAVSubtitleRect = ^TAVSubtitleRect; + TAVSubtitleRect = record + x: cint; ///< top left corner of pict, undefined when pict is not set + y: cint; ///< top left corner of pict, undefined when pict is not set + w: cint; ///< width of pict, undefined when pict is not set + h: cint; ///< height of pict, undefined when pict is not set + nb_colors: cint; ///< number of colors in pict, undefined when pict is not set + +{$IFDEF FF_API_AVPICTURE} + (** + * @deprecated unused + *) + pict: TAVPicture; {deprecated} +{$ENDIF} + (** + * data+linesize for the bitmap of this subtitle. + * Can be set for text/ass as well once they are rendered. + *) + data: Array [0..4] of PByte; + linesize: Array [0..4] of cint; + + type_: TAVSubtitleType; + + text: PAnsiChar; ///< 0 terminated plain UTF-8 text + + (** + * 0 terminated ASS/SSA compatible event line. + * The presentation of this is unaffected by the other values in this + * struct. + *) + ass: PAnsiChar; + + flags: cint; + end; {TAVSubtitleRect} + + PPAVSubtitle = ^PAVSubtitle; + PAVSubtitle = ^TAVSubtitle; + TAVSubtitle = record + format: cuint16; (* 0 = graphics *) + start_display_time: cuint32; (* relative to packet pts, in ms *) + end_display_time: cuint32; (* relative to packet pts, in ms *) + num_rects: cuint; + rects: PPAVSubtitleRect; + pts: cint64; ///< Same as packet pts, in AV_TIME_BASE + end; {TAVSubtitle} + + (** + * This struct describes the properties of an encoded stream. + * + * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must + * be allocated with avcodec_parameters_alloc() and freed with + * avcodec_parameters_free(). + *) + PPAVCodecParameters = ^PAVCodecParameters; + PAVCodecParameters = ^TAVCodecParameters; + TAVCodecParameters = record + (** + * General type of the encoded data. + *) + codec_type: TAVMediaType; + (** + * Specific type of the encoded data (the codec used). + *) + codec_id: TAVCodecID; + (** + * Additional information about the codec (corresponds to the AVI FOURCC). + *) + codec_tag: cuint32; + + (** + * Extra binary data needed for initializing the decoder, codec-dependent. + * + * Must be allocated with av_malloc() and will be freed by + * avcodec_parameters_free(). The allocated size of extradata must be at + * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding + * bytes zeroed. + *) + extradata: Pcuint8; + (** + * Size of the extradata content in bytes. + *) + extradata_size: cint; + + (** + * - video: the pixel format, the value corresponds to enum AVPixelFormat. + * - audio: the sample format, the value corresponds to enum AVSampleFormat. + *) + format: cint; + + (** + * The average bitrate of the encoded data (in bits per second). + *) + bit_rate: cint64; + + (** + * The number of bits per sample in the codedwords. + * + * This is basically the bitrate per sample. It is mandatory for a bunch of + * formats to actually decode them. It's the number of bits for one sample in + * the actual coded bitstream. + * + * This could be for example 4 for ADPCM + * For PCM formats this matches bits_per_raw_sample + * Can be 0 + *) + bits_per_coded_sample: cint; + + (** + * This is the number of valid bits in each output sample. If the + * sample format has more bits, the least significant bits are additional + * padding bits, which are always 0. Use right shifts to reduce the sample + * to its actual size. For example, audio formats with 24 bit samples will + * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. + * To get the original sample use "(int32_t)sample >> 8"." + * + * For ADPCM this might be 12 or 16 or similar + * Can be 0 + *) + bits_per_raw_sample: cint; + + (** + * Codec-specific bitstream restrictions that the stream conforms to. + *) + profile: cint; + level: cint; + + (** + * Video only. The dimensions of the video frame in pixels. + *) + width: cint; + height: cint; + + (** + * Video only. The aspect ratio (width / height) which a single pixel + * should have when displayed. + * + * When the aspect ratio is unknown / undefined, the numerator should be + * set to 0 (the denominator may have any value). + *) + sample_aspect_ratio: TAVRational; + + (** + * Video only. The order of the fields in interlaced video. + *) + field_order: TAVFieldOrder; + + (** + * Video only. Additional colorspace characteristics. + *) + color_range: TAVColorRange; + color_primaries: TAVColorPrimaries; + color_trc: TAVColorTransferCharacteristic; + color_space: TAVColorSpace; + chroma_location: TAVChromaLocation; + + (** + * Video only. Number of delayed frames. + *) + video_delay: cint; + + (** + * Audio only. The channel layout bitmask. May be 0 if the channel layout is + * unknown or unspecified, otherwise the number of bits set must be equal to + * the channels field. + *) + channel_layout: cuint64; + (** + * Audio only. The number of audio channels. + *) + channels: cint; + (** + * Audio only. The number of audio samples per second. + *) + sample_rate: cint; + (** + * Audio only. The number of bytes per coded audio frame, required by some + * formats. + * + * Corresponds to nBlockAlign in WAVEFORMATEX. + *) + block_align: cint; + (** + * Audio only. Audio frame size, if known. Required by some formats to be static. + *) + frame_size: cint; + + (** + * Audio only. The amount of padding (in samples) inserted by the encoder at + * the beginning of the audio. I.e. this number of leading decoded samples + * must be discarded by the caller to get the original audio without leading + * padding. + *) + initial_padding: cint; + (** + * Audio only. The amount of padding (in samples) appended by the encoder to + * the end of the audio. I.e. this number of decoded samples must be + * discarded by the caller from the end of the stream to get the original + * audio without any trailing padding. + *) + trailing_padding: cint; + (** + * Audio only. Number of samples to skip after a discontinuity. + *) + seek_preroll: cint; + end; {TAVCodecParameters} + +(** + * AVCodec. + *) + TAVCodec = record + (** + * Name of the codec implementation. + * The name is globally unique among encoders and among decoders (but an + * encoder and a decoder can share the same name). + * This is the primary way to find a codec from the user perspective. + *) + name: PAnsiChar; + (** + * Descriptive name for the codec, meant to be more human readable than name. + * You should use the NULL_IF_CONFIG_SMALL() macro to define it. + *) + long_name: {const} PAnsiChar; + type_: TAVMediaType; + id: TAVCodecID; + (** + * Codec capabilities. + * see AV_CODEC_CAP_* + *) + capabilities: cint; + supported_framerates: {const} PAVRational; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} + pix_fmts: {const} PAVPixelFormat; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 + supported_samplerates: {const} PCint; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 + sample_fmts: {const} PAVSampleFormatArray; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 + channel_layouts: {const} PCuint64; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 + max_lowres: byte; ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres() + priv_class: {const} PAVClass; ///< AVClass for the private context + profiles: {const} PAVProfile; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavcodec and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + priv_data_size: cint; + next: PAVCodec; + (** + * @name Frame-level threading support functions + * @{ + *) + (** + * If defined, called on thread contexts when they are created. + * If the codec allocates writable tables in init(), re-allocate them here. + * priv_data will be set to a copy of the original. + *) + init_thread_copy: function (avctx: PAVCodecContext): Pcint; cdecl; + (** + * Copy necessary context variables from a previous thread context to the current one. + * If not defined, the next thread will start automatically; otherwise, the codec + * must call ff_thread_finish_setup(). + * + * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. + *) + update_thread_context: function (dst: PAVCodecContext; src: {const} PAVCodecContext): cint; cdecl; + (** @} *) + + (** + * Private codec-specific defaults. + *) + defaults: {const} pointer; + + (** + * Initialize codec static data, called from avcodec_register(). + *) + init_static_data: procedure (codec: PAVCodec); cdecl; + + init: function (avctx: PAVCodecContext): cint; cdecl; + encode_sub: function (avctx: PAVCodecContext; buf: PByteArray; buf_size: cint; + sub: {const} PAVSubtitle): cint; cdecl; + (** + * Encode data to an AVPacket. + * + * @param avctx codec context + * @param avpkt output AVPacket (may contain a user-provided buffer) + * @param[in] frame AVFrame containing the raw data to be encoded + * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a + * non-empty packet was returned in avpkt. + * @return 0 on success, negative error code on failure + *) + encode2: function (avctx: PAVCodecContext; avpkt: PAVPacket; frame: {const} PAVFrame; + got_packet_ptr: Pcint): cint; cdecl; + decode: function (avctx: PAVCodecContext; outdata: pointer; var outdata_size: cint; avpkt: PAVPacket): cint; cdecl; + close: function (avctx: PAVCodecContext): cint; cdecl; + (** + * Decode/encode API with decoupled packet/frame dataflow. The API is the + * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except + * that: + * - never called if the codec is closed or the wrong type, + * - AVPacket parameter change side data is applied right before calling + * AVCodec->send_packet, + * - if AV_CODEC_CAP_DELAY is not set, drain packets or frames are never sent, + * - only one drain packet is ever passed down (until the next flush()), + * - a drain AVPacket is always NULL (no need to check for avpkt->size). + *) + send_frame: function(avctx: PAVCodecContext; frame: {const} PAVFrame): cint; cdecl; + send_packet: function(avctx: PAVCodecContext; frame: {const} PAVPacket): cint; cdecl; + receive_frame: function(avctx: PAVCodecContext; frame: PAVFrame): cint; cdecl; + receive_packet: function(avctx: PAVCodecContext; avpkt: PAVPacket): cint; cdecl; + (** + * Flush buffers. + * Will be called when seeking + *) + flush: procedure (avctx: PAVCodecContext); cdecl; + (** + * Internal codec capabilities. + * See FF_CODEC_CAP_* in internal.h + *) + caps_internal: cint; + end; {TAVCodec} + + PMpegEncContext = ^TMpegEncContext; + // To be expanded if needed. + TMpegEncContext = record + end; + +(** + * @defgroup lavc_hwaccel AVHWAccel + * @{ + *) + TAVHWAccel = record + (** + * Name of the hardware accelerated codec. + * The name is globally unique among encoders and among decoders (but an + * encoder and a decoder can share the same name). + *) + name: PAnsiChar; + + (** + * Type of codec implemented by the hardware accelerator. + * + * See AVMediaType_xxx + *) + type_: TAVMediaType; + + (** + * Codec implemented by the hardware accelerator. + * + * See AV_CODEC_ID_xxx + *) + id: TAVCodecID; + + (** + * Supported pixel format. + * + * Only hardware accelerated formats are supported here. + *) + pix_fmt: PAVPixelFormat; + + (** + * Hardware accelerated codec capabilities. + * see HWACCEL_CODEC_CAP_* + *) + capabilities: cint; + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavcodec and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + next: PAVHWAccel; + + (** + * Allocate a custom buffer + *) + alloc_frame: function (avctx: PAVCodecContext; frame: PAVFrame): cint; cdecl; + + (** + * Called at the beginning of each frame or field picture. + * + * Meaningful frame information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. + * The only exception is XvMC, that works on MB level. + * + * Note that buf can be NULL along with buf_size set to 0. + * Otherwise, this means the whole frame is available at this point. + * + * @param avctx the codec context + * @param buf the frame data buffer base + * @param buf_size the size of the frame in bytes + * @return zero if successful, a negative value otherwise + *) + start_frame: function (avctx: PAVCodecContext; + buf: {const} PByteArray; + buf_size: cuint): cint; cdecl; + + (** + * Callback for each slice. + * + * Meaningful slice information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. + * + * @param avctx the codec context + * @param buf the slice data buffer base + * @param buf_size the size of the slice in bytes + * @return zero if successful, a negative value otherwise + *) + decode_slice: function (avctx: PAVCodecContext; + buf: {const} PByteArray; + buf_size: cuint): cint; cdecl; + + (** + * Called at the end of each frame or field picture. + * + * The whole picture is parsed at this point and can now be sent + * to the hardware accelerator. This function is mandatory. + * + * @param avctx the codec context + * @return zero if successful, a negative value otherwise + *) + end_frame: function (avctx: PAVCodecContext): cint; cdecl; + + (** + * Size of per-frame hardware accelerator private data. + * + * Private data is allocated with av_mallocz() before + * AVCodecContext.get_buffer() and deallocated after + * AVCodecContext.release_buffer(). + *) + frame_priv_data_size: cint; + + (** + * Called for every Macroblock in a slice. + * + * XvMC uses it to replace the ff_mpv_decode_mb(). + * Instead of decoding to raw picture, MB parameters are + * stored in an array provided by the video driver. + * + * @param s the mpeg context + *) + decode_mb: procedure(s: PMpegEncContext); cdecl; + + (** + * Initialize the hwaccel private data. + * + * This will be called from ff_get_format(), after hwaccel and + * hwaccel_context are set and the hwaccel private data in AVCodecInternal + * is allocated. + *) + init: function (avctx: PAVCodecContext): cint; cdecl; + + (** + * Uninitialize the hwaccel private data. + * + * This will be called from get_format() or avcodec_close(), after hwaccel + * and hwaccel_context are already uninitialized. + *) + uninit: function (avctx: PAVCodecContext): cint; cdecl; + + (** + * Size of the private data to allocate in + * AVCodecInternal.hwaccel_priv_data. + *) + priv_data_size: cint; + end; {TAVHWAccel} + +const + (** + * Hardware acceleration should be used for decoding even if the codec level + * used is unknown or higher than the maximum supported level reported by the + * hardware driver. + * + * It's generally a good idea to pass this flag unless you have a specific + * reason not to, as hardware tends to under-report supported levels. + *) + AV_HWACCEL_FLAG_IGNORE_LEVEL = (1 << 0); + + (** + * Hardware acceleration can output YUV pixel formats with a different chroma + * sampling than 4:2:0 and/or other than 8 bits per component. + *) + AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH = (1 << 1); + + FF_SUB_CHARENC_MODE_DO_NOTHING = -1; ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) + FF_SUB_CHARENC_MODE_AUTOMATIC = 0; ///< libavcodec will select the mode itself + FF_SUB_CHARENC_MODE_PRE_DECODER = 1; ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv + + FF_CODEC_PROPERTY_LOSSLESS = $00000001; + FF_CODEC_PROPERTY_CLOSED_CAPTIONS = $00000002; + FF_SUB_TEXT_FMT_ASS = 0; +{$IFDEF FF_API_ASS_TIMING} + FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS = 1; +{$ENDIF} + + function av_codec_get_pkt_timebase(avctx: {const} PAVCodecContext): TAVRational; + cdecl; external av__codec; + procedure av_codec_set_pkt_timebase(avctx: {const} PAVCodecContext; val: TAVRational); + cdecl; external av__codec; + + function av_codec_get_codec_descriptor(avctx: {const} PAVCodecContext): PAVCodecDescriptor; + cdecl; external av__codec; + procedure av_codec_set_codec_descriptor(avctx: {const} PAVCodecContext; desc: {const} PAVCodecDescriptor); + cdecl; external av__codec; + + function av_codec_get_codec_properties(avctx: {const} PAVCodecContext): cuint; + cdecl; external av__codec; + + function av_codec_get_lowres(avctx: {const} PAVCodecContext): cint; + cdecl; external av__codec; + procedure av_codec_set_lowres(avctx: PAVCodecContext; val: cint); + cdecl; external av__codec; + + function av_codec_get_seek_preroll(avctx: {const} PAVCodecContext): cint; + cdecl; external av__codec; + procedure av_codec_set_seek_preroll(avctx: PAVCodecContext; val: cint); + cdecl; external av__codec; + + function av_codec_get_max_lowres(codec: {const} PAVCodec): cint; + cdecl; external av__codec; + + function av_codec_get_chroma_intra_matrix(avctx: {const} PAVCodecContext): PWord; + cdecl; external av__codec; + procedure av_codec_set_chroma_intra_matrix(avctx: PAVCodecContext; val: PWord); + cdecl; external av__codec; + +(** + * @ + *) + +const + AV_SUBTITLE_FLAG_FORCED = $00000001; + +(** + * If c is NULL, returns the first registered codec, + * if c is non-NULL, returns the next registered codec after c, + * or NULL if c is the last one. + *) +function av_codec_next(c: {const} PAVCodec): PAVCodec; + cdecl; external av__codec; + +(** + * Return the LIBAVCODEC_VERSION_INT constant. + *) +function avcodec_version(): cuint; + cdecl; external av__codec; + +(** + * Return the libavcodec build-time configuration. + *) +function avcodec_configuration(): PAnsiChar; + cdecl; external av__codec; + +(** + * Return the libavcodec license. + *) +function avcodec_license(): PAnsiChar; + cdecl; external av__codec; + +(** + * Register the codec codec and initialize libavcodec. + * + * @warning either this function or avcodec_register_all() must be called + * before any other libavcodec functions. + * + * @see avcodec_register_all() + *) +procedure avcodec_register(codec: PAVCodec); + cdecl; external av__codec; + +(** + * Register all the codecs, parsers and bitstream filters which were enabled at + * configuration time. If you do not call this function you can select exactly + * which formats you want to support, by using the individual registration + * functions. + * + * @see register_avcodec + * @see avcodec_register + * @see av_register_codec_parser + * @see av_register_bitstream_filter + *) +procedure avcodec_register_all(); + cdecl; external av__codec; + +(** + * Allocate an AVCodecContext and set its fields to default values. The + * resulting struct should be freed with avcodec_free_context(). + * + * @param codec if non-NULL, allocate private data and initialize defaults + * for the given codec. It is illegal to then call avcodec_open2() + * with a different codec. + * + * @return An AVCodecContext filled with default values or NULL on failure. + *) +function avcodec_alloc_context3(codec: {const} PAVCodec): PAVCodecContext; + cdecl; external av__codec; + +(** + * Free the codec context and everything associated with it and write NULL to + * the provided pointer. + *) +procedure avcodec_free_context(var avctx: PAVCodecContext); + cdecl; external av__codec; + +{$IFDEF FF_API_GET_CONTEXT_DEFAULTS} +(** + * @deprecated This function should not be used, as closing and opening a codec + * context multiple time is not supported. A new codec context should be + * allocated for each new use. + *) +procedure avcodec_get_context_defaults3(s: PAVCodecContext; codec: {const} PAVCodec); + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * Get the AVClass for AVCodecContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avcodec_get_class(): {const} PAVClass; + cdecl; external av__codec; + +{$IFDEF FF_API_COPY_CONTEXT} +(** + * Get the AVClass for AVFrame. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avcodec_get_frame_class(): {const} PAVClass; + cdecl; external av__codec; + +(** + * Get the AVClass for AVSubtitleRect. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avcodec_get_subtitle_rect_class(): {const} PAVClass; + cdecl; external av__codec; + +(** + * Copy the settings of the source AVCodecContext into the destination + * AVCodecContext. The resulting destination codec context will be + * unopened, i.e. you are required to call avcodec_open2() before you + * can use this AVCodecContext to decode/encode video/audio data. + * + * @param dest target codec context, should be initialized with + * avcodec_alloc_context3(), but otherwise uninitialized + * @param src source codec context + * @return AVERROR() on error (e.g. memory allocation error), 0 on success + * + * @deprecated The semantics of this function are ill-defined and it should not + * be used. If you need to transfer the stream parameters from one codec context + * to another, use an intermediate AVCodecParameters instance and the + * avcodec_parameters_from_context() / avcodec_parameters_to_context() + * functions. + *) +function avcodec_copy_context(dest: PAVCodecContext; src: {const} PAVCodecContext): cint; + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * Allocate a new AVCodecParameters and set its fields to default values + * (unknown/invalid/0). The returned struct must be freed with + * avcodec_parameters_free(). + *) +function avcodec_parameters_alloc(): PAVCodecParameters; + cdecl; external av__codec; + +(** + * Free an AVCodecParameters instance and everything associated with it and + * write NULL to the supplied pointer. + *) +procedure avcodec_parameters_free(par: PPAVCodecParameters); + cdecl; external av__codec; + +(** + * Copy the contents of src to dst. Any allocated fields in dst are freed and + * replaced with newly allocated duplicates of the corresponding fields in src. + * + * @return >= 0 on success, a negative AVERROR code on failure. + *) +function avcodec_parameters_copy(dst: PAVCodecParameters; src: {const} PAVCodecParameters): cint; + cdecl; external av__codec; + +(** + * Fill the parameters struct based on the values from the supplied codec + * context. Any allocated fields in par are freed and replaced with duplicates + * of the corresponding fields in codec. + * + * @return >= 0 on success, a negative AVERROR code on failure + *) +function avcodec_parameters_from_context(par: PAVCodecParameters; + codec: {const} PAVCodecContext): cint; + cdecl; external av__codec; + +(** + * Fill the codec context based on the values from the supplied codec + * parameters. Any allocated fields in codec that have a corresponding field in + * par are freed and replaced with duplicates of the corresponding field in par. + * Fields in codec that do not have a counterpart in par are not touched. + * + * @return >= 0 on success, a negative AVERROR code on failure. + *) +function avcodec_parameters_to_context(codec: PAVCodecContext; + par: {const} PAVCodecParameters): cint; + cdecl; external av__codec; + +(** + * Initialize the AVCodecContext to use the given AVCodec. Prior to using this + * function the context has to be allocated with avcodec_alloc_context3(). + * + * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), + * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for + * retrieving a codec. + * + * @warning This function is not thread safe! + * + * @note Always call this function before using decoding routines (such as + * @ref avcodec_receive_frame()). + * + * @code + * avcodec_register_all(); + * av_dict_set(&opts, "b", "2.5M", 0); + * codec = avcodec_find_decoder(AV_CODEC_ID_H264); + * if (!codec) + * exit(1); + * + * context = avcodec_alloc_context3(codec); + * + * if (avcodec_open2(context, codec, opts) < 0) + * exit(1); + * @endcode + * + * @param avctx The context to initialize. + * @param codec The codec to open this context for. If a non-NULL codec has been + * previously passed to avcodec_alloc_context3() or + * for this context, then this parameter MUST be either NULL or + * equal to the previously passed codec. + * @param options A dictionary filled with AVCodecContext and codec-private options. + * On return this object will be filled with options that were not found. + * + * @return zero on success, a negative value on error + * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), + * av_dict_set(), av_opt_find(). + *) +function avcodec_open2(avctx: PAVCodecContext; codec: {const} PAVCodec; options: PPAVDictionary): cint; + cdecl; external av__codec; + +(** + * Close a given AVCodecContext and free all the data associated with it + * (but not the AVCodecContext itself). + * + * Calling this function on an AVCodecContext that hasn't been opened will free + * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL + * codec. Subsequent calls will do nothing. + * + * @note Do not use this function. Use avcodec_free_context() to destroy a + * codec context (either open or closed). Opening and closing a codec context + * multiple times is not supported anymore -- use multiple codec contexts + * instead. + *) +function avcodec_close(avctx: PAVCodecContext): cint; + cdecl; external av__codec; + +(** + * Free all allocated data in the given subtitle struct. + * + * @param sub AVSubtitle to free. + *) +procedure avsubtitle_free(sub: PAVSubtitle); + cdecl; external av__codec; + +(** + * @} + *) + +(** + * @addtogroup lavc_packet + * @{ + *) + +(** + * Allocate an AVPacket and set its fields to default values. The resulting + * struct must be freed using av_packet_free(). + * + * @return An AVPacket filled with default values or NULL on failure. + * + * @note this only allocates the AVPacket itself, not the data buffers. Those + * must be allocated through other means such as av_new_packet. + * + * @see av_new_packet + *) +function av_packet_alloc(): PAVPacket; + cdecl; external av__codec; + +(** + * Create a new packet that references the same data as src. + * + * This is a shortcut for av_packet_alloc()+av_packet_ref(). + * + * @return newly created AVPacket on success, NULL on error. + * + * @see av_packet_alloc + * @see av_packet_ref + *) +function av_packet_clone(src: PAVPacket): PAVPacket; + cdecl; external av__codec; + +(** + * Free the packet, if the packet is reference counted, it will be + * unreferenced first. + * + * @param packet packet to be freed. The pointer will be set to NULL. + * @note passing NULL is a no-op. + *) +procedure av_packet_free(pkt: PPAVPacket); + cdecl; external av__codec; + +(* + * Initialize optional fields of a packet with default values. + * + * Note, this does not touch the data and size members, which have to be + * initialized separately. + * + * @param pkt packet + *) +procedure av_init_packet(var pkt: TAVPacket); + cdecl; external av__codec; + +(* + * Allocate the payload of a packet and initialize its fields with + * default values. + * + * @param pkt packet + * @param size wanted payload size + * @return 0 if OK, AVERROR_xxx otherwise + *) +function av_new_packet(pkt: PAVPacket; size: cint): cint; + cdecl; external av__codec; + +(* + * Reduce packet size, correctly zeroing padding + * + * @param pkt packet + * @param size new size + *) +procedure av_shrink_packet(pkt: PAVPacket; size: cint); + cdecl; external av__codec; + +(** + * Increase packet size, correctly zeroing padding + * + * @param pkt packet + * @param grow_by number of bytes by which to increase the size of the packet + *) +function av_grow_packet(pkt: PAVPacket; grow_by: cint): cint; + cdecl; external av__codec; + +(** + * Initialize a reference-counted packet from av_malloc()ed data. + * + * @param pkt packet to be initialized. This function will set the data, size, + * buf and destruct fields, all others are left untouched. + * @param data Data allocated by av_malloc() to be used as packet data. If this + * function returns successfully, the data is owned by the underlying AVBuffer. + * The caller may not access the data through other means. + * @param size size of data in bytes, without the padding. I.e. the full buffer + * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. + * + * @return 0 on success, a negative AVERROR on error + *) +function av_packet_from_data(pkt: PAVPacket; data: PByte; size: cint): cint; + cdecl; external av__codec; + +{$IFDEF FF_API_AVPACKET_OLD_API} +(* + * @warning This is a hack - the packet memory allocation stuff is broken. The + * packet is allocated if it was not really allocated. + * + * @deprecated Use av_packet_ref + *) +function av_dup_packet(pkt: PAVPacket): cint; + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * Copy packet, including contents + * + * @return 0 on success, negative AVERROR on fail + *) +function av_copy_packet(dst: PAVPacket; src: {const} PAVPacket): cint; + cdecl; external av__codec; + +(** + * Copy packet side data + * + * @return 0 on success, negative AVERROR on fail + *) +function av_copy_packet_side_data(dst: PAVPacket; src: {const} PAVPacket): cint; + cdecl; external av__codec; + +(* + * Free a packet. + * + * @deprecated Use av_packet_unref + * + * @param pkt packet to free + *) +procedure av_free_packet(pkt: PAVPacket); + cdecl; external av__codec; deprecated; + +(** + * Allocate new information of a packet. + * + * @param pkt packet + * @param type side information type + * @param size side information size + * @return pointer to fresh allocated data or NULL otherwise + *) +function av_packet_new_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + size: cint): PByte; + cdecl; external av__codec; + +(** + * Wrap an existing array as a packet side data. + * + * @param pkt packet + * @param type side information type + * @param data the side data array. It must be allocated with the av_malloc() + * family of functions. The ownership of the data is transferred to + * pkt. + * @param size side information size + * @return a non-negative number on success, a negative AVERROR code on + * failure. On failure, the packet is unchanged and the data remains + * owned by the caller. + *) +function av_packet_add_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + data: Pcuint8; size: size_t): cint; + cdecl; external av__codec; + +(** + * Shrink the already allocated side data buffer + * + * @param pkt packet + * @param type side information type + * @param size new side information size + * @return 0 on success, < 0 on failure + *) +function av_packet_shrink_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + size: cint): cint; + cdecl; external av__codec; + +(** + * Get side information from packet. + * + * @param pkt packet + * @param type desired side information type + * @param size pointer for side information size to store (optional) + * @return pointer to data if present or NULL otherwise + *) +function av_packet_get_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + size: Pcint): PByte; + cdecl; external av__codec; + +function av_packet_merge_side_data(pkt: PAVPacket): cint; + cdecl; external av__codec; + +function av_packet_split_side_data(pkt: PAVPacket): cint; + cdecl; external av__codec; + +function av_packet_side_data_name(type_: TAVPacketSideDataType): PAnsiChar; + cdecl; external av__codec; + +(** + * Pack a dictionary for use in side_data. + * + * @param dict The dictionary to pack. + * @param size pointer to store the size of the returned data + * @return pointer to data if successful, NULL otherwise + *) +function av_packet_pack_dictionary(dict: PAVDictionary; size: PCuint): PByte; + cdecl; external av__codec; + +(** + * Unpack a dictionary from side_data. + * + * @param data data from side_data + * @param size size of the data + * @param dict the metadata storage dictionary + * @return 0 on success, < 0 on failure + *) +function av_packet_unpack_dictionary(data: {const} PByte; size: cint; dict: PPAVDictionary): cint; + cdecl; external av__codec; + +(** + * Convenience function to free all the side data stored. + * All the other fields stay untouched. + * + * @param pkt packet + *) +procedure av_packet_free_side_data(pkt: PAVPacket); + cdecl; external av__codec; + +(** + * Setup a new reference to the data described by a given packet + * + * If src is reference-counted, setup dst as a new reference to the + * buffer in src. Otherwise allocate a new buffer in dst and copy the + * data from src into it. + * + * All the other fields are copied from src. + * + * @see av_packet_unref + * + * @param dst Destination packet + * @param src Source packet + * + * @return 0 on success, a negative AVERROR on error. + *) +function av_packet_ref(dst: PAVPacket; src: {const} PAVPacket): cint; + cdecl; external av__codec; + +(** + * Wipe the packet. + * + * Unreference the buffer referenced by the packet and reset the + * remaining packet fields to their default values. + * + * @param pkt The packet to be unreferenced. + *) +procedure av_packet_unref(pkt: PAVPacket); + cdecl; external av__codec; + +(** + * Move every field in src to dst and reset src. + * + * @see av_packet_unref + * + * @param src Source packet, will be reset + * @param dst Destination packet + *) +procedure av_packet_move_ref(dst: PAVPacket; src: PAVPacket); + cdecl; external av__codec; + +(** + * Copy only "properties" fields from src to dst. + * + * Properties for the purpose of this function are all the fields + * beside those related to the packet data (buf, data, size) + * + * @param dst Destination packet + * @param src Source packet + * + * @return 0 on success AVERROR on failure. + * + *) +function av_packet_copy_props(dst: PAVPacket; src: {const} PAVPacket): cint; + cdecl; external av__codec; + +(** + * Convert valid timing fields (timestamps / durations) in a packet from one + * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be + * ignored. + * + * @param pkt packet on which the conversion will be performed + * @param tb_src source timebase, in which the timing fields in pkt are + * expressed + * @param tb_dst destination timebase, to which the timing fields will be + * converted + *) +procedure av_packet_rescale_ts(pkt: PAVPacket; tb_src, tb_dst: TAVRational); + cdecl; external av__codec; + +(** + * @ + *) + +(** + * @addtogroup lavc_decoding + * @ + *) + +(** + * Find a registered decoder with a matching codec ID. + * + * @param id CodecID of the requested decoder + * @return A decoder if one was found, NULL otherwise. + *) +function avcodec_find_decoder(id: TAVCodecID): PAVCodec; + cdecl; external av__codec; + +(** + * Find a registered decoder with the specified name. + * + * @param name name of the requested decoder + * @return A decoder if one was found, NULL otherwise. + *) +function avcodec_find_decoder_by_name(name: PAnsiChar): PAVCodec; + cdecl; external av__codec; + +(** + * The default callback for AVCodecContext.get_buffer2(). It is made public so + * it can be called by custom get_buffer2() implementations for decoders without + * AV_CODEC_CAP_DR1 set. + *) +function avcodec_default_get_buffer2(s: PAVCodecContext; frame: PAVFrame; flags: cint): cint; + cdecl; external av__codec; + +{$IFDEF FF_API_EMU_EDGE} +(** + * Return the amount of padding in pixels which the get_buffer callback must + * provide around the edge of the image for codecs which do not have the + * CODEC_FLAG_EMU_EDGE flag. + * + * @return Required padding in pixels. + * + * @deprecated CODEC_FLAG_EMU_EDGE is deprecated, so this function is no longer + * needed + *) +function avcodec_get_edge_width(): cuint; + cdecl; external av__codec; +{$ENDIF} + +(** + * Modify width and height values so that they will result in a memory + * buffer that is acceptable for the codec if you do not use any horizontal + * padding. + * + * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. + *) +procedure avcodec_align_dimensions(s: PAVCodecContext; width: PCint; height: PCint); + cdecl; external av__codec; + +(** + * Modifiy width and height values so that they will result in a memory + * buffer that is acceptable for the codec if you also ensure that all + * line sizes are a multiple of the respective linesize_align[i]. + * + * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. + *) +procedure avcodec_align_dimensions2(s: PAVCodecContext; width: PCint; height: PCint; + linesize_align: PAVNDPArray); + cdecl; external av__codec; + +(** + * Decode the audio frame of size avpkt->size from avpkt->data into frame. + * + * Some decoders may support multiple frames in a single AVPacket. Such + * decoders would then just decode the first frame and the return value would be + * less than the packet size. In this case, avcodec_decode_audio4 has to be + * called again with an AVPacket containing the remaining data in order to + * decode the second frame, etc... Even if no frames are returned, the packet + * needs to be fed to the decoder with remaining data until it is completely + * consumed or an error occurs. + * + * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input + * and output. This means that for some packets they will not immediately + * produce decoded output and need to be flushed at the end of decoding to get + * all the decoded data. Flushing is done by calling this function with packets + * with avpkt->data set to NULL and avpkt->size set to 0 until it stops + * returning samples. It is safe to flush even those decoders that are not + * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. + * + * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE + * larger than the actual read bytes because some optimized bitstream + * readers read 32 or 64 bits at once and could read over the end. + * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * + * @param avctx the codec context + * @param[out] frame The AVFrame in which to store decoded audio samples. + * The decoder will allocate a buffer for the decoded frame by + * calling the AVCodecContext.get_buffer2() callback. + * When AVCodecContext.refcounted_frames is set to 1, the frame is + * reference counted and the returned reference belongs to the + * caller. The caller must release the frame using av_frame_unref() + * when the frame is no longer needed. The caller may safely write + * to the frame if av_frame_is_writable() returns 1. + * When AVCodecContext.refcounted_frames is set to 0, the returned + * reference belongs to the decoder and is valid only until the + * next call to this function or until closing or flushing the + * decoder. The caller may not write to it. + * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is + * non-zero. Note that this field being set to zero + * does not mean that an error has occurred. For + * decoders with AV_CODEC_CAP_DELAY set, no given decode + * call is guaranteed to produce a frame. + * @param[in] avpkt The input AVPacket containing the input buffer. + * At least avpkt->data and avpkt->size should be set. Some + * decoders might also require additional fields to be set. + * @return A negative error code is returned if an error occurred during + * decoding, otherwise the number of bytes consumed from the input + * AVPacket is returned. + * + * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). + *) +function avcodec_decode_audio4(avctx: PAVCodecContext; frame: PAVFrame; + got_frame_ptr: Pcint; avpkt: PAVPacket): cint; + cdecl; external av__codec; deprecated; + +(** + * Decode the video frame of size avpkt->size from avpkt->data into picture. + * Some decoders may support multiple frames in a single AVPacket, such + * decoders would then just decode the first frame. + * + * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than + * the actual read bytes because some optimized bitstream readers read 32 or 64 + * bits at once and could read over the end. + * + * @warning The end of the input buffer buf should be set to 0 to ensure that + * no overreading happens for damaged MPEG streams. + * + * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay + * between input and output, these need to be fed with avpkt->data=NULL, + * avpkt->size=0 at the end to return the remaining frames. + * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * + * @param avctx the codec context + * @param[out] picture The AVFrame in which the decoded video frame will be stored. + * Use av_frame_alloc() to get an AVFrame. The codec will + * allocate memory for the actual bitmap by calling the + * AVCodecContext.get_buffer2() callback. + * When AVCodecContext.refcounted_frames is set to 1, the frame is + * reference counted and the returned reference belongs to the + * caller. The caller must release the frame using av_frame_unref() + * when the frame is no longer needed. The caller may safely write + * to the frame if av_frame_is_writable() returns 1. + * When AVCodecContext.refcounted_frames is set to 0, the returned + * reference belongs to the decoder and is valid only until the + * next call to this function or until closing or flushing the + * decoder. The caller may not write to it. + * + * @param[in] avpkt The input AVPacket containing the input buffer. + * You can create such packet with av_init_packet() and by then setting + * data and size, some decoders might in addition need other fields like + * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least + * fields possible. + * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. + * @return On error a negative value is returned, otherwise the number of bytes + * used or zero if no frame could be decompressed. + * + * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). + *) +function avcodec_decode_video2(avctx: PAVCodecContext; picture: PAVFrame; + var got_picture_ptr: cint; + avpkt: {const} PAVPacket): cint; + cdecl; external av__codec; deprecated; + +(* + * Decode a subtitle message. + * Return a negative value on error, otherwise return the number of bytes used. + * If no subtitle could be decompressed, got_sub_ptr is zero. + * Otherwise, the subtitle is stored in *sub. + * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for + * simplicity, because the performance difference is expect to be negligible + * and reusing a get_buffer written for video codecs would probably perform badly + * due to a potentially very different allocation pattern. + * + * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input + * and output. This means that for some packets they will not immediately + * produce decoded output and need to be flushed at the end of decoding to get + * all the decoded data. Flushing is done by calling this function with packets + * with avpkt->data set to NULL and avpkt->size set to 0 until it stops + * returning subtitles. It is safe to flush even those decoders that are not + * marked with CODEC_CAP_DELAY, then no subtitles will be returned. + * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * + * @param avctx the codec context + * @param[out] sub The Preallocated AVSubtitle in which the decoded subtitle will be stored, + * must be freed with avsubtitle_free if *got_sub_ptr is set. + * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. + * @param[in] avpkt The input AVPacket containing the input buffer. + *) +function avcodec_decode_subtitle2(avctx: PAVCodecContext; sub: PAVSubtitle; + var got_sub_ptr: cint; + avpkt: PAVPacket): cint; + cdecl; external av__codec; + +(** + * Supply raw packet data as input to a decoder. + * + * Internally, this call will copy relevant AVCodecContext fields, which can + * influence decoding per-packet, and apply them when the packet is actually + * decoded. (For example AVCodecContext.skip_frame, which might direct the + * decoder to drop the frame contained by the packet sent with this function.) + * + * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE + * larger than the actual read bytes because some optimized bitstream + * readers read 32 or 64 bits at once and could read over the end. + * + * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) + * on the same AVCodecContext. It will return unexpected results now + * or in future libavcodec versions. + * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * + * @param avctx codec context + * @param[in] avpkt The input AVPacket. Usually, this will be a single video + * frame, or several complete audio frames. + * Ownership of the packet remains with the caller, and the + * decoder will not write to the packet. The decoder may create + * a reference to the packet data (or copy it if the packet is + * not reference-counted). + * Unlike with older APIs, the packet is always fully consumed, + * and if it contains multiple frames (e.g. some audio codecs), + * will require you to call avcodec_receive_frame() multiple + * times afterwards before you can send a new packet. + * It can be NULL (or an AVPacket with data set to NULL and + * size set to 0); in this case, it is considered a flush + * packet, which signals the end of the stream. Sending the + * first flush packet will return success. Subsequent ones are + * unnecessary and will return AVERROR_EOF. If the decoder + * still has frames buffered, it will return them after sending + * a flush packet. + * + * @return 0 on success, otherwise negative error code: + * AVERROR(EAGAIN): input is not accepted right now - the packet must be + * resent after trying to read output + * AVERROR_EOF: the decoder has been flushed, and no new packets can + * be sent to it (also returned if more than 1 flush + * packet is sent) + * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush + * AVERROR(ENOMEM): failed to add packet to internal queue, or similar + * other errors: legitimate decoding errors + *) +function avcodec_send_packet(avctx: PAVCodecContext; avpkt: {const} PAVPacket): cint; + cdecl; external av__codec; + +(** + * Return decoded output data from a decoder. + * + * @param avctx codec context + * @param frame This will be set to a reference-counted video or audio + * frame (depending on the decoder type) allocated by the + * decoder. Note that the function will always call + * av_frame_unref(frame) before doing anything else. + * + * @return + * 0: success, a frame was returned + * AVERROR(EAGAIN): output is not available right now - user must try + * to send new input + * AVERROR_EOF: the decoder has been fully flushed, and there will be + * no more output frames + * AVERROR(EINVAL): codec not opened, or it is an encoder + * other negative values: legitimate decoding errors + *) +function avcodec_receive_frame(avctx: PAVCodecContext; frame: PAVFrame): cint; + cdecl; external av__codec; + +(** + * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() + * to retrieve buffered output packets. + * + * @param avctx codec context + * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. + * Ownership of the frame remains with the caller, and the + * encoder will not write to the frame. The encoder may create + * a reference to the frame data (or copy it if the frame is + * not reference-counted). + * It can be NULL, in which case it is considered a flush + * packet. This signals the end of the stream. If the encoder + * still has packets buffered, it will return them after this + * call. Once flushing mode has been entered, additional flush + * packets are ignored, and sending frames will return + * AVERROR_EOF. + * + * For audio: + * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame + * can have any number of samples. + * If it is not set, frame->nb_samples must be equal to + * avctx->frame_size for all frames except the last. + * The final frame may be smaller than avctx->frame_size. + * @return 0 on success, otherwise negative error code: + * AVERROR(EAGAIN): input is not accepted right now - the frame must be + * resent after trying to read output packets + * AVERROR_EOF: the encoder has been flushed, and no new frames can + * be sent to it + * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a + * decoder, or requires flush + * AVERROR(ENOMEM): failed to add packet to internal queue, or similar + * other errors: legitimate decoding errors + *) +function avcodec_send_frame(avctx: PAVCodecContext; frame: {const} PAVFrame): cint; + cdecl; external av__codec; + +(** + * Read encoded data from the encoder. + * + * @param avctx codec context + * @param avpkt This will be set to a reference-counted packet allocated by the + * encoder. Note that the function will always call + * av_frame_unref(frame) before doing anything else. + * @return 0 on success, otherwise negative error code: + * AVERROR(EAGAIN): output is not available right now - user must try + * to send input + * AVERROR_EOF: the encoder has been fully flushed, and there will be + * no more output packets + * AVERROR(EINVAL): codec not opened, or it is an encoder + * other errors: legitimate decoding errors + *) +function avcodec_receive_packet(avctx: PAVCodecContext; avpkt: PAVPacket): cint; + cdecl; external av__codec; + +(** + * @defgroup lavc_parsing Frame parsing + * @ + *) + +type + TAVPictureStructure = ( + AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown + AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field + AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field + AV_PICTURE_STRUCTURE_FRAME //< coded as frame + ); + +const + AV_PARSER_PTS_NB = 4; + PARSER_FLAG_COMPLETE_FRAMES = $0001; + PARSER_FLAG_ONCE = $0002; +/// Set if the parser has a valid file offset + PARSER_FLAG_FETCHED_OFFSET = $0004; + PARSER_FLAG_USE_CODEC_TS = $1000; + +type + (* frame parsing *) + PAVCodecParserContext = ^TAVCodecParserContext; + PAVCodecParser = ^TAVCodecParser; + + TAVCodecParserContext = record + priv_data: pointer; + parser: PAVCodecParser; + frame_offset: cint64; (* offset of the current frame *) + cur_offset: cint64; (* current offset (incremented by each av_parser_parse()) *) + next_frame_offset: cint64; (* offset of the next frame *) + (* video info *) + pict_type: cint; (* XXX: put it back in AVCodecContext *) + (** + * This field is used for proper frame duration computation in lavf. + * It signals, how much longer the frame duration of the current frame + * is compared to normal frame duration. + * + * frame_duration = (1 + repeat_pict) * time_base + * + * It is used by codecs like H.264 to display telecined material. + *) + repeat_pict: cint; (* XXX: put it back in AVCodecContext *) + pts: cint64; (* pts of the current frame *) + dts: cint64; (* dts of the current frame *) + + (* private data *) + last_pts: cint64; + last_dts: cint64; + fetch_timestamp: cint; + + cur_frame_start_index: cint; + cur_frame_offset: array [0..AV_PARSER_PTS_NB - 1] of cint64; + cur_frame_pts: array [0..AV_PARSER_PTS_NB - 1] of cint64; + cur_frame_dts: array [0..AV_PARSER_PTS_NB - 1] of cint64; + + flags: cint; + + offset: cint64; ///< byte offset from starting packet start + cur_frame_end: array [0..AV_PARSER_PTS_NB - 1] of cint64; + + (** + * Set by parser to 1 for key frames and 0 for non-key frames. + * It is initialized to -1, so if the parser doesn't set this flag, + * old-style fallback using FF_I_TYPE picture type as key frames + * will be used. + *) + key_frame: cint; + +{$IFDEF FF_API_CONVERGENCE_DURATION} + (** + * @deprecated unused + *) + convergence_duration: cint64; {deprecated} +{$ENDIF} + + // Timestamp generation support: + (** + * Synchronization point for start of timestamp generation. + * + * Set to >0 for sync point, 0 for no sync point and <0 for undefined + * (default). + * + * For example, this corresponds to presence of H.264 buffering period + * SEI message. + *) + dts_sync_point: cint; + + (** + * Offset of the current timestamp against last timestamp sync point in + * units of AVCodecContext.time_base. + * + * Set to INT_MIN when dts_sync_point unused. Otherwise, it must + * contain a valid timestamp offset. + * + * Note that the timestamp of sync point has usually a nonzero + * dts_ref_dts_delta, which refers to the previous sync point. Offset of + * the next frame after timestamp sync point will be usually 1. + * + * For example, this corresponds to H.264 cpb_removal_delay. + *) + dts_ref_dts_delta: cint; + + (** + * Presentation delay of current frame in units of AVCodecContext.time_base. + * + * Set to INT_MIN when dts_sync_point unused. Otherwise, it must + * contain valid non-negative timestamp delta (presentation time of a frame + * must not lie in the past). + * + * This delay represents the difference between decoding and presentation + * time of the frame. + * + * For example, this corresponds to H.264 dpb_output_delay. + *) + pts_dts_delta: cint; + + (** + * Position of the packet in file. + * + * Analogous to cur_frame_pts/dts + *) + cur_frame_pos: array [0..AV_PARSER_PTS_NB - 1] of cint64; + + (** + * Byte position of currently parsed frame in stream. + *) + pos: cint64; + + (** + * Previous frame byte position. + *) + last_pos: cint64; + + (** + * Duration of the current frame. + * For audio, this is in units of 1 / AVCodecContext.sample_rate. + * For all other types, this is in units of AVCodecContext.time_base. + *) + duration: cint; + + field_order: TAVFieldOrder; + + (** + * Indicate whether a picture is coded as a frame, top field or bottom field. + * + * For example, H.264 field_pic_flag equal to 0 corresponds to + * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag + * equal to 1 and bottom_field_flag equal to 0 corresponds to + * AV_PICTURE_STRUCTURE_TOP_FIELD. + *) + picture_structure: TAVPictureStructure; + + (** + * Picture number incremented in presentation or output order. + * This field may be reinitialized at the first picture of a new sequence. + * + * For example, this corresponds to H.264 PicOrderCnt. + *) + output_picture_number: cint; + + (** + * Dimensions of the decoded video intended for presentation. + *) + width: cint; + height: cint; + + (** + * Dimensions of the coded video. + *) + coded_width: cint; + coded_height: cint; + + (** + * The format of the coded data, corresponds to enum AVPixelFormat for video + * and for enum AVSampleFormat for audio. + * + * Note that a decoder can have considerable freedom in how exactly it + * decodes the data, so the format reported here might be different from the + * one returned by a decoder. + *) + format: cint; + end; {AVCodecParserContext} + + TAVCodecParser = record + codec_ids: array [0..4] of cint; (* several codec IDs are permitted *) + priv_data_size: cint; + parser_init: function(s: PAVCodecParserContext): cint; cdecl; + (* This callback never returns an error, a negative value means that + * the frame start was in a previous packet. *) + parser_parse: function(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: {const} PPointer; poutbuf_size: PCint; + buf: {const} PByteArray; buf_size: cint): cint; cdecl; + parser_close: procedure(s: PAVCodecParserContext); cdecl; + split: function(avctx: PAVCodecContext; buf: {const} PByteArray; + buf_size: cint): cint; cdecl; + next: PAVCodecParser; + end; {AVCodecParser} + +function av_parser_next(c: {const} PAVCodecParser): PAVCodecParser; + cdecl; external av__codec; + +procedure av_register_codec_parser(parser: PAVCodecParser); + cdecl; external av__codec; + +function av_parser_init(codec_id: cint): PAVCodecParserContext; + cdecl; external av__codec; + +(** + * Parse a packet. + * + * @param s parser context. + * @param avctx codec context. + * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. + * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. + * @param buf input buffer. + * @param buf_size input length, to signal EOF, this should be 0 (so that the last frame can be output). + * @param pts input presentation timestamp. + * @param dts input decoding timestamp. + * @param pos input byte position in stream. + * @return the number of bytes of the input bitstream used. + * + * Example: + * @code + * while (in_len) do + * begin + * len := av_parser_parse2(myparser, AVCodecContext, data, size, + * in_data, in_len, + * pts, dts, pos); + * in_data := in_data + len; + * in_len := in_len - len; + * + * if (size) then + * decode_frame(data, size); + * end; + * @endcode + *) +function av_parser_parse2(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; + poutbuf_size: PCint; + buf: {const} PByteArray; + buf_size: cint; + pts: cint64; + dts: cint64; + pos: cint64): cint; + cdecl; external av__codec; + +(** + * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed + * @deprecated use AVBitStreamFilter + *) +function av_parser_change(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; poutbuf_size: PCint; + buf: {const} PByteArray; buf_size: cint; keyframe: cint): cint; + cdecl; external av__codec; + +procedure av_parser_close(s: PAVCodecParserContext); + cdecl; external av__codec; + +(** + * @} + * @} + *) + +(** + * @addtogroup lavc_encoding + * @{ + *) + +(** + * Find a registered encoder with a matching codec ID. + * + * @param id AVCodecID of the requested encoder + * @return An encoder if one was found, NULL otherwise. + *) +function avcodec_find_encoder(id: TAVCodecID): PAVCodec; + cdecl; external av__codec; + +(** + * Find a registered encoder with the specified name. + * + * @param name name of the requested encoder + * @return An encoder if one was found, NULL otherwise. + *) +function avcodec_find_encoder_by_name(name: PAnsiChar): PAVCodec; + cdecl; external av__codec; + +(** + * Encode a frame of audio. + * + * Takes input samples from frame and writes the next output packet, if + * available, to avpkt. The output packet does not necessarily contain data for + * the most recent frame, as encoders can delay, split, and combine input frames + * internally as needed. + * + * @param avctx codec context + * @param avpkt output AVPacket. + * The user can supply an output buffer by setting + * avpkt->data and avpkt->size prior to calling the + * function, but if the size of the user-provided data is not + * large enough, encoding will fail. If avpkt->data and + * avpkt->size are set, avpkt->destruct must also be set. All + * other AVPacket fields will be reset by the encoder using + * av_init_packet(). If avpkt->data is NULL, the encoder will + * allocate it. The encoder will set avpkt->size to the size + * of the output packet. + * + * If this function fails or produces no output, avpkt will be + * freed using av_packet_unref(). + * @param[in] frame AVFrame containing the raw audio data to be encoded. + * May be NULL when flushing an encoder that has the + * AV_CODEC_CAP_DELAY capability set. + * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame + * can have any number of samples. + * If it is not set, frame->nb_samples must be equal to + * avctx->frame_size for all frames except the last. + * The final frame may be smaller than avctx->frame_size. + * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the + * output packet is non-empty, and to 0 if it is + * empty. If the function returns an error, the + * packet can be assumed to be invalid, and the + * value of got_packet_ptr is undefined and should + * not be used. + * @return 0 on success, negative error code on failure + * + * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead + *) +function avcodec_encode_audio2(avctx: PAVCodecContext; avpkt: PAVPacket; + frame: {const} PAVFrame; got_packet_ptr: Pcint): cint; + cdecl; external av__codec; deprecated; + +(** + * Encode a frame of video. + * + * Takes input raw video data from frame and writes the next output packet, if + * available, to avpkt. The output packet does not necessarily contain data for + * the most recent frame, as encoders can delay and reorder input frames + * internally as needed. + * + * @param avctx codec context + * @param avpkt output AVPacket. + * The user can supply an output buffer by setting + * avpkt->data and avpkt->size prior to calling the + * function, but if the size of the user-provided data is not + * large enough, encoding will fail. All other AVPacket fields + * will be reset by the encoder using av_init_packet(). If + * avpkt->data is NULL, the encoder will allocate it. + * The encoder will set avpkt->size to the size of the + * output packet. The returned data (if any) belongs to the + * caller, he is responsible for freeing it. + * + * If this function fails or produces no output, avpkt will be + * freed using av_packet_unref(). + * @param[in] frame AVFrame containing the raw video data to be encoded. + * May be NULL when flushing an encoder that has the + * AV_CODEC_CAP_DELAY capability set. + * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the + * output packet is non-empty, and to 0 if it is + * empty. If the function returns an error, the + * packet can be assumed to be invalid, and the + * value of got_packet_ptr is undefined and should + * not be used. + * @return 0 on success, negative error code on failure + * + * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead + *) +function avcodec_encode_video2(avctx: PAVCodecContext; avpkt: PAVPacket; + frame: {const} PAVFrame; got_packet_ptr: Pcint): cint; + cdecl; external av__codec; deprecated; + +function avcodec_encode_subtitle(avctx: PAVCodecContext; buf: PByteArray; + buf_size: cint; sub: {const} PAVSubtitle): cint; + cdecl; external av__codec; + +(** + * @} + *) + +{$IFDEF FF_API_AVCODEC_RESAMPLE} +(** + * @defgroup lavc_resample Audio resampling + * @ingroup libavc + * @deprecated use libswresample instead + * + * @{ + *) +type + PReSampleContext = pointer; + PAVResampleContext = pointer; + PImgReSampleContext = pointer; + +(** + * Initialize audio resampling context. + * + * @param output_channels number of output channels + * @param input_channels number of input channels + * @param output_rate output sample rate + * @param input_rate input sample rate + * @param sample_fmt_out requested output sample format + * @param sample_fmt_in input sample format + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff frequency + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear if 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + * @return allocated ReSampleContext, NULL if error occurred + *) + function av_audio_resample_init(output_channels: cint; input_channels: cint; + output_rate: cint; input_rate: cint; + sample_fmt_out: TAVSampleFormat; + sample_fmt_in: TAVSampleFormat; + filter_length: cint; log2_phase_count: cint; + linear: cint; cutoff: cdouble): PReSampleContext; + cdecl; external av__codec; deprecated; + +function audio_resample (s: PReSampleContext; output: PSmallint; input: PSmallint; nb_samples: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * Free resample context. + * + * @param s a non-NULL pointer to a resample context previously + * created with av_audio_resample_init() + *) +procedure audio_resample_close (s: PReSampleContext); + cdecl; external av__codec; deprecated; + +(** + * Initialize an audio resampler. + * Note, if either rate is not an integer then simply scale both rates up so they are. + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear If 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + *) +function av_resample_init (out_rate: cint; in_rate: cint; filter_length: cint; + log2_phase_count: cint; linear: cint; cutoff: cdouble): PAVResampleContext; + cdecl; external av__codec; deprecated; + +(** + * Resample an array of samples using a previously configured context. + * @param src an array of unconsumed samples + * @param consumed the number of samples of src which have been consumed are returned here + * @param src_size the number of unconsumed samples available + * @param dst_size the amount of space in samples available in dst + * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. + * @return the number of samples written in dst or -1 if an error occurred + *) +function av_resample (c: PAVResampleContext; dst: PSmallint; src: PSmallint; var consumed: cint; + src_size: cint; dst_size: cint; update_ctx: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * Compensate samplerate/timestamp drift. The compensation is done by changing + * the resampler parameters, so no audible clicks or similar distortions occur + * @param compensation_distance distance in output samples over which the compensation should be performed + * @param sample_delta number of output samples which should be output less + * + * example: av_resample_compensate(c, 10, 500) + * here instead of 510 samples only 500 samples would be output + * + * note, due to rounding the actual compensation might be slightly different, + * especially if the compensation_distance is large and the in_rate used during init is small + *) +procedure av_resample_compensate (c: PAVResampleContext; sample_delta: cint; + compensation_distance: cint); + cdecl; external av__codec; deprecated; + +procedure av_resample_close (c: PAVResampleContext); + cdecl; external av__codec; deprecated; + +(** + * @} + *) +{$ENDIF} + +{$IFDEF FF_API_AVPICTURE} +(** + * @addtogroup lavc_picture + * @{ + *) + +(** + * @deprecated unused + *) +function avpicture_alloc (picture: PAVPicture; pix_fmt: TAVPixelFormat; + width: cint; height: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated unused + *) +procedure avpicture_free (picture: PAVPicture); + cdecl; external av__codec; deprecated; + +(** + * @deprecated use av_image_fill_arrays() instead. + *) +function avpicture_fill (picture: PAVPicture; ptr: pcuint8; + pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated use av_image_copy_to_buffer() instead. + *) +function avpicture_layout (src: {const} PAVPicture; pix_fmt: TAVPixelFormat; + width: cint; height: cint; + dest: PByteArray; dest_size: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated use av_image_get_buffer_size() instead. + *) +function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated av_image_copy() instead. + *) +procedure av_picture_copy(dst: PAVPicture; src: {const} PAVPicture; + pix_fmt: TAVPixelFormat; width: cint; height: cint); + cdecl; external av__codec; deprecated; + +(** + * @deprecated unused + *) +function av_picture_crop(dst: PAVPicture; src: {const} PAVPicture; + pix_fmt: TAVPixelFormat; top_band: cint; left_band: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated unused + *) +function av_picture_pad(dst: PAVPicture; src: {const} PAVPicture; + height: cint; width: cint; pix_fmt: TAVPixelFormat; + padtop: cint; padbottom: cint; padleft: cint; + padright: cint; color: PCint): cint; + cdecl; external av__codec; deprecated; + +(** + * @} + *) +{$ENDIF} + +(** + * @defgroup lavc_misc Utility functions + * @ingroup libavc + * + * Miscellaneous utility functions related to both encoding and decoding + * (or neither). + * @ + *) + +(** + * @defgroup lavc_misc_pixfmt Pixel formats + * + * Functions for working with pixel formats. + * @ + *) + +(** + * Utility function to access log2_chroma_w log2_chroma_h from + * the pixel format AVPixFmtDescriptor. + * + * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample + * for one that returns a failure code and continues in case of invalid + * pix_fmts. + * + * @param[in] pix_fmt the pixel format + * @param[out] h_shift store log2_chroma_w + * @param[out] v_shift store log2_chroma_h + * + * @see av_pix_fmt_get_chroma_sub_sample + *) + +procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; var h_shift: cint; var v_shift: cint); + cdecl; external av__codec; + +(** + * Return a value representing the fourCC code associated to the + * pixel format pix_fmt, or 0 if no associated fourCC code can be + * found. + *) +function avcodec_pix_fmt_to_codec_tag(pix_fmt: TAVPixelFormat): cuint; + cdecl; external av__codec; + +(** + * @deprecated see av_get_pix_fmt_loss() + *) +function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAVPixelFormat; + has_alpha: cint): cint; + cdecl; external av__codec; + +(** + * Find the best pixel format to convert to given a certain source pixel + * format. When converting from one pixel format to another, information loss + * may occur. For example, when converting from RGB24 to GRAY, the color + * information will be lost. Similarly, other losses occur when converting from + * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of + * the given pixel formats should be used to suffer the least amount of loss. + * The pixel formats from which it chooses one, are determined by the + * pix_fmt_list parameter. + * + * + * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from + * @param[in] src_pix_fmt source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. + * @return The best pixel format to convert to or -1 if none was found. + *) +function avcodec_find_best_pix_fmt_of_list(pix_fmt_list: PAVPixelFormat; + src_pix_fmt: TAVPixelFormat; + has_alpha: cint; loss_ptr: Pcint): TAVPixelFormat; + cdecl; external av__codec; + +(** + * @deprecated see av_find_best_pix_fmt_of_2() + *) +function avcodec_find_best_pix_fmt_of_2(dst_pix_fmt1: TAVPixelFormat; dst_pix_fmt2: TAVPixelFormat; + src_pix_fmt: TAVPixelFormat; has_alpha: cint; loss_ptr: Pcint): TAVPixelFormat; + cdecl; external av__codec; + +{$IFDEF AV_HAVE_INCOMPATIBLE_LIBAV_ABI} +function avcodec_find_best_pix_fmt2(pix_fmt_list: PAVPixelFormat; + src_pix_fmt: TAVPixelFormat; + has_alpha: cint; loss_ptr: Pcint): TAVPixelFormat; + cdecl; external av__codec; deprecated; +{$ELSE} +function avcodec_find_best_pix_fmt2(dst_pix_fmt1: TAVPixelFormat; dst_pix_fmt2: TAVPixelFormat; + src_pix_fmt: TAVPixelFormat; has_alpha: cint; loss_ptr: Pcint): TAVPixelFormat; + cdecl; external av__codec; deprecated; +{$ENDIF} + +function avcodec_default_get_format(s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; + cdecl; external av__codec; + +(** + * @} + *) + +{$IFDEF FF_API_SET_DIMENSIONS} +(** + * @deprecated this function is not supposed to be used from outside of lavc + *) +procedure avcodec_set_dimensions(s: PAVCodecContext; width: cint; height: cint); + cdecl; external av__codec; +{$ENDIF} + +(* Put a string representing the codec tag codec_tag in buf. + * + * @param buf buffer to place codec tag in + * @param buf_size size in bytes of buf + * @param codec_tag codec tag to assign + * @return the length of the string that would have been generated if + * enough space had been available, excluding the trailing null + *) +function av_get_codec_tag_string(buf: PAnsiChar; buf_size: size_t; codec_tag: cuint): size_t; + cdecl; external av__codec; + +procedure avcodec_string(buf: PAnsiChar; buf_size: cint; enc: PAVCodecContext; encode: cint); + cdecl; external av__codec; + +(** + * Return a name for the specified profile, if available. + * + * @param codec the codec that is searched for the given profile + * @param profile the profile value for which a name is requested + * @return A name for the profile if found, NULL otherwise. + *) +function av_get_profile_name(codec: {const} PAVCodec; profile: cint): {const} PAnsiChar; + cdecl; external av__codec; + +(** + * Return a name for the specified profile, if available. + * + * @param codec_id the ID of the codec to which the requested profile belongs + * @param profile the profile value for which a name is requested + * @return A name for the profile if found, NULL otherwise. + * + * @note unlike av_get_profile_name(), which searches a list of profiles + * supported by a specific decoder or encoder implementation, this + * function searches the list of profiles from the AVCodecDescriptor + *) +function avcodec_profile_name(codec_id: TAVCodecID; profile: cint): {const} PChar; + cdecl; external av__codec; + +function avcodec_default_execute(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint; size: cint): cint; + cdecl; external av__codec; + +function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint): cint; + cdecl; external av__codec; +//FIXME func typedef + +(** + * Fill AVFrame audio data and linesize pointers. + * + * The buffer buf must be a preallocated buffer with a size big enough + * to contain the specified samples amount. The filled AVFrame data + * pointers will point to this buffer. + * + * AVFrame extended_data channel pointers are allocated if necessary for + * planar audio. + * + * @param frame the AVFrame + * frame->nb_samples must be set prior to calling the + * function. This function fills in frame->data, + * frame->extended_data, frame->linesize[0]. + * @param nb_channels channel count + * @param sample_fmt sample format + * @param buf buffer to use for frame data + * @param buf_size size of buffer + * @param align plane size sample alignment + * @return >=0 on success, negative error code on failure + * @todo return the size in bytes required to store the samples in + * case of success, at the next libavutil bump + *) +function avcodec_fill_audio_frame(frame: PAVFrame; nb_channels: cint; + sample_fmt: TAVSampleFormat; buf: {const} PByte; + buf_size: cint; align: cint): cint; + cdecl; external av__codec; + +(** + * Flush buffers, should be called when seeking or when switching to a different stream. + *) +procedure avcodec_flush_buffers(avctx: PAVCodecContext); + cdecl; external av__codec; + +(** + * Return codec bits per sample. + * + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. + *) +function av_get_bits_per_sample(codec_id: TAVCodecID): cint; + cdecl; external av__codec; + +(** + * Return the PCM codec associated with a sample format. + * @param be endianness, 0 for little, 1 for big, + * -1 (or anything else) for native + * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE + *) +function av_get_pcm_codec(fmt: TAVSampleFormat; be: cint): TAVCodecID; + cdecl; external av__codec; + +(** + * Return codec bits per sample. + * Only return non-zero if the bits per sample is exactly correct, not an + * approximation. + * + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. + *) +function av_get_exact_bits_per_sample(codec_id: TAVCodecID): cint; + cdecl; external av__codec; + +(** + * Return audio frame duration. + * + * @param avctx codec context + * @param frame_bytes size of the frame, or 0 if unknown + * @return frame duration, in samples, if known. 0 if not able to + * determine. + *) +function av_get_audio_frame_duration(avctx: PAVCodecContext; frame_bytes: cint): cint; + cdecl; external av__codec; + +(** + * This function is the same as av_get_audio_frame_duration(), except it works + * with AVCodecParameters instead of an AVCodecContext. + *) +function av_get_audio_frame_duration2(par: PAVCodecParameters; frame_bytes: cint): cint; + cdecl; external av__codec; + +type +{$IFDEF FF_API_OLD_BSF} + PAVBitStreamFilterContext = ^TAVBitStreamFilterContext; + PAVBitStreamFilter = ^TAVBitStreamFilter; + + TAVBitStreamFilterContext = record + priv_data: pointer; + filter: PAVBitStreamFilter; + parser: PAVCodecParserContext; + next: PAVBitStreamFilterContext; + (** + * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). + * Not for access by library users. + *) + args: PChar; + end; +{$ENDIF} + + PAVBSFInternal = ^TAVBSFInternal; + TAVBSFInternal = record + end; + + (** + * The bitstream filter state. + * + * This struct must be allocated with av_bsf_alloc() and freed with + * av_bsf_free(). + * + * The fields in the struct will only be changed (by the caller or by the + * filter) as described in their documentation, and are to be considered + * immutable otherwise. + *) + PPAVBSFContext = ^PAVBSFContext; + PAVBSFContext = ^TAVBSFContext; + TAVBSFContext = record + (** + * A class for logging and AVOptions + *) + av_class: {const} PAVClass; + + (** + * The bitstream filter this context is an instance of. + *) + filter: {const} PAVBitStreamFilter; + + (** + * Opaque libavcodec internal data. Must not be touched by the caller in any + * way. + *) + internal: PAVBSFInternal; + + (** + * Opaque filter-specific private data. If filter->priv_class is non-NULL, + * this is an AVOptions-enabled struct. + *) + priv_data: pointer; + + (** + * Parameters of the input stream. Set by the caller before av_bsf_init(). + *) + par_in: PAVCodecParameters; + + (** + * Parameters of the output stream. Set by the filter in av_bsf_init(). + *) + par_out: PAVCodecParameters; + + (** + * The timebase used for the timestamps of the input packets. Set by the + * caller before av_bsf_init(). + *) + time_base_in: TAVRational; + + (** + * The timebase used for the timestamps of the output packets. Set by the + * filter in av_bsf_init(). + *) + time_base_out: TAVRational; + end; {TAVBSFContext} + + TAVBitStreamFilter = record + name: PAnsiChar; + + (** + * A list of codec ids supported by the filter, terminated by + * AV_CODEC_ID_NONE. + * May be NULL, in that case the bitstream filter works with any codec id. + *) + codec_ids: PAVCodecID; + + (** + * A class for the private data, used to declare bitstream filter private + * AVOptions. This field is NULL for bitstream filters that do not declare + * any options. + * + * If this field is non-NULL, the first member of the filter private data + * must be a pointer to AVClass, which will be set by libavcodec generic + * code to this class. + *) + priv_class: PAVClass; + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavcodec and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + + priv_data_size: cint; + init: function(ctx: PAVBSFContext): cint; cdecl; + filter: function(ctx: PAVBSFContext; pkt: PAVPacket): cint; cdecl; + close: procedure(ctx: PAVBSFContext); cdecl; + end; + +{$IFDEF FF_API_OLD_BSF} +(** + * Register a bitstream filter. + * + * The filter will be accessible to the application code through + * av_bitstream_filter_next() or can be directly initialized with + * av_bitstream_filter_init(). + * + * @see avcodec_register_all() + *) +procedure av_register_bitstream_filter(bsf: PAVBitStreamFilter); + cdecl; external av__codec; deprecated; + +(** + * Create and initialize a bitstream filter context given a bitstream + * filter name. + * + * The returned context must be freed with av_bitstream_filter_close(). + * + * @param name the name of the bitstream filter + * @return a bitstream filter context if a matching filter was found + * and successfully initialized, NULL otherwise + *) +function av_bitstream_filter_init(name: {const} PAnsiChar): PAVBitStreamFilterContext; + cdecl; external av__codec; deprecated; + +(** + * Filter bitstream. + * + * This function filters the buffer buf with size buf_size, and places the + * filtered buffer in the buffer pointed to by poutbuf. + * + * The output buffer must be freed by the caller. + * + * @param bsfc bitstream filter context created by av_bitstream_filter_init() + * @param avctx AVCodecContext accessed by the filter, may be NULL. + * If specified, this must point to the encoder context of the + * output stream the packet is sent to. + * @param args arguments which specify the filter configuration, may be NULL + * @param poutbuf pointer which is updated to point to the filtered buffer + * @param poutbuf_size pointer which is updated to the filtered buffer size in bytes + * @param buf buffer containing the data to filter + * @param buf_size size in bytes of buf + * @param keyframe set to non-zero if the buffer to filter corresponds to a key-frame packet data + * @return >= 0 in case of success, or a negative error code in case of failure + * + * If the return value is positive, an output buffer is allocated and + * is available in *poutbuf, and is distinct from the input buffer. + * + * If the return value is 0, the output buffer is not allocated and + * should be considered identical to the input buffer, or in case + * *poutbuf was set it points to the input buffer (not necessarily to + * its starting address). A special case is if *poutbuf was set to NULL and + * *poutbuf_size was set to 0, which indicates the packet should be dropped. + *) +function av_bitstream_filter_filter(bsfc: PAVBitStreamFilterContext; + avctx: PAVCodecContext; args: {const} PAnsiChar; + poutbuf: PPointer; poutbuf_size: PCint; + buf: {const} PByte; buf_size: cint; keyframe: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * Release bitstream filter context. + * + * @param bsf the bitstream filter context created with + * av_bitstream_filter_init(), can be NULL + *) +procedure av_bitstream_filter_close(bsf: PAVBitStreamFilterContext); + cdecl; external av__codec; deprecated; + +(** + * If f is NULL, return the first registered bitstream filter, + * if f is non-NULL, return the next registered bitstream filter + * after f, or NULL if f is the last one. + * + * This function can be used to iterate over all registered bitstream + * filters. + *) +function av_bitstream_filter_next(f: {const} PAVBitStreamFilter): PAVBitStreamFilter; + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * @return a bitstream filter with the specified name or NULL if no such + * bitstream filter exists. + *) +function av_bsf_get_by_name(name: {const} PAnsiChar): {const} PAVBitStreamFilter; + cdecl; external av__codec; + +(** + * Iterate over all registered bitstream filters. + * + * @param opaque a pointer where libavcodec will store the iteration state. Must + * point to NULL to start the iteration. + * + * @return the next registered bitstream filter or NULL when the iteration is + * finished + *) +function av_bsf_next(opaque: pointer): {const} PAVBitStreamFilter; + cdecl; external av__codec; + +(** + * Allocate a context for a given bitstream filter. The caller must fill in the + * context parameters as described in the documentation and then call + * av_bsf_init() before sending any data to the filter. + * + * @param filter the filter for which to allocate an instance. + * @param ctx a pointer into which the pointer to the newly-allocated context + * will be written. It must be freed with av_bsf_free() after the + * filtering is done. + * + * @return 0 on success, a negative AVERROR code on failure + *) +function av_bsf_alloc(filter: {const} PAVBitStreamFilter; ctx: PPAVBSFContext): cint; + cdecl; external av__codec; + +(** + * Prepare the filter for use, after all the parameters and options have been + * set. + *) +function av_bsf_init(ctx: PAVBSFContext): cint; + cdecl; external av__codec; + +(** + * Submit a packet for filtering. + * + * After sending each packet, the filter must be completely drained by calling + * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or + * AVERROR_EOF. + * + * @param pkt the packet to filter. The bitstream filter will take ownership of + * the packet and reset the contents of pkt. pkt is not touched if an error occurs. + * This parameter may be NULL, which signals the end of the stream (i.e. no more + * packets will be sent). That will cause the filter to output any packets it + * may have buffered internally. + * + * @return 0 on success, a negative AVERROR on error. + *) +function av_bsf_send_packet(ctx: PAVBSFContext; pkt: PAVPacket): cint; + cdecl; external av__codec; + +(** + * Retrieve a filtered packet. + * + * @param[out] pkt this struct will be filled with the contents of the filtered + * packet. It is owned by the caller and must be freed using + * av_packet_unref() when it is no longer needed. + * This parameter should be "clean" (i.e. freshly allocated + * with av_packet_alloc() or unreffed with av_packet_unref()) + * when this function is called. If this function returns + * successfully, the contents of pkt will be completely + * overwritten by the returned data. On failure, pkt is not + * touched. + * + * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the + * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there + * will be no further output from the filter. Another negative AVERROR value if + * an error occurs. + * + * @note one input packet may result in several output packets, so after sending + * a packet with av_bsf_send_packet(), this function needs to be called + * repeatedly until it stops returning 0. It is also possible for a filter to + * output fewer packets than were sent to it, so this function may return + * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. + *) +function av_bsf_receive_packet(ctx: PAVBSFContext; pkt: PAVPacket): cint; + cdecl; external av__codec; + +(** + * Free a bitstream filter context and everything associated with it; write NULL + * into the supplied pointer. + *) +procedure av_bsf_free(ctx: PPAVBSFContext); + cdecl; external av__codec; + +(** + * Get the AVClass for AVBSFContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function av_bsf_get_class(): {const} PAVClass; + cdecl; external av__codec; + +(* memory *) + +(** + * Same behaviour av_fast_malloc but the buffer has additional + * FF_INPUT_BUFFER_PADDING_SIZE at the end which will will always be 0. + * + * In addition the whole buffer will initially and after resizes + * be 0-initialized so that no uninitialized data will ever appear. + *) +procedure av_fast_padded_malloc(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__codec; + +(** + * Same behaviour av_fast_padded_malloc except that buffer will always + * be 0-initialized after call. + *) +procedure av_fast_padded_mallocz(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__codec; + +(** + * Encode extradata length to a buffer. Used by xiph codecs. + * + * @param s buffer to write to; must be at least (v/255+1) bytes long + * @param v size of extradata in bytes + * @return number of bytes written to the buffer. + *) +function av_xiphlacing(s: PByte; v: cuint): cuint; + cdecl; external av__codec; + +{$IFDEF FF_API_MISSING_SAMPLE} +(** + * Log a generic warning message about a missing feature. This function is + * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) + * only, and would normally not be used by applications. + * @param[in] avc a pointer to an arbitrary struct of which the first field is + * a pointer to an AVClass struct + * @param[in] feature string containing the name of the missing feature + * @param[in] want_sample indicates if samples are wanted which exhibit this feature. + * If want_sample is non-zero, additional verbiage will be added to the log + * message which tells the user how to report samples to the development + * mailing list. + * @deprecated Use avpriv_report_missing_feature() instead. + *) +procedure av_log_missing_feature(avc: Pointer; feature: {const} PAnsiChar; want_sample: cint); + cdecl; external av__codec; deprecated; + +(** + * Log a generic warning message asking for a sample. This function is + * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) + * only, and would normally not be used by applications. + * @param[in] avc a pointer to an arbitrary struct of which the first field is + * a pointer to an AVClass struct + * @param[in] msg string containing an optional message, or NULL if no message + * @deprecated Use avpriv_request_sample() instead. + *) +procedure av_log_ask_for_sample(avc: Pointer; msg: {const} PAnsiChar); {todo: av_printf_format(2, 3);} + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * Register the hardware accelerator hwaccel. + *) +procedure av_register_hwaccel (hwaccel: PAVHWAccel) + cdecl; external av__codec; + +(** + * If hwaccel is NULL, returns the first registered hardware accelerator, + * if hwaccel is non-NULL, returns the next registered hardware accelerator + * after hwaccel, or NULL if hwaccel is the last one. + *) +function av_hwaccel_next (hwaccel: {const} PAVHWAccel): PAVHWAccel; + cdecl; external av__codec; + +(** + * Lock operation used by lockmgr + *) +type + TAVLockOp = ( + AV_LOCK_CREATE, ///< Create a mutex + AV_LOCK_OBTAIN, ///< Lock the mutex + AV_LOCK_RELEASE, ///< Unlock the mutex + AV_LOCK_DESTROY ///< Free mutex resources + ); + +(** + * Register a user provided lock manager supporting the operations + * specified by AVLockOp. The "mutex" argument to the function points + * to a (void * ) where the lockmgr should store/get a pointer to a user + * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the + * value left by the last call for all other ops. If the lock manager is + * unable to perform the op then it should leave the mutex in the same + * state as when it was called and return a non-zero value. However, + * when called with AV_LOCK_DESTROY the mutex will always be assumed to + * have been successfully destroyed. If av_lockmgr_register succeeds + * it will return a non-negative value, if it fails it will return a + * negative value and destroy all mutex and unregister all callbacks. + * av_lockmgr_register is not thread-safe, it must be called from a + * single thread before any calls which make use of locking are used. + * + * @param cb User defined callback. av_lockmgr_register invokes calls + * to this callback and the previously registered callback. + * The callback will be used to create more than one mutex + * each of which must be backed by its own underlying locking + * mechanism (i.e. do not use a single static object to + * implement your lock manager). If cb is set to NULL the + * lockmgr will be unregistered. + *) +// ToDo: Implement and test this +//function av_lockmgr_register(cb: function (mutex: Ppointer; op: TAVLockOp)): cint; +// cdecl; external av__codec; + +(** + * Get the type of the given codec. + *) +function avcodec_get_type(codec_id: TAVCodecID): TAVMediaType; + cdecl; external av__codec; + +(** + * Get the name of a codec. + * @return a static string identifying the codec; never NULL + *) +function avcodec_get_name(id: TAVCodecID): PAnsiChar; + cdecl; external av__codec; + +(** + * @return a positive value if s is open (i.e. avcodec_open2() was called on it + * with no corresponding avcodec_close()), 0 otherwise. + *) +function avcodec_is_open(s: PAVCodecContext): cint; + cdecl; external av__codec; + +(** + * @return a non-zero number if codec is an encoder, zero otherwise + *) +function av_codec_is_encoder(codec: {const} PAVCodec): cint; + cdecl; external av__codec; + +(** + * @return a non-zero number if codec is a decoder, zero otherwise + *) +function av_codec_is_decoder(codec: {const} PAVCodec): cint; + cdecl; external av__codec; + +(** + * @return descriptor for given codec ID or NULL if no descriptor exists. + *) +function avcodec_descriptor_get(id: TAVCodecID): PAVCodecDescriptor; + cdecl; external av__codec; + +(** + * Iterate over all codec descriptors known to libavcodec. + * + * @param prev previous descriptor. NULL to get the first descriptor. + * + * @return next descriptor or NULL after the last descriptor + *) +function avcodec_descriptor_next(prev: {const} PAVCodecDescriptor): PAVCodecDescriptor; + cdecl; external av__codec; + +(** + * @return codec descriptor with the given name or NULL if no such descriptor + * exists. + *) +function avcodec_descriptor_get_by_name(name: {const} PAnsiChar): PAVCodecDescriptor; + cdecl; external av__codec; + +(** + * Allocate a CPB properties structure and initialize its fields to default + * values. + * + * @param size if non-NULL, the size of the allocated struct will be written + * here. This is useful for embedding it in side data. + * + * @return the newly allocated struct or NULL on failure + *) +function av_cpb_properties_alloc(size: Psize_t): PAVCPBProperties; + cdecl; external av__codec; + +(** + * @} + *) + +implementation + +end. diff --git a/src/lib/ffmpeg-3.1/avformat.pas b/src/lib/ffmpeg-3.1/avformat.pas new file mode 100644 index 00000000..752a2317 --- /dev/null +++ b/src/lib/ffmpeg-3.1/avformat.pas @@ -0,0 +1,3118 @@ +(* + * copyright (c) 2001 Fabrice Bellard + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of version 2.0 libavformat/avformat.h + * Version: 56.4.101 + *) + +unit avformat; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} (* for the HasInline define *) +{$I ff_api-defines.inc} (* FF_API_* defines *) + +{$IFDEF DARWIN} + {$linklib libavformat} +{$ENDIF} + +interface + +uses + ctypes, + avcodec, + avio, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + SysUtils, + UConfig; + +const + (* + * IMPORTANT: This headers are valid for all minor revisions of ffmpeg + * version 2.4.* + *) + (* Max. supported version by this header *) + LIBAVFORMAT_MAX_VERSION_MAJOR = 57; + LIBAVFORMAT_MAX_VERSION_MINOR = 41; + LIBAVFORMAT_MAX_VERSION_RELEASE = 100; + LIBAVFORMAT_MAX_VERSION = (LIBAVFORMAT_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVFORMAT_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVFORMAT_MAX_VERSION_RELEASE * VERSION_RELEASE); + + (* Min. supported version by this header *) + LIBAVFORMAT_MIN_VERSION_MAJOR = 57; + LIBAVFORMAT_MIN_VERSION_MINOR = 40; + LIBAVFORMAT_MIN_VERSION_RELEASE = 101; + LIBAVFORMAT_MIN_VERSION = (LIBAVFORMAT_MIN_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVFORMAT_MIN_VERSION_MINOR * VERSION_MINOR) + + (LIBAVFORMAT_MIN_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBAVFORMAT_VERSION < LIBAVFORMAT_MIN_VERSION)} + {$MESSAGE Error 'Linked version of libavformat is too old!'} +{$IFEND} + +(* Check if linked versions are supported *) +{$IF (LIBAVFORMAT_VERSION > LIBAVFORMAT_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libavformat is not yet supported!'} +{$IFEND} + +{ +const + LIBAVFORMAT_BUILD = LIBAVFORMAT_VERSION_INT; + LIBAVFORMAT_IDENT = 'Lavf' AV_STRINGIFY(LIBAVFORMAT_VERSION); +} + +(** + * @defgroup libavf I/O and Muxing/Demuxing Library + * @ + * + * Libavformat (lavf) is a library for dealing with various media container + * formats. Its main two purposes are demuxing - i.e. splitting a media file + * into component streams, and the reverse process of muxing - writing supplied + * data in a specified container format. It also has an @ref lavf_io + * "I/O module" which supports a number of protocols for accessing the data (e.g. + * file, tcp, http and others). Before using lavf, you need to call + * av_register_all() to register all compiled muxers, demuxers and protocols. + * Unless you are absolutely sure you won't use libavformat's network + * capabilities, you should also call avformat_network_init(). + * + * A supported input format is described by an AVInputFormat struct, conversely + * an output format is described by AVOutputFormat. You can iterate over all + * registered input/output formats using the av_iformat_next() / + * av_oformat_next() functions. The protocols layer is not part of the public + * API, so you can only get the names of supported protocols with the + * avio_enum_protocols() function. + * + * Main lavf structure used for both muxing and demuxing is AVFormatContext, + * which exports all information about the file being read or written. As with + * most Libavformat structures, its size is not part of public ABI, so it cannot be + * allocated on stack or directly with av_malloc(). To create an + * AVFormatContext, use avformat_alloc_context() (some functions, like + * avformat_open_input() might do that for you). + * + * Most importantly an AVFormatContext contains: + * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat + * "output" format. It is either autodetected or set by user for input; + * always set by user for output. + * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all + * elementary streams stored in the file. AVStreams are typically referred to + * using their index in this array. + * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or + * set by user for input, always set by user for output (unless you are dealing + * with an AVFMT_NOFILE format). + * + * @section lavf_options Passing options to (de)muxers + * It is possible to configure lavf muxers and demuxers using the @ref avoptions + * mechanism. Generic (format-independent) libavformat options are provided by + * AVFormatContext, they can be examined from a user program by calling + * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass + * from avformat_get_class()). Private (format-specific) options are provided by + * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / + * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. + * Further options may be provided by the @ref AVFormatContext.pb "I/O context", + * if its AVClass is non-NULL, and the protocols layer. See the discussion on + * nesting in @ref avoptions documentation to learn how to access those. + * + * @section urls + * URL strings in libavformat are made of a scheme/protocol, a ':', and a + * scheme specific string. URLs without a scheme and ':' used for local files + * are supported but deprecated. "file:" should be used for local files. + * + * It is important that the scheme string is not taken from untrusted + * sources without checks. + * + * Note that some schemes/protocols are quite powerful, allowing access to + * both local and remote files, parts of them, concatenations of them, local + * audio and video devices and so on. + * + * @defgroup lavf_decoding Demuxing + * @ + * Demuxers read a media file and split it into chunks of data (@em packets). A + * @ref AVPacket "packet" contains one or more encoded frames which belongs to a + * single elementary stream. In the lavf API this process is represented by the + * avformat_open_input() function for opening a file, av_read_frame() for + * reading a single packet and finally avformat_close_input(), which does the + * cleanup. + * + * @section lavf_decoding_open Opening a media file + * The minimum information required to open a file is its URL, which + * is passed to avformat_open_input(), as in the following code: + * @code + * const char *url = "file:in.mp3"; + * AVFormatContext *s = NULL; + * int ret = avformat_open_input(&s, url, NULL, NULL); + * if (ret < 0) + * abort(); + * @endcode + * The above code attempts to allocate an AVFormatContext, open the + * specified file (autodetecting the format) and read the header, exporting the + * information stored there into s. Some formats do not have a header or do not + * store enough information there, so it is recommended that you call the + * avformat_find_stream_info() function which tries to read and decode a few + * frames to find missing information. + * + * In some cases you might want to preallocate an AVFormatContext yourself with + * avformat_alloc_context() and do some tweaking on it before passing it to + * avformat_open_input(). One such case is when you want to use custom functions + * for reading input data instead of lavf internal I/O layer. + * To do that, create your own AVIOContext with avio_alloc_context(), passing + * your reading callbacks to it. Then set the @em pb field of your + * AVFormatContext to newly created AVIOContext. + * + * Since the format of the opened file is in general not known until after + * avformat_open_input() has returned, it is not possible to set demuxer private + * options on a preallocated context. Instead, the options should be passed to + * avformat_open_input() wrapped in an AVDictionary: + * @code + * AVDictionary *options = NULL; + * av_dict_set(&options, "video_size", "640x480", 0); + * av_dict_set(&options, "pixel_format", "rgb24", 0); + * + * if (avformat_open_input(&s, url, NULL, &options) < 0) + * abort(); + * av_dict_free(&options); + * @endcode + * This code passes the private options 'video_size' and 'pixel_format' to the + * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it + * cannot know how to interpret raw video data otherwise. If the format turns + * out to be something different than raw video, those options will not be + * recognized by the demuxer and therefore will not be applied. Such unrecognized + * options are then returned in the options dictionary (recognized options are + * consumed). The calling program can handle such unrecognized options as it + * wishes, e.g. + * @code + * AVDictionaryEntry *e; + * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { + * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); + * abort(); + * } + * @endcode + * + * After you have finished reading the file, you must close it with + * avformat_close_input(). It will free everything associated with the file. + * + * @section lavf_decoding_read Reading from an opened file + * Reading data from an opened AVFormatContext is done by repeatedly calling + * av_read_frame() on it. Each call, if successful, will return an AVPacket + * containing encoded data for one AVStream, identified by + * AVPacket.stream_index. This packet may be passed straight into the libavcodec + * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the + * caller wishes to decode the data. + * + * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be + * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for + * pts/dts, 0 for duration) if the stream does not provide them. The timing + * information will be in AVStream.time_base units, i.e. it has to be + * multiplied by the timebase to convert them to seconds. + * + * If AVPacket.buf is set on the returned packet, then the packet is + * allocated dynamically and the user may keep it indefinitely. + * Otherwise, if AVPacket.buf is NULL, the packet data is backed by a + * static storage somewhere inside the demuxer and the packet is only valid + * until the next av_read_frame() call or closing the file. If the caller + * requires a longer lifetime, av_dup_packet() will make an av_malloc()ed copy + * of it. + * In both cases, the packet must be freed with av_packet_unref() when it is no + * longer needed. + * + * @section lavf_decoding_seek Seeking + * @ + * + * @defgroup lavf_encoding Muxing + * @ + * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write + * it into files or other output bytestreams in the specified container format. + * + * The main API functions for muxing are avformat_write_header() for writing the + * file header, av_write_frame() / av_interleaved_write_frame() for writing the + * packets and av_write_trailer() for finalizing the file. + * + * At the beginning of the muxing process, the caller must first call + * avformat_alloc_context() to create a muxing context. The caller then sets up + * the muxer by filling the various fields in this context: + * + * - The @ref AVFormatContext.oformat "oformat" field must be set to select the + * muxer that will be used. + * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb + * "pb" field must be set to an opened IO context, either returned from + * avio_open2() or a custom one. + * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must + * be created with the avformat_new_stream() function. The caller should fill + * the @ref AVStream.codecpar "stream codec parameters" information, such as the + * codec @ref AVCodecParameters.codec_type "type", @ref AVCodecParameters.codec_id + * "id" and other parameters (e.g. width / height, the pixel or sample format, + * etc.) as known. The @ref AVStream.time_base "stream timebase" should + * be set to the timebase that the caller desires to use for this stream (note + * that the timebase actually used by the muxer can be different, as will be + * described later). + * - It is advised to manually initialize only the relevant fields in + * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during + * remuxing: there is no guarantee that the codec context values remain valid + * for both input and output format contexts. + * - The caller may fill in additional information, such as @ref + * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" + * metadata, @ref AVFormatContext.chapters "chapters", @ref + * AVFormatContext.programs "programs", etc. as described in the + * AVFormatContext documentation. Whether such information will actually be + * stored in the output depends on what the container format and the muxer + * support. + * + * When the muxing context is fully set up, the caller must call + * avformat_write_header() to initialize the muxer internals and write the file + * header. Whether anything actually is written to the IO context at this step + * depends on the muxer, but this function must always be called. Any muxer + * private options must be passed in the options parameter to this function. + * + * The data is then sent to the muxer by repeatedly calling av_write_frame() or + * av_interleaved_write_frame() (consult those functions' documentation for + * discussion on the difference between them; only one of them may be used with + * a single muxing context, they should not be mixed). Do note that the timing + * information on the packets sent to the muxer must be in the corresponding + * AVStream's timebase. That timebase is set by the muxer (in the + * avformat_write_header() step) and may be different from the timebase + * requested by the caller. + * + * Once all the data has been written, the caller must call av_write_trailer() + * to flush any buffered packets and finalize the output file, then close the IO + * context (if any) and finally free the muxing context with + * avformat_free_context(). + * @} + * + * @defgroup lavf_io I/O Read/Write + * @{ + * @section lavf_io_dirlist Directory listing + * The directory listing API makes it possible to list files on remote servers. + * + * Some of possible use cases: + * - an "open file" dialog to choose files from a remote location, + * - a recursive media finder providing a player with an ability to play all + * files from a given directory. + * + * @subsection lavf_io_dirlist_open Opening a directory + * At first, a directory needs to be opened by calling avio_open_dir() + * supplied with a URL and, optionally, ::AVDictionary containing + * protocol-specific parameters. The function returns zero or positive + * integer and allocates AVIODirContext on success. + * + * @code + * AVIODirContext *ctx = NULL; + * if (avio_open_dir(&ctx, "smb://example.com/some_dir", NULL) < 0) { + * fprintf(stderr, "Cannot open directory.\n"); + * abort(); + * } + * @endcode + * + * This code tries to open a sample directory using smb protocol without + * any additional parameters. + * + * @subsection lavf_io_dirlist_read Reading entries + * Each directory's entry (i.e. file, another directory, anything else + * within ::AVIODirEntryType) is represented by AVIODirEntry. + * Reading consecutive entries from an opened AVIODirContext is done by + * repeatedly calling avio_read_dir() on it. Each call returns zero or + * positive integer if successful. Reading can be stopped right after the + * NULL entry has been read -- it means there are no entries left to be + * read. The following code reads all entries from a directory associated + * with ctx and prints their names to standard output. + * @code + * AVIODirEntry *entry = NULL; + * for (;;) { + * if (avio_read_dir(ctx, &entry) < 0) { + * fprintf(stderr, "Cannot list directory.\n"); + * abort(); + * } + * if (!entry) + * break; + * printf("%s\n", entry->name); + * avio_free_directory_entry(&entry); + * } + * @endcode + * @} + * + * @defgroup lavf_codec Demuxers + * @{ + * @defgroup lavf_codec_native Native Demuxers + * @{ + * @} + * @defgroup lavf_codec_wrappers External library wrappers + * @{ + * @} + * @} + * @defgroup lavf_protos I/O Protocols + * @{ + * @} + * @defgroup lavf_internal Internal + * @{ + * @} + * @} + *) + +//type + +(* + * @defgroup metadata_api Public Metadata API + * @ + * @ingroup libavf + * The metadata API allows libavformat to export metadata tags to a client + * application when demuxing. Conversely it allows a client application to + * set metadata when muxing. + * + * Metadata is exported or set as pairs of key/value strings in the 'metadata' + * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs + * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, + * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata + * exported by demuxers isn't checked to be valid UTF-8 in most cases. + * + * Important concepts to keep in mind: + * - Keys are unique; there can never be 2 tags with the same key. This is + * also meant semantically, i.e., a demuxer should not knowingly produce + * several keys that are literally different but semantically identical. + * E.g., key=Author5, key=Author6. In this example, all authors must be + * placed in the same tag. + * - Metadata is flat, not hierarchical; there are no subtags. If you + * want to store, e.g., the email address of the child of producer Alice + * and actor Bob, that could have key=alice_and_bobs_childs_email_address. + * - Several modifiers can be applied to the tag name. This is done by + * appending a dash character ('-') and the modifier name in the order + * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. + * - language -- a tag whose value is localized for a particular language + * is appended with the ISO 639-2/B 3-letter language code. + * For example: Author-ger=Michael, Author-eng=Mike + * The original/default language is in the unqualified "Author" tag. + * A demuxer should set a default if it sets any translated tag. + * - sorting -- a modified version of a tag that should be used for + * sorting will have '-sort' appended. E.g. artist="The Beatles", + * artist-sort="Beatles, The". + * + * - Demuxers attempt to export metadata in a generic format, however tags + * with no generic equivalents are left as they are stored in the container. + * Follows a list of generic tag names: + * + @verbatim + album -- name of the set this work belongs to + album_artist -- main creator of the set/album, if different from artist. + e.g. "Various Artists" for compilation albums. + artist -- main creator of the work + comment -- any additional description of the file. + composer -- who composed the work, if different from artist. + copyright -- name of copyright holder. + creation_time-- date when the file was created, preferably in ISO 8601. + date -- date when the work was created, preferably in ISO 8601. + disc -- number of a subset, e.g. disc in a multi-disc collection. + encoder -- name/settings of the software/hardware that produced the file. + encoded_by -- person/group who created the file. + filename -- original name of the file. + genre -- <self-evident>. + language -- main language in which the work is performed, preferably + in ISO 639-2 format. Multiple languages can be specified by + separating them with commas. + performer -- artist who performed the work, if different from artist. + E.g for "Also sprach Zarathustra", artist would be "Richard + Strauss" and performer "London Philharmonic Orchestra". + publisher -- name of the label/publisher. + service_name -- name of the service in broadcasting (channel name). + service_provider -- name of the service provider in broadcasting. + title -- name of the work. + track -- number of this work in the set, can be in form current/total. + variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of + @endverbatim + * + * Look in the examples section for an application example how to use the Metadata API. + * + * @ + *) + +(* packet functions *) + +(** + * Allocate and read the payload of a packet and initialize its fields with + * default values. + * + * @param s associated IO context + * @param pkt packet + * @param size desired payload size + * @return >0 (read size) if OK, AVERROR_xxx otherwise + *) +function av_get_packet(s: PAVIOContext; var pkt: TAVPacket; size: cint): cint; + cdecl; external av__format; + +(** + * Read data and append it to the current content of the AVPacket. + * If pkt->size is 0 this is identical to av_get_packet. + * Note that this uses av_grow_packet and thus involves a realloc + * which is inefficient. Thus this function should only be used + * when there is no reasonable way to know (an upper bound of) + * the final size. + * + * @param s associated IO context + * @param pkt packet + * @param size amount of data to read + * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data + * will not be lost even if an error occurs. + *) +function av_append_packet(s: PAVIOContext; var pkt: TAVPacket; size: cint): cint; + cdecl; external av__format; + +{$IFDEF FF_API_LAVF_FRAC} +(*************************************************) +(* fractional numbers for exact pts handling *) + +type + (** + * The exact value of the fractional number is: 'val + num / den'. + * num is assumed to be 0 <= num < den. + *) + PAVFrac = ^TAVFrac; + TAVFrac = record + val, num, den: cint64; + end; +{$ENDIF} + +{$IFNDEF FPC} + //defines for delphi + size_t = cardinal; +{$ENDIF} + +(*************************************************) +(* input/output formats *) + +type + (** + * This structure contains the data a format has to probe a file. + *) + TAVProbeData = record + filename: PAnsiChar; + buf: PByteArray; (**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. *) + buf_size: cint; (**< Size of buf except extra allocated bytes *) + {const} mime_type: PAnsiChar; (**< mime_type, when known. *) + end; + +const + AVPROBE_SCORE_EXTENSION = 50; ///< score for file extension + AVPROBE_SCORE_MIME = 75; ///< score for file mime type + AVPROBE_SCORE_MAX = 100; ///< maximum score + + AVPROBE_SCORE_RETRY = (AVPROBE_SCORE_MAX DIV 4); + AVPROBE_SCORE_STREAM_RETRY = (AVPROBE_SCORE_MAX DIV 4-1); + + AVPROBE_PADDING_SIZE = 32; ///< extra allocated bytes at the end of the probe buffer + +/// Demuxer will use avio_open, no opened file should be provided by the caller. + AVFMT_NOFILE = $0001; + AVFMT_NEEDNUMBER = $0002; (**< Needs '%d' in filename. *) + AVFMT_SHOW_IDS = $0008; (**< Show format stream IDs numbers. *) +{$IFDEF FF_API_LAVF_FMT_RAWPICTURE} + AVFMT_RAWPICTURE = $0020; (**< Format wants AVPicture structure for + raw picture data. @deprecated Not used anymore *) +{$ENDIF} + AVFMT_GLOBALHEADER = $0040; (**< Format wants global header. *) + AVFMT_NOTIMESTAMPS = $0080; (**< Format does not need / have any timestamps. *) + AVFMT_GENERIC_INDEX = $0100; (**< Use generic index building code. *) + AVFMT_TS_DISCONT = $0200; (**< Format allows timestamp discontinuities. *) + AVFMT_VARIABLE_FPS = $0400; (**< Format allows variable fps. *) + AVFMT_NODIMENSIONS = $0800; (**< Format does not need width/height *) + AVFMT_NOSTREAMS = $1000; (**< Format does not require any streams *) + AVFMT_NOBINSEARCH = $2000; (**< Format does not allow to fall back to binary search via read_timestamp *) + AVFMT_NOGENSEARCH = $4000; (**< Format does not allow to fall back to generic search *) + AVFMT_NO_BYTE_SEEK = $8000; (**< Format does not allow seeking by bytes *) + AVFMT_ALLOW_FLUSH = $10000;(**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. *) + AVFMT_TS_NONSTRICT = $20000;(**< Format does not require strictly + increasing timestamps, but they must + still be monotonic *) + AVFMT_TS_NEGATIVE = $40000; (**< Format allows muxing negative + timestamps. If not set the timestamp + will be shifted in av_write_frame and + av_interleaved_write_frame so they + start from 0. + The user or muxer can override this through + AVFormatContext.avoid_negative_ts + *) + + AVFMT_SEEK_TO_PTS = $4000000; (**< Seeking is based on PTS *) + + // used by AVIndexEntry + AVINDEX_KEYFRAME = $0001; + + AVFMTCTX_NOHEADER = $0001; (**< signal that no header is present + (streams are added dynamically) *) + + MAX_STREAMS = 20; + + AVFMT_FLAG_GENPTS = $0001; ///< Generate missing pts even if it requires parsing future frames. + AVFMT_FLAG_IGNIDX = $0002; ///< Ignore index. + AVFMT_FLAG_NONBLOCK = $0004; ///< Do not block when reading packets from input. + AVFMT_FLAG_IGNDTS = $0008; ///< Ignore DTS on frames that contain both DTS & PTS + AVFMT_FLAG_NOFILLIN = $0010; ///< Do not infer any values from other values, just return what is stored in the container + AVFMT_FLAG_NOPARSE = $0020; ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled + AVFMT_FLAG_NOBUFFER = $0040; ///< Do not buffer frames when possible + AVFMT_FLAG_CUSTOM_IO = $0080; ///< The caller has supplied a custom AVIOContext, don't avio_close() it. + AVFMT_FLAG_DISCARD_CORRUPT = $0100; ///< Discard frames marked corrupted + AVFMT_FLAG_FLUSH_PACKETS = $0200; ///< Flush the AVIOContext every packet. +(** + * When muxing, try to avoid writing any random/volatile data to the output. + * This includes any random IDs, real-time timestamps/dates, muxer version, etc. + * + * This flag is mainly intended for testing. + *) + AVFMT_FLAG_BITEXACT = $0400; + AVFMT_FLAG_MP4A_LATM = $8000; ///< Enable RTP MP4A-LATM payload + AVFMT_FLAG_SORT_DTS = $10000; ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) + AVFMT_FLAG_PRIV_OPT = $20000; ///< Enable use of private options by delaying codec open (this could be made default once all code is converted) + AVFMT_FLAG_KEEP_SIDE_DATA = $40000; ///< Don't merge side data but keep it separate. + AVFMT_FLAG_FAST_SEEK = $80000; ///< Enable fast, but inaccurate seeks for some formats + + // used by AVStream + AVSTREAM_EVENT_FLAG_METADATA_UPDATED = $0001; ///< The call resulted in updated metadata. + MAX_STD_TIMEBASES = (30*12+30+3+6); + MAX_REORDER_DELAY = 16; + + // used by TAVProgram + AV_PROGRAM_RUNNING = 1; + + + AV_DISPOSITION_DEFAULT = $0001; + AV_DISPOSITION_DUB = $0002; + AV_DISPOSITION_ORIGINAL = $0004; + AV_DISPOSITION_COMMENT = $0008; + AV_DISPOSITION_LYRICS = $0010; + AV_DISPOSITION_KARAOKE = $0020; + + (** + * Track should be used during playback by default. + * Useful for subtitle track that should be displayed + * even when user did not explicitly ask for subtitles. + *) + AV_DISPOSITION_FORCED = $0040; + AV_DISPOSITION_HEARING_IMPAIRED = $0080; (**< stream for hearing impaired audiences *) + AV_DISPOSITION_VISUAL_IMPAIRED = $0100; (**< stream for visual impaired audiences *) + AV_DISPOSITION_CLEAN_EFFECTS = $0200; (**< stream without voice *) +(** + * The stream is stored in the file as an attached picture/"cover art" (e.g. + * APIC frame in ID3v2). The single packet associated with it will be returned + * among the first few packets read from the file unless seeking takes place. + * It can also be accessed at any time in AVStream.attached_pic. + *) + AV_DISPOSITION_ATTACHED_PIC = $0400; + +(** + * To specify text track kind (different from subtitles default). + *) + AV_DISPOSITION_CAPTIONS = $10000; + AV_DISPOSITION_DESCRIPTIONS = $20000; + AV_DISPOSITION_METADATA = $40000; + +(** + * Options for behavior on timestamp wrap detection. + *) + AV_PTS_WRAP_IGNORE = 0; ///< ignore the wrap + AV_PTS_WRAP_ADD_OFFSET = 1; ///< add the format specific offset on wrap detection + AV_PTS_WRAP_SUB_OFFSET = -1; ///< subtract the format specific offset on wrap detection + + // used by TAVFormatContext.debug + FF_FDEBUG_TS = 0001; + AVFMT_EVENT_FLAG_METADATA_UPDATED = 0001; ///< The call resulted in updated metadata. + + RAW_PACKET_BUFFER_SIZE = 2500000; + + AVFMT_AVOID_NEG_TS_AUTO = -1; ///< Enabled when required by target format + AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE = 1; ///< Shift timestamps so they are non negative + AVFMT_AVOID_NEG_TS_MAKE_ZERO = 2; ///< Shift timestamps so that they start at 0 + +type + PPAVCodecTag = ^PAVCodecTag; + PAVCodecTag = Pointer; + + PAVOutputFormat = ^TAVOutputFormat; + PAVProbeData = ^TAVProbeData; + + PAVInputFormat = ^TAVInputFormat; + PAVIndexEntry = ^TAVIndexEntry; + + PPAVStream = ^PAVStream; + PAVStream = ^TAVStream; + PAVPacketList = ^TAVPacketList; + TAVPacketList = record + pkt: TAVPacket; + next: PAVPacketList; + end; (*AVPacketList*) + + PPAVProgram = ^PAVProgram; + PAVProgram = ^TAVProgram; + + PPAVFormatContext = ^PAVFormatContext; + PAVFormatContext = ^TAVFormatContext; + +(** + * Convert all the metadata sets from ctx according to the source and + * destination conversion tables. + * + * @param d_conv destination tags format conversion table + * @param s_conv source tags format conversion table + *) + PAVMetadataConv = ^TAVMetadataConv; + TAVMetadataConv = record + ctx: PAVFormatContext; + d_conv: {const} PAVMetadataConv; + s_conv: {const} PAVMetadataConv; + end; + + (** From libavdevice/avdevice.h **) + PPAVDeviceInfo = ^PAVDeviceInfo; + PAVDeviceInfo = ^TAVDeviceInfo; + TAVDeviceInfo = record + device_name: PAnsiChar; (**< device name, format depends on device *) + device_description: PAnsiChar; (**< human friendly name *) + end; {TAVDeviceInfo} + + PAVDeviceInfoList = ^TAVDeviceInfoList; + TAVDeviceInfoList = record + devices: PPAVDeviceInfo; (**< list of autodetected devices *) + nb_devices: cint; (**< number of autodetected devices *) + default_device: cint; (**< index of default device or -1 if no default *) + end; {TAVDeviceInfoList} + + PAVDeviceCapabilitiesQuery = ^TAVDeviceCapabilitiesQuery; + TAVDeviceCapabilitiesQuery = record + end; + + PFFFrac = ^TFFFrac; + TFFFrac = record + val: cint64; + num: cint64; + den: cint64; + end; + +(** + * @addtogroup lavf_encoding + * @ + *) + TAVOutputFormat = record + name: PAnsiChar; + (** + * Descriptive name for the format, meant to be more human-readable + * than name. You should use the NULL_IF_CONFIG_SMALL() macro + * to define it. + *) + long_name: PAnsiChar; + mime_type: PAnsiChar; + extensions: PAnsiChar; (**< comma-separated filename extensions *) + (* output support *) + audio_codec: TAVCodecID; (**< default audio codec *) + video_codec: TAVCodecID; (**< default video codec *) + subtitle_codec: TAVCodecID; (**< default subtitle codec *) + (** + * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, + * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, + * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, + * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE + *) + flags: cint; + + (** + * List of supported codec_id-codec_tag pairs, ordered by "better + * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. + *) + codec_tag: {const} PPAVCodecTag; + + priv_class: {const} PAVClass; ///< AVClass for the private context + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + next: PAVOutputFormat; + (** + * size of private data so that it can be allocated in the wrapper + *) + priv_data_size: cint; + + write_header: function (c: PAVFormatContext): cint; cdecl; + (** + * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, + * pkt can be NULL in order to flush data buffered in the muxer. + * When flushing, return 0 if there still is more data to flush, + * or 1 if everything was flushed and there is no more buffered + * data. + *) + write_packet: function (c: PAVFormatContext; pkt: PAVPacket): cint; cdecl; + write_trailer: function (c: PAVFormatContext): cint; cdecl; + (** + * Currently only used to set pixel format if not YUV420P. + *) + interleave_packet: function (s: PAVFormatContext; out_: PAVPacket; + in_: PAVPacket; flush: cint): cint; cdecl; + (** + * Test if the given codec can be stored in this container. + * + * @return 1 if the codec is supported, 0 if it is not. + * A negative number if unknown. + * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC + *) + query_codec: function (id: TAVCodecID; std_compliance: cint): cint; cdecl; + + get_output_timestamp: procedure (s: PAVFormatContext; stream: cint; + dts: Pcint64; wall: Pcint64); cdecl; + + (** + * Allows sending messages from application to device. + *) + control_message: function(s: PAVFormatContext; type_: cint; data: pointer; + data_size: size_t): cint; cdecl; + + (** + * Write an uncoded AVFrame. + * + * See av_write_uncoded_frame() for details. + * + * The library will free *frame afterwards, but the muxer can prevent it + * by setting the pointer to NULL. + *) + write_uncodec_frame: function(s: PAVFormatContext; stream_index: cint; + frame: PPAVFrame; flags: cuint): cint; cdecl; + + (** + * Returns device list with it properties. + * @see avdevice_list_devices() for more details. + *) + get_device_list: function(s: PAVFormatContext; device_list: PAVDeviceInfoList): cint; cdecl; + + (** + * Initialize device capabilities submodule. + * @see avdevice_capabilities_create() for more details. + *) + create_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; + + (** + * Free device capabilities submodule. + * @see avdevice_capabilities_free() for more details. + *) + free_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; + + data_codec: TAVCodecID; (**< default data codec *) + + (** + * Initialize format. May allocate data here, and set any AVFormatContext or + * AVStream parameters that need to be set before packets are sent. + * This method must not write output. + * + * Any allocations made here must be freed in deinit(). + *) + init: function(s: PAVFormatContext): cint; cdecl; + + (** + * Deinitialize format. If present, this is called whenever the muxer is being + * destroyed, regardless of whether or not the header has been written. + * + * If a trailer is being written, this is called after write_trailer(). + * + * This is called if init() fails as well. + *) + deinit: procedure(s: PAVFormatContext); + + (** + * Set up any necessary bitstream filtering and extract any extra data needed + * for the global header. + * Return 0 if more packets from this stream must be checked; 1 if not. + *) + check_bitstream: function(s: PAVFormatContext; pkt: {const} PAVPacket): cint; cdecl; + end; +(** + * @} + *) + +(** + * @addtogroup lavf_decoding + * @ + *) + TAVInputFormat = record + (** + * A comma separated list of short names for the format. New names + * may be appended with a minor bump. + *) + name: PAnsiChar; + + (** + * Descriptive name for the format, meant to be more human-readable + * than name. You should use the NULL_IF_CONFIG_SMALL() macro + * to define it. + *) + long_name: PAnsiChar; + + (** + * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, + * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, + * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. + *) + flags: cint; + + (** + * If extensions are defined, then no probe is done. You should + * usually not use extension format guessing because it is not + * reliable enough + *) + extensions: PAnsiChar; + + codec_tag: {const} PPAVCodecTag; + + priv_class: {const} PAVClass; ///< AVClass for the private context + + (** + * Comma-separated list of mime types. + * It is used check for matching mime types while probing. + * @see av_probe_input_format2 + *) + mime_type: {const} PAnsiChar; + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + next: PAVInputFormat; + + (** + * Raw demuxers store their codec ID here. + *) + raw_codec_id: cint; + + (** + * Size of private data so that it can be allocated in the wrapper. + *) + priv_data_size: cint; + + (** + * Tell if a given file has a chance of being parsed as this format. + * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes + * big so you do not have to check for that unless you need more. + *) + read_probe: function (p: PAVProbeData): cint; cdecl; + + (** + * Read the format header and initialize the AVFormatContext + * structure. Return 0 if OK. Only used in raw format right + * now. 'avformat_new_stream' should be called to create new streams. + *) + read_header: function (c: PAVFormatContext): cint; cdecl; + + (** + * Read one packet and put it in 'pkt'. pts and flags are also + * set. 'avformat_new_stream' can be called only if the flag + * AVFMTCTX_NOHEADER is used. + * @return 0 on success, < 0 on error. + * When returning an error, pkt must not have been allocated + * or must be freed before returning + *) + read_packet: function (c: PAVFormatContext; var pkt: TAVPacket): cint; cdecl; + + (** + * Close the stream. The AVFormatContext and AVStreams are not + * freed by this function + *) + read_close: function (c: PAVFormatContext): cint; cdecl; + + (** + * Seek to a given timestamp relative to the frames in + * stream component stream_index. + * @param stream_index Must not be -1. + * @param flags Selects which direction should be preferred if no exact + * match is available. + * @return >= 0 on success (but not necessarily the new offset) + *) + read_seek: function (c: PAVFormatContext; stream_index: cint; + timestamp: cint64; flags: cint): cint; cdecl; + + (** + * Get the next timestamp in stream[stream_index].time_base units. + * @return the timestamp or AV_NOPTS_VALUE if an error occurred + *) + read_timestamp: function (s: PAVFormatContext; stream_index: cint; + pos: pint64; pos_limit: cint64): cint64; cdecl; + + (** + * Start/resume playing - only meaningful if using a network-based format + * (RTSP). + *) + read_play: function (c: PAVFormatContext): cint; cdecl; + + (** + * Pause playing - only meaningful if using a network-based format + * (RTSP). + *) + read_pause: function (c: PAVFormatContext): cint; cdecl; + + (** + * Seek to timestamp ts. + * Seeking will be done so that the point from which all active streams + * can be presented successfully will be closest to ts and within min/max_ts. + * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. + *) + read_seek2: function (s: PAVFormatContext; + stream_index: cint; + min_ts: cint64; + ts: cint64; + max_ts: cint64; + flags: cint): cint; cdecl; + + (** + * Returns device list with it properties. + * @see avdevice_list_devices() for more details. + *) + get_device_list: function(s: PAVFormatContext; device_list: PAVDeviceInfoList): cint; cdecl; + + (** + * Initialize device capabilities submodule. + * @see avdevice_capabilities_create() for more details. + *) + create_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; + + (** + * Free device capabilities submodule. + * @see avdevice_capabilities_free() for more details. + *) + free_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; + + end; +(** + * @} + *) + + TAVStreamParseType = ( + AVSTREAM_PARSE_NONE, + AVSTREAM_PARSE_FULL, (**< full parsing and repack *) + AVSTREAM_PARSE_HEADERS, (**< Only parse headers, do not repack. *) + AVSTREAM_PARSE_TIMESTAMPS, (**< full parsing and interpolation of timestamps for frames not starting on a packet boundary *) + AVSTREAM_PARSE_FULL_ONCE, (**< full parsing and repack of the first frame only, only implemented for H.264 currently *) + AVSTREAM_PARSE_FULL_RAW = $57415230 // MKTAG(0,'R','A','W'), + (**< full parsing and repack with timestamp and position generation by parser for raw + this assumes that each packet in the file contains no demuxer level headers and + just codec level data, otherwise position generation would fail *) + ); + + TAVIndexEntry = record + pos: cint64; + timestamp: cint64; (**< + * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available + * when seeking to this entry. That means preferable PTS on keyframe based formats. + * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better + * is known + *) + { Delphi doesn't support bitfields -> use flags_size instead + int flags:2; + int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). + } + flags_size: cint; // 0..1: flags, 2..31: size + min_distance: cint; (**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. *) + end; + + Tduration_error = array[0..1] of array[0..MAX_STD_TIMEBASES - 1] of cdouble; + PStreamInfo = ^TStreamInfo; + TStreamInfo = record + last_dts: cint64; + duration_gcd: cint64; + duration_count: cint; + rfps_duration_sum: cint64; + duration_error: ^Tduration_error; + codec_info_duration: cint64; + codec_info_duration_fields: cint64; + (** + * 0 -> decoder has not been searched for yet. + * >0 -> decoder found + * <0 -> decoder with codec_id == -found_decoder has not been found + *) + found_decoder: cint; + + (** + * Those are used for average framerate estimation. + *) + fps_first_dts: cint64; + fps_first_dts_idx: cint; + fps_last_dts: cint64; + fps_last_dts_idx: cint; + end; + + (** + * Stream structure. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVStream) must not be used outside libav*. + *) + TAVStream = record + index: cint; (**< stream index in AVFormatContext *) + (** + * Format-specific stream ID. + * decoding: set by libavformat + * encoding: set by the user, replaced by libavformat if left unset + *) + id: cint; (**< format-specific stream ID *) +{$IFDEF FF_API_LAVF_AVCTX} + (** + * @deprecated use the codecpar struct instead + *) + codec: PAVCodecContext; {deprecated} +{$ENDIF} + priv_data: pointer; + +{$IFDEF FF_API_LAVF_FRAC} + (** + * @deprecated this field is unused + *) + pts: TAVFrac; {attribute_deprecated} +{$ENDIF} + + (** + * This is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. + * + * decoding: set by libavformat + * encoding: May be set by the caller before avformat_write_header() to + * provide a hint to the muxer about the desired timebase. In + * avformat_write_header(), the muxer will overwrite this field + * with the timebase that will actually be used for the timestamps + * written into the file (which may or may not be related to the + * user-provided one, depending on the format). + *) + time_base: TAVRational; + + (** + * Decoding: pts of the first frame of the stream in presentation order, in stream time base. + * Only set this if you are absolutely 100% sure that the value you set + * it to really is the pts of the first frame. + * This may be undefined (AV_NOPTS_VALUE). + * @note The ASF header does NOT contain a correct start_time the ASF + * demuxer must NOT set this. + *) + start_time: cint64; + + (** + * Decoding: duration of the stream, in stream time base. + * If a source file does not specify a duration, but does specify + * a bitrate, this value will be estimated from bitrate and file size. + *) + duration: cint64; + + nb_frames: cint64; ///< number of frames in this stream if known or 0 + + disposition: cint; (**< AV_DISPOSITION_* bitfield *) + + discard: TAVDiscard; ///< Selects which packets can be discarded at will and do not need to be demuxed. + + (** + * sample aspect ratio (0 if unknown) + * - encoding: Set by user. + * - decoding: Set by libavformat. + *) + sample_aspect_ratio: TAVRational; + + metadata: PAVDictionary; + + (** + * Average framerate + * + * - demuxing: May be set by libavformat when creating the stream or in + * avformat_find_stream_info(). + * - muxing: May be set by the caller before avformat_write_header(). + *) + avg_frame_rate: TAVRational; + + (** + * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet + * will contain the attached picture. + * + * decoding: set by libavformat, must not be modified by the caller. + * encoding: unused + *) + attached_pic: TAVPacket; + + (** + * An array of side data that applies to the whole stream (i.e. the + * container does not allow it to change between packets). + * + * There may be no overlap between the side data in this array and side data + * in the packets. I.e. a given side data is either exported by the muxer + * (demuxing) / set by the caller (muxing) in this array, then it never + * appears in the packets, or the side data is exported / sent through + * the packets (always in the first packet where the value becomes known or + * changes), then it does not appear in this array. + * + * - demuxing: Set by libavformat when the stream is created. + * - muxing: May be set by the caller before avformat_write_header(). + * + * Freed by libavformat in avformat_free_context(). + * + * @see av_format_inject_global_side_data() + *) + side_data: PAVPacketSideData; + + (** + * The number of elements in the AVStream.side_data array. + *) + nb_side_data: cint; + + (** + * Flags for the user to detect events happening on the stream. Flags must + * be cleared by the user once the event has been handled. + * A combination of AVSTREAM_EVENT_FLAG_*. + *) + event_flags: cint; + + (***************************************************************** + * All fields below this line are not part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + + (** + * Stream information used internally by av_find_stream_info() + *) + info: PStreamInfo; + + pts_wrap_bits: cint; (**< number of bits in pts (used for wrapping control) *) + + // Timestamp generation support: + (** + * Timestamp corresponding to the last dts sync point. + * + * Initialized when AVCodecParserContext.dts_sync_point >= 0 and + * a DTS is received from the underlying container. Otherwise set to + * AV_NOPTS_VALUE by default. + *) + first_dts: cint64; + cur_dts: cint64; + last_IP_pts: cint64; + last_IP_duration: cint; + + (** + * Number of packets to buffer for codec probing + *) + probe_packets: cint; + + (** + * Number of frames that have been demuxed during av_find_stream_info() + *) + codec_info_nb_frames: cint; + + (* av_read_frame() support *) + need_parsing: TAVStreamParseType; + parser: PAVCodecParserContext; + + (** + * last packet in packet_buffer for this stream when muxing. + *) + last_in_packet_buffer: PAVPacketList; + probe_data: TAVProbeData; + pts_buffer: array [0..MAX_REORDER_DELAY] of cint64; + + index_entries: PAVIndexEntry; (**< Only used if the format does not + support seeking natively. *) + nb_index_entries: cint; + index_entries_allocated_size: cuint; + + (** + * Real base framerate of the stream. + * This is the lowest framerate with which all timestamps can be + * represented accurately (it is the least common multiple of all + * framerates in the stream). Note, this value is just a guess! + * For example, if the time base is 1/90000 and all frames have either + * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. + * + * Code outside avformat should access this field using: + * av_stream_get/set_r_frame_rate(stream) + *) + r_frame_rate: TAVRational; + + (** + * Stream Identifier + * This is the MPEG-TS stream identifier +1 + * 0 means unknown + *) + stream_identifier: cint; + + interleaver_chunk_size: cint64; + interleaver_chunk_duration: cint64; + + (** + * stream probing state + * -1 -> probing finished + * 0 -> no probing requested + * rest -> perform probing with request_probe being the minimum score to accept. + * NOT PART OF PUBLIC API + *) + request_probe: cint; + (** + * Indicates that everything up to the next keyframe + * should be discarded. + *) + skip_to_keyframe: cint; + + (** + * Number of samples to skip at the start of the frame decoded from the next packet. + *) + skip_samples: cint; + + (** + * If not 0, the number of samples that should be skipped from the start of + * the stream (the samples are removed from packets with pts==0, which also + * assumes negative timestamps do not happen). + * Intended for use with formats such as mp3 with ad-hoc gapless audio + * support. + *) + start_skip_samples: cint64; + + (** + * If not 0, the first audio sample that should be discarded from the stream. + * This is broken by design (needs global sample count), but can't be + * avoided for broken by design formats such as mp3 with ad-hoc gapless + * audio support. + *) + first_discard_sample: cint64; + + (** + * The sample after last sample that is intended to be discarded after + * first_discard_sample. Works on frame boundaries only. Used to prevent + * early EOF if the gapless info is broken (considered concatenated mp3s). + *) + last_discard_sample: cint64; + + (** + * Number of internally decoded frames, used internally in libavformat, do not access + * its lifetime differs from info which is why it is not in that structure. + *) + nb_decoded_frames: cint; + + (** + * Timestamp offset added to timestamps before muxing + * NOT PART OF PUBLIC API + *) + mux_ts_offset: cint64; + + (** + * Internal data to check for wrapping of the time stamp + *) + pts_wrap_reference: cint64; + + (** + * Options for behavior, when a wrap is detected. + * + * Defined by AV_PTS_WRAP_ values. + * + * If correction is enabled, there are two possibilities: + * If the first time stamp is near the wrap point, the wrap offset + * will be subtracted, which will create negative time stamps. + * Otherwise the offset will be added. + *) + pts_wrap_behavior: cint; + + (** + * Internal data to prevent doing update_initial_durations() twice + *) + update_initial_durations_done: cint; + + (** + * Internal data to generate dts from pts + *) + pts_reorder_error: array[0..MAX_REORDER_DELAY] of cint64; + pts_reorder_error_count: array[0..MAX_REORDER_DELAY] of byte; + + (** + * Internal data to analyze DTS and detect faulty mpeg streams + *) + last_dts_for_order_check: cint64; + dts_ordered: byte; + dts_misordered: byte; + + (** + * Internal data to inject global side data + *) + inject_global_side_data: cint; + + (** + * String containing paris of key and values describing recommended encoder configuration. + * Paris are separated by ','. + * Keys are separated from values by '='. + *) + recommended_encoder_configuration: PAnsiChar; + + (** + * display aspect ratio (0 if unknown) + * - encoding: unused + * - decoding: Set by libavformat to calculate sample_aspect_ratio internally + *) + display_aspect_ratio: TAVRational; + + priv_pts: PFFFrac; + + (** + * An opaque field for libavformat internal usage. + * Must not be accessed in any way by callers. + *) + internal: pointer; + + (* + * Codec parameters associated with this stream. Allocated and freed by + * libavformat in avformat_new_stream() and avformat_free_context() + * respectively. + * + * - demuxing: filled by libavformat on stream creation or in + * avformat_find_stream_info() + * - muxing: filled by the caller before avformat_write_header() + *) + codecpar: PAVCodecParameters; + end; (** TAVStream **) + +(** + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVProgram) must not be used outside libav*. + *) + TAVProgram = record + id: cint; + flags: cint; + discard: TAVDiscard; ///< selects which program to discard and which to feed to the caller + stream_index: Pcuint; + nb_stream_indexes: cuint; + metadata: PAVDictionary; + + program_num: cint; + pmt_pid: cint; + pcr_pid: cint; + + (***************************************************************** + * All fields below this line are not part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + start_time: cint64; + end_time: cint64; + + pts_wrap_reference: cint64; ///< reference dts for wrap detection + pts_wrap_behavior: cint; ///< behavior on wrap detection + end; (*AVProgram*) + + PAVChapter = ^TAVChapter; + TAVChapter = record + id: cint; ///< unique ID to identify the chapter + time_base: TAVRational; ///< time base in which the start/end timestamps are specified + start, end_: cint64; ///< chapter start/end time in time_base units + metadata: PAVDictionary; + end; (*AVChapter*) + + TAVChapterArray = array[0..(MaxInt div SizeOf(TAVChapter))-1] of TAVChapter; + PAVChapterArray = ^TAVChapterArray; + + (** + * The duration of a video can be estimated through various ways, and this enum can be used + * to know how the duration was estimated. + *) + TAVDurationEstimationMethod = ( + AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes + AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration + AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) + ); + + PAVFormatInternal = ^TAVFormatInternal; + TAVFormatInternal = record + (** + * Number of streams relevant for interleaving. + * Muxing only. + *) + nb_interleaved_streams: cint; + inject_global_side_data: cint; + end; + + TAv_format_control_message = function (s: PAVFormatContext; type_: cint; + data: pointer; data_size: size_t): cint; cdecl; + + TAVOpenCallback = function (s: PAVFormatContext; pb: PPAVIOContext; url: {const} PAnsiChar; flags: cint; + int_cb: {const} PAVIOInterruptCB; options: PPAVDictionary): cint; cdecl; + + (** + * Format I/O context. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVFormatContext) must not be used outside libav*, use + * avformat_alloc_context() to create an AVFormatContext. + * + * Fields can be accessed through AVOptions (av_opt* ), + * the name string used matches the associated command line parameter name and + * can be found in libavformat/options_table.h. + * The AVOption/command line parameter names differ in some cases from the C + * structure field names for historic reasons or brevity. + *) + TAVFormatContext = record + (** + * A class for logging and @ref avoptions. Set by avformat_alloc_context(). + * Exports (de)muxer private options if they exist. + *) + av_class: PAVClass; (**< Set by avformat_alloc_context. *) + + (** + * The input container format. + * + * Demuxing only, set by avformat_open_input(). + *) + iformat: PAVInputFormat; + + (** + * The output container format. + * + * Muxing only, must be set by the caller before avformat_write_header(). + *) + oformat: PAVOutputFormat; + + (** + * Format private data. This is an AVOptions-enabled struct + * if and only if iformat/oformat.priv_class is not NULL. + * + * - muxing: set by avformat_write_header() + * - demuxing: set by avformat_open_input() + *) + priv_data: pointer; + + (* + * I/O context. + * + * - demuxing: either set by the user before avformat_open_input() (then + * the user must close it manually) or set by avformat_open_input(). + * - muxing: set by the user before avformat_write_header(). The caller must + * take care of closing / freeing the IO context. + * + * Do NOT set this field if AVFMT_NOFILE flag is set in + * iformat/oformat.flags. In such a case, the (de)muxer will handle + * I/O in some other way and this field will be NULL. + *) + pb: PAVIOContext; + + (* stream info *) + (** + * Flags signalling stream properties. A combination of AVFMTCTX_*. + * Set by libavformat. + *) + ctx_flags: cint; + + (** + * Number of elements in AVFormatContext.streams. + * + * Set by avformat_new_stream(), must not be modified by any other code. + *) + nb_streams: cuint; + + (** + * A list of all streams in the file. New streams are created with + * avformat_new_stream(). + * + * - demuxing: streams are created by libavformat in avformat_open_input(). + * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also + * appear in av_read_frame(). + * - muxing: streams are created by the user before avformat_write_header(). + * + * Freed by libavformat in avformat_free_context(). + *) + streams: PPAVStream; + + (** + * input or output filename + * + * - demuxing: set by avformat_open_input() + * - muxing: may be set by the caller before avformat_write_header() + *) + filename: array [0..1023] of AnsiChar; (* input or output filename *) + + (** + * Position of the first frame of the component, in + * AV_TIME_BASE fractional seconds. NEVER set this value directly: + * It is deduced from the AVStream values. + * + * Demuxing only, set by libavformat. + *) + start_time: cint64; + (** + * Duration of the stream, in AV_TIME_BASE fractional + * seconds. Only set this value if you know none of the individual stream + * durations and also dont set any of them. This is deduced from the + * AVStream values if not set. + *) + duration: cint64; + + (** + * Total stream bitrate in bit/s, 0 if not + * available. Never set it directly if the file_size and the + * duration are known as ffmpeg can compute it automatically. + *) + bit_rate: cint64; + + packet_size: cuint; + max_delay: cint; + + (** + * Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*. + * Set by the user before avformat_open_input() / avformat_write_header(). + *) + flags: cint; + + (** + * Maximum size of the data read from input for determining + * the input container format. + * Demuxing only, set by the caller before avformat_open_input(). + *) + probesize: cint64; + + (** + * Maximum duration (in AV_TIME_BASE units) of the data read + * from input in avformat_find_stream_info(). + * Demuxing only, set by the caller before avformat_find_stream_info(). + * Can be set to 0 to let avformat choose using a heuristic. + *) + max_analyze_duration: cint64; + + key: pbyte; + keylen: cint; + + nb_programs: cuint; + programs: PPAVProgram; + + (** + * Forced video codec_id. + * Demuxing: Set by user. + *) + video_codec_id: TAVCodecID; + + (** + * Forced audio codec_id. + * Demuxing: Set by user. + *) + audio_codec_id: TAVCodecID; + + (** + * Forced subtitle codec_id. + * Demuxing: Set by user. + *) + subtitle_codec_id: TAVCodecID; + + (** + * Maximum amount of memory in bytes to use for the index of each stream. + * If the index exceeds this size, entries will be discarded as + * needed to maintain a smaller size. This can lead to slower or less + * accurate seeking (depends on demuxer). + * Demuxers for which a full in-memory index is mandatory will ignore + * this. + * - muxing: unused + * - demuxing: set by user + *) + max_index_size: cuint; + + (** + * Maximum amount of memory in bytes to use for buffering frames + * obtained from realtime capture devices. + *) + max_picture_buffer: cuint; + + nb_chapters: cuint; + chapters: PAVChapterArray; + + (** + * Metadata that applies to the whole file. + * + * - demuxing: set by libavformat in avformat_open_input() + * - muxing: may be set by the caller before avformat_write_header() + * + * Freed by libavformat in avformat_free_context(). + *) + metadata: PAVDictionary; + + (** + * Start time of the stream in real world time, in microseconds + * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the + * stream was captured at this real world time. + * - muxing: Set by the caller before avformat_write_header(). If set to + * either 0 or AV_NOPTS_VALUE, then the current wall-time will + * be used. + * - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that + * the value may become known after some number of frames + * have been received. + *) + start_time_realtime: cint64; + + (** + * The number of frames used for determining the framerate in + * avformat_find_stream_info(). + * Demuxing only, set by the caller before avformat_find_stream_info(). + *) + fps_probe_size: cint; + + (** + * Error recognition; higher values will detect more errors but may + * misdetect some more or less valid parts as errors. + * Demuxing only, set by the caller before avformat_open_input(). + *) + error_recognition: cint; + + (** + * Custom interrupt callbacks for the I/O layer. + * + * demuxing: set by the user before avformat_open_input(). + * muxing: set by the user before avformat_write_header() + * (mainly useful for AVFMT_NOFILE formats). The callback + * should also be passed to avio_open2() if it's used to + * open the file. + *) + interrupt_callback: TAVIOInterruptCB; + + (** + * Flags to enable debugging. + *) + debug: cint; + + (** + * Maximum buffering duration for interleaving. + * + * To ensure all the streams are interleaved correctly, + * av_interleaved_write_frame() will wait until it has at least one packet + * for each stream before actually writing any packets to the output file. + * When some streams are "sparse" (i.e. there are large gaps between + * successive packets), this can result in excessive buffering. + * + * This field specifies the maximum difference between the timestamps of the + * first and the last packet in the muxing queue, above which libavformat + * will output a packet regardless of whether it has queued a packet for all + * the streams. + * + * Muxing only, set by the caller before avformat_write_header(). + *) + max_interleave_delta: cint64; + + (** + * Allow non-standard and experimental extension + * @see AVCodecContext.strict_std_compliance + *) + strict_std_compliance: cint; + + (** + * Flags for the user to detect events happening on the file. Flags must + * be cleared by the user once the event has been handled. + * A combination of AVFMT_EVENT_FLAG_*. + *) + event_flags: cint; + + (** + * Maximum number of packets to read while waiting for the first timestamp. + * Decoding only. + *) + max_ts_probe: cint; + + (** + * Avoid negative timestamps during muxing. + * Any value of the AVFMT_AVOID_NEG_TS_* constants. + * Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use) + * - muxing: Set by user + * - demuxing: unused + *) + avoid_negative_ts: cint; + + (** + * Transport stream id. + * This will be moved into demuxer private options. Thus no API/ABI compatibility + *) + ts_id: cint; + + (** + * Audio preload in microseconds. + * Note, not all formats support this and unpredictable things may happen if it is used when not supported. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + *) + audio_preload: cint; + + (** + * Max chunk time in microseconds. + * Note, not all formats support this and unpredictable things may happen if it is used when not supported. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + *) + max_chunk_duration: cint; + + (** + * Max chunk size in bytes + * Note, not all formats support this and unpredictable things may happen if it is used when not supported. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + *) + max_chunk_size: cint; + + (** + * forces the use of wallclock timestamps as pts/dts of packets + * This has undefined results in the presence of B frames. + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + *) + use_wallclock_as_timestamps: cint; + + (** + * avio flags, used to force AVIO_FLAG_DIRECT. + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + *) + avio_flags: cint; + + (** + * The duration field can be estimated through various ways, and this field can be used + * to know how the duration was estimated. + * - encoding: unused + * - decoding: Read by user via AVOptions (NO direct access) + *) + duration_estimation_method: TAVDurationEstimationMethod; + + (** + * Skip initial bytes when opening stream + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + *) + skip_initial_bytes: cint64; + + (** + * Correct single timestamp overflows + * - encoding: unused + * - decoding: Set by user via AVOPtions (NO direct access) + *) + correct_ts_overflow: cuint; + + (** + * Force seeking to any (also non key) frames. + * - encoding: unused + * - decoding: Set by user via AVOPtions (NO direct access) + *) + seek2any: cint; + + (** + * Flush the I/O context after each packet. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + *) + flush_packets: cint; + + (** + * format probing score. + * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes + * the format. + * - encoding: unused + * - decoding: set by avformat, read by user via av_format_get_probe_score() (NO direct access) + *) + probe_score: cint; + + (** + * number of bytes to read maximally to identify format. + * - encoding: unused + * - decoding: set by user through AVOPtions (NO direct access) + *) + format_probesize: cint; + + (** + * ',' separated list of allowed decoders. + * If NULL then all are allowed + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + codec_whitelist: PAnsiChar; + + (** + * ',' separated list of allowed demuxers. + * If NULL then all are allowed + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + format_whitelist: PAnsiChar; + + + (** + * An opaque field for libavformat internal usage. + * Must not be accessed in any way by callers. + *) + internal: PAVFormatInternal; + + (** + * IO repositioned flag. + * This is set by avformat when the underlaying IO context read pointer + * is repositioned, for example when doing byte based seeking. + * Demuxers can use the flag to detect such changes. + *) + io_repositioned: cint; + + (** + * Forced video codec. + * This allows forcing a specific decoder, even when there are multiple with + * the same codec_id. + * Demuxing: Set by user via av_format_set_video_codec (NO direct access). + *) + video_codec: PAVCodec; + + (** + * Forced audio codec. + * This allows forcing a specific decoder, even when there are multiple with + * the same codec_id. + * Demuxing: Set by user via av_format_set_audio_codec (NO direct access). + *) + audio_codec: PAVCodec; + + (** + * Forced subtitle codec. + * This allows forcing a specific decoder, even when there are multiple with + * the same codec_id. + * Demuxing: Set by user via av_format_set_subtitle_codec (NO direct access). + *) + subtitle_codec: PAVCodec; + + (** + * Forced data codec. + * This allows forcing a specific decoder, even when there are multiple with + * the same codec_id. + * Demuxing: Set by user via av_format_set_data_codec (NO direct access). + *) + data_codec: PAVCodec; + + (** + * Number of bytes to be written as padding in a metadata header. + * Demuxing: Unused. + * Muxing: Set by user via av_format_set_metadata_header_padding. + *) + metadata_header_padding: cint; + + (** + * User data. + * This is a place for some private data of the user. + *) + opaque: pointer; + + (** + * Callback used by devices to communicate with application. + *) + control_message_cb: TAv_format_control_message; + + (** + * Output timestamp offset, in microseconds. + * Muxing: set by user via AVOptions (NO direct access) + *) + output_ts_offset: cint64; + + (** + * dump format separator. + * can be ", " or "\n " or anything else + * Code outside libavformat should access this field using AVOptions + * (NO direct access). + * - muxing: Set by user. + * - demuxing: Set by user. + *) + dump_separator: Pcuint8; + + (** + * Forced Data codec_id. + * Demuxing: Set by user. + *) + data_codec_id: TAVCodecID; +{$IFDEF FF_API_OLD_OPEN_CALLBACKS} + (** + * Called to open further IO contexts when needed for demuxing. + * + * This can be set by the user application to perform security checks on + * the URLs before opening them. + * The function should behave like avio_open2(), AVFormatContext is provided + * as contextual information and to reach AVFormatContext.opaque. + * + * If NULL then some simple checks are used together with avio_open2(). + * + * Must not be accessed directly from outside avformat. + * @See av_format_set_open_cb() + * + * Demuxing: Set by user. + * + * @deprecated Use io_open and io_close. + *) + open_cb: function(s: PAVFormatContext; p: PPAVIOContext; url: {const} PAnsiChar; flags: cint; int_cb: {const} PAVIOInterruptCB; options: PPAVDictionary): cint; cdecl; {deprecated} +{$ENDIF} + + (** + * ',' separated list of allowed protocols. + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + protocol_whitelist: pchar; + + (* + * A callback for opening new IO streams. + * + * Whenever a muxer or a demuxer needs to open an IO stream (typically from + * avformat_open_input() for demuxers, but for certain formats can happen at + * other times as well), it will call this callback to obtain an IO context. + * + * @param s the format context + * @param pb on success, the newly opened IO context should be returned here + * @param url the url to open + * @param flags a combination of AVIO_FLAG_* + * @param options a dictionary of additional options, with the same + * semantics as in avio_open2() + * @return 0 on success, a negative AVERROR code on failure + * + * @note Certain muxers and demuxers do nesting, i.e. they open one or more + * additional internal format contexts. Thus the AVFormatContext pointer + * passed to this callback may be different from the one facing the caller. + * It will, however, have the same 'opaque' field. + *) + io_open: function(s: PAVFormatContext; pb: PPAVIOContext; url: {const} pchar; + flags: cint; options: PPAVDictionary): cint; cdecl; + + (** + * A callback for closing the streams opened with AVFormatContext.io_open(). + *) + io_close: procedure(s: PAVFormatContext; pb: PAVIOContext); cdecl; + + (** + * ',' separated list of disallowed protocols. + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + protocol_blacklist: PAnsiChar; + end; (** TAVFormatContext **) + +function av_format_get_probe_score(s: {const} PAVFormatContext): cint; + cdecl; external av__format; +function av_format_get_video_codec(s: {const} PAVFormatContext): PAVCodec; + cdecl; external av__format; +procedure av_format_set_video_codec(s: PAVFormatContext; c: PAVCodec); + cdecl; external av__format; +function av_format_get_audio_codec(s: {const} PAVFormatContext): PAVCodec; + cdecl; external av__format; +procedure av_format_set_audio_codec(s: PAVFormatContext; c: PAVCodec); + cdecl; external av__format; +function av_format_get_subtitle_codec(s: {const} PAVFormatContext): PAVCodec; + cdecl; external av__format; +procedure av_format_set_subtitle_codec(s: PAVFormatContext; c: PAVCodec); + cdecl; external av__format; +function av_format_get_data_codec(s: {const} PAVFormatContext): PAVCodec; + cdecl; external av__format; +procedure av_format_set_data_codec(s: PAVFormatContext; c: PAVCodec); + cdecl; external av__format; +function av_format_get_metadata_header_padding(s: {const} PAVFormatContext): cint; + cdecl; external av__format; +procedure av_format_set_metadata_header_padding(s: PAVFormatContext; c: cint); + cdecl; external av__format; +procedure av_format_get_opaque(s: {const} PAVFormatContext); + cdecl; external av__format; +procedure av_format_set_opaque(s: PAVFormatContext; opaque: pointer); + cdecl; external av__format; +function av_format_get_control_message_cb(s: {const} PAVFormatContext): TAv_format_control_message; + cdecl; external av__format; +procedure av_format_set_control_message_cb(s: PAVFormatContext; callback: TAv_format_control_message); + cdecl; external av__format; +{$IFDEF FF_API_OLD_OPEN_CALLBACKS} +function av_format_get_open_cb(s: {const} PAVFormatContext): TAVOpenCallback; {deprecated} + cdecl; external av__format; +procedure av_format_set_open_cb(s: PAVFormatContext; callback: TAVOpenCallback); {deprecated} + cdecl; external av__format; +{$ENDIF} + +(** + * This function will cause global side data to be injected in the next packet + * of each stream as well as after any subsequent seek. + *) +procedure av_format_inject_global_side_data(s: PAVFormatContext); + cdecl; external av__format; + +(** + * Returns the method used to set ctx->duration. + * + * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. + *) +function av_fmt_ctx_get_duration_estimation_method(ctx: {const} PAVFormatContext): TAVDurationEstimationMethod; + cdecl; external av__format; + +function av_stream_get_r_frame_rate({const} s: PAVStream): TAVRational; + cdecl; external av__format; +procedure av_stream_set_r_frame_rate(s: PAVStream; r: TAVRational); + cdecl; external av__format; +function av_stream_get_parser(s: {const} PAVStream): PAVCodecParserContext; + cdecl; external av__format; +function av_stream_get_recommended_encoder_configuration({const} s: PAVStream): PAnsiChar; + cdecl; external av__format; +procedure av_stream_set_recommended_encoder_configuration(s: PAVStream; configuration: PAnsiChar); + cdecl; external av__format; + +(** + * Returns the pts of the last muxed packet + its duration + * + * the retuned value is undefined when used with a demuxer. + *) +function av_stream_get_end_pts(st: {const} PAVStream): cint64; + cdecl; external av__format; + +(** + * @defgroup lavf_core Core functions + * @ingroup libavf + * + * Functions for querying libavformat capabilities, allocating core structures, + * etc. + * @ + *) + +(** + * Return the LIBAVFORMAT_VERSION_INT constant. + *) +function avformat_version(): cuint; + cdecl; external av__format; + +(** + * Return the libavformat build-time configuration. + *) +function avformat_configuration(): {const} PansiChar; + cdecl; external av__format; + +(** + * Return the libavformat license. + *) +function avformat_license(): {const} PansiChar; + cdecl; external av__format; + +(** + * Initialize libavformat and register all the muxers, demuxers and + * protocols. If you do not call this function, then you can select + * exactly which formats you want to support. + * + * @see av_register_input_format() + * @see av_register_output_format() + * @see av_register_protocol() + *) +procedure av_register_all(); + cdecl; external av__format; + +procedure av_register_input_format(format: PAVInputFormat); + cdecl; external av__format; +procedure av_register_output_format(format: PAVOutputFormat); + cdecl; external av__format; + +(** + * Do global initialization of network components. This is optional, + * but recommended, since it avoids the overhead of implicitly + * doing the setup for each session. + * + * Calling this function will become mandatory if using network + * protocols at some major version bump. + *) +function avformat_network_init(): cint; + cdecl; external av__format; + +(** + * Undo the initialization done by avformat_network_init. + *) +function avformat_network_deinit(): cint; + cdecl; external av__format; + +(** + * If f is NULL, returns the first registered input format, + * if f is non-NULL, returns the next registered input format after f + * or NULL if f is the last one. + *) +function av_iformat_next(f: {const} PAVInputFormat): PAVInputFormat; + cdecl; external av__format; +(** + * If f is NULL, returns the first registered output format, + * if f is non-NULL, returns the next registered input format after f + * or NULL if f is the last one. + *) +function av_oformat_next(f: {const} PAVOutputFormat): PAVOutputFormat; + cdecl; external av__format; + +(** + * Allocate an AVFormatContext. + * Can be freed with av_free() but do not forget to free everything you + * explicitly allocated as well! + *) +function avformat_alloc_context(): PAVFormatContext; + cdecl; external av__format; + +(** + * Free an AVFormatContext and all its streams. + * @param s context to free + *) +procedure avformat_free_context(s: PAVFormatContext); + cdecl; external av__format; + +(** + * Get the AVClass for AVFormatContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avformat_get_class(): {const} PAVClass; + cdecl; external av__format; + +(** + * Add a new stream to a media file. + * + * When demuxing, it is called by the demuxer in read_header(). If the + * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also + * be called in read_packet(). + * + * When muxing, should be called by the user before avformat_write_header(). + * + * User is required to call avcodec_close() and avformat_free_context() to + * clean up the allocation by avformat_new_stream(). + * + * @param s media file handle + * @param c If non-NULL, the AVCodecContext corresponding to the new stream + * will be initialized to use this codec. This is needed for e.g. codec-specific + * defaults to be set, so codec should be provided if it is known. + * + * @return newly created stream or NULL on error. + *) +function avformat_new_stream(s: PAVFormatContext; c: {const} PAVCodec): PAVStream; + cdecl; external av__format; + +(** + * Allocate new information from stream. + * + * @param stream stream + * @param type desired side information type + * @param size side information size + * @return pointer to fresh allocated data or NULL otherwise + *) +function av_stream_new_side_data(stream: PAVStream; + type_: TAVPacketSideDataType; size: cint): Pcuint8; + cdecl; external av__format; + +(** + * Get side information from stream. + * + * @param stream stream + * @param type desired side information type + * @param size pointer for side information size to store (optional) + * @return pointer to data if present or NULL otherwise + *) +function av_stream_get_side_data(stream: PAVStream; + type_: TAVPacketSideDataType; size: Pcint): Pcuint8; + cdecl; external av__format; + +function av_new_program(s: PAVFormatContext; id: cint): PAVProgram; + cdecl; external av__format; + +(** + * @} + *) + +{$IFDEF FF_API_PKT_DUMP} +procedure av_pkt_dump(f: PAVFile; pkt: PAVPacket; dump_payload: cint); {deprecated} + cdecl; external av__format; +procedure av_pkt_dump_log(avcl: Pointer; level: cint; pkt: PAVPacket; dump_payload: cint); {deprecated} + cdecl; external av__format; +{$IFEND} + +(** + * Allocate an AVFormatContext for an output format. + * avformat_free_context() can be used to free the context and + * everything allocated by the framework within it. + * + * @param *ctx is set to the created format context, or to NULL in + * case of failure + * @param oformat format to use for allocating the context, if NULL + * format_name and filename are used instead + * @param format_name the name of output format to use for allocating the + * context, if NULL filename is used instead + * @param filename the name of the filename to use for allocating the + * context, may be NULL + * @return >= 0 in case of success, a negative AVERROR code in case of + * failure + *) +function avformat_alloc_output_context2(ctx: PPAVFormatContext; oformat: PAVOutputFormat; + {const} format_name: PAnsiChar; {const} filename: PAnsiChar): cint; + cdecl; external av__format; + +(** + * @addtogroup lavf_decoding + * @ + *) + +(** + * Find AVInputFormat based on the short name of the input format. + *) +function av_find_input_format(short_name: PAnsiChar): PAVInputFormat; + cdecl; external av__format; + +(** + * Guess the file format. + * + * @param pd data to be probed + * @param is_opened Whether the file is already opened; determines whether + * demuxers with or without AVFMT_NOFILE are probed. + *) +function av_probe_input_format(pd: PAVProbeData; is_opened: cint): PAVInputFormat; + cdecl; external av__format; + +(** + * Guess the file format. + * + * @param pd data to be probed + * @param is_opened Whether the file is already opened; determines whether + * demuxers with or without AVFMT_NOFILE are probed. + * @param score_max A probe score larger that this is required to accept a + * detection, the variable is set to the actual detection + * score afterwards. + * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended + * to retry with a larger probe buffer. + *) +function av_probe_input_format2(pd: PAVProbeData; is_opened: cint; score_max: PCint): PAVInputFormat; + cdecl; external av__format; + +(** + * Guess the file format. + * + * @param is_opened Whether the file is already opened; determines whether + * demuxers with or without AVFMT_NOFILE are probed. + * @param score_ret The score of the best detection. + *) +function av_probe_input_format3(pd: PAVProbeData; is_opened: cint; score_ret: Pcint): PAVInputFormat; + cdecl; external av__format; + +(** + * Probe a bytestream to determine the input format. Each time a probe returns + * with a score that is too low, the probe buffer size is increased and another + * attempt is made. When the maximum probe size is reached, the input format + * with the highest score is returned. + * + * @param pb the bytestream to probe + * @param fmt the input format is put here + * @param url the url of the stream + * @param logctx the log context + * @param offset the offset within the bytestream to probe from + * @param max_probe_size the maximum probe buffer size (zero for default) + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code otherwise + *) +function av_probe_input_buffer2(pb: PAVIOContext; var fmt: PAVInputFormat; + url: {const} PAnsiChar; logctx: pointer; + offset: cuint; max_probe_size: cuint): cint; + cdecl; external av__format; + +(** + * Like av_probe_input_buffer2() but returns 0 on success + *) +function av_probe_input_buffer(pb: PAVIOContext; var fmt: PAVInputFormat; + url: {const} PAnsiChar; logctx: pointer; + offset: cuint; max_probe_size: cuint): cint; + cdecl; external av__format; + +(** + * Open an input stream and read the header. The codecs are not opened. + * The stream must be closed with av_close_input_file(). + * + * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). + * May be a pointer to NULL, in which case an AVFormatContext is allocated by this + * function and written into ps. + * Note that a user-supplied AVFormatContext will be freed on failure. + * @param url URL of the stream to open. + * @param fmt If non-NULL, this parameter forces a specific input format. + * Otherwise the format is autodetected. + * @param options A dictionary filled with AVFormatContext and demuxer-private options. + * On return this parameter will be destroyed and replaced with a dict containing + * options that were not found. May be NULL. + * + * @return 0 on success, a negative AVERROR on failure. + * + * @note If you want to use custom IO, preallocate the format context and set its pb field. + *) +function avformat_open_input(ps: PPAVFormatContext; url: {const} PAnsiChar; fmt: PAVInputFormat; options: PPAVDictionary): cint; + cdecl; external av__format; + +function av_demuxer_open(ic: PAVFormatContext): cint; + cdecl; external av__format; deprecated; + +(** + * Read packets of a media file to get stream information. This + * is useful for file formats with no headers such as MPEG. This + * function also computes the real framerate in case of MPEG-2 repeat + * frame mode. + * The logical file position is not changed by this function; + * examined packets may be buffered for later processing. + * + * @param ic media file handle + * @param options If non-NULL, an ic.nb_streams long array of pointers to + * dictionaries, where i-th member contains options for + * codec corresponding to i-th stream. + * On return each dictionary will be filled with options that were not found. + * @return >=0 if OK, AVERROR_xxx on error + * + * @note this function isn't guaranteed to open all the codecs, so + * options being non-empty at return is a perfectly normal behavior. + * + * @todo Let the user decide somehow what information is needed so that + * we do not waste time getting stuff the user does not need. + *) +function avformat_find_stream_info(ic: PAVFormatContext; options: PPAVDictionary): cint; + cdecl; external av__format; + +(** + * Find the programs which belong to a given stream. + * + * @param ic media file handle + * @param last the last found program, the search will start after this + * program, or from the beginning if it is NULL + * @param s stream index + * @return the next program which belongs to s, NULL if no program is found or + * the last program is not among the programs of ic. + *) +function av_find_program_from_stream(ic: PAVFormatContext; last: PAVProgram; s: cint): PAVProgram; + cdecl; external av__format; + +procedure av_program_add_stream_index(ac: PAVFormatContext; progid: cint; idx: cuint); + cdecl; external av__format; + +(** + * Find the "best" stream in the file. + * The best stream is determined according to various heuristics as the most + * likely to be what the user expects. + * If the decoder parameter is non-NULL, av_find_best_stream will find the + * default decoder for the stream's codec; streams for which no decoder can + * be found are ignored. + * + * @param ic media file handle + * @param type stream type: video, audio, subtitles, etc. + * @param wanted_stream_nb user-requested stream number, + * or -1 for automatic selection + * @param related_stream try to find a stream related (eg. in the same + * program) to this one, or -1 if none + * @param decoder_ret if non-NULL, returns the decoder for the + * selected stream + * @param flags flags; none are currently defined + * @return the non-negative stream number in case of success, + * AVERROR_STREAM_NOT_FOUND if no stream with the requested type + * could be found, + * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder + * @note If av_find_best_stream returns successfully and decoder_ret is not + * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. + *) +function av_find_best_stream(ic: PAVFormatContext; + type_: TAVMediaType; + wanted_stream_nb: cint; + related_stream: cint; + decoder_ret: PPAVCodec; + flags: cint): cint; + cdecl; external av__format; + +(** + * Return the next frame of a stream. + * This function returns what is stored in the file, and does not validate + * that what is there are valid frames for the decoder. It will split what is + * stored in the file into frames and return one for each call. It will not + * omit invalid data between valid frames so as to give the decoder the maximum + * information possible for decoding. + * + * If pkt->buf is NULL, then the packet is valid until the next + * av_read_frame() or until avformat_close_input(). Otherwise the packet + * is valid indefinitely. In both cases the packet must be freed with + * av_packet_unref when it is no longer needed. For video, the packet contains + * exactly one frame. For audio, it contains an integer number of frames if each + * frame has a known fixed size (e.g. PCM or ADPCM data). If the audio frames + * have a variable size (e.g. MPEG audio), then it contains one frame. + * + * pkt->pts, pkt->dts and pkt->duration are always set to correct + * values in AVStream.time_base units (and guessed if the format cannot + * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format + * has B-frames, so it is better to rely on pkt->dts if you do not + * decompress the payload. + * + * @return 0 if OK, < 0 on error or end of file + *) +function av_read_frame(s: PAVFormatContext; var pkt: TAVPacket): cint; + cdecl; external av__format; + +(** + * Seek to the keyframe at timestamp. + * 'timestamp' in 'stream_index'. + * + * @param s media file handle + * @param stream_index If stream_index is (-1), a default + * stream is selected, and timestamp is automatically converted + * from AV_TIME_BASE units to the stream specific time_base. + * @param timestamp Timestamp in AVStream.time_base units + * or, if no stream is specified, in AV_TIME_BASE units. + * @param flags flags which select direction and seeking mode + * @return >= 0 on success + *) +function av_seek_frame(s: PAVFormatContext; stream_index: cint; timestamp: cint64; + flags: cint): cint; + cdecl; external av__format; + + +(** + * Seek to timestamp ts. + * Seeking will be done so that the point from which all active streams + * can be presented successfully will be closest to ts and within min/max_ts. + * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. + * + * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and + * are the file position (this may not be supported by all demuxers). + * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames + * in the stream with stream_index (this may not be supported by all demuxers). + * Otherwise all timestamps are in units of the stream selected by stream_index + * or if stream_index is -1, in AV_TIME_BASE units. + * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as + * keyframes (this may not be supported by all demuxers). + * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. + * + * @param s media file handle + * @param stream_index index of the stream which is used as time base reference + * @param min_ts smallest acceptable timestamp + * @param ts target timestamp + * @param max_ts largest acceptable timestamp + * @param flags flags + * @return >=0 on success, error code otherwise + * + * @note This is part of the new seek API which is still under construction. + * Thus do not use this yet. It may change at any time, do not expect + * ABI compatibility yet! + *) +function avformat_seek_file(s: PAVFormatContext; stream_index: cint; min_ts, ts, max_ts: cint64; flags: cint): cint; + cdecl; external av__format; + +(** + * Discard all internally buffered data. This can be useful when dealing with + * discontinuities in the byte stream. Generally works only with formats that + * can resync. This includes headerless formats like MPEG-TS/TS but should also + * work with NUT, Ogg and in a limited way AVI for example. + * + * The set of streams, the detected duration, stream parameters and codecs do + * not change when calling this function. If you want a complete reset, it's + * better to open a new AVFormatContext. + * + * This does not flush the AVIOContext (s->pb). If necessary, call + * avio_flush(s->pb) before calling this function. + * + * @param s media file handle + * @return >=0 on success, error code otherwise + *) +function avformat_flush(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Start playing a network-based stream (e.g. RTSP stream) at the + * current position. + *) +function av_read_play(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Pause a network-based stream (e.g. RTSP stream). + * + * Use av_read_play() to resume it. + *) +function av_read_pause(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Close an opened input AVFormatContext. Free it and all its contents + * and set *s to NULL. + *) +procedure avformat_close_input(s: PPAVFormatContext); + cdecl; external av__format; +(** + * @} + *) + +const + AVSEEK_FLAG_BACKWARD = 1; ///< seek backward + AVSEEK_FLAG_BYTE = 2; ///< seeking based on position in bytes + AVSEEK_FLAG_ANY = 4; ///< seek to any frame, even non-keyframes + AVSEEK_FLAG_FRAME = 8; + +(** + * @addtogroup lavf_encoding + * @{ + *) +(** + * Allocate the stream private data and write the stream header to + * an output media file. + * + * @param s Media file handle, must be allocated with avformat_alloc_context(). + * Its oformat field must be set to the desired output format; + * Its pb field must be set to an already opened AVIOContext. + * @param options An AVDictionary filled with AVFormatContext and muxer-private options. + * On return this parameter will be destroyed and replaced with a dict containing + * options that were not found. May be NULL. + * + * @return 0 on success, negative AVERROR on failure. + * + * @see av_opt_find, av_dict_set, avio_open, av_oformat_next. + *) +function avformat_write_header(s: PAVFormatContext; options: {PPAVDictionary} pointer): cint; + cdecl; external av__format; + +(** + * Write a packet to an output media file. + * + * This function passes the packet directly to the muxer, without any buffering + * or reordering. The caller is responsible for correctly interleaving the + * packets if the format requires it. Callers that want libavformat to handle + * the interleaving should call av_interleaved_write_frame() instead of this + * function. + * + * @param s media file handle + * @param pkt The packet containing the data to be written. Note that unlike + * av_interleaved_write_frame(), this function does not take + * ownership of the packet passed to it (though some muxers may make + * an internal reference to the input packet). + * <br> + * This parameter can be NULL (at any time, not just at the end), in + * order to immediately flush data buffered within the muxer, for + * muxers that buffer up data internally before writing it to the + * output. + * <br> + * Packet's @ref AVPacket.stream_index "stream_index" field must be + * set to the index of the corresponding stream in @ref + * AVFormatContext.streams "s->streams". + * <br> + * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") + * must be set to correct values in the stream's timebase (unless the + * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then + * they can be set to AV_NOPTS_VALUE). + * The dts for subsequent packets passed to this function must be strictly + * increasing when compared in their respective timebases (unless the + * output format is flagged with the AVFMT_TS_NONSTRICT, then they + * merely have to be nondecreasing). @ref AVPacket.duration + * "duration") should also be set if known. + * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush + * + * @see av_interleaved_write_frame() + *) +function av_write_frame(s: PAVFormatContext; pkt: PAVPacket): cint; + cdecl; external av__format; + +(** + * Write a packet to an output media file ensuring correct interleaving. + * + * This function will buffer the packets internally as needed to make sure the + * packets in the output file are properly interleaved in the order of + * increasing dts. Callers doing their own interleaving should call + * av_write_frame() instead of this function. + * + * Using this function instead of av_write_frame() can give muxers advance + * knowledge of future packets, improving e.g. the behaviour of the mp4 + * muxer for VFR content in fragmenting mode. + * + * @param s media file handle + * @param pkt The packet containing the data to be written. + * <br> + * If the packet is reference-counted, this function will take + * ownership of this reference and unreference it later when it sees + * fit. + * The caller must not access the data through this reference after + * this function returns. If the packet is not reference-counted, + * libavformat will make a copy. + * <br> + * This parameter can be NULL (at any time, not just at the end), to + * flush the interleaving queues. + * <br> + * Packet's @ref AVPacket.stream_index "stream_index" field must be + * set to the index of the corresponding stream in @ref + * AVFormatContext.streams "s->streams". + * <br> + * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") + * must be set to correct values in the stream's timebase (unless the + * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then + * they can be set to AV_NOPTS_VALUE). + * The dts for subsequent packets in one stream must be strictly + * increasing (unless the output format is flagged with the + * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). + * @ref AVPacket.duration "duration") should also be set if known. + * + * @return 0 on success, a negative AVERROR on error. Libavformat will always + * take care of freeing the packet, even if this function fails. + * + * @see av_write_frame(), AVFormatContext.max_interleave_delta + *) +function av_interleaved_write_frame(s: PAVFormatContext; var pkt: TAVPacket): cint; + cdecl; external av__format; + +(** + * Write an uncoded frame to an output media file. + * + * The frame must be correctly interleaved according to the container + * specification; if not, then av_interleaved_write_frame() must be used. + * + * See av_interleaved_write_frame() for details. + *) +function av_write_uncoded_frame(s: PAVFormatContext; stream_index: cint; + frame: PAVFrame): cint; + cdecl; external av__format; + +(** + * Write an uncoded frame to an output media file. + * + * If the muxer supports it, this function makes it possible to write an AVFrame + * structure directly, without encoding it into a packet. + * It is mostly useful for devices and similar special muxers that use raw + * video or PCM data and will not serialize it into a byte stream. + * + * To test whether it is possible to use it with a given muxer and stream, + * use av_write_uncoded_frame_query(). + * + * The caller gives up ownership of the frame and must not access it + * afterwards. + * + * @return >=0 for success, a negative code on error + *) +function av_interleaved_write_uncoded_frame(s: PAVFormatContext; stream_index: cint; + frame: PAVFrame): cint; + cdecl; external av__format; + + +(** + * Test whether a muxer supports uncoded frame. + * + * @return >=0 if an uncoded frame can be written to that muxer and stream, + * <0 if not + *) +function av_write_uncoded_frame_query(s: PAVFormatContext; stream_index: cint): cint; + cdecl; external av__format; + +(** + * Write the stream trailer to an output media file and free the + * file private data. + * + * May only be called after a successful call to avformat_write_header. + * + * @param s media file handle + * @return 0 if OK, AVERROR_xxx on error + *) +function av_write_trailer(s: pAVFormatContext): cint; + cdecl; external av__format; + +(** + * Return the output format in the list of registered output formats + * which best matches the provided parameters, or return NULL if + * there is no match. + * + * @param short_name if non-NULL checks if short_name matches with the + * names of the registered formats + * @param filename if non-NULL checks if filename terminates with the + * extensions of the registered formats + * @param mime_type if non-NULL checks if mime_type matches with the + * MIME type of the registered formats + *) +function av_guess_format(short_name: PAnsiChar; + filename: PAnsiChar; + mime_type: PAnsiChar): PAVOutputFormat; + cdecl; external av__format; + +(** + * Guess the codec ID based upon muxer and filename. + *) +function av_guess_codec(fmt: PAVOutputFormat; short_name: PAnsiChar; + filename: PAnsiChar; mime_type: PAnsiChar; + type_: TCodecType): TAVCodecID; + cdecl; external av__format; + +(** + * Get timing information for the data currently output. + * The exact meaning of "currently output" depends on the format. + * It is mostly relevant for devices that have an internal buffer and/or + * work in real time. + * @param s media file handle + * @param stream stream in the media file + * @param[out] dts DTS of the last packet output for the stream, in stream + * time_base units + * @param[out] wall absolute time when that packet whas output, + * in microsecond + * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it + * Note: some formats or devices may not allow to measure dts and wall + * atomically. + *) +function av_get_output_timestamp(s: PAVFormatContext; stream: cint; + dts: Pcint64; wall: Pcint64): cint; + cdecl; external av__format; + + +(** + * @} + *) + + +(** + * @defgroup lavf_misc Utility functions + * @ingroup libavf + * @ + * + * Miscellaneous utility functions related to both muxing and demuxing + * (or neither). + *) + +(** + * Send a nice hexadecimal dump of a buffer to the specified file stream. + * + * @param f The file stream pointer where the dump should be sent to. + * @param buf buffer + * @param size buffer size + * + * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 + *) +procedure av_hex_dump(f: PAVFile; buf: {const} PByteArray; size: cint); {<-?FILE} + cdecl; external av__format; + +(** + * Send a nice hexadecimal dump of a buffer to the log. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message, lower values signifying + * higher importance. + * @param buf buffer + * @param size buffer size + * + * @see av_hex_dump, av_pkt_dump, av_pkt_dump_log + *) +procedure av_hex_dump_log(avcl: Pointer; level: cint; buf: {const} PByteArray; size: cint); + cdecl; external av__format; + +(** + * Send a nice dump of a packet to the specified file stream. + * + * @param f The file stream pointer where the dump should be sent to. + * @param pkt packet to dump + * @param dump_payload True if the payload must be displayed, too. + * @param st AVStream that the packet belongs to + *) +procedure av_pkt_dump2(f: PAVFile; pkt: {const} PAVPacket; dump_payload: cint; st: {const} PAVStream); + cdecl; external av__format; + +(** + * Send a nice dump of a packet to the log. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message, lower values signifying + * higher importance. + * @param pkt packet to dump + * @param dump_payload True if the payload must be displayed, too. + * @param st AVStream that the packet belongs to + *) +procedure av_pkt_dump_log2(avcl: pointer; level: cint; pkt: {const} PAVPacket; dump_payload: cint; + st: {const} PAVStream); + cdecl; external av__format; + +(** + * Get the AVCodecID for the given codec tag tag. + * If no codec id is found returns AV_CODEC_ID_NONE. + * + * @param tags list of supported codec_id-codec_tag pairs, as stored + * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag + * @param tag codec tag to match to a codec ID + *) +function av_codec_get_id(var tags: PAVCodecTag; tag: cuint): TAVCodecID; + cdecl; external av__format; + +(** + * Getsthe codec tag for the given codec id id. + * If no codec tag is found returns 0. + * + * @param tags list of supported codec_id-codec_tag pairs, as stored + * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag + * @param id codec ID to match to a codec tag + *) +function av_codec_get_tag(var tags: PAVCodecTag; id: TAVCodecID): cuint; + cdecl; external av__format; + +(** + * Get the codec tag for the given codec id. + * + * @param tags list of supported codec_id - codec_tag pairs, as stored + * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag + * @param id codec id that should be searched for in the list + * @param tag A pointer to the found tag + * @return 0 if id was not found in tags, > 0 if it was found + *) +function av_codec_get_tag2(var tags: PAVCodecTag; id: TAVCodecID; + tag: Pcuint): cint; + cdecl; external av__format; + +function av_find_default_stream_index(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Get the index for a specific timestamp. + * + * @param st stream that the timestamp belongs to + * @param timestamp timestamp to retrieve the index for + * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond + * to the timestamp which is <= the requested one, if backward + * is 0, then it will be >= + * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise + * @return < 0 if no such timestamp could be found + *) +function av_index_search_timestamp(st: PAVStream; timestamp: cint64; flags: cint): cint; + cdecl; external av__format; + +(** + * Add an index entry into a sorted list. Update the entry if the list + * already contains it. + * + * @param timestamp timestamp in the timebase of the given stream + *) +function av_add_index_entry(st: PAVStream; pos: cint64; timestamp: cint64; + size: cint; distance: cint; flags: cint): cint; + cdecl; external av__format; + +(** + * Split a URL string into components. + * + * The pointers to buffers for storing individual components may be null, + * in order to ignore that component. Buffers for components not found are + * set to empty strings. If the port is not found, it is set to a negative + * value. + * + * @param proto the buffer for the protocol + * @param proto_size the size of the proto buffer + * @param authorization the buffer for the authorization + * @param authorization_size the size of the authorization buffer + * @param hostname the buffer for the host name + * @param hostname_size the size of the hostname buffer + * @param port_ptr a pointer to store the port number in + * @param path the buffer for the path + * @param path_size the size of the path buffer + * @param url the URL to split + *) +procedure av_url_split(proto: PAnsiChar; proto_size: cint; + authorization: PAnsiChar; authorization_size: cint; + hostname: PAnsiChar; hostname_size: cint; + port_ptr: Pcint; + path: PAnsiChar; path_size: cint; + url: {const} PAnsiChar); + cdecl; external av__format; + +(** + * Print detailed information about the input or output format, such as + * duration, bitrate, streams, container, programs, metadata, side data, + * codec and time base. + * + * @param ic the context to analyze + * @param index index of the stream to dump information about + * @param url the URL to print, such as source or destination file + * @param is_output Select whether the specified context is an input(0) or output(1) + *) +procedure av_dump_format(ic: PAVFormatContext; + index: cint; + url: {const} PAnsiChar; + is_output: cint); + cdecl; external av__format; + +(** + * Return in 'buf' the path with '%d' replaced by a number. + * + * Also handles the '%0nd' format where 'n' is the total number + * of digits and '%%'. + * + * @param buf destination buffer + * @param buf_size destination buffer size + * @param path numbered sequence string + * @param number frame number + * @return 0 if OK, -1 on format error + *) +function av_get_frame_filename(buf: PAnsiChar; buf_size: cint; + path: {const} PAnsiChar; number: cint): cint; + cdecl; external av__format; + +(** + * Check whether filename actually is a numbered sequence generator. + * + * @param filename possible numbered sequence string + * @return 1 if a valid numbered sequence string, 0 otherwise + *) +function av_filename_number_test(filename: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Generate an SDP for an RTP session. + * + * Note, this overwrites the id values of AVStreams in the muxer contexts + * for getting unique dynamic payload types. + * + * @param ac array of AVFormatContexts describing the RTP streams. If the + * array is composed by only one context, such context can contain + * multiple AVStreams (one AVStream per RTP stream). Otherwise, + * all the contexts in the array (an AVCodecContext per RTP stream) + * must contain only one AVStream. + * @param n_files number of AVCodecContexts contained in ac + * @param buf buffer where the SDP will be stored (must be allocated by + * the caller) + * @param size the size of the buffer + * @return 0 if OK, AVERROR_xxx on error + *) +function av_sdp_create(ac: pointer; n_files: cint; buf: PAnsiChar; size: cint): cint; + cdecl; external av__format; + +(** + * Return a positive value if the given filename has one of the given + * extensions, 0 otherwise. + * + * @param filename file name to check against the given extensions + * @param extensions a comma-separated list of filename extensions + *) +function av_match_ext(filename: {const} Pchar; extensions: {const} Pchar): cint; + cdecl; external av__format; + +(** + * Test if the given container can store a codec. + * + * @param ofmt container to check for compatibility + * @param codec_id codec to potentially store in container + * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* + * + * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. + * A negative number if this information is not available. + *) +function avformat_query_codec(ofmt: {const} PAVOutputFormat; codec_id: TAVCodecID; + std_compliance: cint): cint; + cdecl; external av__format; + +(** + * @defgroup riff_fourcc RIFF FourCCs + * @ + * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. The tables are + * meant to be passed to av_codec_get_id()/av_codec_get_tag() as in the + * following code: + * @code + * uint32_t tag = MKTAG('H', '2', '6', '4'); + * const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 }; + * enum AVCodecID id = av_codec_get_id(table, tag); + * @endcode + *) +(** + * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. + *) +function avformat_get_riff_video_tags(): {const} PAVCodecTag; + cdecl; external av__format; +(** + * @return the table mapping RIFF FourCCs for audio to AVCodecID. + *) +function avformat_get_riff_audio_tags(): {const} PAVCodecTag; + cdecl; external av__format; + +(** + * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID. + *) +function avformat_get_mov_video_tags(): {const} PAVCodecTag; + cdecl; external av__format; + +(** + * @return the table mapping MOV FourCCs for audio to AVCodecID. + *) +function avformat_get_mov_audio_tags(): {const} PAVCodecTag; + cdecl; external av__format; + +(** + * Guess the sample aspect ratio of a frame, based on both the stream and the + * frame aspect ratio. + * + * Since the frame aspect ratio is set by the codec but the stream aspect ratio + * is set by the demuxer, these two may not be equal. This function tries to + * return the value that you should use if you would like to display the frame. + * + * Basic logic is to use the stream aspect ratio if it is set to something sane + * otherwise use the frame aspect ratio. This way a container setting, which is + * usually easy to modify can override the coded value in the frames. + * + * @param format the format context which the stream is part of + * @param stream the stream which the frame is part of + * @param frame the frame with the aspect ratio to be determined + * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea + *) +function av_guess_sample_aspect_ratio(format: PAVFormatContext; stream: PAVStream; frame: PAVFrame): TAVRational; + cdecl; external av__format; + +(** + * Guess the frame rate, based on both the container and codec information. + * + * @param ctx the format context which the stream is part of + * @param stream the stream which the frame is part of + * @param frame the frame for which the frame rate should be determined, may be NULL + * @return the guessed (valid) frame rate, 0/1 if no idea + *) +function av_guess_frame_rate(ctx: PAVFormatContext; stream: PAVStream; frame: PAVFrame): TAVRational; + cdecl; external av__format; + +(** + * Check if the stream st contained in s is matched by the stream specifier + * spec. + * + * See the "stream specifiers" chapter in the documentation for the syntax + * of spec. + * + * @return >0 if st is matched by spec; + * 0 if st is not matched by spec; + * AVERROR code if spec is invalid + * + * @note A stream specifier can match several streams in the format. + *) +function avformat_match_stream_specifier(s: PAVFormatContext; st: PAVStream; + spec: PAnsiChar): cint; + cdecl; external av__format; + +function avformat_queue_attached_pictures(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Apply a list of bitstream filters to a packet. + * + * @param codec AVCodecContext, usually from an AVStream + * @param pkt the packet to apply filters to. If, on success, the returned + * packet has size == 0 and side_data_elems == 0, it indicates that + * the packet should be dropped + * @param pkt the packet to apply filters to + * @param bsfc a NULL-terminated list of filters to apply + * @return >=0 on success; + * AVERROR code on failure + *) +{$IFDEF FF_API_OLD_BSF} +function av_apply_bitstream_filters(codec: PAVCodecContext; pkt: PAVPacket; + bsfc: PAVBitStreamFilterContext): cint; + cdecl; external av__format; deprecated; +{$ENDIF} +implementation + +end. diff --git a/src/lib/ffmpeg-3.1/avio.pas b/src/lib/ffmpeg-3.1/avio.pas new file mode 100644 index 00000000..023429e0 --- /dev/null +++ b/src/lib/ffmpeg-3.1/avio.pas @@ -0,0 +1,928 @@ +(* + * copyright (c) 2001 Fabrice Bellard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavformat/avio.h + * unbuffered I/O operations + * @warning This file has to be considered an internal but installed + * header, so it should not be directly included in your projects. + * + * update to + * avformat version: 56.4.101 + *) + +unit avio; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} + +interface + +uses + ctypes, + {$IFDEF UNIX} + BaseUnix, // for SEEK_CUR + {$ENDIF} + avcodec, + avutil, + SysUtils, + UConfig; + +(** + * Those FF_API_* defines are not part of public API. + * They may change, break or disappear at any time. + *) +const + FF_API_URL_CLASS = (LIBAVFORMAT_VERSION_MAJOR >= 53); + +const + AVIO_SEEKABLE_NORMAL = 0001; (**< Seeking works like for a local file *) + +type + TReadWriteFunc = function(opaque: Pointer; buf: PByteArray; buf_size: cint): cint; cdecl; + TSeekFunc = function(opaque: Pointer; offset: cint64; whence: cint): cint64; cdecl; + Tcallback = function(p: pointer): cint; cdecl; + +type +(** + * Callback for checking whether to abort blocking functions. + * AVERROR_EXIT is returned in this case by the interrupted + * function. During blocking operations, callback is called with + * opaque as parameter. If the callback returns 1, the + * blocking operation will be aborted. + * + * No members can be added to this struct without a major bump, if + * new elements have been added after this struct in AVFormatContext + * or AVIOContext. + *) + PAVIOInterruptCB = ^TAVIOInterruptCB; + TAVIOInterruptCB = record + callback: Tcallback; + opaque: pointer; + end; (*TAVIOInterruptCB*) + + (** + * Directory entry types. + *) + TAVIODirEntryType = ( + AVIO_ENTRY_UNKNOWN, + AVIO_ENTRY_BLOCK_DEVICE, + AVIO_ENTRY_CHARACTER_DEVICE, + AVIO_ENTRY_DIRECTORY, + AVIO_ENTRY_NAMED_PIPE, + AVIO_ENTRY_SYMBOLIC_LINK, + AVIO_ENTRY_SOCKET, + AVIO_ENTRY_FILE, + AVIO_ENTRY_SERVER, + AVIO_ENTRY_SHARE, + AVIO_ENTRY_WORKGROUP + ); + + TAVIODataMarkerType = ( + (** + * Header data; this needs to be present for the stream to be decodeable. + *) + AVIO_DATA_MARKER_HEADER, + (** + * A point in the output bytestream where a decoder can start decoding + * (i.e. a keyframe). A demuxer/decoder given the data flagged with + * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, + * should give decodeable results. + *) + AVIO_DATA_MARKER_SYNC_POINT, + (** + * A point in the output bytestream where a demuxer can start parsing + * (for non self synchronizing bytestream formats). That is, any + * non-keyframe packet start point. + *) + AVIO_DATA_MARKER_BOUNDARY_POINT, + (** + * This is any, unlabelled data. It can either be a muxer not marking + * any positions at all, it can be an actual boundary/sync point + * that the muxer chooses not to mark, or a later part of a packet/fragment + * that is cut into multiple write callbacks due to limited IO buffer size. + *) + AVIO_DATA_MARKER_UNKNOWN, + (** + * Trailer data, which doesn't contain actual content, but only for + * finalizing the output file. + *) + AVIO_DATA_MARKER_TRAILER + ); + + (** + * Describes single entry of the directory. + * + * Only name and type fields are guaranteed be set. + * Rest of fields are protocol or/and platform dependent and might be unknown. + *) + PPAVIODirEntry = ^PAVIODirEntry; + PAVIODirEntry = ^TAVIODirEntry; + TAVIODirEntry = record + name: PAnsiChar; (**< Filename *) + type_: cint; (**< Type of the entry *) + utf8: cint; (**< Set to 1 when name is encoded with UTF-8, 0 otherwise. + Name can be encoded with UTF-8 even though 0 is set. *) + size: cint64; (**< File size in bytes, -1 if unknown. *) + modification_timestamp: cint64; (**< Time of last modification in microseconds since unix + epoch, -1 if unknown. *) + access_timestamp: cint64; (**< Time of last access in microseconds since unix epoch, + -1 if unknown. *) + status_change_timestamp: cint64; (**< Time of last status change in microseconds since unix + epoch, -1 if unknown. *) + user_id: cint64; (**< User ID of owner, -1 if unknown. *) + group_id: cint64; (**< Group ID of owner, -1 if unknown. *) + filemode: cint64; (**< Unix file mode, -1 if unknown. *) + end; + + PPAVIODirContext = ^PAVIODirContext; + PAVIODirContext = ^TAVIODirContext; + TAVIODirContext = record + url_context: pointer; + (** struct URLContext *url_context; *) + end; + +(** + * Bytestream IO Context. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVIOContext) must not be used outside libav*. + * + * @note None of the function pointers in AVIOContext should be called + * directly, they should only be set by the client application + * when implementing custom I/O. Normally these are set to the + * function pointers specified in avio_alloc_context() + *) + PPAVIOContext = ^PAVIOContext; + PAVIOContext = ^TAVIOContext; + TAVIOContext = record + (** + * A class for private options. + * + * If this AVIOContext is created by avio_open2(), av_class is set and + * passes the options down to protocols. + * + * If this AVIOContext is manually allocated, then av_class may be set by + * the caller. + * + * warning -- this field can be NULL, be sure to not pass this AVIOContext + * to any av_opt_* functions in that case. + *) + av_class: {const} PAVClass; + + (* + * The following shows the relationship between buffer, buf_ptr, buf_end, buf_size, + * and pos, when reading and when writing (since AVIOContext is used for both): + * + ********************************************************************************** + * READING + ********************************************************************************** + * + * | buffer_size | + * |---------------------------------------| + * | | + * + * buffer buf_ptr buf_end + * +---------------+-----------------------+ + * |/ / / / / / / /|/ / / / / / /| | + * read buffer: |/ / consumed / | to be read /| | + * |/ / / / / / / /|/ / / / / / /| | + * +---------------+-----------------------+ + * + * pos + * +-------------------------------------------+-----------------+ + * input file: | | | + * +-------------------------------------------+-----------------+ + * + * + ********************************************************************************** + * WRITING + ********************************************************************************** + * + * | buffer_size | + * |-------------------------------| + * | | + * + * buffer buf_ptr buf_end + * +-------------------+-----------+ + * |/ / / / / / / / / /| | + * write buffer: | / to be flushed / | | + * |/ / / / / / / / / /| | + * +-------------------+-----------+ + * + * pos + * +--------------------------+-----------------------------------+ + * output file: | | | + * +--------------------------+-----------------------------------+ + * + *) + + buffer: PByteArray; (**< Start of the buffer. *) + buffer_size: cint; (**< Maximum buffer size *) + buf_ptr: PByteArray; (**< Current position in the buffer *) + buf_end: PByteArray; (**< End of the data, may be less than + buffer+buffer_size if the read function returned + less data than requested, e.g. for streams where + no more data has been received yet. *) + opaque: pointer; (**< A private pointer, passed to the read/write/seek/... + functions. *) + read_packet: TReadWriteFunc; + write_packet: TReadWriteFunc; + seek: TSeekFunc; + pos: cint64; (**< position in the file of the current buffer *) + must_flush: cint; (**< true if the next seek should flush *) + eof_reached: cint; (**< true if eof reached *) + write_flag: cint; (**< true if open for writing *) + max_packet_size: cint; + checksum: culong; + checksum_ptr: PByteArray; + update_checksum: function (checksum: culong; buf: {const} PAnsiChar; size: cuint): culong; cdecl; + error: cint; (**< contains the error code or 0 if no error happened *) + (** + * Pause or resume playback for network streaming protocols - e.g. MMS. + *) + read_pause: function(opaque: Pointer; pause: cint): cint; cdecl; + (** + * Seek to a given timestamp in stream with the specified stream_index. + * Needed for some network streaming protocols which don't support seeking + * to byte position. + *) + read_seek: function(opaque: Pointer; stream_index: cint; + timestamp: cint64; flags: cint): cint64; cdecl; + (** + * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. + *) + seekable: cint; + + (** + * max filesize, used to limit allocations + * This field is internal to libavformat and access from outside is not allowed. + *) + maxsize: cint64; + + (** + * avio_read and avio_write should if possible be satisfied directly + * instead of going through a buffer, and avio_seek will always + * call the underlying seek function directly. + *) + direct: cint; + + (** + * Bytes read statistic + * This field is internal to libavformat and access from outside is not allowed. + *) + bytes_read: cint64; + + (** + * seek statistic + * This field is internal to libavformat and access from outside is not allowed. + *) + seek_count: cint; + + (** + * writeout statistic + * This field is internal to libavformat and access from outside is not allowed. + *) + writeout_count: cint; + + (** + * Original buffer size + * used internally after probing and ensure seekback to reset the buffer size + * This field is internal to libavformat and access from outside is not allowed. + *) + orig_buffer_size: cint; + + (** + * Threshold to favor readahead over seek. + * This is current internal only, do not use from outside. + *) + short_seek_threshold: cint; + + (** + * ',' separated list of allowed protocols. + *) + protocol_whitelist: {const} PAnsiChar; + + (** + * A callback that is used instead of write_packet. + *) + write_data_type: function(opaque: pointer; buf: Pcuint8; buf_size: cint; + type_: TAVIODataMarkerType; time: cint64): cint; cdecl; + (** + * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, + * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly + * small chunks of data returned from the callback). + *) + ignore_boundary_point: cint; + + (** + * Internal, not meant to be used from outside of AVIOContext. + *) + current_type: TAVIODataMarkerType; + last_time: cint64; + end; {AVIOContext} + +(* unbuffered I/O *) + +(** + * Return the name of the protocol that will handle the passed URL. + * + * NULL is returned if no protocol could be found for the given URL. + * + * @return Name of the protocol or NULL. + *) +function avio_find_protocol_name(url: {const} PAnsiChar): {const} PAnsiChar; + cdecl; external av__format; + +(** + * Return AVIO_* access flags corresponding to the access permissions + * of the resource in url, or a negative value corresponding to an + * AVERROR code in case of failure. The returned access flags are + * masked by the value in flags. + * + * @note This function is intrinsically unsafe, in the sense that the + * checked resource may change its existence or permission status from + * one call to another. Thus you should not trust the returned value, + * unless you are sure that no other processes are accessing the + * checked resource. + *) +function avio_check(url: {const} PAnsiChar; flags: cint): cint; + cdecl; external av__format; + +(** + * Move or rename a resource. + * + * @note url_src and url_dst should share the same protocol and authority. + * + * @param url_src url to resource to be moved + * @param url_dst new url to resource if the operation succeeded + * @return >=0 on success or negative on error. + *) +function avpriv_io_move(url_src: {const} PAnsiChar; url_dst: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Delete a resource. + * + * @param url resource to be deleted. + * @return >=0 on success or negative on error. + *) +function avpriv_io_delete(url: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Open directory for reading. + * + * @param s directory read context. Pointer to a NULL pointer must be passed. + * @param url directory to be listed. + * @param options A dictionary filled with protocol-private options. On return + * this parameter will be destroyed and replaced with a dictionary + * containing options that were not found. May be NULL. + * @return >=0 on success or negative on error. + *) +function avio_open_dir(s: PPAVIODirContext; url: {const} PAnsiChar; options: PPAVDictionary): cint; + cdecl; external av__format; + +(** + * Get next directory entry. + * + * Returned entry must be freed with avio_free_directory_entry(). In particular + * it may outlive AVIODirContext. + * + * @param s directory read context. + * @param[out] next next entry or NULL when no more entries. + * @return >=0 on success or negative on error. End of list is not considered an + * error. + *) +function avio_read_dir(s: PAVIODirContext; next: PPAVIODirEntry): cint; + cdecl; external av__format; + +(** + * Close directory. + * + * @note Entries created using avio_read_dir() are not deleted and must be + * freeded with avio_free_directory_entry(). + * + * @param s directory read context. + * @return >=0 on success or negative on error. + *) +function avio_close_dir(s: PPAVIODirContext): cint; + cdecl; external av__format; + +(** + * Free entry allocated by avio_read_dir(). + * + * @param entry entry to be freed. + *) +procedure avio_free_directory_entry(entry: PPAVIODirEntry); + cdecl; external av__format; + +(** + * Allocate and initialize an AVIOContext for buffered I/O. It must be later + * freed with av_free(). + * + * @param buffer Memory block for input/output operations via AVIOContext. + * The buffer must be allocated with av_malloc() and friends. + * It may be freed and replaced with a new buffer by libavformat. + * AVIOContext.buffer holds the buffer currently in use, + * which must be later freed with av_free(). + * @param buffer_size The buffer size is very important for performance. + * For protocols with fixed blocksize it should be set to this blocksize. + * For others a typical size is a cache page, e.g. 4kb. + * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. + * @param opaque An opaque pointer to user-specific data. + * @param read_packet A function for refilling the buffer, may be NULL. + * @param write_packet A function for writing the buffer contents, may be NULL. + * The function may not change the input buffers content. + * @param seek A function for seeking to specified byte position, may be NULL. + * + * @return Allocated AVIOContext or NULL on failure. + *) +function avio_alloc_context( + buffer: PAnsiChar; + buffer_size: cint; + write_flag: cint; + opaque: Pointer; + read_packet: TReadWriteFunc; + write_packet: TReadWriteFunc; + seek: TSeekFunc): PAVIOContext; + cdecl; external av__format; + +procedure avio_w8(s: PAVIOContext; b: cint); + cdecl; external av__format; +procedure avio_write(s: PAVIOContext; buf: {const} PAnsiChar; size: cint); + cdecl; external av__format; +procedure avio_wl64(s: PAVIOContext; val: cuint64); + cdecl; external av__format; +procedure avio_wb64(s: PAVIOContext; val: cuint64); + cdecl; external av__format; +procedure avio_wl32(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wb32(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wl24(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wb24(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wl16(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wb16(s: PAVIOContext; val: cuint); + cdecl; external av__format; + +(** + * Write a NULL-terminated string. + * @return number of bytes written. + *) +function avio_put_str(s: PAVIOContext; str: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Convert an UTF-8 string to UTF-16LE and write it. + * @param s the AVIOContext + * @param str NULL-terminated UTF-8 string + * + * @return number of bytes written. + *) +function avio_put_str16le(s: PAVIOContext; str: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Convert an UTF-8 string to UTF-16BE and write it. + * @param s the AVIOContext + * @param str NULL-terminated UTF-8 string + * + * @return number of bytes written. + *) +function avio_put_str16be(s: PAVIOContext; str: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Mark the written bytestream as a specific type. + * + * Zero-length ranges are omitted from the output. + * + * @param time the stream time the current bytestream pos corresponds to + * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not + * applicable + * @param type the kind of data written starting at the current pos + *) +procedure avio_write_marker(s: PAVIOContext; time: cint64; type_: TAVIODataMarkerType); + cdecl; external av__format; + +const +(** + * ORing this as the "whence" parameter to a seek function causes it to + * return the filesize without seeking anywhere. Supporting this is optional. + * If it is not supported then the seek function will return <0. + *) + AVSEEK_SIZE = $10000; + +(** + * Passing this flag as into the "whence" parameter to a seek function causes it to + * seek by any means (like reopening and linear reading) or other normally unreasonable + * means that can be extremely slow. + * This may be ignored by the seek code. + *) + AVSEEK_FORCE = $20000; + +(** + * fseek() equivalent for AVIOContext. + * @return new position or AVERROR. + *) +function avio_seek(s: PAVIOContext; offset: cint64; whence: cint): cint64; + cdecl; external av__format; + +(** + * Skip given number of bytes forward + * @return new position or AVERROR. + *) +function avio_skip(s: PAVIOContext; offset: cint64): cint64; + cdecl; external av__format; + +{$IFDEF UNIX} +(** + * ftell() equivalent for AVIOContext. + * @return position or AVERROR. + *) +function avio_tell(s: PAVIOContext): cint64; {$IFDEF HasInline}inline;{$ENDIF} +{$ELSE} +{$ENDIF} + +(** + * Get the filesize. + * @return filesize or AVERROR + *) +function avio_size(s: PAVIOContext): cint64; + cdecl; external av__format; + +(** + * feof() equivalent for AVIOContext. + * @return non zero if and only if end of file + *) +function avio_feof(s: PAVIOContext): cint; + cdecl; external av__format; +{$IFDEF FF_API_URL_FEOF} +(** + * @deprecated use avio_feof() + *) +function url_feof(s: PAVIOContext): cint; + cdecl; external av__format; {attribute_deprecated} +{$ENDIF} + +(** @warning Writes up to 4 KiB per call *) +function avio_printf(s: PAVIOContext; fmt: {const} PAnsiChar; args: array of const): cint; + cdecl; external av__format; + +(** + * Force flushing of buffered data. + * + * For write streams, force the buffered data to be immediately written to the output, + * without to wait to fill the internal buffer. + * + * For read streams, discard all currently buffered data, and advance the + * reported file position to that of the underlying stream. This does not + * read new data, and does not perform any seeks. + *) +procedure avio_flush(s: PAVIOContext); + cdecl; external av__format; + +(** + * Read size bytes from AVIOContext into buf. + * @return number of bytes read or AVERROR + *) +function avio_read(s: PAVIOContext; buf: Pbyte; size: cint): cint; + cdecl; external av__format; + +(** + * @name Functions for reading from AVIOContext + * @ + * + * @note return 0 if EOF, so you cannot use it if EOF handling is + * necessary + *) +function avio_r8(s: PAVIOContext): cint; + cdecl; external av__format; + +function avio_rl16(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rl24(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rl32(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rl64(s: PAVIOContext): cuint64; + cdecl; external av__format; + +function avio_rb16(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rb24(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rb32(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rb64(s: PAVIOContext): cuint64; + cdecl; external av__format; + +(** + * @ + *) +(** + * Read a string from pb into buf. The reading will terminate when either + * a NULL character was encountered, maxlen bytes have been read, or nothing + * more can be read from pb. The result is guaranteed to be NULL-terminated, it + * will be truncated if buf is too small. + * Note that the string is not interpreted or validated in any way, it + * might get truncated in the middle of a sequence for multi-byte encodings. + * + * @return number of bytes read (is always <= maxlen). + * If reading ends on EOF or error, the return value will be one more than + * bytes actually read. + *) +function avio_get_str(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; + cdecl; external av__format; + +(** + * Read a UTF-16 string from pb and convert it to UTF-8. + * The reading will terminate when either a null or invalid character was + * encountered or maxlen bytes have been read. + * @return number of bytes read (is always <= maxlen) + *) +function avio_get_str16le(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; + cdecl; external av__format; + +function avio_get_str16be(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; + cdecl; external av__format; + +(** + * @name URL open modes + * The flags argument to avio_open must be one of the following + * constants, optionally ORed with other flags. + * @{ + *) +const + AVIO_FLAG_READ = 1; (**< read-only *) + AVIO_FLAG_WRITE = 2; (**< write-only *) + AVIO_FLAG_READ_WRITE = {(AVIO_FLAG_READ|AVIO_FLAG_WRITE)} 3; (**< read-write pseudo flag *) +(** + * @ + *) + +const +(** + * Use non-blocking mode. + * If this flag is set, operations on the context will return + * AVERROR(EAGAIN) if they can not be performed immediately. + * If this flag is not set, operations on the context will never return + * AVERROR(EAGAIN). + * Note that this flag does not affect the opening/connecting of the + * context. Connecting a protocol will always block if necessary (e.g. on + * network protocols) but never hang (e.g. on busy devices). + * Warning: non-blocking protocols is work-in-progress; this flag may be + * silently ignored. + *) + AVIO_FLAG_NONBLOCK = 8; + +(** + * Use direct mode. + * avio_read and avio_write should if possible be satisfied directly + * instead of going through a buffer, and avio_seek will always + * call the underlying seek function directly. + *) + AVIO_FLAG_DIRECT = $8000; + +(** + * Create and initialize a AVIOContext for accessing the + * resource indicated by url. + * @note When the resource indicated by url has been opened in + * read+write mode, the AVIOContext can be used only for writing. + * + * @param s Used to return the pointer to the created AVIOContext. + * In case of failure the pointed to value is set to NULL. + * @param flags flags which control how the resource indicated by url + * is to be opened + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + *) +function avio_open(s: PPAVIOContext; url: {const} PAnsiChar; flags: cint): cint; + cdecl; external av__format; + +(** + * Create and initialize a AVIOContext for accessing the + * resource indicated by url. + * @note When the resource indicated by url has been opened in + * read+write mode, the AVIOContext can be used only for writing. + * + * @param s Used to return the pointer to the created AVIOContext. + * In case of failure the pointed to value is set to NULL. + * @param flags flags which control how the resource indicated by url + * is to be opened + * @param int_cb an interrupt callback to be used at the protocols level + * @param options A dictionary filled with protocol-private options. On return + * this parameter will be destroyed and replaced with a dict containing options + * that were not found. May be NULL. + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + *) +function avio_open2(s: PPAVIOContext; {const} url: PAnsiChar; flags: cint; + {const} int_cb: PAVIOInterruptCB; options: PPAVDictionary): cint; + cdecl; external av__format; + +(** + * Close the resource accessed by the AVIOContext s and free it. + * This function can only be used if s was opened by avio_open(). + * + * The internal buffer is automatically flushed before closing the + * resource. + * + * @return 0 on success, an AVERROR < 0 on error. + * @see avio_close + *) +function avio_close(s: PAVIOContext): cint; + cdecl; external av__format; + +(** + * Close the resource accessed by the AVIOContext *s, free it + * and set the pointer pointing to it to NULL. + * This function can only be used if s was opened by avio_open(). + * + * The internal buffer is automatically flushed before closing the + * resource. + * + * @return 0 on success, an AVERROR < 0 on error. + * @see avio_close + *) +function avio_closep(s: PPAVIOContext): cint; + cdecl; external av__format; + +(** + * Open a write only memory stream. + * + * @param s new IO context + * @return zero if no error. + *) +function avio_open_dyn_buf(s: PPAVIOContext): cint; + cdecl; external av__format; + +(** + * Return the written size and a pointer to the buffer. The buffer + * must be freed with av_free(). + * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. + * + * @param s IO context + * @param pbuffer pointer to a byte buffer + * @return the length of the byte buffer + *) +function avio_close_dyn_buf(s: PAVIOContext; var pbuffer: Pcuint8): cint; + cdecl; external av__format; + +(** + * Iterate through names of available protocols. + * + * @param opaque A private pointer representing current protocol. + * It must be a pointer to NULL on first iteration and will + * be updated by successive calls to avio_enum_protocols. + * @param output If set to 1, iterate over output protocols, + * otherwise over input protocols. + * + * @return A static string containing the name of current protocol or NULL + *) +function avio_enum_protocols(var opaque: Pointer; output: cint): {const} PAnsiChar; + cdecl; external av__format; + +(** + * Pause and resume playing - only meaningful if using a network streaming + * protocol (e.g. MMS). + * @param pause 1 for pause, 0 for resume + *) +function avio_pause(h: PAVIOContext; pause: cint): cint; + cdecl; external av__format; + +(** + * Seek to a given timestamp relative to some component stream. + * Only meaningful if using a network streaming protocol (e.g. MMS.). + * @param stream_index The stream index that the timestamp is relative to. + * If stream_index is (-1) the timestamp should be in AV_TIME_BASE + * units from the beginning of the presentation. + * If a stream_index >= 0 is used and the protocol does not support + * seeking based on component streams, the call will fail with ENOTSUP. + * @param timestamp timestamp in AVStream.time_base units + * or if there is no stream specified then in AV_TIME_BASE units. + * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE + * and AVSEEK_FLAG_ANY. The protocol may silently ignore + * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will + * fail with ENOTSUP if used and not supported. + * @return >= 0 on success + * @see AVInputFormat: : read_seek + *) +function avio_seek_time(h: PAVIOContext; stream_index: cint; + timestamp: cint64; flags: cint): cint64; + cdecl; external av__format; + +(* Avoid a warning. The header can not be included because it breaks c++. *) +type + PAVBPrint = ^TAVBPrint; + TAVBPrint = record + end; + +(** + * Read contents of h into print buffer, up to max_size bytes, or up to EOF. + * + * @return 0 for success (max_size bytes read or EOF reached), negative error + * code otherwise + *) +function avio_read_to_bprint(h: PAVIOContext; pb: PAVBPrint; max_size: size_t): cint; + cdecl; external av__format; + +(** + * Accept and allocate a client context on a server context. + * @param s the server context + * @param c the client context, must be unallocated + * @return >= 0 on success or a negative value corresponding + * to an AVERROR on failure + *) +function avio_accept(s: PAVIOContext; c: PPAVIOContext): cint; + cdecl; external av__format; + +(** + * Perform one step of the protocol handshake to accept a new client. + * This function must be called on a client returned by avio_accept() before + * using it as a read/write context. + * It is separate from avio_accept() because it may block. + * A step of the handshake is defined by places where the application may + * decide to change the proceedings. + * For example, on a protocol with a request header and a reply header, each + * one can constitute a step because the application may use the parameters + * from the request to change parameters in the reply; or each individual + * chunk of the request can constitute a step. + * If the handshake is already finished, avio_handshake() does nothing and + * returns 0 immediately. + * + * @param c the client context to perform the handshake on + * @return 0 on a complete and successful handshake + * > 0 if the handshake progressed, but is not complete + * < 0 for an AVERROR code + *) +function avio_handshake(c: PAVIOContext): cint; + cdecl; external av__format; + +implementation + +(** + * For SEEK_CUR on Windows + * values taken from stdio.h of C + *) +{$IFNDEF SEEK_SET} +const + SEEK_SET = 0; +{$ENDIF} + +{$IFNDEF SEEK_CUR} +const + SEEK_CUR = 1; +{$ENDIF} + +{$IFNDEF SEEK_END} +const + SEEK_END = 2; +{$ENDIF} + +function avio_tell(s: PAVIOContext): cint64; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := avio_seek(s, 0, SEEK_CUR); +end; + + +end. diff --git a/src/lib/ffmpeg-3.1/avutil.pas b/src/lib/ffmpeg-3.1/avutil.pas new file mode 100644 index 00000000..6d256e96 --- /dev/null +++ b/src/lib/ffmpeg-3.1/avutil.pas @@ -0,0 +1,366 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libavutil/avutil.h: + * version: 54.7.100 + * + *) + +unit avutil; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) + {$MACRO ON} (* Turn macro support on *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I ff_api-defines.inc} (* FF_API_* defines *) + +{$IFDEF DARWIN} + {$linklib libavutil} +{$ENDIF} + +interface + +uses + ctypes, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + (* Max. supported version by this header *) + LIBAVUTIL_MAX_VERSION_MAJOR = 55; + LIBAVUTIL_MAX_VERSION_MINOR = 28; + LIBAVUTIL_MAX_VERSION_RELEASE = 100; + LIBAVUTIL_MAX_VERSION = (LIBAVUTIL_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVUTIL_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVUTIL_MAX_VERSION_RELEASE * VERSION_RELEASE); + + (* Min. supported version by this header *) + LIBAVUTIL_MIN_VERSION_MAJOR = 55; + LIBAVUTIL_MIN_VERSION_MINOR = 27; + LIBAVUTIL_MIN_VERSION_RELEASE = 100; + LIBAVUTIL_MIN_VERSION = (LIBAVUTIL_MIN_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVUTIL_MIN_VERSION_MINOR * VERSION_MINOR) + + (LIBAVUTIL_MIN_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBAVUTIL_VERSION < LIBAVUTIL_MIN_VERSION)} + {$MESSAGE Error 'Linked version of libavutil is too old!'} +{$IFEND} + +{$IF (LIBAVUTIL_VERSION > LIBAVUTIL_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libavutil is not yet supported!'} +{$IFEND} + +type +{$IFNDEF FPC} + // defines for Delphi + size_t = cardinal; +{$ENDIF} + Psize_t = ^size_t; + +(** + * Return the LIBAVUTIL_VERSION_INT constant. + *) +function avutil_version(): cuint; + cdecl; external av__util; + +(** + * Return an informative version string. This usually is the actual release + * version number or a git commit description. This string has no fixed format + * and can change any time. It should never be parsed by code. + *) +function av_version_info(): PAnsiChar; + cdecl; external av__util; + +(** + * Return the libavutil build-time configuration. + *) +function avutil_configuration(): PAnsiChar; + cdecl; external av__util; + +(** + * Return the libavutil license. + *) +function avutil_license(): PAnsiChar; + cdecl; external av__util; + +(** + * @addtogroup lavu_media Media Type + * @brief Media Type + *) + +type + + PAVFile = pointer; + + TAVMediaType = ( + AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA + AVMEDIA_TYPE_VIDEO, + AVMEDIA_TYPE_AUDIO, + AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous + AVMEDIA_TYPE_SUBTITLE, + AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse + AVMEDIA_TYPE_NB + ); + +(** + * Return a string describing the media_type enum, NULL if media_type + * is unknown. + *) +function av_get_media_type_string(media_type: TAVMediaType): PAnsiChar; + cdecl; external av__util; + +const + FF_LAMBDA_SHIFT = 7; + FF_LAMBDA_SCALE = (1 shl FF_LAMBDA_SHIFT); + FF_QP2LAMBDA = 118; ///< factor to convert from H.263 QP to lambda + FF_LAMBDA_MAX = (256*128-1); + + FF_QUALITY_SCALE = FF_LAMBDA_SCALE; //FIXME maybe remove + +(** + * @brief Undefined timestamp value + * + * Usually reported by demuxer that work on containers that do not provide + * either pts or dts. + *) + + AV_NOPTS_VALUE = $8000000000000000; + +(** + * Internal time base represented as integer + *) + + AV_TIME_BASE = 1000000; + +(** + * Internal time base represented as fractional value + *) + + AV_TIME_BASE_Q : TAVRational = (num: 1; den: AV_TIME_BASE); + +(** + * @} + * @} + * @defgroup lavu_picture Image related + * + * AVPicture types, pixel formats and basic image planes manipulation. + * + * @ + *) + +type + TAVPictureType = ( + AV_PICTURE_TYPE_NONE = 0, ///< Undefined + AV_PICTURE_TYPE_I, ///< Intra + AV_PICTURE_TYPE_P, ///< Predicted + AV_PICTURE_TYPE_B, ///< Bi-dir predicted + AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG-4 + AV_PICTURE_TYPE_SI, ///< Switching Intra + AV_PICTURE_TYPE_SP, ///< Switching Predicted + AV_PICTURE_TYPE_BI ///< BI type + ); + +(** + * Return a single letter to describe the given picture type + * pict_type. + * + * @param[in] pict_type the picture type @return a single character + * representing the picture type, '?' if pict_type is unknown + *) +function av_get_picture_type_char(pict_type: TAVPictureType): PAnsiChar; + cdecl; external av__util; + +(** + * Return x default pointer in case p is NULL. + *) +function av_x_if_null(p: {const} pointer; x: {const} pointer): pointer; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Compute the length of an integer list. + * + * @param elsize size in bytes of each list element (only 1, 2, 4 or 8) + * @param term list terminator (usually 0 or -1) + * @param list pointer to the list + * @return length of the list, in elements, not counting the terminator + *) +function av_int_list_length_for_size(elsize: cuint; + {const} list: pointer; term: cuint64): cuint; {av_pure} + cdecl; external av__util; + +(** + * Compute the length of an integer list. + * + * @param term list terminator (usually 0 or -1) + * @param list pointer to the list + * @return length of the list, in elements, not counting the terminator + *) +function av_int_list_length({const} list: pointer; term: cuint64): cuint; + +(** + * Open a file using a UTF-8 filename. + * The API of this function matches POSIX fopen(), errors are returned through + * errno. + *) +function av_fopen_utf8(path: {const} Pchar; mode: {const} Pchar): PAVFile; + cdecl; external av__util; + +(** + * Return the fractional representation of the internal time base. + *) +function av_get_time_base_q: TAVRational; + cdecl; external av__util; + +{$INCLUDE libavutil/cpu.pas} + +{$INCLUDE libavutil/dict.pas} + +{$INCLUDE libavutil/error.pas} + +{$INCLUDE libavutil/mathematics.pas} + +{$INCLUDE libavutil/mem.pas} + +{$INCLUDE libavutil/log.pas} + +{$INCLUDE libavutil/pixfmt.pas} + +{$INCLUDE libavutil/samplefmt.pas} + +{$INCLUDE libavutil/opt.pas} + +{$INCLUDE libavutil/buffer.pas} + +{$INCLUDE libavutil/frame.pas} + + +(* libavutil/common.h *) // until now MKTAG and MKBETAG is all from common.h KMS 19/5/2010 + +(** + * MKTAG and MKBETAG are usually used to convert a magic string to an enumeration index. + * In Pascal this can probably not be used and the functions could be removed. + * KMS 8/6/2012 + *) +function MKTAG (a, b, c, d: AnsiChar): integer; {$IFDEF HasInline}inline;{$ENDIF} +function MKBETAG(a, b, c, d: AnsiChar): integer; {$IFDEF HasInline}inline;{$ENDIF} + +implementation + +uses + SysUtils; + +function av_x_if_null(p: {const} pointer; x: {const} pointer): pointer; {$IFDEF HasInline}inline;{$ENDIF} +begin + if p = nil then + Result := x + else + Result := p; +end; + +function av_int_list_length({const} list: pointer; term: cuint64): cuint; +begin + // KMS 2013: It is not really clear whether it should be sizeof(pointer) or sizeof(cint). + // Going for the larger one (pointer) should at least prevent buffer overflows. + // So, the result is either 4 byte or 8 byte. + Result := av_int_list_length_for_size(sizeof(pointer), list, term); +end; + +(* libavutil/common.h *) + +function MKTAG(a, b, c, d: AnsiChar): integer; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := (ord(a) or (ord(b) shl 8) or (ord(c) shl 16) or (ord(d) shl 24)); +end; + +function MKBETAG(a, b, c, d: AnsiChar): integer; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := (ord(d) or (ord(c) shl 8) or (ord(b) shl 16) or (ord(a) shl 24)); +end; + +(* libavutil/error.h *) + +function av_make_error_string(errbuf: Pchar; errbuf_size: size_t; errnum: cint): Pchar; {$IFDEF HasInline}inline;{$ENDIF} +begin + av_strerror(errnum, errbuf, errbuf_size); + av_make_error_string := errbuf; +end; + +function av_err2str(errnum: cint): pchar; {$IFDEF HasInline}inline;{$ENDIF} +var + errbuf: Pchar; +begin + errbuf := stralloc(AV_ERROR_MAX_STRING_SIZE); + av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE, errnum); + av_err2str := errbuf; +end; + +(* libavutil/mem.h *) + +function av_size_mult(a: size_t; b: size_t; r: Psize_t): size_t; + cdecl; external av__util; +(* To Be Implemented, March 2012 KMS *) +//function av_size_mult(a: size_t; b: size_t; r: pointer): size_t; +//begin +// { +// size_t t = a * b; +// /* Hack inspired from glibc: only try the division if nelem and elsize +// * are both greater than sqrt(SIZE_MAX). */ +// if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) +// return AVERROR(EINVAL); +// *r = t; +// return 0; +//} +//end; + +function av_malloc_array(nmemb: size_t; size: size_t): pointer; {$IFDEF HasInline}inline;{$ENDIF} {av_alloc_size(1,2)} +begin + if (size <= 0 ) or (nmemb >= maxint / size) then + av_malloc_array := NIL + else + av_malloc_array := av_malloc(nmemb * size); +end; + +function av_mallocz_array(nmemb: size_t; size: size_t): pointer; {$IFDEF HasInline}inline;{$ENDIF} {av_alloc_size(1,2)} +begin + if (size <= 0 ) or (nmemb >= maxint / size) then + av_mallocz_array := NIL + else + av_mallocz_array := av_mallocz(nmemb * size); +end; + +function AVERROR(e: integer): integer; +begin + AVERROR := AVERROR_SIGN * e; +end; + +end. diff --git a/src/lib/ffmpeg-3.1/ff_api-defines.inc b/src/lib/ffmpeg-3.1/ff_api-defines.inc new file mode 100644 index 00000000..a90acbe9 --- /dev/null +++ b/src/lib/ffmpeg-3.1/ff_api-defines.inc @@ -0,0 +1,251 @@ +// prevent pasdoc from parsing this file +{$IFNDEF PASDOC} + +(** + * FF_API_* defines may be placed below to indicate public API that will be + * dropped at a future version bump. The defines themselves are not part of + * the public API and may change, break or disappear at any time. + *) + +(** avcodec defines *) +{$ifndef FF_API_VIMA_DECODER} +{$define FF_API_VIMA_DECODER := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AUDIO_CONVERT} +{$define FF_API_AUDIO_CONVERT := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AVCODEC_RESAMPLE} +{$define FF_API_AVCODEC_RESAMPLE := FF_API_AUDIO_CONVERT} +{$endif} +{$ifndef FF_API_GETCHROMA} +{$define FF_API_GETCHROMA := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_MISSING_SAMPLE} +{$define FF_API_MISSING_SAMPLE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LOWRES} +{$define FF_API_LOWRES := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_CAP_VDPAU} +{$define FF_API_CAP_VDPAU := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_BUFS_VDPAU} +{$define FF_API_BUFS_VDPAU := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_VOXWARE} +{$define FF_API_VOXWARE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_SET_DIMENSIONS} +{$define FF_API_SET_DIMENSIONS := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_DEBUG_MV} +{$define FF_API_DEBUG_MV := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AC_VLC} +{$define FF_API_AC_VLC := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_OLD_MSMPEG4} +{$define FF_API_OLD_MSMPEG4 := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ASPECT_EXTENDED} +{$define FF_API_ASPECT_EXTENDED := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ARCH_ALPHA} +{$define FF_API_ARCH_ALPHA := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_XVMC} +{$define FF_API_XVMC := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ERROR_RATE} +{$define FF_API_ERROR_RATE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_QSCALE_TYPE} +{$define FF_API_QSCALE_TYPE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_MB_TYPE} +{$define FF_API_MB_TYPE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_MAX_BFRAMES} +{$define FF_API_MAX_BFRAMES := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_NEG_LINESIZES} +{$define FF_API_NEG_LINESIZES := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_EMU_EDGE} +{$define FF_API_EMU_EDGE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ARCH_SH4} +{$define FF_API_ARCH_SH4 := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ARCH_SPARC} +{$define FF_API_ARCH_SPARC := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_UNUSED_MEMBERS} +{$define FF_API_UNUSED_MEMBERS := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_IDCT_XVIDMMX} +{$define FF_API_IDCT_XVIDMMX := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_INPUT_PRESERVED} +{$define FF_API_INPUT_PRESERVED := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_NORMALIZE_AQP} +{$define FF_API_NORMALIZE_AQP := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_GMC} +{$define FF_API_GMC := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_MV0} +{$define FF_API_MV0 := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_CODEC_NAME} +{$define FF_API_CODEC_NAME := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AFD} +{$define FF_API_AFD := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_VISMV} +(* XXX: don't forget to drop the -vismv documentation *) +{$define FF_API_VISMV := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AUDIOENC_DELAY} +{$define FF_API_AUDIOENC_DELAY := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_VAAPI_CONTEXT} +{$define FF_API_VAAPI_CONTEXT := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AVCTX_TIMEBASE} +{$define FF_API_AVCTX_TIMEBASE := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_MPV_OPT} +{$define FF_API_MPV_OPT := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_STREAM_CODEC_TAG} +{$define FF_API_STREAM_CODEC_TAG := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_QUANT_BIAS} +{$define FF_API_QUANT_BIAS := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_RC_STRATEGY} +{$define FF_API_RC_STRATEGY := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_CODED_FRAME} +{$define FF_API_CODED_FRAME := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_MOTION_EST} +{$define FF_API_MOTION_EST := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_WITHOUT_PREFIX} +{$define FF_API_WITHOUT_PREFIX := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_SIDEDATA_ONLY_PKT} +{$define FF_API_SIDEDATA_ONLY_PKT:= (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_VDPAU_PROFILE} +{$define FF_API_VDPAU_PROFILE := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_CONVERGENCE_DURATION} +{$define FF_API_CONVERGENCE_DURATION := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_AVPICTURE} +{$define FF_API_AVPICTURE := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_AVPACKET_OLD_API} +{$define FF_API_AVPACKET_OLD_API := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_RTP_CALLBACK} +{$define FF_API_RTP_CALLBACK := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_VBV_DELAY} +{$define FF_API_VBV_DELAY := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_CODER_TYPE} +{$define FF_API_CODER_TYPE := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_STAT_BITS} +{$define FF_API_STAT_BITS := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_PRIVATE_OPT} +{$define FF_API_PRIVATE_OPT := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_ASS_TIMING} +{$define FF_API_ASS_TIMING := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_OLD_BSF} +{$define FF_API_OLD_BSF := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_COPY_CONTEXT} +{$define FF_API_COPY_CONTEXT := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_GET_CONTEXT_DEFAULTS} +{$define FF_API_GET_CONTEXT_DEFAULTS := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_NVENC_OLD_NAME} +{$define FF_API_NVENC_OLD_NAME := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} + +(* avutil defines *) +{$ifndef FF_API_VDPAU} +{$define FF_API_VDPAU := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_XVMC} +{$define FF_API_XVMC := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_OPT_TYPE_METADATA} +{$define FF_API_OPT_TYPE_METADATA := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_DLOG} +{$define FF_API_DLOG := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_VAAPI} +{$define FF_API_VAAPI := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_FRAME_QP} +{$define FF_API_FRAME_QP := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_PLUS1_MINUS1} +{$define FF_API_PLUS1_MINUS1 := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_ERROR_FRAME} +{$define FF_API_ERROR_FRAME := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_CRC_BIG_TABLE} +{$define FF_API_CRC_BIG_TABLE := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} + +(** avformat FF_API defines *) +{$ifndef FF_API_LAVF_BITEXACT} +{$define FF_API_LAVF_BITEXACT := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LAVF_FRAC} +{$define FF_API_LAVF_FRAC := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LAVF_CODEC_TB} +{$define FF_API_LAVF_CODEC_TB := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_URL_FEOF} +{$define FF_API_URL_FEOF := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LAVF_FMT_RAWPICTURE} +{$define FF_API_LAVF_FMT_RAWPICTURE := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_COMPUTE_PKT_FIELDS2} +{$define FF_API_COMPUTE_PKT_FIELDS2 := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_OLD_OPEN_CALLBACKS} +{$define FF_API_OLD_OPEN_CALLBACKS := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LAVF_AVCTX} +{$define FF_API_LAVF_AVCTX := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} + +{$ifndef FF_API_R_FRAME_RATE} +{$define FF_API_R_FRAME_RATE := 1} +{$endif} + +(** swscale FF_API defines *) +{$ifndef FF_API_SWS_VECTOR} +{$define FF_API_SWS_VECTOR := (LIBSWSCALE_VERSION_MAJOR < 6)} +{$endif} + +{$ENDIF PASDOC} diff --git a/src/lib/ffmpeg-3.1/libavcodec/audioconvert.pas b/src/lib/ffmpeg-3.1/libavcodec/audioconvert.pas new file mode 100644 index 00000000..38bef39c --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavcodec/audioconvert.pas @@ -0,0 +1,294 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/channel_layout.h and libavcodec/audioconvert.h + * avutil version 52.66.100; avcodec version 55.52.102 + * + *) + +(** libavutil/channel_layout.h **) + +(** + * @file + * audio channel layout utility functions + *) + +(** + * @defgroup channel_masks Audio channel masks + * + * A channel layout is a 64-bits integer with a bit set for every channel. + * The number of bits set must be equal to the number of channels. + * The value 0 means that the channel layout is not known. + * @note this data structure is not powerful enough to handle channels + * combinations that have the same channel multiple times, such as + * dual-mono. + * + *) +const + {* Audio channel masks *} + AV_CH_FRONT_LEFT = $00000001; + AV_CH_FRONT_RIGHT = $00000002; + AV_CH_FRONT_CENTER = $00000004; + AV_CH_LOW_FREQUENCY = $00000008; + AV_CH_BACK_LEFT = $00000010; + AV_CH_BACK_RIGHT = $00000020; + AV_CH_FRONT_LEFT_OF_CENTER = $00000040; + AV_CH_FRONT_RIGHT_OF_CENTER = $00000080; + AV_CH_BACK_CENTER = $00000100; + AV_CH_SIDE_LEFT = $00000200; + AV_CH_SIDE_RIGHT = $00000400; + AV_CH_TOP_CENTER = $00000800; + AV_CH_TOP_FRONT_LEFT = $00001000; + AV_CH_TOP_FRONT_CENTER = $00002000; + AV_CH_TOP_FRONT_RIGHT = $00004000; + AV_CH_TOP_BACK_LEFT = $00008000; + AV_CH_TOP_BACK_CENTER = $00010000; + AV_CH_TOP_BACK_RIGHT = $00020000; + AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. + AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; + +(** Channel mask value used for AVCodecContext.request_channel_layout + * to indicate that the user requests the channel order of the decoder output + * to be the native codec channel order. + *) + AV_CH_LAYOUT_NATIVE = $8000000000000000; + +(** + * @} + * @defgroup channel_mask_c Audio channel convenience macros + * @{ + * *) + AV_CH_LAYOUT_MONO = (AV_CH_FRONT_CENTER); + AV_CH_LAYOUT_STEREO = (AV_CH_FRONT_LEFT or AV_CH_FRONT_RIGHT); + AV_CH_LAYOUT_2POINT1 = (AV_CH_LAYOUT_STEREO or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_2_1 = (AV_CH_LAYOUT_STEREO or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_SURROUND = (AV_CH_LAYOUT_STEREO or AV_CH_FRONT_CENTER); + AV_CH_LAYOUT_3POINT1 = (AV_CH_LAYOUT_SURROUND or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_4POINT0 = (AV_CH_LAYOUT_SURROUND or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_4POINT1 = (AV_CH_LAYOUT_4POINT0 or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_2_2 = (AV_CH_LAYOUT_STEREO or AV_CH_SIDE_LEFT or AV_CH_SIDE_RIGHT); + AV_CH_LAYOUT_QUAD = (AV_CH_LAYOUT_STEREO or AV_CH_BACK_LEFT or AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_5POINT0 = (AV_CH_LAYOUT_SURROUND or AV_CH_SIDE_LEFT or AV_CH_SIDE_RIGHT); + AV_CH_LAYOUT_5POINT1 = (AV_CH_LAYOUT_5POINT0 or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_5POINT0_BACK = (AV_CH_LAYOUT_SURROUND or AV_CH_BACK_LEFT or + AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_5POINT1_BACK = (AV_CH_LAYOUT_5POINT0_BACK or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_6POINT0 = (AV_CH_LAYOUT_5POINT0 or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_6POINT0_FRONT = (AV_CH_LAYOUT_2_2 or AV_CH_FRONT_LEFT_OF_CENTER or + AV_CH_FRONT_RIGHT_OF_CENTER); + AV_CH_LAYOUT_HEXAGONAL = (AV_CH_LAYOUT_5POINT0_BACK or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_6POINT1 = (AV_CH_LAYOUT_5POINT1 or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_6POINT1_BACK = (AV_CH_LAYOUT_5POINT1_BACK or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_6POINT1_FRONT = (AV_CH_LAYOUT_6POINT0_FRONT or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_7POINT0 = (AV_CH_LAYOUT_5POINT0 or AV_CH_BACK_LEFT or AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_7POINT0_FRONT = (AV_CH_LAYOUT_5POINT0 or AV_CH_FRONT_LEFT_OF_CENTER or + AV_CH_FRONT_RIGHT_OF_CENTER); + AV_CH_LAYOUT_7POINT1 = (AV_CH_LAYOUT_5POINT1 or AV_CH_BACK_LEFT or AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_7POINT1_WIDE = (AV_CH_LAYOUT_5POINT1 or AV_CH_FRONT_LEFT_OF_CENTER or + AV_CH_FRONT_RIGHT_OF_CENTER); + AV_CH_LAYOUT_OCTAGONAL = (AV_CH_LAYOUT_5POINT0 or AV_CH_BACK_LEFT or AV_CH_BACK_CENTER or + AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_HEXADECAGONAL = (AV_CH_LAYOUT_OCTAGONAL or AV_CH_WIDE_LEFT or AV_CH_WIDE_RIGHT or AV_CH_TOP_BACK_LEFT or + AV_CH_TOP_BACK_RIGHT or AV_CH_TOP_BACK_CENTER or AV_CH_TOP_FRONT_CENTER or + AV_CH_TOP_FRONT_LEFT or AV_CH_TOP_FRONT_RIGHT); + AV_CH_LAYOUT_STEREO_DOWNMIX = (AV_CH_STEREO_LEFT or AV_CH_STEREO_RIGHT); + +type + AVMatrixEncoding = ( + AV_MATRIX_ENCODING_NONE, + AV_MATRIX_ENCODING_DOLBY, + AV_MATRIX_ENCODING_DPLII, + AV_MATRIX_ENCODING_DPLIIX, + AV_MATRIX_ENCODING_DPLIIZ, + AV_MATRIX_ENCODING_DOLBYEX, + AV_MATRIX_ENCODING_DOLBYHEADPHONE, + AV_MATRIX_ENCODING_NB + ); + +(** + * Return a channel layout id that matches name, or 0 if no match is found. + * + * name can be one or several of the following notations, + * separated by '+' or '|': + * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, + * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); + * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, + * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); + * - a number of channels, in decimal, optionally followed by 'c', yielding + * the default channel layout for that number of channels (@see + * av_get_default_channel_layout); + * - a channel layout mask, in hexadecimal starting with "0x" (see the + * AV_CH_* macros). + * + * Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7" + *) +function av_get_channel_layout(name: {const} PAnsiChar): cuint64; + cdecl; external av__util; + +(** + * Return a description of a channel layout. + * If nb_channels is <= 0, it is guessed from the channel_layout. + * + * @param buf put here the string containing the channel layout + * @param buf_size size in bytes of the buffer + *) +procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channels: cint; channel_layout: cuint64); + cdecl; external av__util; + +type +// Type definition from libavutil/bprint.h +// The actual record is padded to a certain number of bytes. +// As of now (2013) this number is 1024. + PAVBPrint = ^TAVBPrint; + TAVBPrint = record + case integer of + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( + str: PAnsiChar; //** string so far */ + len: cuint; //** length so far */ + size: cuint; //** allocated memory */ + size_max: cuint; //** maximum allocated memory */ + reserved_internal_buffer: Pchar + ); + end; + +(** + * Append a description of a channel layout to a bprint buffer. + *) +procedure av_bprint_channel_layout(bp: PAVBPrint; nb_channels: cint; channel_layout: cuint64); + cdecl; external av__util; + +(** + * Return the number of channels in the channel layout. + *) +function av_get_channel_layout_nb_channels(channel_layout: cuint64): cint; + cdecl; external av__util; + +(** + * Return default channel layout for a given number of channels. + *) +function av_get_default_channel_layout(nb_channels: cint): cint64; + cdecl; external av__util; + +(** + * Get the index of a channel in channel_layout. + * + * @param channel a channel layout describing exactly one channel which must be + * present in channel_layout. + * + * @return index of channel in channel_layout on success, a negative AVERROR + * on error. + *) +function av_get_channel_layout_channel_index(channel_layout: cuint64; + channel: cuint64): cint; + cdecl; external av__util; + +(** + * Get the channel with the given index in channel_layout. + *) +function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint): cuint64; + cdecl; external av__util; + +(** + * Get the name of a given channel. + * + * @return channel name on success, NULL on error. + *) +function av_get_channel_name(channel: cuint64): PAnsiChar; + cdecl; external av__util; + +(** + * Get the description of a given channel. + * + * @param channel a channel layout with a single channel + * @return channel description on success, NULL on error + *) +function av_get_channel_description(channel: cuint64): PAnsiChar; + cdecl; external av__util; + +(** + * Get the value and name of a standard channel layout. + * + * @param[in] index index in an internal list, starting at 0 + * @param[out] layout channel layout mask + * @param[out] name name of the layout + * @return 0 if the layout exists, + * <0 if index is beyond the limits + *) +function av_get_standard_channel_layout(index: cuint; layout: Pcuint64; + name: {const} PPAnsiChar): cint; + cdecl; external av__util; + +{$IFDEF FF_API_AUDIO_CONVERT} + +(** libavcodec/audioconvert.h **) + +// type definition from libavcodec/audioconvert.c +type + PAVAudioConvert = ^TAVAudioConvert; + TAVAudioConvert = record + in_channels, out_channels: cint; + fmt_pair: cint; + end; + +(** + * Create an audio sample format converter context + * @param out_fmt Output sample format + * @param out_channels Number of output channels + * @param in_fmt Input sample format + * @param in_channels Number of input channels + * @param[in] matrix Channel mixing matrix (of dimension in_channel*out_channels). Set to NULL to ignore. + * @param flags See AV_CPU_FLAG_xx + * @return NULL on error + *) +function av_audio_convert_alloc(out_fmt: TAVSampleFormat; out_channels: cint; + in_fmt: TAVSampleFormat; in_channels: cint; + matrix: {const} Pcfloat; flags: cint): PAVAudioConvert; + cdecl; external av__codec; + +(** + * Free audio sample format converter context + *) +procedure av_audio_convert_free(ctx: PAVAudioConvert); + cdecl; external av__codec; + +type + P6 = array [1..6] of pointer; + I6 = array [1..6] of cint; + +(** + * Convert between audio sample formats + * @param[in] out array of output buffers for each channel. set to NULL to ignore processing of the given channel. + * @param[in] out_stride distance between consecutive output samples (measured in bytes) + * @param[in] in array of input buffers for each channel + * @param[in] in_stride distance between consecutive input samples (measured in bytes) + * @param len length of audio frame size (measured in samples) + *) +function av_audio_convert(ctx: PAVAudioConvert; + out[6]: {const} P6; out_stride[6]: {const} I6; + in[6]: {const} P6; in_stride[6]: {const} I6; len: cint): cint; + cdecl; external av__codec; + +{$IFEND} \ No newline at end of file diff --git a/src/lib/ffmpeg-3.1/libavutil/buffer.pas b/src/lib/ffmpeg-3.1/libavutil/buffer.pas new file mode 100644 index 00000000..0cf47b05 --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/buffer.pas @@ -0,0 +1,309 @@ +(* + * AVOptions + * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/buffer.h + * avutil version 54.7.100 + * + *) + +const +(** + * Always treat the buffer as read-only, even when it has only one + * reference. + *) + AV_BUFFER_FLAG_READONLY = (1 << 0); + +type +(** + * @defgroup lavu_buffer AVBuffer + * @ingroup lavu_data + * + * @ + * AVBuffer is an API for reference-counted data buffers. + * + * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer + * represents the data buffer itself; it is opaque and not meant to be accessed + * by the caller directly, but only through AVBufferRef. However, the caller may + * e.g. compare two AVBuffer pointers to check whether two different references + * are describing the same data buffer. AVBufferRef represents a single + * reference to an AVBuffer and it is the object that may be manipulated by the + * caller directly. + * + * There are two functions provided for creating a new AVBuffer with a single + * reference -- av_buffer_alloc() to just allocate a new buffer, and + * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing + * reference, additional references may be created with av_buffer_ref(). + * Use av_buffer_unref() to free a reference (this will automatically free the + * data once all the references are freed). + * + * The convention throughout this API and the rest of FFmpeg is such that the + * buffer is considered writable if there exists only one reference to it (and + * it has not been marked as read-only). The av_buffer_is_writable() function is + * provided to check whether this is true and av_buffer_make_writable() will + * automatically create a new writable buffer when necessary. + * Of course nothing prevents the calling code from violating this convention, + * however that is safe only when all the existing references are under its + * control. + * + * @note Referencing and unreferencing the buffers is thread-safe and thus + * may be done from multiple threads simultaneously without any need for + * additional locking. + * + * @note Two different references to the same buffer can point to different + * parts of the buffer (i.e. their AVBufferRef.data will not be equal). + *) + +(** + * A reference counted buffer type. It is opaque and is meant to be used through + * references (AVBufferRef). + *) + TAVBuffer = record + end; + +(** + * A reference to a data buffer. + * + * The size of this struct is not a part of the public ABI and it is not meant + * to be allocated directly. + *) + PPAVBufferRef = ^PAVBufferRef; + PAVBufferRef = ^TAVBufferRef; + TAVBufferRef = record + buffer: TAVBuffer; + (** + * The data buffer. It is considered writable if and only if + * this is the only reference to the buffer, in which case + * av_buffer_is_writable() returns 1. + *) + data: PByte; + (** + * Size of data in bytes. + *) + size: cint; + end; + + //callbacks used in the functions av_buffer_create and av_buffer_pool_init respectively + TFree = procedure(opaque: pointer; data: pbyte); + TAlloc = function(size: cint): PAVBufferRef; + TAlloc2 = function(opaque: pointer; size: cint): PAVBufferRef; + TPoolFree = procedure(opaque: pointer); + +(** + * The buffer pool. This structure is opaque and not meant to be accessed + * directly. It is allocated with av_buffer_pool_init() and freed with + * av_buffer_pool_uninit(). + *) + PPAVBufferPool = ^PAVBufferPool; + PAVBufferPool = ^TAVBufferPool; + TAVBufferPool = record + end; + +(** + * Allocate an AVBuffer of the given size using av_malloc(). + * + * @return an AVBufferRef of given size or NULL when out of memory + *) +function av_buffer_alloc(size: cint): PAVBufferRef; + cdecl; external av__util; + +(** + * Same as av_buffer_alloc(), except the returned buffer will be initialized + * to zero. + *) +function av_buffer_allocz(size: cint): PAVBufferRef; + cdecl; external av__util; + +(** + * Create an AVBuffer from an existing array. + * + * If this function is successful, data is owned by the AVBuffer. The caller may + * only access data through the returned AVBufferRef and references derived from + * it. + * If this function fails, data is left untouched. + * @param data data array + * @param size size of data in bytes + * @param free a callback for freeing this buffer's data + * @param opaque parameter to be got for processing or passed to free + * @param flags a combination of AV_BUFFER_FLAG_* + * + * @return an AVBufferRef referring to data on success, NULL on failure. + *) + +function av_buffer_create(data: PByte; size: cint; + free: TFree; + opaque: pointer; flags: cint): PAVBufferRef; + cdecl; external av__util; + +(** + * Default free callback, which calls av_free() on the buffer data. + * This function is meant to be passed to av_buffer_create(), not called + * directly. + *) +procedure av_buffer_default_free(opaque: pointer; data: pbyte); + cdecl; external av__util; + +(** + * Create a new reference to an AVBuffer. + * + * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on + * failure. + *) +function av_buffer_ref(buf: PAVBufferRef): PAVBufferRef; + cdecl; external av__util; + +(** + * Free a given reference and automatically free the buffer if there are no more + * references to it. + * + * @param buf the reference to be freed. The pointer is set to NULL on return. + *) +procedure av_buffer_unref(buf: PPAVBufferRef); + cdecl; external av__util; + +(** + * @return 1 if the caller may write to the data referred to by buf (which is + * true if and only if buf is the only reference to the underlying AVBuffer). + * Return 0 otherwise. + * A positive answer is valid until av_buffer_ref() is called on buf. + *) +function av_buffer_is_writable(buf: {const} PAVBufferRef): cint; + cdecl; external av__util; + +(** + * @return the opaque parameter set by av_buffer_create. + *) +procedure av_buffer_get_opaque(buf: {const} PAVBufferRef); + cdecl; external av__util; + +function av_buffer_get_ref_count(buf: {const} PAVBufferRef): cint; + cdecl; external av__util; + +(** + * Create a writable reference from a given buffer reference, avoiding data copy + * if possible. + * + * @param buf buffer reference to make writable. On success, buf is either left + * untouched, or it is unreferenced and a new writable AVBufferRef is + * written in its place. On failure, buf is left untouched. + * @return 0 on success, a negative AVERROR on failure. + *) +function av_buffer_make_writable(buf: PPAVBufferRef): cint; + cdecl; external av__util; + +(** + * Reallocate a given buffer. + * + * @param buf a buffer reference to reallocate. On success, buf will be + * unreferenced and a new reference with the required size will be + * written in its place. On failure buf will be left untouched. *buf + * may be NULL, then a new buffer is allocated. + * @param size required new buffer size. + * @return 0 on success, a negative AVERROR on failure. + * + * @note the buffer is actually reallocated with av_realloc() only if it was + * initially allocated through av_buffer_realloc(NULL) and there is only one + * reference to it (i.e. the one passed to this function). In all other cases + * a new buffer is allocated and the data is copied. + *) +function av_buffer_realloc(buf: PPAVBufferRef; size: cint): cint; + cdecl; external av__util; + +(** + * @defgroup lavu_bufferpool AVBufferPool + * @ingroup lavu_data + * + * @ + * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. + * + * Frequently allocating and freeing large buffers may be slow. AVBufferPool is + * meant to solve this in cases when the caller needs a set of buffers of the + * same size (the most obvious use case being buffers for raw video or audio + * frames). + * + * At the beginning, the user must call av_buffer_pool_init() to create the + * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to + * get a reference to a new buffer, similar to av_buffer_alloc(). This new + * reference works in all aspects the same way as the one created by + * av_buffer_alloc(). However, when the last reference to this buffer is + * unreferenced, it is returned to the pool instead of being freed and will be + * reused for subsequent av_buffer_pool_get() calls. + * + * When the caller is done with the pool and no longer needs to allocate any new + * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. + * Once all the buffers are released, it will automatically be freed. + * + * Allocating and releasing buffers with this API is thread-safe as long as + * either the default alloc callback is used, or the user-supplied one is + * thread-safe. + *) + +(** + * Allocate and initialize a buffer pool. + * + * @param size size of each buffer in this pool + * @param alloc a function that will be used to allocate new buffers when the + * pool is empty. May be NULL, then the default allocator will be used + * (av_buffer_alloc()). + * @return newly created buffer pool on success, NULL on error. + *) +function av_buffer_pool_init(size: cint; alloc: TAlloc): PAVBufferPool; + cdecl; external av__util; + +(** + * Allocate and initialize a buffer pool with a more complex allocator. + * + * @param size size of each buffer in this pool + * @param opaque arbitrary user data used by the allocator + * @param alloc a function that will be used to allocate new buffers when the + * pool is empty. + * @param pool_free a function that will be called immediately before the pool + * is freed. I.e. after av_buffer_pool_can_uninit() is called + * by the pool and all the frames are returned to the pool and + * freed. It is intended to uninitialize the user opaque data. + * @return newly created buffer pool on success, NULL on error. + *) +function av_buffer_pool_init2(size: cint; opaque: pointer; + alloc: TAlloc2; + pool_free: TPoolFree): PAVBufferPool; + cdecl; external av__util; + +(** + * Mark the pool as being available for freeing. It will actually be freed only + * once all the allocated buffers associated with the pool are released. Thus it + * is safe to call this function while some of the allocated buffers are still + * in use. + * + * @param pool pointer to the pool to be freed. It will be set to NULL. + *) +procedure av_buffer_pool_uninit(pool: PPAVBufferPool); + cdecl; external av__util; + +(** + * Allocate a new AVBuffer, reusing an old buffer from the pool when available. + * This function may be called simultaneously from multiple threads. + * + * @return a reference to the new buffer on success, NULL on error. + *) +function av_buffer_pool_get(pool: PAVBufferPool): PAVBufferRef; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.1/libavutil/cpu.pas b/src/lib/ffmpeg-3.1/libavutil/cpu.pas new file mode 100644 index 00000000..1e1e6777 --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/cpu.pas @@ -0,0 +1,124 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/cpu.h + * avutil version 54.7.100 + * + *) + +const + + AV_CPU_FLAG_FORCE = $80000000; (* force usage of selected flags (OR) *) + + (* lower 16 bits - CPU features *) + AV_CPU_FLAG_MMX = $0001; ///< standard MMX + AV_CPU_FLAG_MMXEXT = $0002; ///< SSE integer functions or AMD MMX ext + AV_CPU_FLAG_MMX2 = $0002; ///< SSE integer functions or AMD MMX ext + AV_CPU_FLAG_3DNOW = $0004; ///< AMD 3DNOW + AV_CPU_FLAG_SSE = $0008; ///< SSE functions + AV_CPU_FLAG_SSE2 = $0010; ///< PIV SSE2 functions + AV_CPU_FLAG_SSE2SLOW = $40000000; ///< SSE2 supported, but usually not faster + ///< than regular MMX/SSE (e.g. Core1) + AV_CPU_FLAG_3DNOWEXT = $0020; ///< AMD 3DNowExt + AV_CPU_FLAG_SSE3 = $0040; ///< Prescott SSE3 functions + AV_CPU_FLAG_SSE3SLOW = $20000000; ///< SSE3 supported, but usually not faster + ///< than regular MMX/SSE (e.g. Core1) + AV_CPU_FLAG_SSSE3 = $0080; ///< Conroe SSSE3 functions + AV_CPU_FLAG_ATOM = $10000000; ///< Atom processor, some SSSE3 instructions are slower + AV_CPU_FLAG_SSE4 = $0100; ///< Penryn SSE4.1 functions + AV_CPU_FLAG_SSE42 = $0200; ///< Nehalem SSE4.2 functions + AV_CPU_FLAG_AESNI = $80000; ///< Advanced Encryption Standard functions + AV_CPU_FLAG_AVX = $4000; ///< AVX functions: requires OS support even if YMM registers aren't used + AV_CPU_FLAG_AVXSLOW = $8000000; ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) + AV_CPU_FLAG_XOP = $0400; ///< Bulldozer XOP functions + AV_CPU_FLAG_FMA4 = $0800; ///< Bulldozer FMA4 functions + + AV_CPU_FLAG_CMOV = $1000; ///< supports cmov instruction + + AV_CPU_FLAG_AVX2 = $8000; ///< AVX2 functions: requires OS support even if YMM registers aren't used + AV_CPU_FLAG_FMA3 = $10000; ///< Haswell FMA3 functions + AV_CPU_FLAG_BMI1 = $20000; ///< Bit Manipulation Instruction Set 1 + AV_CPU_FLAG_BMI2 = $40000; ///< Bit Manipulation Instruction Set 2 + + AV_CPU_FLAG_ALTIVEC = $0001; ///< standard + AV_CPU_FLAG_VSX = $0002; ///< ISA 2.06 + AV_CPU_FLAG_POWER8 = $0004; ///< ISA 2.07 + + AV_CPU_FLAG_ARMV5TE = (1 << 0); + AV_CPU_FLAG_ARMV6 = (1 << 1); + AV_CPU_FLAG_ARMV6T2 = (1 << 2); + AV_CPU_FLAG_VFP = (1 << 3); + AV_CPU_FLAG_VFPV3 = (1 << 4); + AV_CPU_FLAG_NEON = (1 << 5); + AV_CPU_FLAG_ARMV8 = (1 << 6); + AV_CPU_FLAG_VFP_VM = (1 << 7); ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations + AV_CPU_FLAG_SETEND = (1 <<16); + +(** + * Return the flags which specify extensions supported by the CPU. + * The returned value is affected by av_force_cpu_flags() if that was used + * before. So av_get_cpu_flags() can easily be used in an application to + * detect the enabled cpu flags. + *) +function av_get_cpu_flags(): cint; + cdecl; external av__util; + +(** + * Disables cpu detection and forces the specified flags. + * -1 is a special case that disables forcing of specific flags. + *) +procedure av_force_cpu_flags(flags: cint); + cdecl; external av__util; + +(** + * Set a mask on flags returned by av_get_cpu_flags(). + * This function is mainly useful for testing. + * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible + * + * @warning this function is not thread safe. + *) +procedure av_set_cpu_flags_mask(mask: cint); + cdecl; external av__util; deprecated; + +(** + * Parse CPU flags from a string. + * + * The returned flags contain the specified flags as well as related unspecified flags. + * + * This function exists only for compatibility with libav. + * Please use av_parse_cpu_caps() when possible. + * @return a combination of AV_CPU_* flags, negative on error. + *) +function av_parse_cpu_flags(s: {const} PAnsiChar): cint; + cdecl; external av__util; deprecated; + +(** + * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. + * + * @return negative on error. + *) +function av_parse_cpu_caps(flags: Pcuint; s: {const} PAnsiChar): cint; + cdecl; external av__util; + +(** + * @return the number of logical CPU cores present. + *) +function av_cpu_count(): cint; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.1/libavutil/dict.pas b/src/lib/ffmpeg-3.1/libavutil/dict.pas new file mode 100644 index 00000000..ef54610c --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/dict.pas @@ -0,0 +1,168 @@ +(* + * AVDictionary + * copyright (c) 2011 Karl-Michael Schindler <karl-michael.schindler@web.de> + * + * 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 + * + * This is a part of the Pascal port of ffmpeg. + * + * Conversion of libavutil/dict.h + * avutil version 54.7.100 + * + *) + +const + AV_DICT_MATCH_CASE = 1; + AV_DICT_IGNORE_SUFFIX = 2; + AV_DICT_DONT_STRDUP_KEY = 4; (**< Take ownership of a key that's been + allocated with av_malloc() or another memory allocation function. *) + AV_DICT_DONT_STRDUP_VAL = 8; (**< Take ownership of a value that's been + allocated with av_malloc() or another memory allocation function. *) + AV_DICT_DONT_OVERWRITE = 16; (**< Don't overwrite existing entries. *) + AV_DICT_APPEND = 32; (**< If the entry already exists, append to it. Note that no + delimiter is added, the strings are simply concatenated. *) + AV_DICT_MULTIKEY = 64; (**< Allow to store several equal keys in the dictionary *) + +type + PAVDictionaryEntry = ^TAVDictionaryEntry; + TAVDictionaryEntry = record + key: PAnsiChar; + value: PAnsiChar; + end; + +(* with the "help" of libavutil/internal.h: *) + + PPAVDictionary = ^PAVDictionary; + PAVDictionary = ^TAVDictionary; + TAVDictionary = record + count: cint; + elems: PAVDictionaryEntry; + end; + +(** + * Get a dictionary entry with matching key. + * + * The returned entry key or value must not be changed, or it will + * cause undefined behavior. + * + * To iterate through all the dictionary entries, you can set the matching key + * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. + * + * @param key matching key + * @param prev Set to the previous matching element to find the next. + * If set to NULL the first matching element is returned. + * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved + * @return found entry or NULL in case no matching entry was found in the dictionary + *) +function av_dict_get({const} m: PAVDictionary; {const} key: PAnsiChar; {const} prev: PAVDictionaryEntry; flags: cint): PAVDictionaryEntry; + cdecl; external av__util; + +(** + * Get number of entries in dictionary. + * + * @param m dictionary + * @return number of entries in dictionary + *) +function av_dict_count({const} m: PAVDictionary): cint; + cdecl; external av__util; + +(** + * Set the given entry in *pm, overwriting an existing entry. + * + * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, + * these arguments will be freed on error. + * + * Warning: Adding a new entry to a dictionary invalidates all existing entries + * previously returned with av_dict_get. + * + * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL + * a dictionary struct is allocated and put in *pm. + * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) + * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). + * Passing a NULL value will cause an existing entry to be deleted. + * @return >= 0 on success otherwise an error code <0 + *) +function av_dict_set(var pm: PAVDictionary; {const} key: PAnsiChar; {const} value: PAnsiChar; flags: cint): cint; + cdecl; external av__util; + +(** + * Convenience wrapper for av_dict_set that converts the value to a string + * and stores it. + * + * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. + *) +function av_dict_set_int(var pm: PAVDictionary; {const} key: PAnsiChar; + value: cint64; flags: cint): cint; + cdecl; external av__util; + +(** + * Parse the key/value pairs list and add the parsed entries to a dictionary. + * + * In case of failure, all the successfully set entries are stored in + * *pm. You may need to manually free the created dictionary. + * + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other + * @param flags flags to use when adding to dictionary. + * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL + * are ignored since the key/value tokens will always + * be duplicated. + * @return 0 on success, negative AVERROR code on failure + *) +function av_dict_parse_string(var pm: PAVDictionary; {const} str: PAnsiChar; + {const} key_val_sep: PAnsiChar; {const} pairs_sep: PAnsiChar; + flags: cint): cint; + cdecl; external av__util; + +(** + * Copy entries from one AVDictionary struct into another. + * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, + * this function will allocate a struct for you and put it in *dst + * @param src pointer to source AVDictionary struct + * @param flags flags to use when setting entries in *dst + * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag + * @return 0 on success, negative AVERROR code on failure. If dst was allocated + * by this function, callers should free the associated memory. + *) +function av_dict_copy(var dst: PAVDictionary; {const} src: PAVDictionary; flags: cint): cint; + cdecl; external av__util; + +(** + * Get dictionary entries as a string. + * + * Create a string containing dictionary's entries. + * Such string may be passed back to av_dict_parse_string(). + * @note String is escaped with backslashes ('\'). + * + * @param[in] m dictionary + * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. + * Buffer must be freed by the caller when is no longer needed. + * @param[in] key_val_sep character used to separate key from value + * @param[in] pairs_sep character used to separate two pairs from each other + * @return >= 0 on success, negative on error + * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. + *) +function av_dict_get_string({const} m: PAVDictionary; buffer: PPAnsiChar; + {const} key_val_sep: AnsiChar; {const} pairs_sep: AnsiChar): cint; + cdecl; external av__util; + +(** + * Free all the memory allocated for an AVDictionary struct + * and all keys and values. + *) +procedure av_dict_free(var m: PAVDictionary); + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.1/libavutil/error.pas b/src/lib/ffmpeg-3.1/libavutil/error.pas new file mode 100644 index 00000000..f972aa7d --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/error.pas @@ -0,0 +1,169 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/error.h + * avutil version 54.7.100 + * + *) + +(** + * @file + * error code definitions + *) + +(** + * @addtogroup lavu_error + * + * @ + *) + +{* error handling *} + +const +{$IFDEF UNIX} + ENOENT = ESysENOENT; + EIO = ESysEIO; + ENOMEM = ESysENOMEM; + EINVAL = ESysEINVAL; + EDOM = ESysEDOM; + ENOSYS = ESysENOSYS; + EILSEQ = ESysEILSEQ; + EPIPE = ESysEPIPE; + EAGAIN = ESysEAGAIN; +{$ELSE} + ENOENT = 2; + EIO = 5; + EAGAIN = 11; + ENOMEM = 12; + EINVAL = 22; + EPIPE = 32; // just an assumption. needs to be checked. + EDOM = 33; + {$IFDEF MSWINDOWS} + // Note: we assume that ffmpeg was compiled with MinGW. + // This must be changed if DLLs were compiled with cygwin. + ENOSYS = 40; // MSVC/MINGW: 40, CYGWIN: 88, LINUX/FPC: 38 + EILSEQ = 42; // MSVC/MINGW: 42, CYGWIN: 138, LINUX/FPC: 84 + {$ENDIF} +{$ENDIF} + +(** + * We need the sign of the error, because some platforms have + * E* and errno already negated. The previous version failed + * with Delphi, because it needed EINVAL defined. + * Warning: This code is platform dependent and assumes constants + * to be 32 bit. + * This version does the following steps: + * 1) shr 30: shifts the sign bit to bit position 2 + * 2) and $00000002: sets all other bits to zero + * positive EINVAL gives 0, negative gives 2 + * 3) - 1: positive EINVAL gives -1, negative 1 + *) +const + AVERROR_SIGN = (EINVAL shr 30) and $00000002 - 1; + +(* +#if EDOM > 0 +#define AVERROR(e) (-(e)) {**< Returns a negative error code from a POSIX error code, to return from library functions. *} +#define AVUNERROR(e) (-(e)) {**< Returns a POSIX error code from a library function error return value. *} +#else +{* Some platforms have E* and errno already negated. *} +#define AVERROR(e) (e) +#define AVUNERROR(e) (e) +#endif +*) +function AVERROR(e: integer): integer; + +const + + // Note: function calls as constant-initializers are invalid + AVERROR_BSF_NOT_FOUND = -(ord($F8) or (ord('B') shl 8) or (ord('S') shl 16) or (ord('F') shl 24)); ///< Bitstream filter not found + AVERROR_BUG = -(ord('B') or (ord('U') shl 8) or (ord('G') shl 16) or (ord('!') shl 24)); ///< Internal bug, also see AVERROR_BUG2 + AVERROR_BUFFER_TOO_SMALL = -(ord('B') or (ord('U') shl 8) or (ord('F') shl 16) or (ord('S') shl 24)); ///< Buffer too small + AVERROR_DECODER_NOT_FOUND = -(ord($F8) or (ord('D') shl 8) or (ord('E') shl 16) or (ord('C') shl 24)); ///< Decoder not found + AVERROR_DEMUXER_NOT_FOUND = -(ord($F8) or (ord('D') shl 8) or (ord('E') shl 16) or (ord('M') shl 24)); ///< Demuxer not found + AVERROR_ENCODER_NOT_FOUND = -(ord($F8) or (ord('E') shl 8) or (ord('N') shl 16) or (ord('C') shl 24)); ///< Encoder not found + AVERROR_EOF = -(ord('E') or (ord('O') shl 8) or (ord('F') shl 16) or (ord(' ') shl 24)); ///< End of file + AVERROR_EXIT = -(ord('E') or (ord('X') shl 8) or (ord('I') shl 16) or (ord('T') shl 24)); ///< Immediate exit was requested; the called function should not be restarted + AVERROR_EXTERNAL = -(ord('E') or (ord('X') shl 8) or (ord('T') shl 16) or (ord(' ') shl 24)); ///< Generic error in an external library + AVERROR_FILTER_NOT_FOUND = -(ord($F8) or (ord('F') shl 8) or (ord('I') shl 16) or (ord('L') shl 24)); ///< Filter not found + AVERROR_INVALIDDATA = -(ord('I') or (ord('N') shl 8) or (ord('D') shl 16) or (ord('A') shl 24)); ///< Invalid data found when processing input + AVERROR_MUXER_NOT_FOUND = -(ord($F8) or (ord('M') shl 8) or (ord('U') shl 16) or (ord('X') shl 24)); ///< Muxer not found + AVERROR_OPTION_NOT_FOUND = -(ord($F8) or (ord('O') shl 8) or (ord('P') shl 16) or (ord('T') shl 24)); ///< Option not found + AVERROR_PATCHWELCOME = -(ord('P') or (ord('A') shl 8) or (ord('W') shl 16) or (ord('E') shl 24)); ///< Not yet implemented in FFmpeg, patches welcome + AVERROR_PROTOCOL_NOT_FOUND = -(ord($F8) or (ord('P') shl 8) or (ord('R') shl 16) or (ord('O') shl 24)); ///< Protocol not found + AVERROR_STREAM_NOT_FOUND = -(ord($F8) or (ord('S') shl 8) or (ord('T') shl 16) or (ord('R') shl 24)); ///< Stream not found + +(** + * This is semantically identical to AVERROR_BUG + * it has been introduced in Libav after our AVERROR_BUG and with a modified value. + *) + AVERROR_BUG2 = -(ord('B') or (ord('U') shl 8) or (ord('G') shl 16) or (ord(' ') shl 24)); + AVERROR_UNKNOWN = -(ord('U') or (ord('N') shl 8) or (ord('K') shl 16) or (ord('N') shl 24)); ///< Unknown error, typically from an external library + AVERROR_EXPERIMENTAL = -($2bb2afa8); ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. + AVERROR_INPUT_CHANGED = -($636e6701); ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) + AVERROR_OUTPUT_CHANGED = -($636e6702); ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) +(* HTTP & RTSP errors *) + AVERROR_HTTP_BAD_REQUEST = -(ord($F8) or (ord('4') shl 8) or (ord('0') shl 16) or (ord('0') shl 24)); + AVERROR_HTTP_UNAUTHORIZED = -(ord($F8) or (ord('4') shl 8) or (ord('0') shl 16) or (ord('1') shl 24)); + AVERROR_HTTP_FORBIDDEN = -(ord($F8) or (ord('4') shl 8) or (ord('0') shl 16) or (ord('3') shl 24)); + AVERROR_HTTP_NOT_FOUND = -(ord($F8) or (ord('4') shl 8) or (ord('0') shl 16) or (ord('4') shl 24)); + AVERROR_HTTP_OTHER_4XX = -(ord($F8) or (ord('4') shl 8) or (ord('X') shl 16) or (ord('X') shl 24)); + AVERROR_HTTP_SERVER_ERROR = -(ord($F8) or (ord('5') shl 8) or (ord('X') shl 16) or (ord('X') shl 24)); + + AV_ERROR_MAX_STRING_SIZE = 64; + +(* + * Put a description of the AVERROR code errnum in errbuf. + * In case of failure the global variable errno is set to indicate the + * error. Even in case of failure av_strerror() will print a generic + * error message indicating the errnum provided to errbuf. + * + * @param errnum error code to describe + * @param errbuf buffer to which description is written + * @param errbuf_size the size in bytes of errbuf + * @return 0 on success, a negative value if a description for errnum + * cannot be found + *) +function av_strerror(errnum: cint; errbuf: PAnsiChar; errbuf_size: size_t): cint; + cdecl; external av__util; + +(** + * Fill the provided buffer with a string containing an error string + * corresponding to the AVERROR code errnum. + * + * @param errbuf a buffer + * @param errbuf_size size in bytes of errbuf + * @param errnum error code to describe + * @return the buffer in input, filled with the error description + * @see av_strerror() + *) +function av_make_error_string(errbuf: Pchar; errbuf_size: size_t; errnum: cint): Pchar; {$IFDEF HasInline}inline;{$ENDIF} +// Note: defined in avutil.pas + +(** + * Convenience macro, the return value should be used only directly in + * function arguments but never stand-alone. + *) +function av_err2str(errnum: cint): pchar; {$IFDEF HasInline}inline;{$ENDIF} +// Note: defined in avutil.pas + +(** + * @} + *) diff --git a/src/lib/ffmpeg-3.1/libavutil/frame.pas b/src/lib/ffmpeg-3.1/libavutil/frame.pas new file mode 100644 index 00000000..2f168e11 --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/frame.pas @@ -0,0 +1,820 @@ +(* + * AVOptions + * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/frame.h + * avutil version 54.7.100 + * +*) + +const + AV_NUM_DATA_POINTERS = 8; + + (** from the definitions of TAVFrame *) + + (** + * The frame data may be corrupted, e.g. due to decoding errors. + *) + AV_FRAME_FLAG_CORRUPT = (1 << 0); + + FF_DECODE_ERROR_INVALID_BITSTREAM = 1; + FF_DECODE_ERROR_MISSING_REFERENCE = 2; + + +type +(* is already in pixfmt.pas + TAVColorSpace = ( + AVCOL_SPC_RGB = 0, + AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B + AVCOL_SPC_UNSPECIFIED = 2, + AVCOL_SPC_FCC = 4, + AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 + AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above + AVCOL_SPC_SMPTE240M_ = 7, + AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system + AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system + AVCOL_SPC_NB ///< Not part of ABI + ); + + TAVColorRange = ( + AVCOL_RANGE_UNSPECIFIED = 0, + AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges + AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + AVCOL_RANGE_NB ///< Not part of ABI + ); +*) + +(* Note: AVPanScan is defined in avcodec.h but is here to avoid reference problems - Brian-ch 28/09/2014 + * + * Pan Scan area. + * This specifies the area which should be displayed. + * Note there may be multiple such areas for one frame. + *) + PAVPanScan = ^TAVPanScan; + TAVPanScan = record {24} + (*** id. + * - encoding: set by user. + * - decoding: set by libavcodec. *) + id: cint; + + (*** width and height in 1/16 pel + * - encoding: set by user. + * - decoding: set by libavcodec. *) + width: cint; + height: cint; + + (*** position of the top left corner in 1/16 pel for up to 3 fields/frames. + * - encoding: set by user. + * - decoding: set by libavcodec. *) + position: array [0..2] of array [0..1] of cint16; + end; {TAVPanScan} + + (** + * @defgroup lavu_frame AVFrame + * @ingroup lavu_data + * + * @ + * AVFrame is an abstraction for reference-counted raw multimedia data. + *) + TAVFrameSideDataType = ( + (** + * The data is the AVPanScan struct defined in libavcodec. + *) + AV_FRAME_DATA_PANSCAN, + (** + * ATSC A53 Part 4 Closed Captions. + * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. + * The number of bytes of CC data is AVFrameSideData.size. + *) + AV_FRAME_DATA_A53_CC, + (** + * Stereoscopic 3d metadata. + * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. + *) + AV_FRAME_DATA_STEREO3D, + (** + * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. + *) + AV_FRAME_DATA_MATRIXENCODING, + (** + * Metadata relevant to a downmix procedure. + * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. + *) + AV_FRAME_DATA_DOWNMIX_INFO, + (** + * ReplayGain information in the form of the AVReplayGain struct. + *) + AV_FRAME_DATA_REPLAYGAIN, + (** + * This side data contains a 3x3 transformation matrix describing an affine + * transformation that needs to be applied to the frame for correct + * presentation. + * + * See libavutil/display.h for a detailed description of the data. + *) + AV_FRAME_DATA_DISPLAYMATRIX, + (** + * Active Format Description data consisting of a single byte as specified + * in ETSI TS 101 154 using AVActiveFormatDescription enum. + *) + AV_FRAME_DATA_AFD, + (** + * Motion vectors exported by some codecs (on demand through the export_mvs + * flag set in the libavcodec AVCodecContext flags2 option). + * The data is the AVMotionVector struct defined in + * libavutil/motion_vector.h. + *) + AV_FRAME_DATA_MOTION_VECTORS, + (** + * Recommmends skipping the specified number of samples. This is exported + * only if the "skip_manual" AVOption is set in libavcodec. + * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. + * @code + * u32le number of samples to skip from start of this packet + * u32le number of samples to skip from end of this packet + * u8 reason for start skip + * u8 reason for end skip (0=padding silence, 1=convergence) + * @endcode + *) + AV_FRAME_DATA_SKIP_SAMPLES, + (** + * This side data must be associated with an audio frame and corresponds to + * enum AVAudioServiceType defined in avcodec.h. + *) + AV_FRAME_DATA_AUDIO_SERVICE_TYPE, + (** + * Mastering display metadata associated with a video frame. The payload is + * an AVMasteringDisplayMetadata type and contains information about the + * mastering display color volume. + *) + AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, + (** + * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. + * This is set on the first frame of a GOP that has a temporal reference of 0. + *) + AV_FRAME_DATA_GOP_TIMECODE + ); + + TAVActiveFormatDescription = ( + AV_AFD_SAME = 8, + AV_AFD_4_3 = 9, + AV_AFD_16_9 = 10, + AV_AFD_14_9 = 11, + AV_AFD_4_3_SP_14_9 = 13, + AV_AFD_16_9_SP_14_9 = 14, + AV_AFD_SP_4_3 = 15 + ); {TAVActiveFormatDescription} + + PAVFrameSideData = ^TAVFrameSideData; +(** + * Structure to hold side data for an AVFrame. + * + * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added + * to the end with a minor bump. + *) + TAVFrameSideData = record + type_: TAVFrameSideDataType; + data: PByte; + size: cint; + metadata: TAVDictionary; + buf: PAVBufferRef; + end; {TAVFrameSideData} + +(** + * This structure describes decoded (raw) audio or video data. + * + * AVFrame must be allocated using av_frame_alloc(). Note that this only + * allocates the AVFrame itself, the buffers for the data must be managed + * through other means (see below). + * AVFrame must be freed with av_frame_free(). + * + * AVFrame is typically allocated once and then reused multiple times to hold + * different data (e.g. a single AVFrame to hold frames received from a + * decoder). In such a case, av_frame_unref() will free any references held by + * the frame and reset it to its original clean state before it + * is reused again. + * + * The data described by an AVFrame is usually reference counted through the + * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / + * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at + * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, + * every single data plane must be contained in one of the buffers in + * AVFrame.buf or AVFrame.extended_buf. + * There may be a single buffer for all the data, or one separate buffer for + * each plane, or anything in between. + * + * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added + * to the end with a minor bump. + * Similarly fields that are marked as to be only accessed by + * av_opt_ptr() can be reordered. This allows 2 forks to add fields + * without breaking compatibility with each other. + * + * Fields can be accessed through AVOptions, the name string used, matches the + * C structure field name for fields accessable through AVOptions. The AVClass + * for AVFrame can be obtained from avcodec_get_frame_class() + *) + PPAVFrame = ^PAVFrame; + PAVFrame = ^TAVFrame; + TAVFrame = record + (** + * pointer to the picture/channel planes. + * This might be different from the first allocated byte + * + * Some decoders access areas outside 0,0 - width,height, please + * see avcodec_align_dimensions2(). Some filters and swscale can read + * up to 16 bytes beyond the planes, if these filters are to be used, + * then 16 extra bytes must be allocated. + * + * NOTE: Except for hwaccel formats, pointers not needed by the format + * MUST be set to NULL. + *) + data: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; + + (** + * For video, size in bytes of each picture line. + * For audio, size in bytes of each plane. + * + * For audio, only linesize[0] may be set. For planar audio, each channel + * plane must be the same size. + * + * For video the linesizes should be multiples of the CPUs alignment + * preference, this is 16 or 32 for modern desktop CPUs. + * Some code requires such alignment other code can be slower without + * correct alignment, for yet other it makes no difference. + * + * @note The linesize may be larger than the size of usable data -- there + * may be extra padding present for performance reasons. + *) + linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; + + (** + * pointers to the data planes/channels. + * + * For video, this should simply point to data[]. + * + * For planar audio, each channel has a separate data pointer, and + * linesize[0] contains the size of each channel buffer. + * For packed audio, there is just one data pointer, and linesize[0] + * contains the total size of the buffer for all channels. + * + * Note: Both data and extended_data will always be set by get_buffer(), + * but for planar audio with more channels that can fit in data, + * extended_data must be used in order to access all channels. + *) + extended_data: ^pbyte; + + (** + * width and height of the video frame + *) + width, height: cint; + (** + * number of audio samples (per channel) described by this frame + *) + nb_samples: cint; + + (** + * format of the frame, -1 if unknown or unset + * Values correspond to enum AVPixelFormat for video frames, + * enum AVSampleFormat for audio) + *) + format: cint; + + (** + * 1 -> keyframe, 0-> not + *) + key_frame: cint; + + (** + * Picture type of the frame + *) + pict_type: TAVPictureType; + + (** + * sample aspect ratio for the video frame, 0/1 if unknown/unspecified + *) + sample_aspect_ratio: TAVRational; + + (** + * presentation timestamp in time_base units (time when frame should be shown to user) + *) + pts: cint64; + + (** + * pts copied from the AVPacket that was decoded to produce this frame + *) + pkt_pts: cint64; + + (** + * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) + * This is also the Presentation time of this AVFrame calculated from + * only AVPacket.dts values without pts values. + *) + pkt_dts: cint64; + + (** + * picture number in bitstream order + *) + coded_picture_number: cint; + + (** + * picture number in display order + *) + display_picture_number: cint; + + (** + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) + *) + quality: cint; + + (** + * for some private data of the user + *) + opaque: pointer; + +{$IFDEF FF_API_ERROR_FRAME} + (** + * @deprecated unused + *) + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; {deprecated} +{$ENDIF} + + (** + * When decoding, this signals how much the picture must be delayed. + * extra_delay = repeat_pict / (2*fps) + *) + repeat_pict: cint; + + (** + * The content of the picture is interlaced. + *) + interlaced_frame: cint; + + (** + * If the content is interlaced, is top field displayed first. + *) + top_field_first: cint; + + (** + * Tell user application that palette has changed from previous frame. + *) + palette_has_changed: cint; + + (** + * reordered opaque 64 bits (generally an integer or a double precision float + * PTS but can be anything). + * The user sets AVCodecContext.reordered_opaque to represent the input at + * that time, + * the decoder reorders values as needed and sets AVFrame.reordered_opaque + * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque + * @deprecated in favor of pkt_pts + *) + reordered_opaque: cint64; + + (** + * Sample rate of the audio data. + *) + sample_rate: cint; + + (** + * Channel layout of the audio data. + *) + channel_layout: cuint64; + + (** + * AVBuffer references backing the data for this frame. If all elements of + * this array are NULL, then this frame is not reference counted. This array + * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must + * also be non-NULL for all j < i. + * + * There may be at most one AVBuffer per data plane, so for video this array + * always contains all the references. For planar audio with more than + * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in + * this array. Then the extra AVBufferRef pointers are stored in the + * extended_buf array. + *) + buf: array [0..AV_NUM_DATA_POINTERS - 1] of PAVBufferRef; + + (** + * For planar audio which requires more than AV_NUM_DATA_POINTERS + * AVBufferRef pointers, this array will hold all the references which + * cannot fit into AVFrame.buf. + * + * Note that this is different from AVFrame.extended_data, which always + * contains all the pointers. This array only contains the extra pointers, + * which cannot fit into AVFrame.buf. + * + * This array is always allocated using av_malloc() by whoever constructs + * the frame. It is freed in av_frame_unref(). + *) + extended_buf: PPAVBufferRef; + + (** + * Number of elements in extended_buf. + *) + nb_extended_buf: cint; + + side_data: ^PAVFrameSideData; + nb_side_data: cint; + + (** + * @defgroup lavu_frame_flags AV_FRAME_FLAGS + * Flags describing additional frame properties. + * + * @ + *) + + (** + * Frame flags, a combination of @ref lavu_frame_flags + *) + flags: cint; + + (** + * MPEG vs JPEG YUV range. + * It must be accessed using av_frame_get_color_range() and + * av_frame_set_color_range(). + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_range: TAVColorRange; + + color_primaries: TAVColorPrimaries; + + color_trc: TAVColorTransferCharacteristic; + + (** + * YUV colorspace type. + * It must be accessed using av_frame_get_colorspace() and + * av_frame_set_colorspace(). + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + colorspace: TAVColorSpace; + + chroma_location: TAVChromaLocation; + + (** + * frame timestamp estimated using various heuristics, in stream time base + * Code outside libavutil should access this field using: + * av_frame_get_best_effort_timestamp(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + best_effort_timestamp: cint64; + + (** + * reordered pos from the last AVPacket that has been input into the decoder + * Code outside libavutil should access this field using: + * av_frame_get_pkt_pos(frame) + * - encoding: unused + * - decoding: Read by user. + *) + pkt_pos: cint64; + + (** + * duration of the corresponding packet, expressed in + * AVStream->time_base units, 0 if unknown. + * Code outside libavutil should access this field using: + * av_frame_get_pkt_duration(frame) + * - encoding: unused + * - decoding: Read by user. + *) + pkt_duration: cint64; + + (** + * metadata. + * Code outside libavutil should access this field using: + * av_frame_get_metadata(frame) + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + metadata: PAVDictionary; + + (** + * decode error flags of the frame, set to a combination of + * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there + * were errors during the decoding. + * Code outside libavutil should access this field using: + * av_frame_get_decode_error_flags(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + decode_error_flags: cint; + + (** + * number of audio channels, only used for audio. + * Code outside libavutil should access this field using: + * av_frame_get_channels(frame) + * - encoding: unused + * - decoding: Read by user. + *) + channels: cint; + + (** + * size of the corresponding packet containing the compressed + * frame. It must be accessed using av_frame_get_pkt_size() and + * av_frame_set_pkt_size(). + * It is set to a negative value if unknown. + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + pkt_size: cint; + +{$IFDEF FF_API_FRAME_QP} + (** + * QP table + * Not to be accessed directly from outside libavutil + *) + qscale_table: PByte; {deprecated} + (** + * QP store stride + * Not to be accessed directly from outside libavutil + *) + qstride: cint; {deprecated} + + qscale_type: cint; {deprecated} + (** + * Not to be accessed directly from outside libavutil + *) + qp_table_buf: PAVBufferRef; {deprecated} +{$ENDIF} + (** + * For hwaccel-format frames, this should be a reference to the + * AVHWFramesContext describing the frame. + *) + hw_frames_ctx: PAVBufferRef; + end; {TAVFrame} + +(** + * Accessors for some AVFrame fields. + * The position of these field in the structure is not part of the ABI, + * they should not be accessed directly outside libavutil. + *) +function av_frame_get_best_effort_timestamp(frame: {const} PAVFrame): cint64; + cdecl; external av__codec; overload; +procedure av_frame_set_best_effort_timestamp(frame: PAVFrame; val: cint64); + cdecl; external av__codec; overload; +function av_frame_get_pkt_duration (frame: {const} PAVFrame): cint64; + cdecl; external av__codec; overload; +procedure av_frame_get_pkt_duration (frame: PAVFrame; val: cint64); + cdecl; external av__codec; overload; +function av_frame_get_pkt_pos (frame: {const} PAVFrame): cint64; + cdecl; external av__codec; overload; +procedure av_frame_get_pkt_pos (frame: PAVFrame; val: cint64); + cdecl; external av__codec; overload; +function av_frame_get_channel_layout (frame: {const} PAVFrame): cint64; + cdecl; external av__codec; overload; +procedure av_frame_get_channel_layout (frame: PAVFrame; val: cint64); + cdecl; external av__codec; overload; +function av_frame_get_channels (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_channels (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_sample_rate (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_sample_rate (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_metadata (frame: {const} PAVFrame): PAVDictionary; + cdecl; external av__codec; +procedure av_frame_set_metadata (frame: PAVFrame; val: PAVDictionary); + cdecl; external av__codec; +function av_frame_get_decode_error_flags (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_decode_error_flags (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_pkt_size (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_pkt_size (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function avpriv_frame_get_metadatap(frame: PAVFrame): PPAVDictionary; + cdecl; external av__codec; +{$IFDEF FF_API_FRAME_QP} +function av_frame_get_qp_table(f: PAVFrame; stride: pcint; type_: pcint): PByte; + cdecl; external av__codec; +function av_frame_set_qp_table(f: PAVFrame; buf: PAVBufferRef; stride: cint; type_: cint): cint; + cdecl; external av__codec; +{$ENDIF} +function av_frame_get_colorspace(frame: {const} PAVFrame): TAVColorSpace; + cdecl; external av__codec; +procedure av_frame_set_colorspace(frame: PAVFrame; val: TAVColorSpace); + cdecl; external av__codec; +procedure av_frame_set_color_range(frame: PAVFrame; val: TAVColorSpace); + cdecl; external av__codec; + +(** + * Get the name of a colorspace. + * @return a static string identifying the colorspace; can be NULL. + *) +function av_get_colorspace_name(val: TAVColorSpace): PAnsiChar; + cdecl; external av__codec; + +(** + * Allocate an AVFrame and set its fields to default values. The resulting + * struct must be freed using av_frame_free(). + * + * @return An AVFrame filled with default values or NULL on failure. + * + * @note this only allocates the AVFrame itself, not the data buffers. Those + * must be allocated through other means, e.g. with av_frame_get_buffer() or + * manually. + *) +function av_frame_alloc(): PAVFrame; + cdecl; external av__util; + +(** + * Free the frame and any dynamically allocated objects in it, + * e.g. extended_data. If the frame is reference counted, it will be + * unreferenced first. + * + * @param frame frame to be freed. The pointer will be set to NULL. + *) +procedure av_frame_free(frame: PPAVFrame); + cdecl; external av__util; + +(** + * Set up a new reference to the data described by the source frame. + * + * Copy frame properties from src to dst and create a new reference for each + * AVBufferRef from src. + * + * If src is not reference counted, new buffers are allocated and the data is + * copied. + * + * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), + * or newly allocated with av_frame_alloc() before calling this + * function, or undefined behavior will occur. + * + * @return 0 on success, a negative AVERROR on error + *) +function av_frame_ref(dst: PAVFrame; src: {const} PAVFrame): cint; + cdecl; external av__codec; + +(** + * Create a new frame that references the same data as src. + * + * This is a shortcut for av_frame_alloc()+av_frame_ref(). + * + * @return newly created AVFrame on success, NULL on error. + *) +function av_frame_clone(src: {const} PAVFrame): PAVFrame; + cdecl; external av__codec; + +(** + * Unreference all the buffers referenced by frame and reset the frame fields. + *) +procedure av_frame_unref(frame: PAVFrame); + cdecl; external av__util; + +(** + * Move everything contained in src to dst and reset src. + * + * @warning: dst is not unreferenced, but directly overwritten without reading + * or deallocating its contents. Call av_frame_unref(dst) manually + * before calling this function to ensure that no memory is leaked. + *) +procedure av_frame_move_ref(dst, src: PAVFrame); + cdecl; external av__codec; + +(** + * Allocate new buffer(s) for audio or video data. + * + * The following fields must be set on frame before calling this function: + * - format (pixel format for video, sample format for audio) + * - width and height for video + * - nb_samples and channel_layout for audio + * + * This function will fill AVFrame.data and AVFrame.buf arrays and, if + * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. + * For planar formats, one buffer will be allocated for each plane. + * + * @warning: if frame already has been allocated, calling this function will + * leak memory. In addition, undefined behavior can occur in certain + * cases. + * + * @param frame frame in which to store the new buffers. + * @param align required buffer size alignment + * + * @return 0 on success, a negative AVERROR on error. + *) +function av_frame_get_buffer(frame: PAVFrame; align: cint): cint; + cdecl; external av__codec; + +(** + * Check if the frame data is writable. + * + * @return A positive value if the frame data is writable (which is true if and + * only if each of the underlying buffers has only one reference, namely the one + * stored in this frame). Return 0 otherwise. + * + * If 1 is returned the answer is valid until av_buffer_ref() is called on any + * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). + * + * @see av_frame_make_writable(), av_buffer_is_writable() + *) +function av_frame_is_writable(frame: PAVFrame): cint; + cdecl; external av__codec; + +(** + * Ensure that the frame data is writable, avoiding data copy if possible. + * + * Do nothing if the frame is writable, allocate new buffers and copy the data + * if it is not. + * + * @return 0 on success, a negative AVERROR on error. + * + * @see av_frame_is_writable(), av_buffer_is_writable(), + * av_buffer_make_writable() + *) +function av_frame_make_writable(frame: PAVFrame): cint; + cdecl; external av__codec; + +(** + * Copy the frame data from src to dst. + * + * This function does not allocate anything, dst must be already initialized and + * allocated with the same parameters as src. + * + * This function only copies the frame data (i.e. the contents of the data / + * extended data arrays), not any other properties. + * + * @return >= 0 on success, a negative AVERROR on error. + *) +function av_frame_copy(dst: PAVFrame; src: {const} PAVFrame): cint; + cdecl; external av__codec; + +(** + * Copy only "metadata" fields from src to dst. + * + * Metadata for the purpose of this function are those fields that do not affect + * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample + * aspect ratio (for video), but not width/height or channel layout. + * Side data is also copied. + *) +function av_frame_copy_props(dst: PAVFrame; src: {const} PAVFrame): cint; + cdecl; external av__codec; + +(** + * Get the buffer reference a given data plane is stored in. + * + * @param plane index of the data plane of interest in frame->extended_data. + * + * @return the buffer reference that contains the plane or NULL if the input + * frame is not valid. + *) +function av_frame_get_plane_buffer(frame: PAVFrame; plane: cint): PAVBufferRef; + cdecl; external av__codec; + +(** + * Add a new side data to a frame. + * + * @param frame a frame to which the side data should be added + * @param type type of the added side data + * @param size size of the side data + * + * @return newly added side data on success, NULL on error + *) +function av_frame_new_side_data(frame: PAVFrame; + type_: TAVFrameSideDataType; + size: cint): PAVFrameSideData; + cdecl; external av__codec; + +(** + * @return a pointer to the side data of a given type on success, NULL if there + * is no side data with such type in this frame. + *) +function av_frame_get_side_data(frame: {const} PAVFrame; type_: TAVFrameSideDataType): PAVFrameSideData; + cdecl; external av__codec; + +(** + * If side data of the supplied type exists in the frame, free it and remove it + * from the frame. + *) +procedure av_frame_remove_side_data(frame: PAVFrame; type_: TAVFrameSideDataType); + cdecl; external av__codec; + +(** + * @return a string identifying the side data type + *) +function av_frame_side_data_name(type_: TAVFrameSideDataType): PAnsiChar; + cdecl; external av__codec; + diff --git a/src/lib/ffmpeg-3.1/libavutil/log.pas b/src/lib/ffmpeg-3.1/libavutil/log.pas new file mode 100644 index 00000000..c184047f --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/log.pas @@ -0,0 +1,545 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/log.h + * avutil version 54.7.100 + * + *) + +(** + * @file + * log + *) + +type + (* from opt.h *) + TAVOptionType = ( + AV_OPT_TYPE_FLAGS, + AV_OPT_TYPE_INT, + AV_OPT_TYPE_INT64, + AV_OPT_TYPE_DOUBLE, + AV_OPT_TYPE_FLOAT, + AV_OPT_TYPE_STRING, + AV_OPT_TYPE_RATIONAL, + AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length + AV_OPT_TYPE_DICT, + AV_OPT_TYPE_CONST = 128, + AV_OPT_TYPE_BOOL = $424F4F4C, ///< MKBETAG('B','O','O','L'), + AV_OPT_TYPE_CHANNEL_LAYOUT = $43484C41, ///< MKBETAG('C','H','L','A'), + AV_OPT_TYPE_COLOR = $434F4C52, ///< MKBETAG('C','O','L','R'), + AV_OPT_TYPE_DURATION = $44555220, ///< MKBETAG('D','U','R',' '), + AV_OPT_TYPE_PIXEL_FMlT = $50464D54, ///< MKBETAG('P','F','M','T') + AV_OPT_TYPE_SAMPLE_FMT = $53464D54, ///< MKBETAG('S','F','M','T') + AV_OPT_TYPE_IMAGE_SIZE = $53495A45, ///< MKBETAG('S','I','Z','E'), offset must point to two consecutive integers + AV_OPT_TYPE_VIDEO_RATE = $56524154 ///< MKBETAG('V','R','A','T'), offset must point to TAVRational + ); + +const + AV_OPT_FLAG_ENCODING_PARAM = 1; ///< a generic parameter which can be set by the user for muxing or encoding + AV_OPT_FLAG_DECODING_PARAM = 2; ///< a generic parameter which can be set by the user for demuxing or decoding +{$IFDEF FF_API_OPT_TYPE_METADATA} + AV_OPT_FLAG_METADATA = 4; ///< some data extracted or inserted into the file like title, comment, ... +{$ENDIF} + AV_OPT_FLAG_AUDIO_PARAM = 8; + AV_OPT_FLAG_VIDEO_PARAM = 16; + AV_OPT_FLAG_SUBTITLE_PARAM = 32; + (** + * The option is intended for exporting values to the caller. + *) + AV_OPT_FLAG_EXPORT = 64; + (** + * The option may not be set through the AVOptions API, only read. + * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. + *) + AV_OPT_FLAG_READONLY = 128; + AV_OPT_FLAG_FILTERING_PARAM = 1 shl 16; ///< a generic parameter which can be set by the user for filtering + +type + (** + * AVOption + *) + PAVOption = ^TAVOption; + TAVOption = record + name: {const} PAnsiChar; + + (** + * short English help text + * @todo What about other languages? + *) + help: {const} PAnsiChar; + + (** + * The offset relative to the context structure where the option + * value is stored. It should be 0 for named constants. + *) + offset: cint; + type_: TAVOptionType; + + (** + * the default value for scalar options + *) + default_val: record + case cint of + 0: (i64: cint64); + 1: (dbl: cdouble); + 2: (str: PAnsiChar); + (* TODO those are unused now *) + 3: (q: TAVRational); + end; + min: cdouble; ///< minimum valid value for the option + max: cdouble; ///< maximum valid value for the option + + flags: cint; +//FIXME think about enc-audio, ... style flags + + (** + * The logical unit to which the option belongs. Non-constant + * options and corresponding named constants share the same + * unit. May be NULL. + *) + unit_: {const} PAnsiChar; + end; + +type + PAVClassCategory = ^TAVClassCategory; + TAVClassCategory = ( + AV_CLASS_CATEGORY_NA = 0, + AV_CLASS_CATEGORY_INPUT, + AV_CLASS_CATEGORY_OUTPUT, + AV_CLASS_CATEGORY_MUXER, + AV_CLASS_CATEGORY_DEMUXER, + AV_CLASS_CATEGORY_ENCODER, + AV_CLASS_CATEGORY_DECODER, + AV_CLASS_CATEGORY_FILTER, + AV_CLASS_CATEGORY_BITSTREAM_FILTER, + AV_CLASS_CATEGORY_SWSCALER, + AV_CLASS_CATEGORY_SWRESAMPLER, + AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, + AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, + AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, + AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, + AV_CLASS_CATEGORY_DEVICE_OUTPUT, + AV_CLASS_CATEGORY_DEVICE_INPUT, + AV_CLASS_CATEGORY_NB ///< not part of ABI/API + ); + +(* +#define AV_IS_INPUT_DEVICE(category) \ + (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ + ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ + ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) + +#define AV_IS_OUTPUT_DEVICE(category) \ + (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ + ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ + ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) +*) + +// struct AVOptionRanges; + + (** + * A single allowed range of values, or a single allowed value. + *) + PAVOptionRange = ^TAVOptionRange; + PPAVOptionRange = ^PAVOptionRange; + TAVOptionRange = record + str: {const} PAnsiChar; + (** + * Value range. + * For string ranges this represents the min/max length. + * For dimensions this represents the min/max pixel count or width/height in multi-component case. + *) + value_min, value_max: cdouble; + (** + * Value's component range. + * For string this represents the unicode range for chars, 0-127 limits to ASCII. + *) + component_min, component_max: cdouble; + (** + * Range flag. + * If set to 1 the struct encodes a range, if set to 0 a single value. + *) + is_range: cint; + end; + + (** + * List of AVOptionRange structs. + *) + PAVOptionRanges = ^TAVOptionRanges; + PPAVOptionRanges = ^PAVOptionRanges; + TAVOptionRanges = record + (** + * Array of option ranges. + * + * Most of option types use just one component. + * Following describes multi-component option types: + * + * AV_OPT_TYPE_IMAGE_SIZE: + * component index 0: range of pixel count (width * height). + * component index 1: range of width. + * component index 2: range of height. + * + * @note To obtain multi-component version of this structure, user must + * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or + * av_opt_query_ranges_default function. + * + * Multi-component range can be read as in following example: + * + * @code + * int range_index, component_index; + * AVOptionRanges *ranges; + * AVOptionRange *range[3]; //may require more than 3 in the future. + * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE); + * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) { + * for (component_index = 0; component_index < ranges->nb_components; component_index++) + * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index]; + * //do something with range here. + * } + * av_opt_freep_ranges(&ranges); + * @endcode + *) + range: PPAVOptionRange; + (** + * Number of ranges per component. + *) + nb_ranges: cint; + (** + * Number of componentes. + *) + nb_components: cint; + end; + +(** + * Describe the class of an AVClass context structure. That is an + * arbitrary struct of which the first field is a pointer to an + * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). + *) + PAVClass = ^TAVClass; + TAVClass = record + (** + * The name of the class; usually it is the same name as the + * context structure type to which the AVClass is associated. + *) + class_name: PAnsiChar; + + (** + * A pointer to a function which returns the name of a context + * instance ctx associated with the class. + *) + item_name: function(ctx: pointer): PAnsiChar; cdecl; + + (** + * a pointer to the first option specified in the class if any or NULL + * + * @see av_set_default_options() + *) + option: PAVOption; + + (** + * LIBAVUTIL_VERSION with which this structure was created. + * This is used to allow fields to be added without requiring major + * version bumps everywhere. + *) + version: cint; + + (** + * Offset in the structure where log_level_offset is stored. + * 0 means there is no such variable + *) + log_level_offset_offset: cint; + + (** + * Offset in the structure where a pointer to the parent context for + * logging is stored. For example a decoder could pass its AVCodecContext + * to eval as such a parent context, which an av_log() implementation + * could then leverage to display the parent context. + * The offset can be NULL. + *) + parent_log_context_offset: cint; + + (** + * Return next AVOptions-enabled child or NULL + *) + child_next: function (obj: pointer; prev: pointer): pointer; cdecl; + + (** + * Return an AVClass corresponding to the next potential + * AVOptions-enabled child. + * + * The difference between child_next and this is that + * child_next iterates over _already existing_ objects, while + * child_class_next iterates over _all possible_ children. + *) + child_class_next: function (prev: {const} PAVClass): {const} PAVClass; cdecl; + + (** + * Category used for visualization (like color) + * This is only set if the category is equal for all objects using this class. + * available since version (51 << 16 | 56 << 8 | 100) + *) + category: TAVClassCategory; + + (** + * Callback to return the category. + * available since version (51 << 16 | 59 << 8 | 100) + *) + get_category: function (ctx: pointer): PAVClassCategory; cdecl; + + (** + * Callback to return the supported/allowed ranges. + * available since version (52.12) + *) + query_ranges: function (P: PPAVOptionRanges; obj: pointer; key: {const} PAnsiChar; flags: cint): cint; cdecl; +end; + +const +(** + * Print no output. + *) + AV_LOG_QUIET = -8; + +(** + * Something went really wrong and we will crash now. + *) + AV_LOG_PANIC = 0; + +(** + * Something went wrong and recovery is not possible. + * For example, no header was found for a format which depends + * on headers or an illegal combination of parameters is used. + *) + AV_LOG_FATAL = 8; + +(** + * Something went wrong and cannot losslessly be recovered. + * However, not all future data is affected. + *) + AV_LOG_ERROR = 16; + +(** + * Something somehow does not look correct. This may or may not + * lead to problems. An example would be the use of '-vstrict -2'. + *) + AV_LOG_WARNING = 24; + +(** + * Standard information. + *) + AV_LOG_INFO = 32; + +(** + * Detailed information. + *) + AV_LOG_VERBOSE = 40; + +(** + * Stuff which is only useful for libav* developers. + *) + AV_LOG_DEBUG = 48; + +(** + * Extremely verbose debugging, useful for libav* development. + *) + AV_LOG_TRACE = 56; + + AV_LOG_MAX_OFFSET = (AV_LOG_DEBUG - AV_LOG_QUIET); + +(** + * Sets additional colors for extended debugging sessions. + * @code + av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); + @endcode + * Requires 256color terminal support. Uses outside debugging is not + * recommended. + *) +{** to be translated if needed + AV_LOG_C(x) (x << 8) +**} + +(** + * Send the specified message to the log if the level is less than or equal + * to the current av_log_level. By default, all logging messages are sent to + * stderr. This behavior can be altered by setting a different logging callback + * function. + * @see av_log_set_callback + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct or NULL if general log. + * @param level The importance level of the message expressed using a @ref + * lavu_log_constants "Logging Constant". + * @param fmt The format string (printf-compatible) that specifies how + * subsequent arguments are converted to output. + *) +{** to be translated if needed +void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); +**} + +type + va_list = pointer; + +(** + * Send the specified message to the log if the level is less than or equal + * to the current av_log_level. By default, all logging messages are sent to + * stderr. This behavior can be altered by setting a different logging callback + * function. + * @see av_log_set_callback + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message expressed using a @ref + * lavu_log_constants "Logging Constant". + * @param fmt The format string (printf-compatible) that specifies how + * subsequent arguments are converted to output. + * @param vl The arguments referenced by the format string. + *) +procedure av_vlog(avcl: pointer; level: cint; fmt: {const} PAnsiChar; vl: va_list); + cdecl; external av__util; + +(** + * Get the current log level + * + * @see lavu_log_constants + * + * @return Current log level + *) +function av_log_get_level(): cint; + cdecl; external av__util; + +(** + * Set the log level + * + * @see lavu_log_constants + * + * @param level Logging level + *) +procedure av_log_set_level(level: cint); + cdecl; external av__util; + +(** + * Set the logging callback + * + * @note The callback must be thread safe, even if the application does not use + * threads itself as some codecs are multithreaded. + * + * @see av_log_default_callback + * + * @param callback A logging function with a compatible signature. + *) +{** to be translated if needed +void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); +**} + +(** + * Default logging callback + * + * It prints the message to stderr, optionally colorizing it. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message expressed using a @ref + * lavu_log_constants "Logging Constant". + * @param fmt The format string (printf-compatible) that specifies how + * subsequent arguments are converted to output. + * @param vl The arguments referenced by the format string. + *) +{** to be translated if needed +void av_log_default_callback(void* avcl, int level, const char *fmt, va_list vl); +**} + +(** + * Return the context name + * + * @param ctx The AVClass context + * + * @return The AVClass class_name + *) +function av_default_item_name(ctx: pointer): PAnsiChar; + cdecl; external av__util; +function av_default_get_category(ptr: pointer): TAVClassCategory; + cdecl; external av__util; + +(** + * Format a line of log the same way as the default callback. + * @param line buffer to receive the formatted line + * @param line_size size of the buffer + * @param print_prefix used to store whether the prefix must be printed; + * must point to a persistent integer initially set to 1 + *) +procedure av_log_format_line(ptr: pointer; level: cint; fmt: {const} PAnsiChar; vl: va_list; + line: PAnsiChar; line_size: cint; print_prefix: Pcint); + cdecl; external av__util; + +(** + * Format a line of log the same way as the default callback. + * @param line buffer to receive the formatted line; + * may be NULL if line_size is 0 + * @param line_size size of the buffer; at most line_size-1 characters will + * be written to the buffer, plus one null terminator + * @param print_prefix used to store whether the prefix must be printed; + * must point to a persistent integer initially set to 1 + * @return Returns a negative value if an error occurred, otherwise returns + * the number of characters that would have been written for a + * sufficiently large buffer, not including the terminating null + * character. If the return value is not less than line_size, it means + * that the log message was truncated to fit the buffer. + *) +function av_log_format_line2(ptr: pointer; level: cint; fmt: {const} PAnsiChar; vl: va_list; + line: PAnsiChar; line_size: cint; print_prefix: Pcint): cint; + cdecl; external av__util; + +{$IFDEF FF_API_DLOG} +(** + * av_dlog macros + * @deprecated unused + * Useful to print debug messages that shouldn't get compiled in normally. + *) +(** to be translated if needed +#ifdef DEBUG +# define av_dlog(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__) +#else +# define av_dlog(pctx, ...) do { if (0) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0) +#endif +**) +{$ENDIF} //FF_API_DLOG + +const +(** + * Skip repeated messages, this requires the user app to use av_log() instead of + * (f)printf as the 2 would otherwise interfere and lead to + * "Last message repeated x times" messages below (f)printf messages with some + * bad luck. + * Also to receive the last, "last repeated" line if any, the user app must + * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end + *) + AV_LOG_SKIP_REPEATED = 1; + +(** + * Include the log severity in messages originating from codecs. + * + * Results in messages such as: + * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts + *) + AV_LOG_PRINT_LEVEL = 2; + +procedure av_log_set_flags(arg: cint); + cdecl; external av__util; + +function av_log_get_flags: cint; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.1/libavutil/mathematics.pas b/src/lib/ffmpeg-3.1/libavutil/mathematics.pas new file mode 100644 index 00000000..3815ea1f --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/mathematics.pas @@ -0,0 +1,145 @@ +(* + * copyright (c) 2005-2012 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/mathematics.h + * avutil version 54.7.100 + * + *) + +const + M_E = 2.7182818284590452354; // e + M_LN2 = 0.69314718055994530942; // log_e 2 + M_LN10 = 2.30258509299404568402; // log_e 10 + M_LOG2_10 = 3.32192809488736234787; // log_2 10 + M_PHI = 1.61803398874989484820; // phi / golden ratio + M_PI = 3.14159265358979323846; // pi + M_PI_2 = 1.57079632679489661923; // pi/2 + M_SQRT1_2 = 0.70710678118654752440; // 1/sqrt(2) + M_SQRT2 = 1.41421356237309504880; // sqrt(2) + NAN = $7fc00000; + INFINITY = $7f800000; + +(** + * @addtogroup lavu_math + * @ + *) + +type + TAVRounding = ( + AV_ROUND_ZERO = 0, ///< Round toward zero. + AV_ROUND_INF = 1, ///< Round away from zero. + AV_ROUND_DOWN = 2, ///< Round toward -infinity. + AV_ROUND_UP = 3, ///< Round toward +infinity. + AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. + AV_ROUND_PASS_MINMAX = 8192 ///< Flag to pass INT64_MIN/MAX through instead of rescaling, this avoids special cases for AV_NOPTS_VALUE + ); + +(** + * Compute the greatest common divisor of a and b. + * + * @return gcd of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; + * if a == 0 and b == 0, returns 0. + *) +function av_gcd(a, b: cint64): cint64; + cdecl; external av__util; {av_const} + +(** + * Rescale a 64-bit integer with rounding to nearest. + * A simple a*b/c isn't possible as it can overflow. + *) +function av_rescale (a, b, c: cint64): cint64; + cdecl; external av__util; {av_const} + +(** + * Rescale a 64-bit integer with specified rounding. + * A simple a*b/c isn't possible as it can overflow. + * + * @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is + * INT64_MIN or INT64_MAX then a is passed through unchanged. + *) +function av_rescale_rnd (a, b, c: cint64; d: TAVRounding): cint64; + cdecl; external av__util; {av_const} + +(** + * Rescale a 64-bit integer by 2 rational numbers. + *) +function av_rescale_q (a: cint64; bq, cq: TAVRational): cint64; + cdecl; external av__util; {av_const} + +(** + * Rescale a 64-bit integer by 2 rational numbers with specified rounding. + * + * @return rescaled value a, or if AV_ROUND_PASS_MINMAX is set and a is + * INT64_MIN or INT64_MAX then a is passed through unchanged. + *) +function av_rescale_q_rnd(a: cint64; bq, cq: TAVRational; + d: TAVRounding): cint64; + cdecl; external av__util; {av_const} + +(** + * Compare 2 timestamps each in its own timebases. + * The result of the function is undefined if one of the timestamps + * is outside the int64_t range when represented in the others timebase. + * @return -1 if ts_a is before ts_b, 1 if ts_a is after ts_b or 0 if they represent the same position + *) +function av_compare_ts(ts_a: cint64; tb_a: TAVRational; ts_b: cint64; tb_b: TAVRational): cint; + cdecl; external av__util; + +(** + * Compare 2 integers modulo mod. + * That is we compare integers a and b for which only the least + * significant log2(mod) bits are known. + * + * @param mod must be a power of 2 + * @return a negative value if a is smaller than b + * a positiv value if a is greater than b + * 0 if a equals b + *) +function av_compare_mod(a, b, modVar: cuint64): cint64; + cdecl; external av__util; + +(** + * Rescale a timestamp while preserving known durations. + * + * @param in_ts Input timestamp + * @param in_tb Input timebase + * @param fs_tb Duration and *last timebase + * @param duration duration till the next call + * @param out_tb Output timebase + *) +function av_rescale_delta(in_tb: TAVRational; in_ts: cint64; fs_tb: TAVRational; duration: cint; last: Pcint64; out_tb: TAVRational): cint64; + cdecl; external av__util; + +(** + * Add a value to a timestamp. + * + * This function guarantees that when the same value is repeatly added that + * no accumulation of rounding errors occurs. + * + * @param ts Input timestamp + * @param ts_tb Input timestamp timebase + * @param inc value to add to ts + * @param inc_tb inc timebase + *) +function av_add_stable(ts_tb: TAVRational; ts: cint64; inc_tb: TAVRational; inc: cint64): cint64; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.1/libavutil/mem.pas b/src/lib/ffmpeg-3.1/libavutil/mem.pas new file mode 100644 index 00000000..2d049ae8 --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/mem.pas @@ -0,0 +1,369 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/mem.h + * avutil version 52.66.100 + * + *) + +(** + * @file + * error code definitions + *) + +(* memory handling functions *) + +(** + * Allocate a block of size bytes with alignment suitable for all + * memory accesses (including vectors if available on the CPU). + * @param size Size in bytes for the memory block to be allocated. + * @return Pointer to the allocated block, NULL if the block cannot + * be allocated. + * @see av_mallocz() + *) +function av_malloc(size: size_t): pointer; + cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)} + +(** + * Allocate a block of size * nmemb bytes with av_malloc(). + * @param nmemb Number of elements + * @param size Size of the single element + * @return Pointer to the allocated block, NULL if the block cannot + * be allocated. + * @see av_malloc() + *) +function av_malloc_array(nmemb: size_t; size: size_t): pointer; {$IFDEF HasInline}inline;{$ENDIF} {av_alloc_size(1, 2)} +// Note: defined in avutil.pas + +(** + * Allocate or reallocate a block of memory. + * If ptr is NULL and size > 0, allocate a new block. If + * size is zero, free the memory block pointed to by ptr. + * @param ptr Pointer to a memory block already allocated with + * av_realloc() or NULL. + * @param size Size in bytes of the memory block to be allocated or + * reallocated. + * @return Pointer to a newly-reallocated block or NULL if the block + * cannot be reallocated or the function is used to free the memory block. + * @warning Pointers originating from the av_malloc() family of functions must + * not be passed to av_realloc(). The former can be implemented using + * memalign() (or other functions), and there is no guarantee that + * pointers from such functions can be passed to realloc() at all. + * The situation is undefined according to POSIX and may crash with + * some libc implementations. + * @see av_fast_realloc() + *) +function av_realloc(ptr: pointer; size: size_t): pointer; + cdecl; external av__util; {av_alloc_size(2)} + +(** + * Allocate or reallocate a block of memory. + * This function does the same thing as av_realloc, except: + * - It takes two arguments and checks the result of the multiplication for + * integer overflow. + * - It frees the input block in case of failure, thus avoiding the memory + * leak with the classic "buf = realloc(buf); if (!buf) return -1;". + *) +function av_realloc_f(ptr: pointer; nelem: size_t; elsize: size_t): pointer; + cdecl; external av__util; + +(** + * Allocate or reallocate a block of memory. + * If *ptr is NULL and size > 0, allocate a new block. If + * size is zero, free the memory block pointed to by ptr. + * @param ptr Pointer to a pointer to a memory block already allocated + * with av_realloc(), or pointer to a pointer to NULL. + * The pointer is updated on success, or freed on failure. + * @param size Size in bytes for the memory block to be allocated or + * reallocated + * @return Zero on success, an AVERROR error code on failure. + * @warning Pointers originating from the av_malloc() family of functions must + * not be passed to av_reallocp(). The former can be implemented using + * memalign() (or other functions), and there is no guarantee that + * pointers from such functions can be passed to realloc() at all. + * The situation is undefined according to POSIX and may crash with + * some libc implementations. + *) +function av_reallocp(ptr: pointer; elsize: size_t): cint; + cdecl; external av__util; + +(** + * Allocate or reallocate an array. + * If ptr is NULL and nmemb > 0, allocate a new block. If + * nmemb is zero, free the memory block pointed to by ptr. + * @param ptr Pointer to a memory block already allocated with + * av_realloc() or NULL. + * @param nmemb Number of elements + * @param size Size of the single element + * @return Pointer to a newly-reallocated block or NULL if the block + * cannot be reallocated or the function is used to free the memory block. + * @warning Pointers originating from the av_malloc() family of functions must + * not be passed to av_realloc(). The former can be implemented using + * memalign() (or other functions), and there is no guarantee that + * pointers from such functions can be passed to realloc() at all. + * The situation is undefined according to POSIX and may crash with + * some libc implementations. + *) +function av_realloc_array(ptr: pointer; nmemb, size: size_t): pointer; {av_alloc_size(2, 3)} + cdecl; external av__util; + +(** + * Allocate or reallocate an array through a pointer to a pointer. + * If *ptr is NULL and nmemb > 0, allocate a new block. If + * nmemb is zero, free the memory block pointed to by ptr. + * @param ptr Pointer to a pointer to a memory block already allocated + * with av_realloc(), or pointer to a pointer to NULL. + * The pointer is updated on success, or freed on failure. + * @param nmemb Number of elements + * @param size Size of the single element + * @return Zero on success, an AVERROR error code on failure. + * @warning Pointers originating from the av_malloc() family of functions must + * not be passed to av_realloc(). The former can be implemented using + * memalign() (or other functions), and there is no guarantee that + * pointers from such functions can be passed to realloc() at all. + * The situation is undefined according to POSIX and may crash with + * some libc implementations. + *) +function av_reallocp_array(ptr: pointer; nmemb, size: size_t): cint; {av_alloc_size(2, 3)} + cdecl; external av__util; + +(** + * Free a memory block which has been allocated with av_malloc(z)() or + * av_realloc(). + * @param ptr Pointer to the memory block which should be freed. + * @note ptr = NULL is explicitly allowed. + * @note It is recommended that you use av_freep() instead. + * @see av_freep() + *) +procedure av_free(ptr: pointer); + cdecl; external av__util; + +(** + * Allocate a block of size bytes with alignment suitable for all + * memory accesses (including vectors if available on the CPU) and + * zeroes all the bytes of the block. + * @param size Size in bytes for the memory block to be allocated. + * @return Pointer to the allocated block, NULL if it cannot be allocated. + * @see av_malloc() + *) +function av_mallocz(size: size_t): pointer; + cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)} + +(** + * Allocate a block of nmemb * size bytes with alignment suitable for all + * memory accesses (including vectors if available on the CPU) and + * zero all the bytes of the block. + * The allocation will fail if nmemb * size is greater than or equal + * to INT_MAX. + * @param nmemb + * @param size + * @return Pointer to the allocated block, NULL if it cannot be allocated. + *) +function av_calloc(nmemb: size_t; size: size_t): pointer; + cdecl; external av__util; {av_malloc_attrib} + +(** + * Allocate a block of size * nmemb bytes with av_mallocz(). + * @param nmemb Number of elements + * @param size Size of the single element + * @return Pointer to the allocated block, NULL if the block cannot + * be allocated. + * @see av_mallocz() + * @see av_malloc_array() + *) +function av_mallocz_array(nmemb: size_t; size: size_t): pointer; {$IFDEF HasInline}inline;{$ENDIF} {av_alloc_size(1, 2)} +// Note: defined in avutil.pas + +(** + * Duplicate the string s. + * @param s string to be duplicated. + * @return Pointer to a newly-allocated string containing a + * copy of s or NULL if the string cannot be allocated. + *) +function av_strdup({const} s: PAnsiChar): PAnsiChar; + cdecl; external av__util; {av_malloc_attrib} + +(** + * Duplicate a substring of the string s. + * @param s string to be duplicated + * @param len the maximum length of the resulting string (not counting the + * terminating byte). + * @return Pointer to a newly-allocated string containing a + * copy of s or NULL if the string cannot be allocated. + *) +function av_strndup({const} s: PAnsiChar; len: size_t): PAnsiChar; + cdecl; external av__util; {av_malloc_attrib} + +(** + * Duplicate the buffer p. + * @param p buffer to be duplicated + * @return Pointer to a newly allocated buffer containing a + * copy of p or NULL if the buffer cannot be allocated. + *) +function av_memdup({const} p: pointer; size: size_t): pointer; + cdecl; external av__util; + +(** + * Free a memory block which has been allocated with av_malloc(z)() or + * av_realloc() and set the pointer pointing to it to NULL. + * @param ptr Pointer to the pointer to the memory block which should + * be freed. + * @note passing a pointer to a NULL pointer is safe and leads to no action. + * @see av_free() + *) +procedure av_freep (ptr: pointer); + cdecl; external av__util; + +(** + * Add an element to a dynamic array. + * + * The array to grow is supposed to be an array of pointers to + * structures, and the element to add must be a pointer to an already + * allocated structure. + * + * The array is reallocated when its size reaches powers of 2. + * Therefore, the amortized cost of adding an element is constant. + * + * In case of success, the pointer to the array is updated in order to + * point to the new grown array, and the number pointed to by nb_ptr + * is incremented. + * In case of failure, the array is freed, *tab_ptr is set to NULL and + * *nb_ptr is set to 0. + * + * @param tab_ptr pointer to the array to grow + * @param nb_ptr pointer to the number of elements in the array + * @param elem element to add + * @see av_dynarray_add_nofree(), av_dynarray2_add() + *) +procedure av_dynarray_add(tab_ptr: pointer; nb_ptr: Pcint; elem: pointer); + cdecl; external av__util; + +(** + * Add an element to a dynamic array. + * + * Function has the same functionality as av_dynarray_add(), + * but it doesn't free memory on fails. It returns error code + * instead and leave current buffer untouched. + * + * @param tab_ptr pointer to the array to grow + * @param nb_ptr pointer to the number of elements in the array + * @param elem element to add + * @return >=0 on success, negative otherwise. + * @see av_dynarray_add(), av_dynarray2_add() + *) +function av_dynarray_add_nofree(tab_ptr: pointer; nb_ptr: Pcint; elem: pointer): cint; + cdecl; external av__util; + +(** + * Add an element of size elem_size to a dynamic array. + * + * The array is reallocated when its number of elements reaches powers of 2. + * Therefore, the amortized cost of adding an element is constant. + * + * In case of success, the pointer to the array is updated in order to + * point to the new grown array, and the number pointed to by nb_ptr + * is incremented. + * In case of failure, the array is freed, *tab_ptr is set to NULL and + * *nb_ptr is set to 0. + * + * @param tab_ptr pointer to the array to grow + * @param nb_ptr pointer to the number of elements in the array + * @param elem_size size in bytes of the elements in the array + * @param elem_data pointer to the data of the element to add. If NULL, the space of + * the new added element is not filled. + * @return pointer to the data of the element to copy in the new allocated space. + * If NULL, the new allocated space is left uninitialized." + * @see av_dynarray_add(), av_dynarray_add_nofree() + *) +function av_dynarray2_add(tab_ptr: Pointer; nb_ptr: Pcint; elem_size: size_t; + {const} elem_data: Pcuint8): pointer; + cdecl; external av__util; + +(** + * Multiply two size_t values checking for overflow. + * @return 0 if success, AVERROR(EINVAL) if overflow. + *) +//static inline int av_size_mult(size_t a, size_t b, size_t *r) +{ + size_t t = a * b; + /* Hack inspired from glibc: only try the division if nelem and elsize + * are both greater than sqrt(SIZE_MAX). */ + if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) + return AVERROR(EINVAL); + *r = t; + return 0; +} + +(** + * Set the maximum size that may me allocated in one block. + *) +procedure av_max_alloc(max: size_t); + cdecl; external av__util; + +(** + * deliberately overlapping memcpy implementation + * @param dst destination buffer + * @param back how many bytes back we start (the initial size of the overlapping window), must be > 0 + * @param cnt number of bytes to copy, must be >= 0 + * + * cnt > back is valid, this will copy the bytes we just copied, + * thus creating a repeating pattern with a period length of back. + *) +procedure av_memcpy_backptr(dst: Pcuint8; back: cint; cnt: cint); + cdecl; external av__util; + +(** + * Reallocate the given block if it is not large enough, otherwise do nothing. + * + * @see av_realloc + *) +procedure av_fast_realloc(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__util; + +(** + * Allocate a buffer, reusing the given one if large enough. + * + * Contrary to av_fast_realloc the current buffer contents might not be + * preserved and on error the old buffer is freed, thus no special + * handling to avoid memleaks is necessary. + * + * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer + * @param size size of the buffer *ptr points to + * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and + * *size 0 if an error occurred. + *) +procedure av_fast_malloc(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__util; + +(** + * Allocate a buffer, reusing the given one if large enough. + * + * All newly allocated space is initially cleared + * Contrary to av_fast_realloc the current buffer contents might not be + * preserved and on error the old buffer is freed, thus no special + * handling to avoid memleaks is necessary. + * + * @param ptr pointer to pointer to already allocated buffer, overwritten with pointer to new buffer + * @param size size of the buffer *ptr points to + * @param min_size minimum size of *ptr buffer after returning, *ptr will be NULL and + * *size 0 if an error occurred. + *) +procedure av_fast_mallocz(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.1/libavutil/opt.pas b/src/lib/ffmpeg-3.1/libavutil/opt.pas new file mode 100644 index 00000000..87ec68aa --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/opt.pas @@ -0,0 +1,507 @@ +(* + * AVOptions + * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/opt.h + * avutil version 54.7.100 + * + *) + +(** + * Show the obj options. + * + * @param req_flags requested flags for the options to show. Show only the + * options for which it is opt->flags & req_flags. + * @param rej_flags rejected flags for the options to show. Show only the + * options for which it is !(opt->flags & req_flags). + * @param av_log_obj log context to use for showing the options + *) +function av_opt_show2(obj: pointer; av_log_obj: pointer; req_flags: cint; rej_flags: cint): cint; + cdecl; external av__util; + +(** + * Set the values of all AVOption fields to their default values. + * + * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) + *) +procedure av_opt_set_defaults(s: pointer); + cdecl; external av__util; + +(** + * Set the values of all AVOption fields to their default values. Only these + * AVOption fields for which (opt->flags & mask) == flags will have their + * default applied to s. + * + * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) + * @param mask combination of AV_OPT_FLAG_* + * @param flags combination of AV_OPT_FLAG_* + *) +procedure av_opt_set_defaults2(s: Pointer; mask: cint; flags: cint); + cdecl; external av__util; deprecated; + +(** + * Parse the key/value pairs list in opts. For each key/value pair + * found, stores the value in the field in ctx that is named like the + * key. ctx must be an AVClass context, storing is done using + * AVOptions. + * + * @param opts options string to parse, may be NULL + * @param key_val_sep a 0-terminated list of characters used to + * separate key from value + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other + * @return the number of successfully set key/value pairs, or a negative + * value corresponding to an AVERROR code in case of error: + * AVERROR(EINVAL) if opts cannot be parsed, + * the error code issued by av_set_string3() if a key/value pair + * cannot be set +*) +function av_set_options_string(ctx: pointer; opts: {const} PAnsiChar; + key_val_sep: {const} PAnsiChar; pairs_sep: {const} PAnsiChar): cint; + cdecl; external av__util; + +(** + * Parse the key-value pairs list in opts. For each key=value pair found, + * set the value of the corresponding option in ctx. + * + * @param ctx the AVClass object to set options on + * @param opts the options string, key-value pairs separated by a + * delimiter + * @param shorthand a NULL-terminated array of options names for shorthand + * notation: if the first field in opts has no key part, + * the key is taken from the first element of shorthand; + * then again for the second, etc., until either opts is + * finished, shorthand is finished or a named option is + * found; after that, all options must be named + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value, for example '=' + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other, for example ':' or ',' + * @return the number of successfully set key=value pairs, or a negative + * value corresponding to an AVERROR code in case of error: + * AVERROR(EINVAL) if opts cannot be parsed, + * the error code issued by av_set_string3() if a key/value pair + * cannot be set + * + * Options names must use only the following characters: a-z A-Z 0-9 - . / _ + * Separators must use characters distinct from option names and from each + * other. + *) +function av_opt_set_from_string(ctx: pointer; opts: {const} PAnsiChar; + shorthand: {const} PAnsiChar; + key_val_sep: {const} PAnsiChar; pairs_sep: {const} PAnsiChar): cint; + cdecl; external av__util; + +(** + * Free all allocated objects in obj. + *) +procedure av_opt_free(obj: pointer); + cdecl; external av__util; + +(** + * Check whether a particular flag is set in a flags field. + * + * @param field_name the name of the flag field option + * @param flag_name the name of the flag to check + * @return non-zero if the flag is set, zero if the flag isn't set, + * isn't of the right type, or the flags field doesn't exist. + *) +function av_opt_flag_is_set(obj: pointer; field_name: {const} PAnsiChar; flag_name: {const} PAnsiChar): cint; + cdecl; external av__util; + +(** + * Set all the options from a given dictionary on an object. + * + * @param obj a struct whose first element is a pointer to AVClass + * @param options options to process. This dictionary will be freed and replaced + * by a new one containing all options not found in obj. + * Of course this new dictionary needs to be freed by caller + * with av_dict_free(). + * + * @return 0 on success, a negative AVERROR if some option was found in obj, + * but could not be set. + * + * @see av_dict_copy() + *) +function av_opt_set_dict(obj: pointer; var options: PAVDictionary): cint; + cdecl; external av__util; + +(** + * Set all the options from a given dictionary on an object. + * + * @param obj a struct whose first element is a pointer to AVClass + * @param options options to process. This dictionary will be freed and replaced + * by a new one containing all options not found in obj. + * Of course this new dictionary needs to be freed by caller + * with av_dict_free(). + * @param search_flags A combination of AV_OPT_SEARCH_*. + * + * @return 0 on success, a negative AVERROR if some option was found in obj, + * but could not be set. + * + * @see av_dict_copy() + *) +function av_opt_set_dict2(obj: pointer; var options: PAVDictionary; search_flags: cint): cint; + cdecl; external av__util; + +(** + * Extract a key-value pair from the beginning of a string. + * + * @param ropts pointer to the options string, will be updated to + * point to the rest of the string (one of the pairs_sep + * or the final NUL) + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value, for example '=' + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other, for example ':' or ',' + * @param flags flags; see the AV_OPT_FLAG_* values below + * @param rkey parsed key; must be freed using av_free() + * @param rval parsed value; must be freed using av_free() + * + * @return >=0 for success, or a negative value corresponding to an + * AVERROR code in case of error; in particular: + * AVERROR(EINVAL) if no key is present + * + *) +function av_opt_get_key_value(ropts: {const} PPAnsiChar; + key_val_sep: {const} PAnsiChar; pairs_sep: {const} PAnsiChar; + flags: byte; + rkey, rval: PPAnsiChar): cint; + cdecl; external av__util; + +const + (** + * Accept to parse a value without a key; the key will then be returned + * as NULL. + *) + AV_OPT_FLAG_IMPLICIT_KEY = 1; + +(** + * @defgroup opt_eval_funcs Evaluating option strings + * @ + * This group of functions can be used to evaluate option strings + * and get numbers out of them. They do the same thing as av_opt_set(), + * except the result is written into the caller-supplied pointer. + * + * @param obj a struct whose first element is a pointer to AVClass. + * @param o an option for which the string is to be evaluated. + * @param val string to be evaluated. + * @param *_out value of the string will be written here. + * + * @return 0 on success, a negative number on failure. + *) +function av_opt_eval_flags (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; flags_out: Pcint): cint; + cdecl; external av__util; +function av_opt_eval_int (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; int_out: Pcint): cint; + cdecl; external av__util; +function av_opt_eval_int64 (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; int64_out: Pcint64): cint; + cdecl; external av__util; +function av_opt_eval_float (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; float_out: Pcfloat): cint; + cdecl; external av__util; +function av_opt_eval_double(obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; double_out: Pcdouble): cint; + cdecl; external av__util; +function av_opt_eval_q (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; q_out: PAVRational): cint; + cdecl; external av__util; +(** + * @ + *) + +const + AV_OPT_SEARCH_CHILDREN = (1 << 0); (**< Search in possible children of the + given object first.*) +(** + * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass + * instead of a required pointer to a struct containing AVClass. This is + * useful for searching for options without needing to allocate the corresponding + * object. + *) + AV_OPT_SEARCH_FAKE_OBJ = (1 << 1); + +(** + * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, + * rather than returning an empty string. + *) + AV_OPT_ALLOW_NULL = (1 << 2); +(** + * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than + * one component for certain option types. + * @see AVOptionRanges for details. + *) + AV_OPT_MULTI_COMPONENT_RANGE = (1 << 12); + +(** + * Look for an option in an object. Consider only options which + * have all the specified flags set. + * + * @param[in] obj A pointer to a struct whose first element is a + * pointer to an AVClass. + * @param[in] name The name of the option to look for. + * @param[in] unit When searching for named constants, name of the unit + * it belongs to. + * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). + * @param search_flags A combination of AV_OPT_SEARCH_*. + * + * @return A pointer to the option found, or NULL if no option + * was found. + * + * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable + * directly with av_set_string3(). Use special calls which take an options + * AVDictionary (e.g. avformat_open_input()) to set options found with this + * flag. + *) +function av_opt_find(obj: pointer; name: {const} PAnsiChar; unit_: {const} PAnsiChar; + opt_flags: cint; search_flags: cint): PAVOption; + cdecl; external av__util; + +(** + * Look for an option in an object. Consider only options which + * have all the specified flags set. + * + * @param[in] obj A pointer to a struct whose first element is a + * pointer to an AVClass. + * Alternatively a double pointer to an AVClass, if + * AV_OPT_SEARCH_FAKE_OBJ search flag is set. + * @param[in] name The name of the option to look for. + * @param[in] unit When searching for named constants, name of the unit + * it belongs to. + * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). + * @param search_flags A combination of AV_OPT_SEARCH_*. + * @param[out] target_obj if non-NULL, an object to which the option belongs will be + * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present + * in search_flags. This parameter is ignored if search_flags contain + * AV_OPT_SEARCH_FAKE_OBJ. + * + * @return A pointer to the option found, or NULL if no option + * was found. + *) +function av_opt_find2(obj: pointer; name: {const} PAnsiChar; unit_: {const} PAnsiChar; + opt_flags: cint; search_flags: cint; out target_obj: pointer): {const} PAVOption; + cdecl; external av__util; + +(** + * Iterate over all AVOptions belonging to obj. + * + * @param obj an AVOptions-enabled struct or a double pointer to an + * AVClass describing it. + * @param prev result of the previous call to av_opt_next() on this object + * or NULL + * @return next AVOption or NULL + *) +function av_opt_next(obj: {const} pointer; prev: {const} PAVOption): {const} PAVOption; + cdecl; external av__util; + +(** + * Iterate over AVOptions-enabled children of obj. + * + * @param prev result of a previous call to this function or NULL + * @return next AVOptions-enabled child or NULL + *) +function av_opt_child_next(obj: pointer; prev: pointer): pointer; + cdecl; external av__util; + +(** + * Iterate over potential AVOptions-enabled children of parent. + * + * @param prev result of a previous call to this function or NULL + * @return AVClass corresponding to next potential child or NULL + *) +function av_opt_child_class_next(parent: {const} PAVClass; prev: {const} PAVClass): {const} PAVClass; + cdecl; external av__util; + +(** + * @defgroup opt_set_funcs Option setting functions + * @ + * Those functions set the field of obj with the given name to value. + * + * @param[in] obj A struct whose first element is a pointer to an AVClass. + * @param[in] name the name of the field to set + * @param[in] val The value to set. In case of av_opt_set() if the field is not + * of a string type, then the given string is parsed. + * SI postfixes and some named scalars are supported. + * If the field is of a numeric type, it has to be a numeric or named + * scalar. Behavior with more than one scalar and +- infix operators + * is undefined. + * If the field is of a flags type, it has to be a sequence of numeric + * scalars or named flags separated by '+' or '-'. Prefixing a flag + * with '+' causes it to be set without affecting the other flags; + * similarly, '-' unsets a flag. + * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN + * is passed here, then the option may be set on a child of obj. + * + * @return 0 if the value has been set, or an AVERROR code in case of + * error: + * AVERROR_OPTION_NOT_FOUND if no matching option exists + * AVERROR(ERANGE) if the value is out of range + * AVERROR(EINVAL) if the value is not valid + *) +function av_opt_set (obj: pointer; name: {const} PAnsiChar; val: {const} PAnsiChar; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_int (obj: pointer; name: {const} PAnsiChar; val: cint64; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_double (obj: pointer; name: {const} PAnsiChar; val: cdouble; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_q (obj: pointer; name: {const} PAnsiChar; val: TAVRational; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_bin (obj: pointer; name: {const} PAnsiChar; val: {const} cuint8; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_image_size(obj: pointer; name: {const} PAnsiChar; w, h, search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_pixel_fmt (obj: pointer; name: {const} PAnsiChar; fmt: TAVPixelFormat; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_sample_fmt(obj: pointer; name: {const} PAnsiChar; fmt: TAVSampleFormat; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_video_rate(obj: pointer; name: {const} PAnsiChar; val: TAVRational; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_channel_layout(obj: pointer; name: {const} PAnsiChar; ch_layout: cint64; search_flags: cint): cint; + cdecl; external av__util; + +(** + * @note Any old dictionary present is discarded and replaced with a copy of the new one. The + * caller still owns val is and responsible for freeing it. + *) +function av_opt_set_dict_val(obj: pointer; name: {const} PAnsiChar; val: {const} PAVDictionary; search_flags: cint): cint; + cdecl; external av__util; + +(** + * Set a binary option to an integer list. + * + * @param obj AVClass object to set options on + * @param name name of the binary option + * @param val pointer to an integer list (must have the correct type with + * regard to the contents of the list) + * @param term list terminator (usually 0 or -1) + * @param flags search flags + *) +{to be translated +#define av_opt_set_int_list(obj, name, val, term, flags) \ + (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ + AVERROR(EINVAL) : \ + av_opt_set_bin(obj, name, (const uint8_t *)(val), \ + av_int_list_length(val, term) * sizeof(*(val)), flags)) +} +(** + * @ + *) + +(** + * @defgroup opt_get_funcs Option getting functions + * @ + * Those functions get a value of the option with the given name from an object. + * + * @param[in] obj a struct whose first element is a pointer to an AVClass. + * @param[in] name name of the option to get. + * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN + * is passed here, then the option may be found in a child of obj. + * @param[out] out_val value of the option will be written here + * @return >=0 on success, a negative error code otherwise + *) +(** + * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller + * + * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the option has + * AV_OPT_TYPE_STRING or AV_OPT_TYPE_BINARY and is set to NULL, *out_val will be set + * to NULL instead of an allocated empty string. + *) +function av_opt_get (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out out_val: Pcuint8): cint; + cdecl; external av__util; +function av_opt_get_int (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: Pcint64): cint; + cdecl; external av__util; +function av_opt_get_double (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: Pcdouble): cint; + cdecl; external av__util; +function av_opt_get_q (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: PAVRational): cint; + cdecl; external av__util; +function av_opt_get_image_size(obj: pointer; name: {const} PAnsiChar; search_flags: cint; w_out, h_out: Pcint): cint; + cdecl; external av__util; +function av_opt_get_pixel_fmt (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_fmt: PAVPixelFormat): cint; + cdecl; external av__util; +function av_opt_get_sample_fmt(obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_fmt: PAVPixelFormat): cint; + cdecl; external av__util; +function av_opt_get_video_rate(obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: PAVRational): cint; + cdecl; external av__util; +function av_opt_get_channel_layout(obj: pointer; name: {const} PAnsiChar; search_flags: cint; ch_layout: Pcint64): cint; + cdecl; external av__util; +(** + * @param[out] out_val The returned dictionary is a copy of the actual value and must + * be freed with av_dict_free() by the caller + *) +function av_opt_get_dict_val (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out out_val: PAVDictionary): cint; + cdecl; external av__util; +(** + * @ + *) +(** + * Gets a pointer to the requested field in a struct. + * This function allows accessing a struct even when its fields are moved or + * renamed since the application making the access has been compiled, + * + * @returns a pointer to the field, it can be cast to the correct type and read + * or written to. + *) +function av_opt_ptr(avclass: {const} PAVClass; obj: pointer; name: {const} PAnsiChar): pointer; + cdecl; external av__util; + +(** + * Free an AVOptionRanges struct and set it to NULL. + *) +procedure av_opt_freep_ranges(ranges: PPAVOptionRanges); + cdecl; external av__util; + +(** + * Get a list of allowed ranges for the given option. + * + * The returned list may depend on other fields in obj like for example profile. + * + * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored + * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance + * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges + * + * The result must be freed with av_opt_freep_ranges. + * + * @return number of compontents returned on success, a negative errro code otherwise + *) +function av_opt_query_ranges(P: PPAVOptionRanges; obj: pointer; key: {const} PAnsiChar; flags: cint): cint; + cdecl; external av__util; + +function av_opt_copy(dest: pointer;src: {const }pointer): cint; + cdecl; external av__util; + +(** + * Get a default list of allowed ranges for the given option. + * + * This list is constructed without using the AVClass.query_ranges() callback + * and can be used as fallback from within the callback. + * + * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored + * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance + * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges + * + * The result must be freed with av_opt_free_ranges. + * + * @return number of compontents returned on success, a negative errro code otherwise + *) +function av_opt_query_ranges_default(P: PPAVOptionRanges; obj: pointer; key: {const} PAnsiChar; flags: cint): cint; + cdecl; external av__util; + +(** + * @ + *) diff --git a/src/lib/ffmpeg-3.1/libavutil/pixfmt.pas b/src/lib/ffmpeg-3.1/libavutil/pixfmt.pas new file mode 100644 index 00000000..16fc8760 --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/pixfmt.pas @@ -0,0 +1,547 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/pixfmt.h + * avutil version 54.7.100 + * + *) + +(** + * @file + * Pixel format + *) + +const + AVPALETTE_SIZE = 1024; + AVPALETTE_COUNT = 256; + +type +(** + * Pixel format. Notes: + * + * @note + * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA + * color is put together as: + * (A << 24) | (R << 16) | (G << 8) | B + * This is stored as BGRA on little-endian CPU architectures and ARGB on + * big-endian CPUs. + * + * @par + * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized + * image data is stored in AVFrame.data[0]. The palette is transported in + * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is + * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is + * also endian-specific). Note also that the individual RGB32 palette + * components stored in AVFrame.data[1] should be in the range 0..255. + * This is important as many custom PAL8 video codecs that were designed + * to run on the IBM VGA graphics adapter use 6-bit palette components. + * + * @par + * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like + * for pal8. This palette is filled in automatically by the function + * allocating the picture. + *) + + PAVPixelFormat = ^TAVPixelFormat; + TAVPixelFormat = ( + AV_PIX_FMT_NONE = -1, + AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) + AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr + AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... + AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... + AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) + AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) + AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) + AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) + AV_PIX_FMT_GRAY8, ///< Y , 8bpp + AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb + AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb + AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette + AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range + AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range + AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range +{$IFDEF FF_API_XVMC} + AV_PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing + AV_PIX_FMT_XVMC_MPEG2_IDCT, + {$define AV_PIX_FMT_XVMC := (AV_PIX_FMT_XVMC_MPEG2_IDCT)} +{$ENDIF} + AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 + AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 + AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) + AV_PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits + AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) + AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) + AV_PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits + AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) + AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) + AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped + + AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... + AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... + AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... + AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... + + AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian + AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian + AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) + AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range + AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) +{$IFDEF FF_API_VDPAU} + AV_PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers +{$ENDIF} + AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian + AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian + + AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian + AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian + AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian, most significant bit to 0 + AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, most significant bit to 0 + + AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian + AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian + AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian, most significant bit to 1 + AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, most significant bit to 1 +{$IFDEF FF_API_VAAPI} + (** Deprecated pixel formats *) + AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers + AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers + AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID + + AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, +{$ELSE} + AV_PIX_FMT_VAAPI, +{$ENDIF} + AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian +{$IFDEF FF_API_VDPAU} + AV_PIX_FMT_VDPAU_MPEG4, ///< MPEG-4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers +{$ENDIF} + AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer + + AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, most significant bits to 0 + AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, most significant bits to 0 + AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, most significant bits to 1 + AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, most significant bits to 1 + AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha +(* see const declaration way down + AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 + AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 +*) + AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian + AV_PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian + + (** + * The following 12 formats have the disadvantage of needing 1 format for each bit depth. + * Notice that each 9/10 bits sample is stored in 16 bits with extra padding. + * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better. + *) + AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_VDA_VLD, ///< hardware decoding through VDA + + AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp + AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian + AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian + AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian + AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian + AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian + AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian + AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) + AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) + AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian + AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian + AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian + AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian + AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian + AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian + AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) + AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) + AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) + AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) + AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) + + AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface + + AV_PIX_FMT_XYZ12LE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0 + AV_PIX_FMT_XYZ12BE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0 + AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) + AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + + AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian + AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian + + AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb + + AV_PIX_FMT_VDA, ///< HW acceleration through VDA, data[3] contains a CVPixelBufferRef + + AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) + AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) + + AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp + AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian + AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian + (** + * HW acceleration through QSV, data[3] contains a pointer to the + * mfxFrameSurface1 structure. + *) + AV_PIX_FMT_QSV, + (** + * HW acceleration though MMAL, data[3] contains a pointer to the + * MMAL_BUFFER_HEADER_T structure. + *) + AV_PIX_FMT_MMAL, + + AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer + + (** + * HW acceleration through CUDA. data[i] contain CUdeviceptr pointers + * exactly as for system memory frames. + *) + AV_PIX_FMT_CUDA, + + AV_PIX_FMT_0RGB = $123 + 4,///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined + AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined + AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined + AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined + + AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian + AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian + AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian + AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian + AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range + + AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */ + AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */ + AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */ + AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */ + AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */ + AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */ + AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */ + AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */ + AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */ + AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */ + AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */ + AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */ +{$ifndef FF_API_XVMC} + AV_PIX_FMT_XVMC, ///< XVideo Motion Acceleration via common packet passing +{$endif} + AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian + AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian + AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian + AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian + AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian + AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian + + AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox + + AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian + AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian + + AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian + AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian + + AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian + AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian + + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions + ); + +const + AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8; ///< alias for AV_PIX_FMT_YA8 + AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8; ///< alias for AV_PIX_FMT_YA8 + AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP; + +{$IFDEF WORDS_BIGENDIAN} + AV_PIX_FMT_RGB32 = AV_PIX_FMT_ARGB; + AV_PIX_FMT_RGB32_1 = AV_PIX_FMT_RGBA; + AV_PIX_FMT_BGR32 = AV_PIX_FMT_ABGR; + AV_PIX_FMT_BGR32_1 = AV_PIX_FMT_BGRA; + AV_PIX_FMT_0RGB32 = AV_PIX_FMT_0RGB; + AV_PIX_FMT_0BGR32 = AV_PIX_FMT_0BGR; + + AV_PIX_FMT_GRAY16 = AV_PIX_FMT_GRAY16BE; + AV_PIX_FMT_YA16 = AV_PIX_FMT_YA16BE; + AV_PIX_FMT_RGB48 = AV_PIX_FMT_RGB48BE; + AV_PIX_FMT_RGB565 = AV_PIX_FMT_RGB565BE; + AV_PIX_FMT_RGB555 = AV_PIX_FMT_RGB555BE; + AV_PIX_FMT_RGB444 = AV_PIX_FMT_RGB444BE; + AV_PIX_FMT_RGBA64 = AV_PIX_FMT_RGBA64BE; + AV_PIX_FMT_BGR48 = AV_PIX_FMT_BGR48BE; + AV_PIX_FMT_BGR565 = AV_PIX_FMT_BGR565BE; + AV_PIX_FMT_BGR555 = AV_PIX_FMT_BGR555BE; + AV_PIX_FMT_BGR444 = AV_PIX_FMT_BGR444BE; + AV_PIX_FMT_BGRA64 = AV_PIX_FMT_BGRA64BE; + + AV_PIX_FMT_YUV420P9 = AV_PIX_FMT_YUV420P9BE; + AV_PIX_FMT_YUV422P9 = AV_PIX_FMT_YUV422P9BE; + AV_PIX_FMT_YUV444P9 = AV_PIX_FMT_YUV444P9BE; + AV_PIX_FMT_YUV420P10 = AV_PIX_FMT_YUV420P10BE; + AV_PIX_FMT_YUV422P10 = AV_PIX_FMT_YUV422P10BE; + AV_PIX_FMT_YUV440P10 = AV_PIX_FMT_YUV440P10BE; + AV_PIX_FMT_YUV444P10 = AV_PIX_FMT_YUV444P10BE; + AV_PIX_FMT_YUV420P12 = AV_PIX_FMT_YUV420P12BE; + AV_PIX_FMT_YUV422P12 = AV_PIX_FMT_YUV422P12BE; + AV_PIX_FMT_YUV440P12 = AV_PIX_FMT_YUV440P12BE; + AV_PIX_FMT_YUV444P12 = AV_PIX_FMT_YUV444P12BE; + AV_PIX_FMT_YUV420P14 = AV_PIX_FMT_YUV420P14BE; + AV_PIX_FMT_YUV422P14 = AV_PIX_FMT_YUV422P14BE; + AV_PIX_FMT_YUV444P14= AV_PIX_FMT_YUV444P14BE; + AV_PIX_FMT_YUV420P16 = AV_PIX_FMT_YUV420P16BE; + AV_PIX_FMT_YUV422P16 = AV_PIX_FMT_YUV422P16BE; + AV_PIX_FMT_YUV444P16 = AV_PIX_FMT_YUV444P16BE; + + AV_PIX_FMT_GBRP9 = AV_PIX_FMT_GBRP9BE; + AV_PIX_FMT_GBRP10 = AV_PIX_FMT_GBRP10BE; + AV_PIX_FMT_GBRP12 = AV_PIX_FMT_GBRP12BE; + AV_PIX_FMT_GBRP14 = AV_PIX_FMT_GBRP14BE; + AV_PIX_FMT_GBRP16 = AV_PIX_FMT_GBRP16BE; + AV_PIX_FMT_GBRAP10 = AV_PIX_FMT_GBRAP10BE; + AV_PIX_FMT_GBRAP12 = AV_PIX_FMT_GBRAP12BE; + AV_PIX_FMT_GBRAP16 = AV_PIX_FMT_GBRAP16BE; + + AV_PIX_FMT_BAYER_BGGR16 = AV_PIX_FMT_BAYER_BGGR16BE; + AV_PIX_FMT_BAYER_RGGB16 = AV_PIX_FMT_BAYER_RGGB16BE; + AV_PIX_FMT_BAYER_GBRG16 = AV_PIX_FMT_BAYER_GBRG16BE; + AV_PIX_FMT_BAYER_GRBG16 = AV_PIX_FMT_BAYER_GRBG16BE; + + AV_PIX_FMT_YUVA420P9 = AV_PIX_FMT_YUVA420P9BE; + AV_PIX_FMT_YUVA422P9 = AV_PIX_FMT_YUVA422P9BE; + AV_PIX_FMT_YUVA444P9 = AV_PIX_FMT_YUVA444P9BE; + AV_PIX_FMT_YUVA420P10 = AV_PIX_FMT_YUVA420P10BE; + AV_PIX_FMT_YUVA422P10 = AV_PIX_FMT_YUVA422P10BE; + AV_PIX_FMT_YUVA444P10 = AV_PIX_FMT_YUVA444P10BE; + AV_PIX_FMT_YUVA420P16 = AV_PIX_FMT_YUVA420P16BE; + AV_PIX_FMT_YUVA422P16 = AV_PIX_FMT_YUVA422P16BE; + AV_PIX_FMT_YUVA444P16 = AV_PIX_FMT_YUVA444P16BE; + + AV_PIX_FMT_XYZ12 = AV_PIX_FMT_XYZ12BE; + AV_PIX_FMT_NV20 = AV_PIX_FMT_NV20BE; + AV_PIX_FMT_AYUV64 = AV_PIX_FMT_AYUV64BE; + +{$ELSE} + AV_PIX_FMT_RGB32 = AV_PIX_FMT_BGRA; + AV_PIX_FMT_RGB32_1 = AV_PIX_FMT_ABGR; + AV_PIX_FMT_BGR32 = AV_PIX_FMT_RGBA; + AV_PIX_FMT_BGR32_1 = AV_PIX_FMT_ARGB; + AV_PIX_FMT_0RGB32 = AV_PIX_FMT_BGR0; + AV_PIX_FMT_0BGR32 = AV_PIX_FMT_RGB0; + + AV_PIX_FMT_GRAY16 = AV_PIX_FMT_GRAY16LE; + AV_PIX_FMT_YA16 = AV_PIX_FMT_YA16LE; + AV_PIX_FMT_RGB48 = AV_PIX_FMT_RGB48LE; + AV_PIX_FMT_RGB565 = AV_PIX_FMT_RGB565LE; + AV_PIX_FMT_RGB555 = AV_PIX_FMT_RGB555LE; + AV_PIX_FMT_RGB444 = AV_PIX_FMT_RGB444LE; + AV_PIX_FMT_RGBA64 = AV_PIX_FMT_RGBA64LE; + AV_PIX_FMT_BGR48 = AV_PIX_FMT_BGR48LE; + AV_PIX_FMT_BGR565 = AV_PIX_FMT_BGR565LE; + AV_PIX_FMT_BGR555 = AV_PIX_FMT_BGR555LE; + AV_PIX_FMT_BGR444 = AV_PIX_FMT_BGR444LE; + AV_PIX_FMT_BGRA64 = AV_PIX_FMT_BGRA64LE; + + AV_PIX_FMT_YUV420P9 = AV_PIX_FMT_YUV420P9LE; + AV_PIX_FMT_YUV422P9 = AV_PIX_FMT_YUV422P9LE; + AV_PIX_FMT_YUV444P9 = AV_PIX_FMT_YUV444P9LE; + AV_PIX_FMT_YUV420P10 = AV_PIX_FMT_YUV420P10LE; + AV_PIX_FMT_YUV422P10 = AV_PIX_FMT_YUV422P10LE; + AV_PIX_FMT_YUV440P10 = AV_PIX_FMT_YUV440P10LE; + AV_PIX_FMT_YUV444P10 = AV_PIX_FMT_YUV444P10LE; + AV_PIX_FMT_YUV420P12 = AV_PIX_FMT_YUV420P12LE; + AV_PIX_FMT_YUV422P12 = AV_PIX_FMT_YUV422P12LE; + AV_PIX_FMT_YUV440P12 = AV_PIX_FMT_YUV440P12LE; + AV_PIX_FMT_YUV444P12 = AV_PIX_FMT_YUV444P12LE; + AV_PIX_FMT_YUV420P14 = AV_PIX_FMT_YUV420P14LE; + AV_PIX_FMT_YUV422P14 = AV_PIX_FMT_YUV422P14LE; + AV_PIX_FMT_YUV444P14= AV_PIX_FMT_YUV444P14LE; + AV_PIX_FMT_YUV420P16 = AV_PIX_FMT_YUV420P16LE; + AV_PIX_FMT_YUV422P16 = AV_PIX_FMT_YUV422P16LE; + AV_PIX_FMT_YUV444P16 = AV_PIX_FMT_YUV444P16LE; + + AV_PIX_FMT_GBRP9 = AV_PIX_FMT_GBRP9LE; + AV_PIX_FMT_GBRP10 = AV_PIX_FMT_GBRP10LE; + AV_PIX_FMT_GBRP12 = AV_PIX_FMT_GBRP12LE; + AV_PIX_FMT_GBRP14 = AV_PIX_FMT_GBRP14LE; + AV_PIX_FMT_GBRP16 = AV_PIX_FMT_GBRP16LE; + AV_PIX_FMT_GBRAP10 = AV_PIX_FMT_GBRAP10LE; + AV_PIX_FMT_GBRAP12 = AV_PIX_FMT_GBRAP12LE; + AV_PIX_FMT_GBRAP16 = AV_PIX_FMT_GBRAP16LE; + + AV_PIX_FMT_BAYER_BGGR16 = AV_PIX_FMT_BAYER_BGGR16LE; + AV_PIX_FMT_BAYER_RGGB16 = AV_PIX_FMT_BAYER_RGGB16LE; + AV_PIX_FMT_BAYER_GBRG16 = AV_PIX_FMT_BAYER_GBRG16LE; + AV_PIX_FMT_BAYER_GRBG16 = AV_PIX_FMT_BAYER_GRBG16LE; + + AV_PIX_FMT_YUVA420P9 = AV_PIX_FMT_YUVA420P9LE; + AV_PIX_FMT_YUVA422P9 = AV_PIX_FMT_YUVA422P9LE; + AV_PIX_FMT_YUVA444P9 = AV_PIX_FMT_YUVA444P9LE; + AV_PIX_FMT_YUVA420P10 = AV_PIX_FMT_YUVA420P10LE; + AV_PIX_FMT_YUVA422P10 = AV_PIX_FMT_YUVA422P10LE; + AV_PIX_FMT_YUVA444P10 = AV_PIX_FMT_YUVA444P10LE; + AV_PIX_FMT_YUVA420P16 = AV_PIX_FMT_YUVA420P16LE; + AV_PIX_FMT_YUVA422P16 = AV_PIX_FMT_YUVA422P16LE; + AV_PIX_FMT_YUVA444P16 = AV_PIX_FMT_YUVA444P16LE; + + AV_PIX_FMT_XYZ12 = AV_PIX_FMT_XYZ12LE; + AV_PIX_FMT_NV20 = AV_PIX_FMT_NV20LE; + AV_PIX_FMT_AYUV64 = AV_PIX_FMT_AYUV64LE; +{$ENDIF} + +type +(** + * Chromaticity coordinates of the source primaries. + *) + TAVColorPrimaries = ( + AVCOL_PRI_RESERVED0 = 0, + AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B + AVCOL_PRI_UNSPECIFIED = 2, + AVCOL_PRI_RESERVED = 3, + AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) + AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above + AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C + AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 + AVCOL_PRI_SMPTEST428_1= 10,///< SMPTE ST 428-1 (CIE 1931 XYZ) + AVCOL_PRI_NB ///< Not part of ABI + ); + +(** + * Color Transfer Characteristic. + *) + TAVColorTransferCharacteristic = ( + AVCOL_TRC_RESERVED0 = 0, + AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 + AVCOL_TRC_UNSPECIFIED = 2, + AVCOL_TRC_RESERVED = 3, + AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM + AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG + AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC + AVCOL_TRC_SMPTE240M = 7, + AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" + AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" + AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" + AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 + AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut + AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) + AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system + AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system + AVCOL_TRC_SMPTEST2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems + AVCOL_TRC_SMPTEST428_1 = 17, ///< SMPTE ST 428-1 + AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" + AVCOL_TRC_NB ///< Not part of ABI + ); + +(** + * YUV colorspace type. + *) + TAVColorSpace = ( + AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) + AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B + AVCOL_SPC_UNSPECIFIED = 2, + AVCOL_SPC_RESERVED = 3, + AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) + AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 + AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above + AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system + AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system + AVCOL_SPC_NB ///< Not part of ABI + ); + +const + AVCOL_SPC_YCGCO = AVCOL_SPC_YCOCG; + +type +(** + * MPEG vs JPEG YUV range. + *) + TAVColorRange = ( + AVCOL_RANGE_UNSPECIFIED = 0, + AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges + AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + AVCOL_RANGE_NB ///< Not part of ABI + ); + +(** + * Location of chroma samples. + * + * Illustration showing the location of the first (top left) chroma sample of the + * image, the left shows only luma, the right + * shows the location of the chroma sample, the 2 could be imagined to overlay + * each other but are drawn separately due to limitations of ASCII + * + * 1st 2nd 1st 2nd horizontal luma sample positions + * v v v v + * ______ ______ + *1st luma line > |X X ... |3 4 X ... X are luma samples, + * | |1 2 1-6 are possible chroma positions + *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position + *) + TAVChromaLocation = ( + AVCHROMA_LOC_UNSPECIFIED = 0, + AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 + AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 + AVCHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 + AVCHROMA_LOC_TOP = 4, + AVCHROMA_LOC_BOTTOMLEFT = 5, + AVCHROMA_LOC_BOTTOM = 6, + AVCHROMA_LOC_NB ///< Not part of ABI + ); diff --git a/src/lib/ffmpeg-3.1/libavutil/samplefmt.pas b/src/lib/ffmpeg-3.1/libavutil/samplefmt.pas new file mode 100644 index 00000000..f3f8ead2 --- /dev/null +++ b/src/lib/ffmpeg-3.1/libavutil/samplefmt.pas @@ -0,0 +1,285 @@ +(* + * SampleFormat + * copyright (c) 2011 Karl-Michael Schindler <karl-michael.schindler@web.de> + * + * 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 + * + * This is a part of the Pascal port of ffmpeg. + * + * Conversion of libavutil/samplefmt.h + * avutil version 54.7.100 + * + *) + +type +(** + * @addtogroup lavu_audio + * @ + * + * @defgroup lavu_sampfmts Audio sample formats + * + * Audio sample format enumeration and related convenience functions. + * @ + *) + +(** + * Audio sample formats + * + * - The data described by the sample format is always in native-endian order. + * Sample values can be expressed by native C types, hence the lack of a signed + * 24-bit sample format even though it is a common raw audio data format. + * + * - The floating-point formats are based on full volume being in the range + * [-1.0, 1.0]. Any values outside this range are beyond full volume level. + * + * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg + * (such as AVFrame in libavcodec) is as follows: + * + * @par + * For planar sample formats, each audio channel is in a separate data plane, + * and linesize is the buffer size, in bytes, for a single plane. All data + * planes must be the same size. For packed sample formats, only the first data + * plane is used, and samples for each channel are interleaved. In this case, + * linesize is the buffer size, in bytes, for the 1 plane. + * + *) + TAVSampleFormat = ( + AV_SAMPLE_FMT_NONE = -1, + AV_SAMPLE_FMT_U8, ///< unsigned 8 bits + AV_SAMPLE_FMT_S16, ///< signed 16 bits + AV_SAMPLE_FMT_S32, ///< signed 32 bits + AV_SAMPLE_FMT_FLT, ///< float + AV_SAMPLE_FMT_DBL, ///< double + + AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar + AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar + AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar + AV_SAMPLE_FMT_FLTP, ///< float, planar + AV_SAMPLE_FMT_DBLP, ///< double, planar + + AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically + ); + TAVSampleFormatArray = array [0 .. MaxInt div SizeOf(TAVSampleFormat) - 1] of TAVSampleFormat; + PAVSampleFormatArray = ^TAVSampleFormatArray; + +(** + * Return the name of sample_fmt, or NULL if sample_fmt is not + * recognized. + *) +function av_get_sample_fmt_name(sample_fmt: TAVSampleFormat): {const} PAnsiChar; + cdecl; external av__util; + +(** + * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE + * on error. + *) +function av_get_sample_fmt(name: {const} PAnsiChar): TAVSampleFormat; + cdecl; external av__util; + +(** + * Return the planar<->packed alternative form of the given sample format, or + * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the + * requested planar/packed format, the format returned is the same as the + * input. + *) +function av_get_alt_sample_fmt(sample_fmt: TAVSampleFormat; planar: cint): TAVSampleFormat; + cdecl; external av__util; + +(** + * Get the packed alternative form of the given sample format. + * + * If the passed sample_fmt is already in packed format, the format returned is + * the same as the input. + * + * @return the packed alternative form of the given sample format or + AV_SAMPLE_FMT_NONE on error. + *) +function av_get_packed_sample_fmt(sample_fmt: TAVSampleFormat): TAVSampleFormat; + cdecl; external av__util; + +(** + * Get the planar alternative form of the given sample format. + * + * If the passed sample_fmt is already in planar format, the format returned is + * the same as the input. + * + * @return the planar alternative form of the given sample format or + AV_SAMPLE_FMT_NONE on error. + *) +function av_get_planar_sample_fmt(sample_fmt: TAVSampleFormat): TAVSampleFormat; + cdecl; external av__util; + +(** + * Generate a string corresponding to the sample format with + * sample_fmt, or a header if sample_fmt is negative. + * + * @param buf the buffer where to write the string + * @param buf_size the size of buf + * @param sample_fmt the number of the sample format to print the + * corresponding info string, or a negative value to print the + * corresponding header. + * @return the pointer to the filled buffer or NULL if sample_fmt is + * unknown or in case of other errors + *) +function av_get_sample_fmt_string(buf: PAnsiChar; buf_size: cint; sample_fmt: TAVSampleFormat): PAnsiChar; + cdecl; external av__util; + +(** + * Return number of bytes per sample. + * + * @param sample_fmt the sample format + * @return number of bytes per sample or zero if unknown for the given + * sample format + *) +function av_get_bytes_per_sample(sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; + +type + OctArrayOfPcuint8 = array[0..7] of Pcuint8; + OctArrayOfcint = array[0..7] of cint; + +(** + * Check if the sample format is planar. + * + * @param sample_fmt the sample format to inspect + * @return 1 if the sample format is planar, 0 if it is interleaved + *) +function av_sample_fmt_is_planar(sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; + +(** + * Get the required buffer size for the given audio parameters. + * + * @param[out] linesize calculated linesize, may be NULL + * @param nb_channels the number of channels + * @param nb_samples the number of samples in a single channel + * @param sample_fmt the sample format + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return required buffer size, or negative error code on failure + *) +function av_samples_get_buffer_size(linesize: Pcint; nb_channels: cint; nb_samples: cint; + sample_fmt: TAVSampleFormat; align: cint): cint; + cdecl; external av__util; + +(** + * @ + * + * @defgroup lavu_sampmanip Samples manipulation + * + * Functions that manipulate audio samples + * @ + *) + +(** + * Fill plane data pointers and linesize for samples with sample + * format sample_fmt. + * + * The audio_data array is filled with the pointers to the samples data planes: + * for planar, set the start point of each channel's data within the buffer, + * for packed, set the start point of the entire buffer only. + * + * The value pointed to by linesize is set to the aligned size of each + * channel's data buffer for planar layout, or to the aligned size of the + * buffer for all channels for packed layout. + * + * The buffer in buf must be big enough to contain all the samples + * (use av_samples_get_buffer_size() to compute its minimum size), + * otherwise the audio_data pointers will point to invalid data. + * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. + * + * @param[out] audio_data array to be filled with the pointer for each channel + * @param[out] linesize calculated linesize, may be NULL + * @param buf the pointer to a buffer containing the samples + * @param nb_channels the number of channels + * @param nb_samples the number of samples in a single channel + * @param sample_fmt the sample format + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return >=0 on success or a negative error code on failure + * @todo return minimum size in bytes required for the buffer in case + * of success at the next bump + *) +function av_samples_fill_arrays(var audio_data: Pcuint8; linesize: Pcint; + buf: Pcuint8; + nb_channels: cint; nb_samples: cint; + sample_fmt: TAVSampleFormat; align: cint): cint; + cdecl; external av__util; + +(** + * Allocate a samples buffer for nb_samples samples, and fill data pointers and + * linesize accordingly. + * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) + * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. + * + * @param[out] audio_data array to be filled with the pointer for each channel + * @param[out] linesize aligned size for audio buffer(s), may be NULL + * @param nb_channels number of audio channels + * @param nb_samples number of samples per channel + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return >=0 on success or a negative error code on failure + * @todo return the size of the allocated buffer in case of success at the next bump + * @see av_samples_fill_arrays() + * @see av_samples_alloc_array_and_samples() + *) +function av_samples_alloc(var audio_data: Pcuint8; linesize: Pcint; + nb_channels: cint; nb_samples: cint; + sample_fmt: TAVSampleFormat; align: cint): cint; + cdecl; external av__util; + +(** + * Allocate a data pointers array, samples buffer for nb_samples + * samples, and fill data pointers and linesize accordingly. + * + * This is the same as av_samples_alloc(), but also allocates the data + * pointers array. + * + * @see av_samples_alloc() + *) +function av_samples_alloc_array_and_samples(var audio_data: Pcuint8; linesize: Pcint; + nb_channels: cint; nb_samples: cint; + sample_fmt: TAVSampleFormat; align: cint): cint; + cdecl; external av__util; + +(** + * Copy samples from src to dst. + * + * @param dst destination array of pointers to data planes + * @param src source array of pointers to data planes + * @param dst_offset offset in samples at which the data will be written to dst + * @param src_offset offset in samples at which the data will be read from src + * @param nb_samples number of samples to be copied + * @param nb_channels number of audio channels + * @param sample_fmt audio sample format + *) +function av_samples_copy(var dst: Pcuint8; src: {const} Pcuint8; dst_offset: cint; + src_offset: cint; nb_samples: cint; nb_channels: cint; + sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; + +(** + * Fill an audio buffer with silence. + * + * @param audio_data array of pointers to data planes + * @param offset offset in samples at which to start filling + * @param nb_samples number of samples to fill + * @param nb_channels number of audio channels + * @param sample_fmt audio sample format + *) +function av_samples_set_silence(var audio_data: Pcuint8; offset: cint; nb_samples: cint; + nb_channels: cint; sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.1/rational.pas b/src/lib/ffmpeg-3.1/rational.pas new file mode 100644 index 00000000..0c795c54 --- /dev/null +++ b/src/lib/ffmpeg-3.1/rational.pas @@ -0,0 +1,241 @@ +(* + * rational numbers + * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/rational.h + * avutil version 54.7.100 + * + *) + +unit rational; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} + +interface + +uses + ctypes, + UConfig; + +(** + * @addtogroup lavu_math + * @{ + *) + +type +(** + * rational number numerator/denominator + *) + PAVRational = ^TAVRational; + TAVRational = record + num: cint; ///< numerator + den: cint; ///< denominator + end; + + TAVRationalArray = array[0 .. (MaxInt div SizeOf(TAVRational))-1] of TAVRational; + PAVRationalArray = ^TAVRationalArray; + +(** + * Create a rational. + * Useful for compilers that do not support compound literals. + * @note The return value is not reduced. + */ +static inline AVRational av_make_q(int num, int den) +{ + AVRational r = { num, den }; + return r; +} + +/**) + +(** + * Create a rational. + * Useful for compilers that do not support compound literals. + * @note The return value is not reduced. + *) +function av_make_q(num, den: cint): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Compare two rationals. + * @param a first rational + * @param b second rational + * @return 0 if a==b, 1 if a>b, -1 if a<b, and INT_MIN if one of the + * values is of the form 0/0 + *) +function av_cmp_q(a: TAVRational; b: TAVRational): cint; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Convert rational to double. + * @param a rational to convert + * @return (double) a + *) +function av_q2d(a: TAVRational): cdouble; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Reduce a fraction. + * This is useful for framerate calculations. + * @param dst_num destination numerator + * @param dst_den destination denominator + * @param num source numerator + * @param den source denominator + * @param max the maximum allowed for dst_num & dst_den + * @return 1 if exact, 0 otherwise + *) +function av_reduce(dst_num: PCint; dst_den: PCint; num: cint64; den: cint64; max: cint64): cint; + cdecl; external av__util; + +(** + * Multiply two rationals. + * @param b first rational + * @param c second rational + * @return b*c + *) +function av_mul_q(b: TAVRational; c: TAVRational): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Divide one rational by another. + * @param b first rational + * @param c second rational + * @return b/c + *) +function av_div_q(b: TAVRational; c: TAVRational): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Add two rationals. + * @param b first rational + * @param c second rational + * @return b+c + *) +function av_add_q(b: TAVRational; c: TAVRational): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Subtract one rational from another. + * @param b first rational + * @param c second rational + * @return b-c + *) +function av_sub_q(b: TAVRational; c: TAVRational): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Invert a rational. + * @param q value + * @return 1 / q + *) +function av_inv_q(q: TAVRational): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Convert a double precision floating point number to a rational. + * inf is expressed as {1,0} or {-1,0} depending on the sign. + * + * @param d double to convert + * @param max the maximum allowed numerator and denominator + * @return (AVRational) d + *) +function av_d2q(d: cdouble; max: cint): TAVRational; + cdecl; external av__util; {av_const} + +(** + * @return 1 if q1 is nearer to q than q2, -1 if q2 is nearer + * than q1, 0 if they have the same distance. + *) +function av_nearer_q(q, q1, q2: TAVRational): cint; + cdecl; external av__util; + +(** + * Find the nearest value in q_list to q. + * @param q_list an array of rationals terminated by {0, 0} + * @return the index of the nearest value found in the array + *) +function av_find_nearest_q_idx(q: TAVRational; q_list: {const} PAVRationalArray): cint; + cdecl; external av__util; + +(** + * Converts a AVRational to a IEEE 32bit float. + * + * The float is returned in a uint32_t and its value is platform indepenant. + *) +function av_q2intfloat(q: TAVRational): cuint32; + cdecl; external av__util; + +implementation + +function av_cmp_q (a: TAVRational; b: TAVRational): cint; {$IFDEF HasInline}inline;{$ENDIF} +var + tmp: cint64; +begin + tmp := a.num * cint64(b.den) - b.num * cint64(a.den); + +{ old version + if (tmp <> 0) then + Result := (tmp shr 63) or 1 + else + Result := 0; +} +{ C original: + if(tmp) return ((tmp ^ a.den ^ b.den)>>63)|1; + else if(b.den && a.den) return 0; + else if(a.num && b.num) return (a.num>>31) - (b.num>>31); + else return INT_MIN; +} + + if tmp <> 0 then + Result := ((tmp xor a.den xor b.den) shr 63) or 1 + else if (b.den and a.den) <> 0 then + Result := 0 + else if (a.num and b.num) <> 0 then + Result := (a.num shr 31) - (b.num shr 31) + else + Result := low(cint); + +end; + +function av_q2d(a: TAVRational): cdouble; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := a.num / a.den; +end; + +function av_inv_q(q: TAVRational): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result.num := q.den; + Result.den := q.num; +end; + +function av_make_q(num, den: cint): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result.num := num; + Result.den := den; +end; + +end. diff --git a/src/lib/ffmpeg-3.1/swresample.pas b/src/lib/ffmpeg-3.1/swresample.pas new file mode 100644 index 00000000..fb9dc6d2 --- /dev/null +++ b/src/lib/ffmpeg-3.1/swresample.pas @@ -0,0 +1,434 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of + * + * libswresample/swresample.h: + * version: 0.18.100 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + (* + * IMPORTANT: The official FFmpeg C headers change very quickly. Often some + * of the data structures are changed so that they become incompatible with + * older header files. The Pascal headers have to be adjusted to those changes, + * otherwise the application might crash randomly or strange bugs (not + * necessarily related to video or audio due to buffer overflows etc.) might + * occur. + * + * In the past users reported problems with USDX that took hours to fix and + * the problem was an unsupported version of FFmpeg. So we decided to disable + * support for future versions of FFmpeg until the headers are revised by us + * for that version as they otherwise most probably will break USDX. + * + * If the headers do not yet support your FFmpeg version you may want to + * adjust the max. version numbers manually but please note: it may work but + * in many cases it does not. The USDX team does NOT PROVIDE ANY SUPPORT + * for the game if the MAX. VERSION WAS CHANGED. + * + * The only safe way to support new versions of FFmpeg is to add the changes + * of the FFmpeg git repository C headers to the Pascal headers. + * You can accelerate this process by posting a patch with the git changes + * translated to Pascal to our bug tracker (please join our IRC chat before + * you start working on it). Simply adjusting the max. versions is NOT a valid + * fix. + *) + + (* Supported version by this header *) + LIBSWRESAMPLE_MAX_VERSION_MAJOR = 2; + LIBSWRESAMPLE_MAX_VERSION_MINOR = 1; + LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; + LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); + + (* Min. supported version by this header *) + LIBSWRESAMPLE_MIN_VERSION_MAJOR = 2; + LIBSWRESAMPLE_MIN_VERSION_MINOR = 1; + LIBSWRESAMPLE_MIN_VERSION_RELEASE = 100; + LIBSWRESAMPLE_MIN_VERSION = (LIBSWRESAMPLE_MIN_VERSION_MAJOR * VERSION_MAJOR) + + (LIBSWRESAMPLE_MIN_VERSION_MINOR * VERSION_MINOR) + + (LIBSWRESAMPLE_MIN_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBSWRESAMPLE_VERSION < LIBSWRESAMPLE_MIN_VERSION)} + {$MESSAGE Error 'Linked version of libswresample is too old!'} +{$IFEND} + +(* Check if linked version is supported *) +{$IF (LIBSWRESAMPLE_VERSION > LIBSWRESAMPLE_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} +{$IFEND} + +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} + SWR_CH_MAX = 32; (* < Maximum number of channels *) +{$ENDIF} + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type +(** Dithering algorithms *) + TSwrDitherType = ( + SWR_DITHER_NONE = 0, + SWR_DITHER_RECTANGULAR, + SWR_DITHER_TRIANGULAR, + SWR_DITHER_TRIANGULAR_HIGHPASS, + + SWR_DITHER_NS = 64, (* < not part of API/ABI *) + SWR_DITHER_NS_LIPSHITZ, + SWR_DITHER_NS_F_WEIGHTED, + SWR_DITHER_NS_MODIFIED_E_WEIGHTED, + SWR_DITHER_NS_IMPROVED_E_WEIGHTED, + SWR_DITHER_NS_SHIBATA, + SWR_DITHER_NS_LOW_SHIBATA, + SWR_DITHER_NS_HIGH_SHIBATA, + SWR_DITHER_NB (* < not part of API/ABI *) + ); + +(** Resampling Engines *) + TSwrEngine = ( + SWR_ENGINE_SWR, (* < SW Resampler *) + SWR_ENGINE_SOXR, (* < SoX Resampler *) + SWR_ENGINE_NB (* < not part of API/ABI *) + ); + +(** Resampling Filter Types *) + TSwrFilterType = ( + SWR_FILTER_TYPE_CUBIC, (* < Cubic *) + SWR_FILTER_TYPE_BLACKMAN_NUTTALL, (* < Blackman Nuttall windowed sinc *) + SWR_FILTER_TYPE_KAISER (* < Kaiser windowed sinc *) + ); + +(** + * The libswresample context. Unlike libavcodec and libavformat, this structure + * is opaque. This means that if you would like to set options, you must use + * the @ref avoptions API and cannot directly set values to members of the + * structure. + *) + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +(** + * Get the AVClass for swrContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function swr_get_class(): PAVClass; + cdecl; external sw__resample; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @see av_opt_set_int() + * @see av_opt_set_dict() + * + * @param[in,out] s Swr context to initialize + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Check whether an swr context has been initialized or not. + * + * @param[in] s Swr context to check + * @see swr_init() + * @return positive if it has been initialized, 0 if not initialized + *) +function swr_is_initialized(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s existing Swr context if available, or NULL if not + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + * + * @param[in] s a pointer to a pointer to Swr context + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Closes the context so that swr_is_initialized() returns 0. + * + * The context can be brought back to life by running swr_init(), + * swr_init() can also be used without swr_close(). + * This function is mainly provided for simplifying the usecase + * where one tries to support libavresample and libswresample. + * + * @param[in,out] s Swr context to be closed + *) +procedure swr_close(s: PSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space, then the input will be buffered. + * You can avoid this buffering by using swr_get_out_samples() to retrieve an + * upper bound on the required number of output samples for the given number of + * input samples. Conversion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + var in_: {const} PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Convert the next timestamp from input to output + * timestamps are in 1/(in_sample_rate * out_sample_rate) units. + * + * @note There are 2 slightly differently behaving modes. + * First is when automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) + * in this case timestamps will be passed through with delays compensated + * Second is when automatic timestamp compensation is used, (min_compensation < FLT_MAX) + * in this case the output timestamps will match output sample numbers + * + * @param pts timestamp for the next input sample, INT64_MIN if unknown + * @return the output timestamp for the next output sample + *) +function swr_next_pts(s: PSwrContext; pts: cint64): cint64; + cdecl; external sw__resample; + +(** + * Activate resampling compensation ("soft" compensation). This function is + * internally called when needed in swr_next_pts(). + * + * @param[in,out] s allocated Swr context. If it is not initialized, + * or SWR_FLAG_RESAMPLE is not set, swr_init() is + * called with the flag set. + * @param[in] sample_delta delta in PTS per sample + * @param[in] compensation_distance number of samples to compensate for + * @return >= 0 on success, AVERROR error codes if: + * @li @c s is NULL, + * @li @c compensation_distance is less than 0, + * @li @c compensation_distance is 0 but sample_delta is not, + * @li compensation unsupported by resampler, or + * @li swr_init() fails when called. + *) +function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param[in,out] s allocated Swr context, not yet initialized + * @param[in] channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return >= 0 on success, or AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * Set a customized remix matrix. + * + * @param s allocated Swr context, not yet initialized + * @param matrix remix coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o + * @param stride offset between lines of the matrix + * @return >= 0 on success, or AVERROR error code in case of failure. + *) +function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; + cdecl; external sw__resample; + +(** + * Drops the specified number of output samples. + * + * This function, along with swr_inject_silence(), is called by swr_next_pts() + * if needed for "hard" compensation. + * + * @param s allocated Swr context + * @param count number of samples to be dropped + * + * @return >= 0 on success, or a negative AVERROR code on failure + *) +function swr_drop_output(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Injects the specified number of silence samples. + * + * This function, along with swr_drop_output(), is called by swr_next_pts() + * if needed for "hard" compensation. + * + * @param s allocated Swr context + * @param count number of samples to be dropped + * + * @return >= 0 on success, or a negative AVERROR code on failure + *) +function swr_inject_silence(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Gets the delay the next input sample will experience relative to the next output sample. + * + * Swresample can buffer data if more input has been provided than available + * output space, also converting between sample rates needs a delay. + * This function returns the sum of all such delays. + * The exact delay is not necessarily an integer value in either input or + * output sample rate. Especially when downsampling by a large value, the + * output sample rate may be a poor choice to represent the delay, similarly + * for upsampling and the input sample rate. + * + * @param s swr context + * @param base timebase in which the returned delay will be: + * @li if it's set to 1 the returned delay is in seconds + * @li if it's set to 1000 the returned delay is in milliseconds + * @li if it's set to the input sample rate then the returned + * delay is in input samples + * @li if it's set to the output sample rate then the returned + * delay is in output samples + * @li if it's the least common multiple of in_sample_rate and + * out_sample_rate then an exact rounding-free delay will be + * returned + * @returns the delay in 1 / @c base units. + *) +function swr_get_delay(s: PSwrContext; base: cint64): cint64; + cdecl; external sw__resample; + +(** + * Find an upper bound on the number of samples that the next swr_convert + * call will output, if called with in_samples of input samples. This + * depends on the internal state, and anything changing the internal state + * (like further swr_convert() calls) will may change the number of samples + * swr_get_out_samples() returns for the same number of input samples. + * + * @param in_samples number of input samples. + * @note any call to swr_inject_silence(), swr_convert(), swr_next_pts() + * or swr_set_compensation() invalidates this limit + * @note it is recommended to pass the correct available buffer size + * to all functions like swr_convert() even if swr_get_out_samples() + * indicates that less would be used. + * @returns an upper bound on the number of samples that the next swr_convert + * will output or a negative value to indicate an error + *) +function swr_get_out_samples(s: PSwrContext; in_samples: cint): cint; + cdecl; external sw__resample; + +(** + * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. + * + * This is useful to check if the build-time libswresample has the same version + * as the run-time one. + * + * @returns the unsigned int-typed version + *) +function swresample_version(): cuint; + cdecl; external sw__resample; + +(** + * Return the swr build-time configuration. + * + * @returns the build-time @c ./configure flags + *) +function swresample_configuration(): PAnsiChar; + cdecl; external sw__resample; + +(** + * Return the swr license. + * + * @returns the license of libswresample, determined at build-time + *) +function swresample_license(): PAnsiChar; + cdecl; external sw__resample; + +implementation + +end. + diff --git a/src/lib/ffmpeg-3.1/swscale.pas b/src/lib/ffmpeg-3.1/swscale.pas new file mode 100644 index 00000000..88b6e630 --- /dev/null +++ b/src/lib/ffmpeg-3.1/swscale.pas @@ -0,0 +1,439 @@ +(* + * Copyright (C) 2001-2011 Michael Niedermayer <michaelni@gmx.at> + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * FFmpeg Pascal port + * - Ported by the UltraStar Deluxe Team + * + * Conversion of libswscale/swscale.h + * version: 3.0.100 + *) + +unit swscale; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) + {$MACRO ON} (* Turn macro support on *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} (* for ffmpeg defines *) +{$I ff_api-defines.inc} (* FF_API_* defines *) + +{$IFDEF DARWIN} + {$linklib libswscale} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + avcodec, + UConfig; + +const +(* + * IMPORTANT: The official FFmpeg C headers change very quickly. Often some + * of the data structures are changed so that they become incompatible with + * older header files. The Pascal headers have to be adjusted to those changes, + * otherwise the application might crash randomly or strange bugs (not + * necessarily related to video or audio due to buffer overflows etc.) might + * occur. + * + * In the past users reported problems with USDX that took hours to fix and + * the problem was an unsupported version of FFmpeg. So we decided to disable + * support for future versions of FFmpeg until the headers are revised by us + * for that version as they otherwise most probably will break USDX. + * + * If the headers do not yet support your FFmpeg version you may want to + * adjust the max. version numbers manually but please note: it may work but + * in many cases it does not. The USDX team does NOT PROVIDE ANY SUPPORT + * for the game if the MAX. VERSION WAS CHANGED. + * + * The only safe way to support new versions of FFmpeg is to add the changes + * of the FFmpeg git repository C headers to the Pascal headers. + * You can accelerate this process by posting a patch with the git changes + * translated to Pascal to our bug tracker (please join our IRC chat before + * you start working on it). Simply adjusting the max. versions is NOT a valid + * fix. + *) + + (* Max. supported version by this header *) + LIBSWSCALE_MAX_VERSION_MAJOR = 4; + LIBSWSCALE_MAX_VERSION_MINOR = 1; + LIBSWSCALE_MAX_VERSION_RELEASE = 100; + LIBSWSCALE_MAX_VERSION = (LIBSWSCALE_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBSWSCALE_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBSWSCALE_MAX_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBSWSCALE_VERSION > LIBSWSCALE_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libswscale is not yet supported!'} +{$IFEND} + +type + TQuadCintArray = array[0..3] of cint; + PQuadCintArray = ^TQuadCintArray; + TCintArray = array[0..0] of cint; + PCintArray = ^TCintArray; + TPCuint8Array = array[0..0] of PCuint8; + PPCuint8Array = ^TPCuint8Array; + +(** + * Return the LIBSWSCALE_VERSION_INT constant. + *) +function swscale_version(): cuint; + cdecl; external sw__scale; + +(** + * Return the libswscale build-time configuration. + *) +function swscale_configuration(): PAnsiChar; + cdecl; external sw__scale; + +(** + * Return the libswscale license. + *) +function swscale_license(): PAnsiChar; + cdecl; external sw__scale; + +const + (* values for the flags, the stuff on the command line is different *) + SWS_FAST_BILINEAR = 1; + SWS_BILINEAR = 2; + SWS_BICUBIC = 4; + SWS_X = 8; + SWS_POINT = $10; + SWS_AREA = $20; + SWS_BICUBLIN = $40; + SWS_GAUSS = $80; + SWS_SINC = $100; + SWS_LANCZOS = $200; + SWS_SPLINE = $400; + + SWS_SRC_V_CHR_DROP_MASK = $30000; + SWS_SRC_V_CHR_DROP_SHIFT = 16; + + SWS_PARAM_DEFAULT = 123456; + + SWS_PRINT_INFO = $1000; + + // the following 3 flags are not completely implemented + // internal chrominance subsampling info + SWS_FULL_CHR_H_INT = $2000; + // input subsampling info + SWS_FULL_CHR_H_INP = $4000; + SWS_DIRECT_BGR = $8000; + SWS_ACCURATE_RND = $40000; + SWS_BITEXACT = $80000; + + SWS_MAX_REDUCE_CUTOFF = 0.002; + + SWS_CS_ITU709 = 1; + SWS_CS_FCC = 4; + SWS_CS_ITU601 = 5; + SWS_CS_ITU624 = 5; + SWS_CS_SMPTE170M = 5; + SWS_CS_SMPTE240M = 7; + SWS_CS_DEFAULT = 5; + SWS_CS_BT2020 = 9; + +(** + * Return a pointer to yuv<->rgb coefficients for the given colorspace + * suitable for sws_setColorspaceDetails(). + * + * @param colorspace One of the SWS_CS_* macros. If invalid, + * SWS_CS_DEFAULT is used. + *) +function sws_getCoefficients(colorspace: cint): Pcint; + cdecl; external sw__scale; + +type + + // when used for filters they must have an odd number of elements + // coeffs cannot be shared between vectors + PSwsVector = ^TSwsVector; + TSwsVector = record + coeff: PCdouble; // pointer to the list of coefficients + length: cint; // number of coefficients in the vector + end; + + // vectors can be shared + PSwsFilter = ^TSwsFilter; + TSwsFilter = record + lumH: PSwsVector; + lumV: PSwsVector; + chrH: PSwsVector; + chrV: PSwsVector; + end; + + PSwsContext = ^TSwsContext; + TSwsContext = record + {internal structure} + end; + +(** + * Return a positive value if pix_fmt is a supported input format, 0 + * otherwise. + *) +function sws_isSupportedInput(pix_fmt: TAVPixelFormat): cint; + cdecl; external sw__scale; + +(** + * Return a positive value if pix_fmt is a supported output format, 0 + * otherwise. + *) +function sws_isSupportedOutput(pix_fmt: TAVPixelFormat): cint; + cdecl; external sw__scale; + +(** + * @param[in] pix_fmt the pixel format + * @return a positive value if an endianness conversion for pix_fmt is + * supported, 0 otherwise. + *) +function sws_isSupportedEndiannessConversion(pix_fmt: TAVPixelFormat): cint; + cdecl; external sw__scale; + +(** + * Allocate an empty SwsContext. This must be filled and passed to + * sws_init_context(). For filling see AVOptions, options.c and + * sws_setColorspaceDetails(). + *) +function sws_alloc_context(): PSwsContext; + cdecl; external sw__scale; + +(** + * Initialize the swscaler context sws_context. + * + * @return zero or positive value on success, a negative value on + * error + *) +function sws_init_context(sws_context: PSwsContext; srcFilter: PSwsFilter; dstFilter: PSwsFilter): cint; + cdecl; external sw__scale; + +(** + * Free the swscaler context swsContext. + * If swsContext is NULL, then does nothing. + *) +procedure sws_freeContext(swsContext: PSwsContext); + cdecl; external sw__scale; + +(** + * Allocate and return a SwsContext. You need it to perform + * scaling/conversion operations using sws_scale(). + * + * @param srcW the width of the source image + * @param srcH the height of the source image + * @param srcFormat the source image format + * @param dstW the width of the destination image + * @param dstH the height of the destination image + * @param dstFormat the destination image format + * @param flags specify which algorithm and options to use for rescaling + * @param param extra parameters to tune the used scaler + * For SWS_BICUBIC param[0] and [1] tune the shape of the basis + * function, param[0] tunes f(1) and param[1] f??(1) + * For SWS_GAUSS param[0] tunes the exponent and thus cutoff + * frequency + * For SWS_LANCZOS param[0] tunes the width of the window function + * @return a pointer to an allocated context, or NULL in case of error + * @note this function is to be removed after a saner alternative is + * written + *) +function sws_getContext(srcW: cint; srcH: cint; srcFormat: TAVPixelFormat; + dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; + flags: cint; srcFilter: PSwsFilter; + dstFilter: PSwsFilter; param: {const} PCdouble): PSwsContext; + cdecl; external sw__scale; + +(** + * Scale the image slice in srcSlice and put the resulting scaled + * slice in the image in dst. A slice is a sequence of consecutive + * rows in an image. + * + * Slices have to be provided in sequential order, either in + * top-bottom or bottom-top order. If slices are provided in + * non-sequential order the behavior of the function is undefined. + * + * @param c the scaling context previously created with + * sws_getContext() + * @param srcSlice the array containing the pointers to the planes of + * the source slice + * @param srcStride the array containing the strides for each plane of + * the source image + * @param srcSliceY the position in the source image of the slice to + * process, that is the number (counted starting from + * zero) in the image of the first row of the slice + * @param srcSliceH the height of the source slice, that is the number + * of rows in the slice + * @param dst the array containing the pointers to the planes of + * the destination image + * @param dstStride the array containing the strides for each plane of + * the destination image + * @return the height of the output slice + *) +function sws_scale(c: PSwsContext; {const} srcSlice: PPCuint8Array; + {const} srcStride: PCintArray; srcSliceY: cint; srcSliceH: cint; + {const} dst: PPCuint8Array; {const} dstStride: PCintArray): cint; + cdecl; external sw__scale; + +(** + * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) + * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) + * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] + * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] + * @param brightness 16.16 fixed point brightness correction + * @param contrast 16.16 fixed point contrast correction + * @param saturation 16.16 fixed point saturation correction + * @return -1 if not supported + *) +function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadCintArray; + srcRange: cint; table: PQuadCintArray; dstRange: cint; + brightness: cint; contrast: cint; saturation: cint): cint; + cdecl; external sw__scale; + +(** + * @return -1 if not supported + *) +function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadCintArray; + var srcRange: cint; var table: PQuadCintArray; var dstRange: cint; + var brightness: cint; var contrast: cint; var saturation: cint): cint; + cdecl; external sw__scale; + +(** + * Allocate and return an uninitialized vector with length coefficients. + *) +function sws_allocVec(length: cint): PSwsVector; + cdecl; external sw__scale; + +(** + * Return a normalized Gaussian curve used to filter stuff + * quality = 3 is high quality, lower is lower quality. + *) +function sws_getGaussianVec(variance: cdouble; quality: cdouble): PSwsVector; + cdecl; external sw__scale; + +(** + * Scale all the coefficients of a by the scalar value. + *) +procedure sws_scaleVec(a: PSwsVector; scalar: cdouble); + cdecl; external sw__scale; + +(** + * Scale all the coefficients of a so that their sum equals height. + *) +procedure sws_normalizeVec(a: PSwsVector; height: cdouble); + cdecl; external sw__scale; + +{$IFDEF FF_API_SWS_VECTOR} +function sws_getConstVec(c: cdouble; length: cint): PSwsVector; + cdecl; external sw__scale; deprecated; +function sws_getIdentityVec: PSwsVector; + cdecl; external sw__scale; deprecated; +procedure sws_convVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; deprecated; +procedure sws_addVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; deprecated; +procedure sws_subVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; deprecated; +procedure sws_shiftVec(a: PSwsVector; shift: cint); + cdecl; external sw__scale; deprecated; +function sws_cloneVec(a: PSwsVector): PSwsVector; + cdecl; external sw__scale; deprecated; +procedure sws_printVec2(a: PSwsVector; + log_ctx: PAVClass; // PAVClass is declared in avcodec.pas + log_level: cint); + cdecl; external sw__scale; deprecated; +{$ENDIF} + +procedure sws_freeVec(a: PSwsVector); + cdecl; external sw__scale; + +function sws_getDefaultFilter(lumaGBlur: cfloat; chromaGBlur: cfloat; + lumaSharpen: cfloat; chromaSharpen: cfloat; + chromaHShift: cfloat; chromaVShift: cfloat; + verbose: cint): PSwsFilter; + cdecl; external sw__scale; + +procedure sws_freeFilter(filter: PSwsFilter); + cdecl; external sw__scale; + +(** + * Check if context can be reused, otherwise reallocates a new one. + * + * If context is NULL, just calls sws_getContext() to get a new + * context. Otherwise, checks if the parameters are the ones already + * saved in context. If that is the case, returns the current + * context. Otherwise, frees context and gets a new context with + * the new parameters. + * + * Be warned that srcFilter and dstFilter are not checked, they + * are assumed to remain the same. + *) +function sws_getCachedContext(context: PSwsContext; + srcW: cint; srcH: cint; srcFormat: TAVPixelFormat; + dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; + flags: cint; srcFilter: PSwsFilter; + dstFilter: PSwsFilter; param: PCdouble): PSwsContext; + cdecl; external sw__scale; + +(** + * Convert an 8bit paletted frame into a frame with a color depth of 32-bits. + * + * The output frame will have the same packed format as the palette. + * + * @param src source frame buffer + * @param dst destination frame buffer + * @param num_pixels number of pixels to convert + * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src + *) +procedure sws_convertPalette8ToPacked32({const} src: PPCuint8Array; + dst: PPCuint8Array; + num_pixels: cint; + {const} palette: PPCuint8Array); + cdecl; external sw__scale; + +(** + * Convert an 8bit paletted frame into a frame with a color depth of 24 bits. + * + * With the palette format "ABCD", the destination frame ends up with the format "ABC". + * + * @param src source frame buffer + * @param dst destination frame buffer + * @param num_pixels number of pixels to convert + * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src + *) +procedure sws_convertPalette8ToPacked24({const} src: PPCuint8Array; + dst: PPCuint8Array; + num_pixels: cint; + {const} palette: PPCuint8Array); + cdecl; external sw__scale; + +(** + * Get the AVClass for swsContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function sws_get_class(): {const} PAVClass; + cdecl; external sw__scale; + +implementation + +end. diff --git a/src/lib/ffmpeg-3.2/How to update the ffmpeg files.txt b/src/lib/ffmpeg-3.2/How to update the ffmpeg files.txt new file mode 100644 index 00000000..ae65d477 --- /dev/null +++ b/src/lib/ffmpeg-3.2/How to update the ffmpeg files.txt @@ -0,0 +1,20 @@ +how to update the ffmpeg files: + +1) buffer.pas + cpu.pas + dict.pas + error.pas + frame.pas + log.pas + mathematics.pas + mem.pas + opt.pas + pixfmt.pas + samplefmt.pas +2) rational.pas +3) avutil.pas +4) avcodec.pas +5) avio.pas + swscale.pas + swresample.pas +6) avformat.pas \ No newline at end of file diff --git a/src/lib/ffmpeg-3.2/ToDo.txt b/src/lib/ffmpeg-3.2/ToDo.txt new file mode 100644 index 00000000..b0bd305e --- /dev/null +++ b/src/lib/ffmpeg-3.2/ToDo.txt @@ -0,0 +1,112 @@ +1) avutil.pas + +from mem.pas: +inline function av_x_if_null +inline function av_size_mult + +from log.pas: +inline function av_log +inline function av_log_set_callback +inline function av_log_default_callback +inline function av_dlog + + +FFmpeg 3.0 changes: +2016-02-10 - bc9a596 / 9f61abc - lavf 57.25.100 / 57.3.0 - avformat.h + Add AVFormatContext.opaque, io_open and io_close, allowing custom IO + +2016-02-01 - 1dba837 - lavf 57.24.100 - avformat.h, avio.h + Add protocol_whitelist to AVFormatContext, AVIOContext + +2016-01-31 - 66e9d2f - lavu 55.17.100 - frame.h + Add AV_FRAME_DATA_GOP_TIMECODE for exporting MPEG1/2 GOP timecodes. + +2016-01-01 - 5e8b053 / 2c68113 - lavc 57.21.100 / 57.12.0 - avcodec.h + Add AVCodecDescriptor.profiles and avcodec_profile_name(). + +2015-12-28 - 1f9139b - lavf 57.21.100 - avformat.h + Add automatic bitstream filtering; add av_apply_bitstream_filters() + +2015-12-22 - 39a09e9 - lavfi 6.21.101 - avfilter.h + Deprecate avfilter_link_set_closed(). + Applications are not supposed to mess with links, + they should close the sinks. + +2015-12-17 - lavc 57.18.100 / 57.11.0 - avcodec.h dirac.h + xxxxxxx - Add av_packet_add_side_data(). + xxxxxxx - Add AVCodecContext.coded_side_data. + xxxxxxx - Add AVCPBProperties API. + xxxxxxx - Add a new public header dirac.h containing + av_dirac_parse_sequence_header() + +2015-12-11 - 676a93f - lavf 57.20.100 - avformat.h + Add av_program_add_stream_index() + +2015-11-29 - 93fb4a4 - lavc 57.16.101 - avcodec.h + Deprecate rtp_callback without replacement, i.e. it won't be possible to + get image slices before the full frame is encoded any more. The libavformat + rtpenc muxer can still be used for RFC-2190 packetization. + +2015-11-22 - fe20e34 - lavc 57.16.100 - avcodec.h + Add AV_PKT_DATA_FALLBACK_TRACK for making fallback associations between + streams. + +2015-11-22 - ad317c9 - lavf 57.19.100 - avformat.h + Add av_stream_new_side_data(). + +2015-11-22 - e12f403 - lavu 55.8.100 - xtea.h + Add av_xtea_le_init and av_xtea_le_crypt + +2015-11-18 - lavu 55.7.100 - mem.h + Add av_fast_mallocz() + +2015-10-29 - lavc 57.12.100 / 57.8.0 - avcodec.h + xxxxxx - Deprecate av_free_packet(). Use av_packet_unref() as replacement, + it resets the packet in a more consistent way. + xxxxxx - Deprecate av_dup_packet(), it is a no-op for most cases. + Use av_packet_ref() to make a non-refcounted AVPacket refcounted. + xxxxxx - Add av_packet_alloc(), av_packet_clone(), av_packet_free(). + They match the AVFrame functions with the same name. + +2015-10-27 - 1e477a9 - lavu 55.5.100 - cpu.h + Add AV_CPU_FLAG_AESNI. + +2015-10-22 - ee573b4 / a17a766 - lavc 57.9.100 / 57.5.0 - avcodec.h + Add data and linesize array to AVSubtitleRect, to be used instead of + the ones from the embedded AVPicture. + +2015-10-22 - 866a417 / dc923bc - lavc 57.8.100 / 57.0.0 - qsv.h + Add an API for allocating opaque surfaces. + +2015-10-15 - 2c2d162 - lavf 57.4.100 + Remove the latm demuxer that was a duplicate of the loas demuxer. + +2015-10-14 - b994788 / 11c5f43 - lavu 55.4.100 / 55.2.0 - dict.h + Change return type of av_dict_copy() from void to int, so that a proper + error code can be reported. + +2015-09-29 - b01891a / 948f3c1 - lavc 57.3.100 / 57.2.0 - avcodec.h + Change type of AVPacket.duration from int to int64_t. + +2015-09-17 - 7c46f24 / e3d4784 - lavc 57.3.100 / 57.2.0 - d3d11va.h + Add av_d3d11va_alloc_context(). This function must from now on be used for + allocating AVD3D11VAContext. + +2015-09-15 - lavf 57.2.100 - avformat.h + probesize and max_analyze_duration switched to 64bit, both + are only accessible through AVOptions + +2015-09-15 - lavf 57.1.100 - avformat.h + bit_rate was changed to 64bit, make sure you update any + printf() or other type sensitive code + +2015-09-15 - lavc 57.2.100 - avcodec.h + bit_rate/rc_max_rate/rc_min_rate were changed to 64bit, make sure you update + any printf() or other type sensitive code + +2015-09-07 - lavu 55.0.100 / 55.0.0 + c734b34 / b8b5d82 - Change type of AVPixFmtDescriptor.flags from uint8_t to uint64_t. + f53569a / 6b3ef7f - Change type of AVComponentDescriptor fields from uint16_t to int + and drop bit packing. + 151aa2e / 2268db2 - Add step, offset, and depth to AVComponentDescriptor to replace + the deprecated step_minus1, offset_plus1, and depth_minus1. \ No newline at end of file diff --git a/src/lib/ffmpeg-3.2/avcodec.pas b/src/lib/ffmpeg-3.2/avcodec.pas new file mode 100644 index 00000000..fed8bfb8 --- /dev/null +++ b/src/lib/ffmpeg-3.2/avcodec.pas @@ -0,0 +1,6950 @@ +(* + * copyright (c) 2001 Fabrice Bellard + * + * 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 St, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavcodec/avcodec.h + * version: 56.1.100 + * + *) + +unit avcodec; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} (* for ffmpeg defines *) +{$I ff_api-defines.inc} (* FF_API_* defines *) + +{$IFDEF DARWIN} + {$linklib libavcodec} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + SysUtils, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + (* + * IMPORTANT: The official FFmpeg C headers change very quickly. Often some + * of the data structures are changed so that they become incompatible with + * older header files. The Pascal headers have to be adjusted to those changes, + * otherwise the application might crash randomly or strange bugs (not + * necessarily related to video or audio due to buffer overflows etc.) might + * occur. + * + * In the past users reported problems with USDX that took hours to fix and + * the problem was an unsupported version of FFmpeg. So we decided to disable + * support for future versions of FFmpeg until the headers are revised by us + * for that version as they otherwise most probably will break USDX. + * + * If the headers do not yet support your FFmpeg version you may want to + * adjust the max. version numbers manually but please note: it may work but + * in many cases it does not. The USDX team does NOT PROVIDE ANY SUPPORT + * for the game if the MAX. VERSION WAS CHANGED. + * + * The only safe way to support new versions of FFmpeg is to add the changes + * of the FFmpeg git repository C headers to the Pascal headers. + * You can accelerate this process by posting a patch with the git changes + * translated to Pascal to our bug tracker (please join our IRC chat before + * you start working on it). Simply adjusting the max. versions is NOT a valid + * fix. + *) + + (* Supported version by this header *) + LIBAVCODEC_MAX_VERSION_MAJOR = 57; + LIBAVCODEC_MAX_VERSION_MINOR = 64; + LIBAVCODEC_MAX_VERSION_RELEASE = 101; + LIBAVCODEC_MAX_VERSION = (LIBAVCODEC_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVCODEC_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVCODEC_MAX_VERSION_RELEASE * VERSION_RELEASE); + + (* Min. supported version by this header *) + LIBAVCODEC_MIN_VERSION_MAJOR = 57; + LIBAVCODEC_MIN_VERSION_MINOR = 64; + LIBAVCODEC_MIN_VERSION_RELEASE = 100; + LIBAVCODEC_MIN_VERSION = (LIBAVCODEC_MIN_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVCODEC_MIN_VERSION_MINOR * VERSION_MINOR) + + (LIBAVCODEC_MIN_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBAVCODEC_VERSION < LIBAVCODEC_MIN_VERSION)} + {$MESSAGE Error 'Linked version of libavcodec is too old!'} +{$IFEND} + +(* Check if linked version is supported *) +{$IF (LIBAVCODEC_VERSION > LIBAVCODEC_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libavcodec is not yet supported!'} +{$IFEND} + +{$IFNDEF FPC} +type + // defines for Delphi + size_t = cardinal; +{$ENDIF} + +type + FF_INTERNALC_MEM_TYPE = cuint; + +const + AV_NOPTS_VALUE: cint64 = $8000000000000000; + AV_TIME_BASE = 1000000; + AV_TIME_BASE_Q: TAVRational = (num: 1; den: AV_TIME_BASE); + +(** + * @ingroup libavc + * @defgroup lavc_encdec send/receive encoding and decoding API overview + * @{ + * + * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/ + * avcodec_receive_packet() functions provide an encode/decode API, which + * decouples input and output. + * + * The API is very similar for encoding/decoding and audio/video, and works as + * follows: + * - Set up and open the AVCodecContext as usual. + * - Send valid input: + * - For decoding, call avcodec_send_packet() to give the decoder raw + * compressed data in an AVPacket. + * - For encoding, call avcodec_send_frame() to give the decoder an AVFrame + * containing uncompressed audio or video. + * In both cases, it is recommended that AVPackets and AVFrames are + * refcounted, or libavcodec might have to copy the input data. (libavformat + * always returns refcounted AVPackets, and av_frame_get_buffer() allocates + * refcounted AVFrames.) + * - Receive output in a loop. Periodically call one of the avcodec_receive_*() + * functions and process their output: + * - For decoding, call avcodec_receive_frame(). On success, it will return + * an AVFrame containing uncompressed audio or video data. + * - For encoding, call avcodec_receive_packet(). On success, it will return + * an AVPacket with a compressed frame. + * Repeat this call until it returns AVERROR(EAGAIN) or an error. The + * AVERROR(EAGAIN) return value means that new input data is required to + * return new output. In this case, continue with sending input. For each + * input frame/packet, the codec will typically return 1 output frame/packet, + * but it can also be 0 or more than 1. + * + * At the beginning of decoding or encoding, the codec might accept multiple + * input frames/packets without returning a frame, until its internal buffers + * are filled. This situation is handled transparently if you follow the steps + * outlined above. + * + * End of stream situations. These require "flushing" (aka draining) the codec, + * as the codec might buffer multiple frames or packets internally for + * performance or out of necessity (consider B-frames). + * This is handled as follows: + * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding) + * or avcodec_send_frame() (encoding) functions. This will enter draining + * mode. + * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet() + * (encoding) in a loop until AVERROR_EOF is returned. The functions will + * not return AVERROR(EAGAIN), unless you forgot to enter draining mode. + * - Before decoding can be resumed again, the codec has to be reset with + * avcodec_flush_buffers(). + * + * Using the API as outlined above is highly recommended. But it is also + * possible to call functions outside of this rigid schema. For example, you can + * call avcodec_send_packet() repeatedly without calling + * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed + * until the codec's internal buffer has been filled up (which is typically of + * size 1 per output frame, after initial input), and then reject input with + * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to + * read at least some output. + * + * Not all codecs will follow a rigid and predictable dataflow; the only + * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on + * one end implies that a receive/send call on the other end will succeed. In + * general, no codec will permit unlimited buffering of input or output. + * + * This API replaces the following legacy functions: + * - avcodec_decode_video2() and avcodec_decode_audio4(): + * Use avcodec_send_packet() to feed input to the decoder, then use + * avcodec_receive_frame() to receive decoded frames after each packet. + * Unlike with the old video decoding API, multiple frames might result from + * a packet. For audio, splitting the input packet into frames by partially + * decoding packets becomes transparent to the API user. You never need to + * feed an AVPacket to the API twice. + * Additionally, sending a flush/draining packet is required only once. + * - avcodec_encode_video2()/avcodec_encode_audio2(): + * Use avcodec_send_frame() to feed input to the encoder, then use + * avcodec_receive_packet() to receive encoded packets. + * Providing user-allocated buffers for avcodec_receive_packet() is not + * possible. + * - The new API does not handle subtitles yet. + * + * Mixing new and old function calls on the same AVCodecContext is not allowed, + * and will result in undefined behavior. + * + * Some codecs might require using the new API; using the old API will return + * an error when calling it. + * @} + *) + +(** + * @defgroup lavc_core Core functions/structures. + * @ingroup libavc + * + * Basic definitions, functions for querying libavcodec capabilities, + * allocating core structures, etc. + * @ + *) + +(** + * Identify the syntax and semantics of the bitstream. + * The principle is roughly: + * Two decoders with the same ID can decode the same streams. + * Two encoders with the same ID can encode compatible streams. + * There may be slight deviations from the principle due to implementation + * details. + * + * If you add a codec ID to this list, add it so that + * 1. no value of an existing codec ID changes (that would break ABI), + * 2. it is as close as possible to similar codecs + * + * After adding new codec IDs, do not forget to add an entry to the codec + * descriptor list and bump libavcodec minor version. + *) +type + PAVCodecID = ^TAVCodecID; + TAVCodecID = ( + AV_CODEC_ID_NONE, + + //* video codecs */ + AV_CODEC_ID_MPEG1VIDEO, + AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding +{$IFDEF FF_API_XVMC} + AV_CODEC_ID_MPEG2VIDEO_XVMC, +{$IFEND} + AV_CODEC_ID_H261, + AV_CODEC_ID_H263, + AV_CODEC_ID_RV10, + AV_CODEC_ID_RV20, + AV_CODEC_ID_MJPEG, + AV_CODEC_ID_MJPEGB, + AV_CODEC_ID_LJPEG, + AV_CODEC_ID_SP5X, + AV_CODEC_ID_JPEGLS, + AV_CODEC_ID_MPEG4, + AV_CODEC_ID_RAWVIDEO, + AV_CODEC_ID_MSMPEG4V1, + AV_CODEC_ID_MSMPEG4V2, + AV_CODEC_ID_MSMPEG4V3, + AV_CODEC_ID_WMV1, + AV_CODEC_ID_WMV2, + AV_CODEC_ID_H263P, + AV_CODEC_ID_H263I, + AV_CODEC_ID_FLV1, + AV_CODEC_ID_SVQ1, + AV_CODEC_ID_SVQ3, + AV_CODEC_ID_DVVIDEO, + AV_CODEC_ID_HUFFYUV, + AV_CODEC_ID_CYUV, + AV_CODEC_ID_H264, + AV_CODEC_ID_INDEO3, + AV_CODEC_ID_VP3, + AV_CODEC_ID_THEORA, + AV_CODEC_ID_ASV1, + AV_CODEC_ID_ASV2, + AV_CODEC_ID_FFV1, + AV_CODEC_ID_4XM, + AV_CODEC_ID_VCR1, + AV_CODEC_ID_CLJR, + AV_CODEC_ID_MDEC, + AV_CODEC_ID_ROQ, + AV_CODEC_ID_INTERPLAY_VIDEO, + AV_CODEC_ID_XAN_WC3, + AV_CODEC_ID_XAN_WC4, + AV_CODEC_ID_RPZA, + AV_CODEC_ID_CINEPAK, + AV_CODEC_ID_WS_VQA, + AV_CODEC_ID_MSRLE, + AV_CODEC_ID_MSVIDEO1, + AV_CODEC_ID_IDCIN, + AV_CODEC_ID_8BPS, + AV_CODEC_ID_SMC, + AV_CODEC_ID_FLIC, + AV_CODEC_ID_TRUEMOTION1, + AV_CODEC_ID_VMDVIDEO, + AV_CODEC_ID_MSZH, + AV_CODEC_ID_ZLIB, + AV_CODEC_ID_QTRLE, + AV_CODEC_ID_TSCC, + AV_CODEC_ID_ULTI, + AV_CODEC_ID_QDRAW, + AV_CODEC_ID_VIXL, + AV_CODEC_ID_QPEG, + AV_CODEC_ID_PNG, + AV_CODEC_ID_PPM, + AV_CODEC_ID_PBM, + AV_CODEC_ID_PGM, + AV_CODEC_ID_PGMYUV, + AV_CODEC_ID_PAM, + AV_CODEC_ID_FFVHUFF, + AV_CODEC_ID_RV30, + AV_CODEC_ID_RV40, + AV_CODEC_ID_VC1, + AV_CODEC_ID_WMV3, + AV_CODEC_ID_LOCO, + AV_CODEC_ID_WNV1, + AV_CODEC_ID_AASC, + AV_CODEC_ID_INDEO2, + AV_CODEC_ID_FRAPS, + AV_CODEC_ID_TRUEMOTION2, + AV_CODEC_ID_BMP, + AV_CODEC_ID_CSCD, + AV_CODEC_ID_MMVIDEO, + AV_CODEC_ID_ZMBV, + AV_CODEC_ID_AVS, + AV_CODEC_ID_SMACKVIDEO, + AV_CODEC_ID_NUV, + AV_CODEC_ID_KMVC, + AV_CODEC_ID_FLASHSV, + AV_CODEC_ID_CAVS, + AV_CODEC_ID_JPEG2000, + AV_CODEC_ID_VMNC, + AV_CODEC_ID_VP5, + AV_CODEC_ID_VP6, + AV_CODEC_ID_VP6F, + AV_CODEC_ID_TARGA, + AV_CODEC_ID_DSICINVIDEO, + AV_CODEC_ID_TIERTEXSEQVIDEO, + AV_CODEC_ID_TIFF, + AV_CODEC_ID_GIF, + AV_CODEC_ID_DXA, + AV_CODEC_ID_DNXHD, + AV_CODEC_ID_THP, + AV_CODEC_ID_SGI, + AV_CODEC_ID_C93, + AV_CODEC_ID_BETHSOFTVID, + AV_CODEC_ID_PTX, + AV_CODEC_ID_TXD, + AV_CODEC_ID_VP6A, + AV_CODEC_ID_AMV, + AV_CODEC_ID_VB, + AV_CODEC_ID_PCX, + AV_CODEC_ID_SUNRAST, + AV_CODEC_ID_INDEO4, + AV_CODEC_ID_INDEO5, + AV_CODEC_ID_MIMIC, + AV_CODEC_ID_RL2, + AV_CODEC_ID_ESCAPE124, + AV_CODEC_ID_DIRAC, + AV_CODEC_ID_BFI, + AV_CODEC_ID_CMV, + AV_CODEC_ID_MOTIONPIXELS, + AV_CODEC_ID_TGV, + AV_CODEC_ID_TGQ, + AV_CODEC_ID_TQI, + AV_CODEC_ID_AURA, + AV_CODEC_ID_AURA2, + AV_CODEC_ID_V210X, + AV_CODEC_ID_TMV, + AV_CODEC_ID_V210, + AV_CODEC_ID_DPX, + AV_CODEC_ID_MAD, + AV_CODEC_ID_FRWU, + AV_CODEC_ID_FLASHSV2, + AV_CODEC_ID_CDGRAPHICS, + AV_CODEC_ID_R210, + AV_CODEC_ID_ANM, + AV_CODEC_ID_BINKVIDEO, + AV_CODEC_ID_IFF_ILBM, + AV_CODEC_ID_IFF_BYTERUN1 = AV_CODEC_ID_IFF_ILBM, + AV_CODEC_ID_KGV1, + AV_CODEC_ID_YOP, + AV_CODEC_ID_VP8, + AV_CODEC_ID_PICTOR, + AV_CODEC_ID_ANSI, + AV_CODEC_ID_A64_MULTI, + AV_CODEC_ID_A64_MULTI5, + AV_CODEC_ID_R10K, + AV_CODEC_ID_MXPEG, + AV_CODEC_ID_LAGARITH, + AV_CODEC_ID_PRORES, + AV_CODEC_ID_JV, + AV_CODEC_ID_DFA, + AV_CODEC_ID_WMV3IMAGE, + AV_CODEC_ID_VC1IMAGE, + AV_CODEC_ID_UTVIDEO, + AV_CODEC_ID_BMV_VIDEO, + AV_CODEC_ID_VBLE, + AV_CODEC_ID_DXTORY, + AV_CODEC_ID_V410, + AV_CODEC_ID_XWD, + AV_CODEC_ID_CDXL, + AV_CODEC_ID_XBM, + AV_CODEC_ID_ZEROCODEC, + AV_CODEC_ID_MSS1, + AV_CODEC_ID_MSA1, + AV_CODEC_ID_TSCC2, + AV_CODEC_ID_MTS2, + AV_CODEC_ID_CLLC, + AV_CODEC_ID_MSS2, + AV_CODEC_ID_VP9, + AV_CODEC_ID_AIC, + AV_CODEC_ID_ESCAPE130, + AV_CODEC_ID_G2M, + AV_CODEC_ID_WEBP, + AV_CODEC_ID_HNM4_VIDEO, + AV_CODEC_ID_HEVC, + AV_CODEC_ID_FIC, + AV_CODEC_ID_ALIAS_PIX, + AV_CODEC_ID_BRENDER_PIX, + AV_CODEC_ID_PAF_VIDEO, + AV_CODEC_ID_EXR, + AV_CODEC_ID_VP7, + AV_CODEC_ID_SANM, + AV_CODEC_ID_SGIRLE, + AV_CODEC_ID_MVC1, + AV_CODEC_ID_MVC2, + AV_CODEC_ID_HQX, + AV_CODEC_ID_TDSC, + AV_CODEC_ID_HQ_HQA, + AV_CODEC_ID_HAP, + AV_CODEC_ID_DDS, + AV_CODEC_ID_DXV, + AV_CODEC_ID_SCREENPRESSO, + AV_CODEC_ID_RSCC, + + AV_CODEC_ID_Y41P = $8000, + AV_CODEC_ID_AVRP, + AV_CODEC_ID_012V, + AV_CODEC_ID_AVUI, + AV_CODEC_ID_AYUV, + AV_CODEC_ID_TARGA_Y216, + AV_CODEC_ID_V308, + AV_CODEC_ID_V408, + AV_CODEC_ID_YUV4, + AV_CODEC_ID_AVRN, + AV_CODEC_ID_CPIA, + AV_CODEC_ID_XFACE, + AV_CODEC_ID_SNOW, + AV_CODEC_ID_SMVJPEG, + AV_CODEC_ID_APNG, + AV_CODEC_ID_DAALA, + AV_CODEC_ID_CFHD, + AV_CODEC_ID_TRUEMOTION2RT, + AV_CODEC_ID_M101, + AV_CODEC_ID_MAGICYUV, + AV_CODEC_ID_SHEERVIDEO, + AV_CODEC_ID_YLC, + + //* various PCM "codecs" */ + AV_CODEC_ID_FIRST_AUDIO = $10000, ///< A dummy id pointing at the start of audio codecs + AV_CODEC_ID_PCM_S16LE = $10000, + AV_CODEC_ID_PCM_S16BE, + AV_CODEC_ID_PCM_U16LE, + AV_CODEC_ID_PCM_U16BE, + AV_CODEC_ID_PCM_S8, + AV_CODEC_ID_PCM_U8, + AV_CODEC_ID_PCM_MULAW, + AV_CODEC_ID_PCM_ALAW, + AV_CODEC_ID_PCM_S32LE, + AV_CODEC_ID_PCM_S32BE, + AV_CODEC_ID_PCM_U32LE, + AV_CODEC_ID_PCM_U32BE, + AV_CODEC_ID_PCM_S24LE, + AV_CODEC_ID_PCM_S24BE, + AV_CODEC_ID_PCM_U24LE, + AV_CODEC_ID_PCM_U24BE, + AV_CODEC_ID_PCM_S24DAUD, + AV_CODEC_ID_PCM_ZORK, + AV_CODEC_ID_PCM_S16LE_PLANAR, + AV_CODEC_ID_PCM_DVD, + AV_CODEC_ID_PCM_F32BE, + AV_CODEC_ID_PCM_F32LE, + AV_CODEC_ID_PCM_F64BE, + AV_CODEC_ID_PCM_F64LE, + AV_CODEC_ID_PCM_BLURAY, + AV_CODEC_ID_PCM_LXF, + AV_CODEC_ID_S302M, + AV_CODEC_ID_PCM_S8_PLANAR, + AV_CODEC_ID_PCM_S24LE_PLANAR, + AV_CODEC_ID_PCM_S32LE_PLANAR, + AV_CODEC_ID_PCM_S16BE_PLANAR, + + AV_CODEC_ID_PCM_S64LE = $10800, + AV_CODEC_ID_PCM_S64BE, + + //* various ADPCM codecs */ + AV_CODEC_ID_ADPCM_IMA_QT = $11000, + AV_CODEC_ID_ADPCM_IMA_WAV, + AV_CODEC_ID_ADPCM_IMA_DK3, + AV_CODEC_ID_ADPCM_IMA_DK4, + AV_CODEC_ID_ADPCM_IMA_WS, + AV_CODEC_ID_ADPCM_IMA_SMJPEG, + AV_CODEC_ID_ADPCM_MS, + AV_CODEC_ID_ADPCM_4XM, + AV_CODEC_ID_ADPCM_XA, + AV_CODEC_ID_ADPCM_ADX, + AV_CODEC_ID_ADPCM_EA, + AV_CODEC_ID_ADPCM_G726, + AV_CODEC_ID_ADPCM_CT, + AV_CODEC_ID_ADPCM_SWF, + AV_CODEC_ID_ADPCM_YAMAHA, + AV_CODEC_ID_ADPCM_SBPRO_4, + AV_CODEC_ID_ADPCM_SBPRO_3, + AV_CODEC_ID_ADPCM_SBPRO_2, + AV_CODEC_ID_ADPCM_THP, + AV_CODEC_ID_ADPCM_IMA_AMV, + AV_CODEC_ID_ADPCM_EA_R1, + AV_CODEC_ID_ADPCM_EA_R3, + AV_CODEC_ID_ADPCM_EA_R2, + AV_CODEC_ID_ADPCM_IMA_EA_SEAD, + AV_CODEC_ID_ADPCM_IMA_EA_EACS, + AV_CODEC_ID_ADPCM_EA_XAS, + AV_CODEC_ID_ADPCM_EA_MAXIS_XA, + AV_CODEC_ID_ADPCM_IMA_ISS, + AV_CODEC_ID_ADPCM_G722, + AV_CODEC_ID_ADPCM_IMA_APC, + AV_CODEC_ID_ADPCM_VIMA, +{$IFDEF FF_API_VIMA_DECODER} + AV_CODEC_ID_VIMA = AV_CODEC_ID_ADPCM_VIMA, +{$IFEND} + AV_CODEC_ID_ADPCM_AFC = $11800, + AV_CODEC_ID_ADPCM_IMA_OKI, + AV_CODEC_ID_ADPCM_DTK, + AV_CODEC_ID_ADPCM_IMA_RAD, + AV_CODEC_ID_ADPCM_G726LE, + AV_CODEC_ID_ADPCM_THP_LE, + AV_CODEC_ID_ADPCM_PSX, + AV_CODEC_ID_ADPCM_AICA, + AV_CODEC_ID_ADPCM_IMA_DAT4, + AV_CODEC_ID_ADPCM_MTAF, + + //* AMR */ + AV_CODEC_ID_AMR_NB = $12000, + AV_CODEC_ID_AMR_WB, + + //* RealAudio codecs*/ + AV_CODEC_ID_RA_144 = $13000, + AV_CODEC_ID_RA_288, + + //* various DPCM codecs */ + AV_CODEC_ID_ROQ_DPCM = $14000, + AV_CODEC_ID_INTERPLAY_DPCM, + AV_CODEC_ID_XAN_DPCM, + AV_CODEC_ID_SOL_DPCM, + + AV_CODEC_ID_SDX2_DPCM = $14800, + + //* audio codecs */ + AV_CODEC_ID_MP2 = $15000, + AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3 + AV_CODEC_ID_AAC, + AV_CODEC_ID_AC3, + AV_CODEC_ID_DTS, + AV_CODEC_ID_VORBIS, + AV_CODEC_ID_DVAUDIO, + AV_CODEC_ID_WMAV1, + AV_CODEC_ID_WMAV2, + AV_CODEC_ID_MACE3, + AV_CODEC_ID_MACE6, + AV_CODEC_ID_VMDAUDIO, + AV_CODEC_ID_FLAC, + AV_CODEC_ID_MP3ADU, + AV_CODEC_ID_MP3ON4, + AV_CODEC_ID_SHORTEN, + AV_CODEC_ID_ALAC, + AV_CODEC_ID_WESTWOOD_SND1, + AV_CODEC_ID_GSM, ///< as in Berlin toast format + AV_CODEC_ID_QDM2, + AV_CODEC_ID_COOK, + AV_CODEC_ID_TRUESPEECH, + AV_CODEC_ID_TTA, + AV_CODEC_ID_SMACKAUDIO, + AV_CODEC_ID_QCELP, + AV_CODEC_ID_WAVPACK, + AV_CODEC_ID_DSICINAUDIO, + AV_CODEC_ID_IMC, + AV_CODEC_ID_MUSEPACK7, + AV_CODEC_ID_MLP, + AV_CODEC_ID_GSM_MS, { as found in WAV } + AV_CODEC_ID_ATRAC3, +{$IFDEF FF_API_VOXWARE} + AV_CODEC_ID_VOXWARE, +{$IFEND} + AV_CODEC_ID_APE, + AV_CODEC_ID_NELLYMOSER, + AV_CODEC_ID_MUSEPACK8, + AV_CODEC_ID_SPEEX, + AV_CODEC_ID_WMAVOICE, + AV_CODEC_ID_WMAPRO, + AV_CODEC_ID_WMALOSSLESS, + AV_CODEC_ID_ATRAC3P, + AV_CODEC_ID_EAC3, + AV_CODEC_ID_SIPR, + AV_CODEC_ID_MP1, + AV_CODEC_ID_TWINVQ, + AV_CODEC_ID_TRUEHD, + AV_CODEC_ID_MP4ALS, + AV_CODEC_ID_ATRAC1, + AV_CODEC_ID_BINKAUDIO_RDFT, + AV_CODEC_ID_BINKAUDIO_DCT, + AV_CODEC_ID_AAC_LATM, + AV_CODEC_ID_QDMC, + AV_CODEC_ID_CELT, + AV_CODEC_ID_G723_1, + AV_CODEC_ID_G729, + AV_CODEC_ID_8SVX_EXP, + AV_CODEC_ID_8SVX_FIB, + AV_CODEC_ID_BMV_AUDIO, + AV_CODEC_ID_RALF, + AV_CODEC_ID_IAC, + AV_CODEC_ID_ILBC, + AV_CODEC_ID_OPUS, + AV_CODEC_ID_COMFORT_NOISE, + AV_CODEC_ID_TAK, + AV_CODEC_ID_PAF_AUDIO, + AV_CODEC_ID_ON2AVC, + AV_CODEC_ID_DSS_SP, + + AV_CODEC_ID_FFWAVESYNTH = $15800, + AV_CODEC_ID_SONIC, + AV_CODEC_ID_SONIC_LS, + AV_CODEC_ID_EVRC, + AV_CODEC_ID_SMV, + AV_CODEC_ID_DSD_LSBF, + AV_CODEC_ID_DSD_MSBF, + AV_CODEC_ID_DSD_LSBF_PLANAR, + AV_CODEC_ID_DSD_MSBF_PLANAR, + AV_CODEC_ID_4GV, + AV_CODEC_ID_INTERPLAY_ACM, + AV_CODEC_ID_XMA1, + AV_CODEC_ID_XMA2, + AV_CODEC_ID_DST, + + //* subtitle codecs */ + AV_CODEC_ID_FIRST_SUBTITLE = $17000, ///< A dummy ID pointing at the start of subtitle codecs. + AV_CODEC_ID_DVD_SUBTITLE = $17000, + AV_CODEC_ID_DVB_SUBTITLE, + AV_CODEC_ID_TEXT, ///< raw UTF-8 text + AV_CODEC_ID_XSUB, + AV_CODEC_ID_SSA, + AV_CODEC_ID_MOV_TEXT, + AV_CODEC_ID_HDMV_PGS_SUBTITLE, + AV_CODEC_ID_DVB_TELETEXT, + AV_CODEC_ID_SRT, + AV_CODEC_ID_MICRODVD = $17800, + AV_CODEC_ID_EIA_608, + AV_CODEC_ID_JACOSUB, + AV_CODEC_ID_SAMI, + AV_CODEC_ID_REALTEXT, + AV_CODEC_ID_STL, + AV_CODEC_ID_SUBVIEWER1, + AV_CODEC_ID_SUBVIEWER, + AV_CODEC_ID_SUBRIP, + AV_CODEC_ID_WEBVTT, + AV_CODEC_ID_MPL2, + AV_CODEC_ID_VPLAYER, + AV_CODEC_ID_PJS, + AV_CODEC_ID_ASS, + AV_CODEC_ID_HDMV_TEXT_SUBTITLE, + + //* other specific kind of codecs (generally used for attachments) */ + AV_CODEC_ID_FIRST_UNKNOWN = $18000, ///< A dummy ID pointing at the start of various fake codecs. + AV_CODEC_ID_TTF = $18000, + + AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream. + AV_CODEC_ID_BINTEXT = $18800, + AV_CODEC_ID_XBIN, + AV_CODEC_ID_IDF, + AV_CODEC_ID_OTF, + AV_CODEC_ID_SMPTE_KLV, + AV_CODEC_ID_DVD_NAV, + AV_CODEC_ID_TIMED_ID3, + AV_CODEC_ID_BIN_DATA, + + AV_CODEC_ID_PROBE = $19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it + + AV_CODEC_ID_MPEG2TS = $20000, (**< _FAKE_ codec to indicate a raw MPEG-2 TS + * stream (only used by libavformat) *) + AV_CODEC_ID_MPEG4SYSTEMS = $20001, (**< _FAKE_ codec to indicate a MPEG-4 Systems + * stream (only used by libavformat) *) + AV_CODEC_ID_FFMETADATA = $21000, ///< Dummy codec for streams containing only metadata information. + AV_CODEC_ID_WRAPPED_AVFRAME = $21001 ///< Passthrough codec, AVFrames wrapped in AVPacket + ); + +type + TCodecType = TAVMediaType; + +const + CODEC_TYPE_UNKNOWN = AVMEDIA_TYPE_UNKNOWN; + CODEC_TYPE_VIDEO = AVMEDIA_TYPE_VIDEO; + CODEC_TYPE_AUDIO = AVMEDIA_TYPE_AUDIO; + CODEC_TYPE_DATA = AVMEDIA_TYPE_DATA; + CODEC_TYPE_SUBTITLE = AVMEDIA_TYPE_SUBTITLE; + CODEC_TYPE_ATTACHMENT = AVMEDIA_TYPE_ATTACHMENT; + CODEC_TYPE_NB = AVMEDIA_TYPE_NB; + +(** + * This struct describes the properties of a single codec described by an + * AVCodecID. + * @see avcodec_descriptor_get() + *) +type + + (** + * AVProfile. + *) + PAVProfile = ^TAVProfile; + TAVProfile = record + profile: cint; + name: {const} PAnsiChar; ///< short name for the profile + end; {TAVProfile} + + PAVCodecDescriptor = ^TAVCodecDescriptor; + TAVCodecDescriptor = record + id: TAVCodecID; + type_: TAVMediaType; + (** + * Name of the codec described by this descriptor. It is non-empty and + * unique for each codec descriptor. It should contain alphanumeric + * characters and '_' only. + *) + name: PAnsiChar; + (** + * A more descriptive name for this codec. May be NULL. + *) + long_name: PAnsiChar; + (** + * Codec properties, a combination of AV_CODEC_PROP_* flags. + *) + props: cint; + + (** + * MIME type(s) associated with the codec. + * May be NULL; if not, a NULL-terminated array of MIME types. + * The first item is always non-NULL and is the preferred MIME type. + *) + mime_types: PAnsiChar; + + (** + * If non-NULL, an array of profiles recognized for this codec. + * Terminated with FF_PROFILE_UNKNOWN. + *) + profiles: PAVProfile; + end; + +const +(** + * Codec uses only intra compression. + * Video codecs only. + *) + AV_CODEC_PROP_INTRA_ONLY = 1 << 0; +(** + * Codec supports lossy compression. Audio and video codecs only. + * @note a codec may support both lossy and lossless + * compression modes + *) + AV_CODEC_PROP_LOSSY = 1 << 1; +(** + * Codec supports lossless compression. Audio and video codecs only. + *) + AV_CODEC_PROP_LOSSLESS = 1 << 2; +(** + * Codec supports frame reordering. That is, the coded order (the order in which + * the encoded packets are output by the encoders / stored / input to the + * decoders) may be different from the presentation order of the corresponding + * frames. + * + * For codecs that do not have this property set, PTS and DTS should always be + * equal. + *) + AV_CODEC_PROP_REORDER = 1 << 3; +(** + * Subtitle codec is bitmap based + * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field. + *) + AV_CODEC_PROP_BITMAP_SUB = 1 << 16; +(** + * Subtitle codec is text based. + * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field. + *) + AV_CODEC_PROP_TEXT_SUB = 1 << 17; + +(** + * @ingroup lavc_decoding + * Required number of additionally allocated bytes at the end of the input bitstream for decoding. + * This is mainly needed because some optimized bitstream readers read + * 32 or 64 bit at once and could read over the end.<br> + * Note: If the first 23 bits of the additional bytes are not 0, then damaged + * MPEG bitstreams could cause overread and segfault. + *) + AV_INPUT_BUFFER_PADDING_SIZE = 32; + +(** + * @ingroup lavc_decoding + * minimum encoding buffer size. + * Used to avoid some checks during header writing. + *) + AV_INPUT_BUFFER_MIN_SIZE = 16384; + +{$IFDEF FF_API_WITHOUT_PREFIX} +(** + * @deprecated use AV_INPUT_BUFFER_PADDING_SIZE instead + *) + FF_INPUT_BUFFER_PADDING_SIZE = 32; + +(** + * @deprecated use AV_INPUT_BUFFER_MIN_SIZE instead + *) + FF_MIN_BUFFER_SIZE = 16384; +{$ENDIF} + +type +(* + * @ingroup lavc_decoding + * motion estimation type. + * @deprecated use codec private option instead + *) +{$IFDEF FF_API_MOTION_EST} + TMotion_Est_ID = ( + ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed + ME_FULL, + ME_LOG, + ME_PHODS, + ME_EPZS, ///< enhanced predictive zonal search + ME_X1, ///< reserved for experiments + ME_HEX, ///< hexagon based search + ME_UMH, ///< uneven multi-hexagon search + ME_ITER = 50, ///< iterative search + ME_TESA ///< transformed exhaustive search algorithm + ); +{$ENDIF} + +(** + * @ingroup lavc_decoding + *) + TAVDiscard = ( + (* We leave some space between them for extensions (drop some + * keyframes for intra-only or drop just some bidir frames). + *) + AVDISCARD_NONE = -16, ///< discard nothing + AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi + AVDISCARD_NONREF = 8, ///< discard all non reference + AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames + AVDISCARD_NONINTRA= 24, ///< discard all non intra frames + AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes + AVDISCARD_ALL = 48 ///< discard all + ); + +{ removed, kept for the moment + TAVColorPrimaries = ( + AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B + AVCOL_PRI_UNSPECIFIED = 2, + AVCOL_PRI_BT470M = 4, + AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above + AVCOL_PRI_FILM = 8, + AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 + AVCOL_PRI_NB ///< Not part of ABI + ); + + TAVColorTransferCharacteristic = ( + AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 + AVCOL_TRC_UNSPECIFIED = 2, + AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM + AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG + AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC + AVCOL_TRC_SMPTE240M = 7, + AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" + AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" + AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt( 10 ) : 1 range)" + AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 + AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut + AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) + AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10 bit system + AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12 bit system + AVCOL_TRC_NB ///< Not part of ABI + ); + +(** + * X X 3 4 X X are luma samples, + * 1 2 1-6 are possible chroma positions + * X X 5 6 X 0 is undefined/unknown position + *) + TAVChromaLocation = ( + AVCHROMA_LOC_UNSPECIFIED = 0, + AVCHROMA_LOC_LEFT = 1, ///< mpeg2/4, h264 default + AVCHROMA_LOC_CENTER = 2, ///< mpeg1, jpeg, h263 + AVCHROMA_LOC_TOPLEFT = 3, ///< DV + AVCHROMA_LOC_TOP = 4, + AVCHROMA_LOC_BOTTOMLEFT = 5, + AVCHROMA_LOC_BOTTOM = 6, + AVCHROMA_LOC_NB ///< Not part of ABI + ); +} + TAVAudioServiceType =( + AV_AUDIO_SERVICE_TYPE_MAIN = 0, + AV_AUDIO_SERVICE_TYPE_EFFECTS = 1, + AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2, + AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED = 3, + AV_AUDIO_SERVICE_TYPE_DIALOGUE = 4, + AV_AUDIO_SERVICE_TYPE_COMMENTARY = 5, + AV_AUDIO_SERVICE_TYPE_EMERGENCY = 6, + AV_AUDIO_SERVICE_TYPE_VOICE_OVER = 7, + AV_AUDIO_SERVICE_TYPE_KARAOKE = 8, + AV_AUDIO_SERVICE_TYPE_NB ///< Not part of ABI + ); + +(** + * @ingroup lavc_decoding + *) + PRcOverride = ^TRcOverride; + TRcOverride = record {16} + start_frame: cint; + end_frame: cint; + qscale: cint; // if this is 0 then quality_factor will be used instead + quality_factor: cfloat; + end; + +{$IFDEF FF_API_MAX_BFRAMES} + +(** + * @deprecated there is no libavcodec-wide limit on the number of B-frames + *) +const + FF_MAX_B_FRAMES = 16; + +{$IFEND} + +(* encoding support + These flags can be passed in AVCodecContext.flags before initialization. + Note: Not everything is supported yet. +*) + +(** + * Allow decoders to produce frames with data planes that are not aligned + * to CPU requirements (e.g. due to cropping). + *) + AV_CODEC_FLAG_UNALIGNED = $0001; // (1 << 0) +(** + * Use fixed qscale. + *) + AV_CODEC_FLAG_QSCALE = $0002; // (1 << 1) +(** + * 4 MV per MB allowed / advanced prediction for H.263. + *) + AV_CODEC_FLAG_4MV = $0004; // (1 << 2) +(** + * Output even those frames that might be corrupted. + *) + AV_CODEC_FLAG_OUTPUT_CORRUPT = $0008; // (1 << 3) +(** + * Use qpel MC. + *) + AV_CODEC_FLAG_QPEL = $0010; // (1 << 4) +(** + * Use internal 2pass ratecontrol in first pass mode. + *) + AV_CODEC_FLAG_PASS1 = $0200; // (1 << 9) +(** + * Use internal 2pass ratecontrol in second pass mode. + *) + AV_CODEC_FLAG_PASS2 = $0400; // (1 << 10) +(** + * loop filter. + *) + AV_CODEC_FLAG_LOOP_FILTER = $0800; // (1 << 11) +(** + * Only decode/encode grayscale. + *) + AV_CODEC_FLAG_GRAY = $2000; // (1 << 13) +(** + * error[?] variables will be set during encoding. + *) + AV_CODEC_FLAG_PSNR = $8000; // (1 << 15) +(** + * Input bitstream might be truncated at a random location + * instead of only at frame boundaries. + *) + AV_CODEC_FLAG_TRUNCATED = $10000; // (1 << 16) +(** + * Use interlaced DCT. + *) + AV_CODEC_FLAG_INTERLACED_DCT = $40000; // (1 << 18) +(** + * Force low delay. + *) + AV_CODEC_FLAG_LOW_DELAY = $80000; // (1 << 19) +(** + * Place global headers in extradata instead of every keyframe. + *) + AV_CODEC_FLAG_GLOBAL_HEADER = $400000; // (1 << 22) +(** + * Use only bitexact stuff (except (I)DCT). + *) + AV_CODEC_FLAG_BITEXACT = $800000; // (1 << 23) +(* Fx : Flag for H.263+ extra options *) +(** + * H.263 advanced intra coding / MPEG-4 AC prediction + *) + AV_CODEC_FLAG_AC_PRED = $1000000; // (1 << 24) +(** + * interlaced motion estimation + *) + AV_CODEC_FLAG_INTERLACED_ME = $20000000; // (1 << 29) + AV_CODEC_FLAG_CLOSED_GOP = $80000000; // (1U << 31) + +(** + * Allow non spec compliant speedup tricks. + *) + AV_CODEC_FLAG2_FAST = $0001; // (1 << 0) +(** + * Skip bitstream encoding. + *) + AV_CODEC_FLAG2_NO_OUTPUT = $0004; // (1 << 2) +(** + * Place global headers at every keyframe instead of in extradata. + *) + AV_CODEC_FLAG2_LOCAL_HEADER = $0008; // (1 << 3) + +(** + * timecode is in drop frame format. DEPRECATED!!!! + *) + AV_CODEC_FLAG2_DROP_FRAME_TIMECODE = $2000; // (1 << 13) + +(** + * Input bitstream might be truncated at a packet boundaries + * instead of only at frame boundaries. + *) + AV_CODEC_FLAG2_CHUNKS = $8000; // (1 << 15) +(** + * Discard cropping information from SPS. + *) + AV_CODEC_FLAG2_IGNORE_CROP = $10000; // (1 << 16) + +(** + * Show all frames before the first keyframe + *) + AV_CODEC_FLAG2_SHOW_ALL = $400000; // (1 << 22) +(** + * Export motion vectors through frame side data + *) + AV_CODEC_FLAG2_EXPORT_MVS = $10000000; // (1 << 28) +(** + * Do not skip samples and export skip information as frame side data + *) + AV_CODEC_FLAG2_SKIP_MANUAL = $20000000; // (1 << 29) +(** + * Do not reset ASS ReadOrder field on flush (subtitles decoding) + *) + AV_CODEC_FLAG2_RO_FLUSH_NOOP = $40000000; + +(* Unsupported options : + * Syntax Arithmetic coding (SAC) + * Reference Picture Selection + * Independent Segment Decoding *) +(* /Fx *) +(* codec capabilities *) + +(** + * Decoder can use draw_horiz_band callback. + *) + AV_CODEC_CAP_DRAW_HORIZ_BAND = $0001; // (1 << 0) +(** + * Codec uses get_buffer() for allocating buffers and supports custom allocators. + * If not set, it might not use get_buffer() at all or use operations that + * assume the buffer was allocated by avcodec_default_get_buffer. + *) + AV_CODEC_CAP_DR1 = $0002; // (1 << 1) + AV_CODEC_CAP_TRUNCATED = $0008; // (1 << 3) +(** + * Encoder or decoder requires flushing with NULL input at the end in order to + * give the complete and correct output. + * + * NOTE: If this flag is not set, the codec is guaranteed to never be fed with + * with NULL data. The user can still send NULL data to the public encode + * or decode function, but libavcodec will not pass it along to the codec + * unless this flag is set. + * + * Decoders: + * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, + * avpkt->size=0 at the end to get the delayed data until the decoder no longer + * returns frames. + * + * Encoders: + * The encoder needs to be fed with NULL data at the end of encoding until the + * encoder no longer returns data. + * + * NOTE: For encoders implementing the AVCodec.encode2() function, setting this + * flag also means that the encoder must set the pts and duration for + * each output packet. If this flag is not set, the pts and duration will + * be determined by libavcodec from the input frame. + *) + AV_CODEC_CAP_DELAY = $0020; // (1 << 5) +(** + * Codec can be fed a final frame with a smaller size. + * This can be used to prevent truncation of the last audio samples. + *) + AV_CODEC_CAP_SMALL_LAST_FRAME = $0040; // (1 << 6) + +{$IFDEF FF_API_CAP_VDPAU} +(** + * Codec can export data for HW decoding (VDPAU). + *) + AV_CODEC_CAP_HWACCEL_VDPAU = $0080; // (1 << 7) +{$ENDIF} + +(** + * Codec can output multiple frames per AVPacket + * Normally demuxers return one frame at a time, demuxers which do not do + * are connected to a parser to split what they return into proper frames. + * This flag is reserved to the very rare category of codecs which have a + * bitstream that cannot be split into frames without timeconsuming + * operations like full decoding. Demuxers carrying such bitstreams thus + * may return multiple frames in a packet. This has many disadvantages like + * prohibiting stream copy in many cases thus it should only be considered + * as a last resort. + *) + AV_CODEC_CAP_SUBFRAMES = $0100; // (1 << 8) +(** + * Codec is experimental and is thus avoided in favor of non experimental + * encoders + *) + AV_CODEC_CAP_EXPERIMENTAL = $0200; // (1 << 9) +(** + * Codec should fill in channel configuration and samplerate instead of container + *) + AV_CODEC_CAP_CHANNEL_CONF = $0400; // (1 << 10) +(** + * Codec supports frame-level multithreading. + *) + AV_CODEC_CAP_FRAME_THREADS = $1000; // (1 << 12) +(** + * Codec supports slice-based (or partition-based) multithreading. + *) + AV_CODEC_CAP_SLICE_THREADS = $2000; // (1 << 13) +(** + * Codec supports changed parameters at any point. + *) + AV_CODEC_CAP_PARAM_CHANGE = $4000; // (1 << 14) +(** + * Codec supports avctx->thread_count == 0 (auto). + *) + AV_CODEC_CAP_AUTO_THREADS = $8000; // (1 << 15) +(** + * Audio encoder supports receiving a different number of samples in each call. + *) + AV_CODEC_CAP_VARIABLE_FRAME_SIZE = $10000; // (1 << 16) +(** + * Decoder is not a preferred choice for probing. + * This indicates that the decoder is not a good choice for probing. + * It could for example be an expensive to spin up hardware decoder, + * or it could simply not provide a lot of useful information about + * the stream. + * A decoder marked with this flag should only be used as last resort + * choice for probing. + *) + AV_CODEC_CAP_AVOID_PROBING = $20000; // (1 << 17) + +(** + * Codec is intra only. + *) + AV_CODEC_CAP_INTRA_ONLY = $40000000; +(** + * Codec is lossless. + *) + AV_CODEC_CAP_LOSSLESS = $80000000; + + +{$IFDEF FF_API_WITHOUT_PREFIX} +(** + * Allow decoders to produce frames with data planes that are not aligned + * to CPU requirements (e.g. due to cropping). + *) + CODEC_FLAG_UNALIGNED = AV_CODEC_FLAG_UNALIGNED; + CODEC_FLAG_QSCALE = AV_CODEC_FLAG_QSCALE; + CODEC_FLAG_4MV = AV_CODEC_FLAG_4MV; + CODEC_FLAG_OUTPUT_CORRUPT = AV_CODEC_FLAG_OUTPUT_CORRUPT; + CODEC_FLAG_QPEL = AV_CODEC_FLAG_QPEL; +{$IFDEF FF_API_GMC} +(** + * @deprecated use the "gmc" private option of the libxvid encoder + *) + CODEC_FLAG_GMC = $0020; ///< use GMC. +{$IFEND} +{$IFDEF FF_API_MV0} +(** + * @deprecated use the flag "mv0" in the "mpv_flags" private option of the + * mpegvideo encoders + *) + CODEC_FLAG_MV0 = $0040; ///< always try a MB with MV=<0,0>. +{$IFEND} +{$IFDEF FF_API_INPUT_PRESERVED} +(** + * @deprecated passing reference-counted frames to the encoders replaces this + * flag + *) + CODEC_FLAG_INPUT_PRESERVED = $0100; +{$IFEND} + CODEC_FLAG_PASS1 = AV_CODEC_FLAG_PASS1; + CODEC_FLAG_PASS2 = AV_CODEC_FLAG_PASS2; + CODEC_FLAG_GRAY = AV_CODEC_FLAG_GRAY; +{$IFDEF FF_API_EMU_EDGE} + (** + * @deprecated edges are not used/required anymore. I.e. this flag is now always + * set. + *) + CODEC_FLAG_EMU_EDGE = $4000; ///< don't draw edges +{$IFEND} + CODEC_FLAG_PSNR = AV_CODEC_FLAG_PSNR; + CODEC_FLAG_TRUNCATED = AV_CODEC_FLAG_TRUNCATED; + +{$IFDEF FF_API_NORMALIZE_AQP} +(** + * @deprecated use the flag "naq" in the "mpv_flags" private option of the + * mpegvideo encoders + *) + CODEC_FLAG_NORMALIZE_AQP = $00020000; ///< normalize adaptive quantization +{$IFEND} + CODEC_FLAG_INTERLACED_DCT = AV_CODEC_FLAG_INTERLACED_DCT; + CODEC_FLAG_LOW_DELAY = AV_CODEC_FLAG_LOW_DELAY; + CODEC_FLAG_GLOBAL_HEADER = AV_CODEC_FLAG_GLOBAL_HEADER; + CODEC_FLAG_BITEXACT = AV_CODEC_FLAG_BITEXACT; + CODEC_FLAG_AC_PRED = AV_CODEC_FLAG_AC_PRED; + CODEC_FLAG_LOOP_FILTER = AV_CODEC_FLAG_LOOP_FILTER; + CODEC_FLAG_INTERLACED_ME = AV_CODEC_FLAG_INTERLACED_ME; + CODEC_FLAG_CLOSED_GOP = AV_CODEC_FLAG_CLOSED_GOP; + CODEC_FLAG2_FAST = AV_CODEC_FLAG2_FAST; + CODEC_FLAG2_NO_OUTPUT = AV_CODEC_FLAG2_NO_OUTPUT; + CODEC_FLAG2_LOCAL_HEADER = AV_CODEC_FLAG2_LOCAL_HEADER; + CODEC_FLAG2_DROP_FRAME_TIMECODE = AV_CODEC_FLAG2_DROP_FRAME_TIMECODE; + CODEC_FLAG2_IGNORE_CROP = AV_CODEC_FLAG2_IGNORE_CROP; + + CODEC_FLAG2_CHUNKS = AV_CODEC_FLAG2_CHUNKS; + CODEC_FLAG2_SHOW_ALL = AV_CODEC_FLAG2_SHOW_ALL; + CODEC_FLAG2_EXPORT_MVS = AV_CODEC_FLAG2_EXPORT_MVS; + CODEC_FLAG2_SKIP_MANUAL = AV_CODEC_FLAG2_SKIP_MANUAL; + +(* Unsupported options : + * Syntax Arithmetic coding (SAC) + * Reference Picture Selection + * Independant Segment Decoding *) +(* /Fx *) +(* codec capabilities *) + + CODEC_CAP_DRAW_HORIZ_BAND = AV_CODEC_CAP_DRAW_HORIZ_BAND; ///< decoder can use draw_horiz_band callback + +(** + * Codec uses get_buffer() for allocating buffers and supports custom allocators. + * If not set, it might not use get_buffer() at all or use operations that + * assume the buffer was allocated by avcodec_default_get_buffer. + *) + CODEC_CAP_DR1 = AV_CODEC_CAP_DR1; + CODEC_CAP_TRUNCATED = AV_CODEC_CAP_TRUNCATED; +{$IFDEF FF_API_XVMC} +(* Codec can export data for HW decoding. This flag indicates that + * the codec would call get_format() with list that might contain HW accelerated + * pixel formats (XvMC, VDPAU, VAAPI, etc). The application can pick any of them + * including raw image format. + * The application can use the passed context to determine bitstream version, + * chroma format, resolution etc. + *) + CODEC_CAP_HWACCEL = $0010; +{$IFEND} + +(** + * Encoder or decoder requires flushing with NULL input at the end in order to + * give the complete and correct output. + * + * NOTE: If this flag is not set, the codec is guaranteed to never be fed with + * with NULL data. The user can still send NULL data to the public encode + * or decode function, but libavcodec will not pass it along to the codec + * unless this flag is set. + * + * Decoders: + * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL, + * avpkt->size=0 at the end to get the delayed data until the decoder no longer + * returns frames. + * + * Encoders: + * The encoder needs to be fed with NULL data at the end of encoding until the + * encoder no longer returns data. + * + * NOTE: For encoders implementing the AVCodec.encode2() function, setting this + * flag also means that the encoder must set the pts and duration for + * each output packet. If this flag is not set, the pts and duration will + * be determined by libavcodec from the input frame. + *) + CODEC_CAP_DELAY = AV_CODEC_CAP_DELAY; + +(** + * Codec can be fed a final frame with a smaller size. + * This can be used to prevent truncation of the last audio samples. + *) + CODEC_CAP_SMALL_LAST_FRAME = AV_CODEC_CAP_SMALL_LAST_FRAME; + +(** + * Codec can export data for HW decoding (VDPAU). + *) + CODEC_CAP_HWACCEL_VDPAU = AV_CODEC_CAP_HWACCEL_VDPAU; + +(** + * Codec can output multiple frames per AVPacket + * Normally demuxers return one frame at a time, demuxers which do not do + * are connected to a parser to split what they return into proper frames. + * This flag is reserved to the very rare category of codecs which have a + * bitstream that cannot be split into frames without timeconsuming + * operations like full decoding. Demuxers carrying such bitstreams thus + * may return multiple frames in a packet. This has many disadvantages like + * prohibiting stream copy in many cases thus it should only be considered + * as a last resort. + *) + CODEC_CAP_SUBFRAMES = AV_CODEC_CAP_SUBFRAMES; + +(** + * Codec is experimental and is thus avoided in favor of non experimental + * encoders + *) + CODEC_CAP_EXPERIMENTAL = AV_CODEC_CAP_EXPERIMENTAL; + +(** + * Codec should fill in channel configuration and samplerate instead of container + *) + CODEC_CAP_CHANNEL_CONF = AV_CODEC_CAP_CHANNEL_CONF; + +{$IFDEF FF_API_NEG_LINESIZES} +(** + * @deprecated no codecs use this capability + *) + CODEC_CAP_NEG_LINESIZES = $0800; +{$IFEND} + +(** + * Codec supports frame-level multithreading. + *) + CODEC_CAP_FRAME_THREADS = AV_CODEC_CAP_FRAME_THREADS; + +(** + * Codec supports slice-based (or partition-based) multithreading. + *) + CODEC_CAP_SLICE_THREADS = AV_CODEC_CAP_SLICE_THREADS; + +(** + * Codec supports changed parameters at any point. + *) + CODEC_CAP_PARAM_CHANGE = AV_CODEC_CAP_PARAM_CHANGE; + +(** + * Codec supports avctx->thread_count == 0 (auto). + *) + CODEC_CAP_AUTO_THREADS = AV_CODEC_CAP_AUTO_THREADS; + +(** + * Audio encoder supports receiving a different number of samples in each call. + *) + CODEC_CAP_VARIABLE_FRAME_SIZE = AV_CODEC_CAP_VARIABLE_FRAME_SIZE; + +(** + * Codec is intra only. + *) + CODEC_CAP_INTRA_ONLY = AV_CODEC_CAP_INTRA_ONLY; + +(** + * Codec is lossless. + *) + CODEC_CAP_LOSSLESS = AV_CODEC_CAP_LOSSLESS; +{$ENDIF} (* FF_API_WITHOUT_PREFIX *) + +{$IFDEF FF_API_MB_TYPE} + //the following defines may change, don't expect compatibility if you use them + MB_TYPE_INTRA4x4 = $001; + MB_TYPE_INTRA16x16 = $002; //FIXME h264 specific + MB_TYPE_INTRA_PCM = $004; //FIXME h264 specific + MB_TYPE_16x16 = $008; + MB_TYPE_16x8 = $010; + MB_TYPE_8x16 = $020; + MB_TYPE_8x8 = $040; + MB_TYPE_INTERLACED = $080; + MB_TYPE_DIRECT2 = $100; //FIXME + MB_TYPE_ACPRED = $200; + MB_TYPE_GMC = $400; + MB_TYPE_SKIP = $800; + MB_TYPE_P0L0 = $1000; + MB_TYPE_P1L0 = $2000; + MB_TYPE_P0L1 = $4000; + MB_TYPE_P1L1 = $8000; + MB_TYPE_L0 = (MB_TYPE_P0L0 or MB_TYPE_P1L0); + MB_TYPE_L1 = (MB_TYPE_P0L1 or MB_TYPE_P1L1); + MB_TYPE_L0L1 = (MB_TYPE_L0 or MB_TYPE_L1); + MB_TYPE_QUANT = $0010000; + MB_TYPE_CBP = $0020000; + // Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...) +{$IFEND} + +(** Note bits 24-31 are reserved for codec specific use (H.264 ref0, MPEG-1 0mv, ...) *) + +{$IFDEF FF_API_QSCALE_TYPE} + FF_QSCALE_TYPE_MPEG1 = 0; + FF_QSCALE_TYPE_MPEG2 = 1; + FF_QSCALE_TYPE_H264 = 2; + FF_QSCALE_TYPE_VP56 = 3; +{$ENDIF} + +(** + * The decoder will keep a reference to the frame and may reuse it later. + *) + AV_GET_BUFFER_FLAG_REF = 1 << 0; + + FF_COMPRESSION_DEFAULT = -1; +{$IFDEF FF_API_ASPECT_EXTENDED} + FF_ASPECT_EXTENDED = 15; +{$ENDIF} + +{$IFDEF FF_API_RC_STRATEGY} + FF_RC_STRATEGY_XVID = 1; +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + FF_PRED_LEFT = 0; + FF_PRED_PLANE = 1; + FF_PRED_MEDIAN = 2; +{$ENDIF} + + FF_CMP_SAD = 0; + FF_CMP_SSE = 1; + FF_CMP_SATD = 2; + FF_CMP_DCT = 3; + FF_CMP_PSNR = 4; + FF_CMP_BIT = 5; + FF_CMP_RD = 6; + FF_CMP_ZERO = 7; + FF_CMP_VSAD = 8; + FF_CMP_VSSE = 9; + FF_CMP_NSSE = 10; + FF_CMP_W53 = 11; + FF_CMP_W97 = 12; + FF_CMP_DCTMAX = 13; + FF_CMP_DCT264 = 14; + FF_CMP_MEDIAN_SAD = 15; + FF_CMP_CHROMA = 256; + +{$IFDEF FF_API_AFD} + {attribute_deprecated} + FF_DTG_AFD_SAME = 8; + FF_DTG_AFD_4_3 = 9; + FF_DTG_AFD_16_9 = 10; + FF_DTG_AFD_14_9 = 11; + FF_DTG_AFD_4_3_SP_14_9 = 13; + FF_DTG_AFD_16_9_SP_14_9 = 14; + FF_DTG_AFD_SP_4_3 = 15; +{$IFEND} + +{$IFDEF FF_API_QUANT_BIAS} + FF_DEFAULT_QUANT_BIAS = 999999; +{$ENDIF} + + SLICE_FLAG_CODED_ORDER = $0001; ///< draw_horiz_band() is called in coded order instead of display + SLICE_FLAG_ALLOW_FIELD = $0002; ///< allow draw_horiz_band() with field slices (MPEG-2 field pics) + SLICE_FLAG_ALLOW_PLANE = $0004; ///< allow draw_horiz_band() with 1 component at a time (SVQ1) + + FF_MB_DECISION_SIMPLE = 0; ///< uses mb_cmp + FF_MB_DECISION_BITS = 1; ///< chooses the one which needs the fewest bits + FF_MB_DECISION_RD = 2; ///< rate distortion + +{$IFDEF FF_API_CODER_TYPE} + FF_CODER_TYPE_VLC = 0; + FF_CODER_TYPE_AC = 1; + FF_CODER_TYPE_RAW = 2; + FF_CODER_TYPE_RLE = 3; +{$IFDEF FF_API_UNUSED_MEMBERS} + FF_CODER_TYPE_DEFLATE = 4; +{$ENDIF} {FF_API_UNUSED_MEMBERS} +{$ENDIF} {FF_API_CODER_TYPE} + FF_BUG_AUTODETECT = 1; ///< autodetection +{$IFDEF FF_API_OLD_MSMPEG4} + FF_BUG_OLD_MSMPEG4 = 2; +{$ENDIF} + FF_BUG_XVID_ILACE = 4; + FF_BUG_UMP4 = 8; + FF_BUG_NO_PADDING = 16; + FF_BUG_AMV = 32; +{$IFDEF FF_API_AC_VLC} + FF_BUG_AC_VLC = 0; ///< will be removed, libavcodec can now handle these non compliant files by default +{$ENDIF} + FF_BUG_QPEL_CHROMA = 64; + FF_BUG_STD_QPEL = 128; + FF_BUG_QPEL_CHROMA2 = 256; + FF_BUG_DIRECT_BLOCKSIZE = 512; + FF_BUG_EDGE = 1024; + FF_BUG_HPEL_CHROMA = 2048; + FF_BUG_DC_CLIP = 4096; + FF_BUG_MS = 8192; ///< workaround various bugs in microsofts broken decoders + FF_BUG_TRUNCATED = 16384; + FF_BUG_IEDGE = 32768; + + FF_COMPLIANCE_VERY_STRICT = 2; ///< strictly conform to an older more strict version of the spec or reference software + FF_COMPLIANCE_STRICT = 1; ///< strictly conform to all the things in the spec no matter what consequences + FF_COMPLIANCE_NORMAL = 0; + FF_COMPLIANCE_UNOFFICIAL = -1; ///< Allow unofficial extensions + FF_COMPLIANCE_EXPERIMENTAL = -2; ///< Allow nonstandardized experimental things. + + FF_EC_GUESS_MVS = 1; + FF_EC_DEBLOCK = 2; + FF_EC_FAVOR_INTER = 256; + + FF_DEBUG_PICT_INFO = 1; + FF_DEBUG_RC = 2; + FF_DEBUG_BITSTREAM = 4; + FF_DEBUG_MB_TYPE = 8; + FF_DEBUG_QP = 16; +{$IFDEF FF_API_DEBUG_MV} +(** + * @deprecated this option does nothing + *) + FF_DEBUG_MV = 32; +{$ENDIF} + FF_DEBUG_DCT_COEFF = $00000040; + FF_DEBUG_SKIP = $00000080; + FF_DEBUG_STARTCODE = $00000100; +{$IFDEF FF_API_UNUSED_MEMBERS} + FF_DEBUG_PTS = $00000200; +{$ENDIF} + FF_DEBUG_ER = $00000400; + FF_DEBUG_MMCO = $00000800; + FF_DEBUG_BUGS = $00001000; +{$IFDEF FF_API_DEBUG_MV} + FF_DEBUG_VIS_QP = $00002000; ///< only access through AVOptions from outside libavcodec + FF_DEBUG_VIS_MB_TYPE = $00004000; ///< only access through AVOptions from outside libavcodec +{$ENDIF} + FF_DEBUG_BUFFERS = $00008000; + FF_DEBUG_THREADS = $00010000; + FF_DEBUG_GREEN_MD = $00800000; + FF_DEBUG_NOMC = $01000000; + + FF_DEBUG_VIS_MV_P_FOR = $00000001; // visualize forward predicted MVs of P-frames + FF_DEBUG_VIS_MV_B_FOR = $00000002; // visualize forward predicted MVs of B-frames + FF_DEBUG_VIS_MV_B_BACK = $00000004; // visualize backward predicted MVs of B-frames + +(** + * Verify checksums embedded in the bitstream (could be of either encoded or + * decoded data, depending on the codec) and print an error message on mismatch. + * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the + * decoder returning an error. + *) + AV_EF_CRCCHECK = 1; + AV_EF_BITSTREAM = 2; ///< detect bitstream specification deviations + AV_EF_BUFFER = 4; ///< detect improper bitstream length + AV_EF_EXPLODE = 8; ///< abort decoding on minor error detection + + AV_EF_IGNORE_ERR = 32768; ///< ignore errors and continue + AV_EF_CAREFUL = 65536; ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors + AV_EF_COMPLIANT = 131072; ///< consider all spec non compliances as errors + AV_EF_AGGRESSIVE = 262144; ///< consider things that a sane encoder should not do as an error + + FF_DCT_AUTO = 0; + FF_DCT_FASTINT = 1; + FF_DCT_INT = 2; + FF_DCT_MMX = 3; + FF_DCT_MLIB = 4; + FF_DCT_ALTIVEC = 5; + FF_DCT_FAAN = 6; + + FF_IDCT_AUTO = 0; + FF_IDCT_INT = 1; + FF_IDCT_SIMPLE = 2; + FF_IDCT_SIMPLEMMX = 3; + FF_IDCT_ARM = 7; + FF_IDCT_ALTIVEC = 8; +{$IFDEF FF_API_ARCH_SH4} + FF_IDCT_SH4 = 9; +{$ENDIF} + FF_IDCT_SIMPLEARM = 10; +{$IFDEF FF_API_UNUSED_MEMBERS} + FF_IDCT_IPP = 13; +{$ENDIF} + FF_IDCT_XVID = 14; +{$IFDEF FF_API_IDCT_XVIDMMX} + FF_IDCT_XVIDMMX = 14; +{$ENDIF} + FF_IDCT_SIMPLEARMV5TE= 16; + FF_IDCT_SIMPLEARMV6 = 17; +{$IFDEF FF_API_ARCH_SPARC} + FF_IDCT_SIMPLEVIS = 18; +{$ENDIF} + FF_IDCT_FAAN = 20; + FF_IDCT_SIMPLENEON = 22; +{$IFDEF FF_API_ARCH_ALPHA} + FF_IDCT_SIMPLEALPHA = 23; +{$ENDIF} + FF_IDCT_SIMPLEAUTO = 128; + + FF_THREAD_FRAME = 1; ///< Decode more than one frame at once + FF_THREAD_SLICE = 2; ///< Decode more than one part of a single frame at once + + FF_PROFILE_UNKNOWN = -99; + FF_PROFILE_RESERVED = -100; + + FF_PROFILE_AAC_MAIN = 0; + FF_PROFILE_AAC_LOW = 1; + FF_PROFILE_AAC_SSR = 2; + FF_PROFILE_AAC_LTP = 3; + FF_PROFILE_AAC_HE = 4; + FF_PROFILE_AAC_HE_V2 = 28; + FF_PROFILE_AAC_LD = 22; + FF_PROFILE_AAC_ELD = 38; + FF_PROFILE_MPEG2_AAC_LOW = 128; + FF_PROFILE_MPEG2_AAC_HE = 131; + + FF_PROFILE_DNXHD = 0; + FF_PROFILE_DNXHR_LB = 1; + FF_PROFILE_DNXHR_SQ = 2; + FF_PROFILE_DNXHR_HQ = 3; + FF_PROFILE_DNXHR_HQX = 4; + FF_PROFILE_DNXHR_444 = 5; + + FF_PROFILE_DTS = 20; + FF_PROFILE_DTS_ES = 30; + FF_PROFILE_DTS_96_24 = 40; + FF_PROFILE_DTS_HD_HRA = 50; + FF_PROFILE_DTS_HD_MA = 60; + FF_PROFILE_DTS_EXPRESS = 70; + + FF_PROFILE_MPEG2_422 = 0; + FF_PROFILE_MPEG2_HIGH = 1; + FF_PROFILE_MPEG2_SS = 2; + FF_PROFILE_MPEG2_SNR_SCALABLE = 3; + FF_PROFILE_MPEG2_MAIN = 4; + FF_PROFILE_MPEG2_SIMPLE= 5; + + FF_PROFILE_H264_CONSTRAINED = (1 shl 9); // 8+1; constraint_set1_flag + FF_PROFILE_H264_INTRA = (1 shl 11); // 8+3; constraint_set3_flag + + FF_PROFILE_H264_BASELINE = 66; + FF_PROFILE_H264_CONSTRAINED_BASELINE = (66 or FF_PROFILE_H264_CONSTRAINED); + FF_PROFILE_H264_MAIN = 77; + FF_PROFILE_H264_EXTENDED = 88; + FF_PROFILE_H264_HIGH = 100; + FF_PROFILE_H264_HIGH_10 = 110; + FF_PROFILE_H264_HIGH_10_INTRA = (110 or FF_PROFILE_H264_INTRA); + FF_PROFILE_H264_MULTIVIEW_HIGH = 118; + FF_PROFILE_H264_HIGH_422 = 122; + FF_PROFILE_H264_HIGH_422_INTRA = (122 or FF_PROFILE_H264_INTRA); + FF_PROFILE_H264_STEREO_HIGH = 128; + FF_PROFILE_H264_HIGH_444 = 144; + FF_PROFILE_H264_HIGH_444_PREDICTIVE = 244; + FF_PROFILE_H264_HIGH_444_INTRA = (244 or FF_PROFILE_H264_INTRA); + FF_PROFILE_H264_CAVLC_444 = 44; + + FF_PROFILE_VC1_SIMPLE = 0; + FF_PROFILE_VC1_MAIN = 1; + FF_PROFILE_VC1_COMPLEX = 2; + FF_PROFILE_VC1_ADVANCED = 3; + + FF_PROFILE_MPEG4_SIMPLE = 0; + FF_PROFILE_MPEG4_SIMPLE_SCALABLE = 1; + FF_PROFILE_MPEG4_CORE = 2; + FF_PROFILE_MPEG4_MAIN = 3; + FF_PROFILE_MPEG4_N_BIT = 4; + FF_PROFILE_MPEG4_SCALABLE_TEXTURE = 5; + FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION = 6; + FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE = 7; + FF_PROFILE_MPEG4_HYBRID = 8; + FF_PROFILE_MPEG4_ADVANCED_REAL_TIME = 9; + FF_PROFILE_MPEG4_CORE_SCALABLE = 10; + FF_PROFILE_MPEG4_ADVANCED_CODING = 11; + FF_PROFILE_MPEG4_ADVANCED_CORE = 12; + FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE = 13; + FF_PROFILE_MPEG4_SIMPLE_STUDIO = 14; + FF_PROFILE_MPEG4_ADVANCED_SIMPLE = 15; + + FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0 = 1; + FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1 = 2; + FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION = 32768; + FF_PROFILE_JPEG2000_DCINEMA_2K = 3; + FF_PROFILE_JPEG2000_DCINEMA_4K = 4; + + FF_PROFILE_VP9_0 = 0; + FF_PROFILE_VP9_1 = 1; + FF_PROFILE_VP9_2 = 2; + FF_PROFILE_VP9_3 = 3; + + FF_PROFILE_HEVC_MAIN = 1; + FF_PROFILE_HEVC_MAIN_10 = 2; + FF_PROFILE_HEVC_MAIN_STILL_PICTURE = 3; + FF_PROFILE_HEVC_REXT = 4; + + + FF_LEVEL_UNKNOWN = -99; + +type + + (** + * This structure describes the bitrate properties of an encoded bitstream. It + * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD + * parameters for H.264/HEVC. + *) + PAVCPBProperties = ^TAVCPBProperties; + TAVCPBProperties = record + (** + * Maximum bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + max_bitrate: cint; + (** + * Minimum bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + min_bitrate: cint; + (** + * Average bitrate of the stream, in bits per second. + * Zero if unknown or unspecified. + *) + avg_bitrate: cint; + + (** + * The size of the buffer to which the ratecontrol is applied, in bits. + * Zero if unknown or unspecified. + *) + buffer_size: cint; + + (** + * The delay between the time the packet this structure is associated with + * is received and the time when it should be decoded, in periods of a 27MHz + * clock. + * + * UINT64_MAX when unknown or unspecified. + *) + vbv_delay: cuint64; + end; {TAVCPBProperties} + + TAVPacketSideDataType = ( + AV_PKT_DATA_PALETTE, + + (** + * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format + * that the extradata buffer was changed and the receiving side should + * act upon it appropriately. The new extradata is embedded in the side + * data buffer and should be immediately used for processing the current + * frame or packet. + *) + AV_PKT_DATA_NEW_EXTRADATA, + + (** + * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows: + * @code + * u32le param_flags + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) + * s32le channel_count + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) + * u64le channel_layout + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) + * s32le sample_rate + * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) + * s32le width + * s32le height + * @endcode + *) + AV_PKT_DATA_PARAM_CHANGE, + + (** + * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of + * structures with info about macroblocks relevant to splitting the + * packet into smaller packets on macroblock edges (e.g. as for RFC 2190). + * That is, it does not necessarily contain info about all macroblocks, + * as long as the distance between macroblocks in the info is smaller + * than the target payload size. + * Each MB info structure is 12 bytes, and is laid out as follows: + * @code + * u32le bit offset from the start of the packet + * u8 current quantizer at the start of the macroblock + * u8 GOB number + * u16le macroblock address within the GOB + * u8 horizontal MV predictor + * u8 vertical MV predictor + * u8 horizontal MV predictor for block number 3 + * u8 vertical MV predictor for block number 3 + * @endcode + *) + AV_PKT_DATA_H263_MB_INFO, + + (** + * This side data should be associated with an audio stream and contains + * ReplayGain information in form of the AVReplayGain struct. + *) + AV_PKT_DATA_REPLAYGAIN, + + (** + * This side data contains a 3x3 transformation matrix describing an affine + * transformation that needs to be applied to the decoded video frames for + * correct presentation. + * + * See libavutil/display.h for a detailed description of the data. + *) + AV_PKT_DATA_DISPLAYMATRIX, + + (** + * This side data should be associated with a video stream and contains + * Stereoscopic 3D information in form of the AVStereo3D struct. + *) + AV_PKT_DATA_STEREO3D, + + (** + * This side data should be associated with an audio stream and corresponds + * to enum AVAudioServiceType. + *) + AV_PKT_DATA_AUDIO_SERVICE_TYPE, + + (** + * This side data contains quality related information from the encoder. + * @code + * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad). + * u8 picture type + * u8 error count + * u16 reserved + * u64le[error count] sum of squared differences between encoder in and output + * @endcode + *) + AV_PKT_DATA_QUALITY_STATS, + + (** + * This side data contains an integer value representing the stream index + * of a "fallback" track. A fallback track indicates an alternate + * track to use when the current track can not be decoded for some reason. + * e.g. no decoder available for codec. + *) + AV_PKT_DATA_FALLBACK_TRACK, + + (** + * This side data corresponds to the AVCPBProperties struct. + *) + AV_PKT_DATA_CPB_PROPERTIES, + + (** + * Recommmends skipping the specified number of samples + * @code + * u32le number of samples to skip from start of this packet + * u32le number of samples to skip from end of this packet + * u8 reason for start skip + * u8 reason for end skip (0=padding silence, 1=convergence) + * @endcode + *) + AV_PKT_DATA_SKIP_SAMPLES=70, + + (** + * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that + * the packet may contain "dual mono" audio specific to Japanese DTV + * and if it is true, recommends only the selected channel to be used. + * @code + * u8 selected channels (0=mail/left, 1=sub/right, 2=both) + * @endcode + *) + AV_PKT_DATA_JP_DUALMONO, + + (** + * A list of zero terminated key/value strings. There is no end marker for + * the list, so it is required to rely on the side data size to stop. + *) + AV_PKT_DATA_STRINGS_METADATA, + + (** + * Subtitle event position + * @code + * u32le x1 + * u32le y1 + * u32le x2 + * u32le y2 + * @endcode + *) + AV_PKT_DATA_SUBTITLE_POSITION, + + (** + * Data found in BlockAdditional element of matroska container. There is + * no end marker for the data, so it is required to rely on the side data + * size to recognize the end. 8 byte id (as found in BlockAddId) followed + * by data. + *) + AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL, + + (** + * The optional first identifier line of a WebVTT cue. + *) + AV_PKT_DATA_WEBVTT_IDENTIFIER, + + (** + * The optional settings (rendering instructions) that immediately + * follow the timestamp specifier of a WebVTT cue. + *) + AV_PKT_DATA_WEBVTT_SETTINGS, + + (** + * A list of zero terminated key/value strings. There is no end marker for + * the list, so it is required to rely on the side data size to stop. This + * side data includes updated metadata which appeared in the stream. + *) + AV_PKT_DATA_METADATA_UPDATE, + + (** + * MPEGTS stream ID, this is required to pass the stream ID + * information from the demuxer to the corresponding muxer. + *) + AV_PKT_DATA_MPEGTS_STREAM_ID, + + (** + * Mastering display metadata (based on SMPTE-2086:2014). This metadata + * should be associated with a video stream and containts data in the form + * of the AVMasteringDisplayMetadata struct. + *) + AV_PKT_DATA_MASTERING_DISPLAY_METADATA + ); + + PAVPacketSideData = ^TAVPacketSideData; + TAVPacketSideData = record + data: PByte; + size: cint; + type_: TAVPacketSideDataType; + end; + +(** + * This structure stores compressed data. It is typically exported by demuxers + * and then passed as input to decoders, or received as output from encoders and + * then passed to muxers. + * + * For video, it should typically contain one compressed frame. For audio it may + * contain several compressed frames. Encoders are allowed to output empty + * packets, with no compressed data, containing only side data + * (e.g. to update some stream parameters at the end of encoding). + * + * AVPacket is one of the few structs in FFmpeg, whose size is a part of public + * ABI. Thus it may be allocated on stack and no new fields can be added to it + * without libavcodec and libavformat major bump. + * + * The semantics of data ownership depends on the buf field. + * If it is set, the packet data is dynamically allocated and is + * valid indefinitely until a call to av_packet_unref() reduces the + * reference count to 0. + * + * If the buf field is not set av_packet_ref() would make a copy instead + * of increasing the reference count. + * + * The side data is always allocated with av_malloc(), copied by + * av_packet_ref() and freed by av_packet_unref(). + * + * @see av_packet_ref + * @see av_packet_unref + *) + PPAVPacket= ^PAVPacket; + PAVPacket = ^TAVPacket; + TAVPacket = record + (** + * A reference to the reference-counted buffer where the packet data is + * stored. + * May be NULL, then the packet data is not reference-counted. + *) + buf: PAVBufferRef; + (* + * Presentation timestamp in AVStream->time_base units; the time at which + * the decompressed packet will be presented to the user. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + * pts MUST be larger or equal to dts as presentation cannot happen before + * decompression, unless one wants to view hex dumps. Some formats misuse + * the terms dts and pts/cts to mean something different. Such timestamps + * must be converted to true pts/dts before they are stored in AVPacket. + *) + pts: cint64; + (* + * Decompression timestamp in AVStream->time_base units; the time at which + * the packet is decompressed. + * Can be AV_NOPTS_VALUE if it is not stored in the file. + *) + dts: cint64; + data: PByteArray; + size: cint; + stream_index: cint; + (** + * A combination of AV_PKT_FLAG values + *) + flags: cint; + (** + * Additional packet data that can be provided by the container. + * Packet can contain several types of side information. + *) + side_data: PAVPacketSideData; + side_data_elems: cint; + + (* + * Duration of this packet in AVStream->time_base units, 0 if unknown. + * Equals next_pts - this_pts in presentation order. + *) + duration: cint64; + + pos: cint64; // byte position in stream, -1 if unknown + +{$IFDEF FF_API_CONVERGENCE_DURATION} + (* + * @deprecated Same as the duration field, but as int64_t. This was required + * for Matroska subtitles, whose duration values could overflow when the + * duration field was still an int. + *) + convergence_duration: cint64; {deprecated} +{$ENDIF} + end; {TAVPacket} + +const + AV_PKT_FLAG_KEY = $0001; ///< The packet contains a keyframe + AV_PKT_FLAG_CORRUPT = $0002; ///< The packet content is corrupted + (** + * Flag is used to discard packets which are required to maintain valid + * decoder state but are not required for output and should be dropped + * after decoding. + **) + AV_PKT_FLAG_DISCARD = $0004; + + AV_NUM_DATA_POINTERS = 8; + + AV_PKT_DATA_QUALITY_FACTOR = AV_PKT_DATA_QUALITY_STATS; //DEPRECATED + +type + AVSideDataParamChangeFlags = ( + AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = $0001, + AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = $0002, + AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = $0004, + AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = $0008 + ); + +{ This is removed in avcodec.h. For the time being (2013) only commented +const + FF_DECODE_ERROR_INVALID_BITSTREAM = 1; + FF_DECODE_ERROR_MISSING_REFERENCE = 2; +} + + +{ This is removed in avcodec.h. For the time being (2013) only commented +(** + * This structure describes decoded (raw) audio or video data. + * + * AVFrame must be allocated using avcodec_alloc_frame() and freed with + * avcodec_free_frame(). Note that this allocates only the AVFrame itself. The + * buffers for the data must be managed through other means. + * + * AVFrame is typically allocated once and then reused multiple times to hold + * different data (e.g. a single AVFrame to hold frames received from a + * decoder). In such a case, avcodec_get_frame_defaults() should be used to + * reset the frame to its original clean state before it is reused again. + * + * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added + * to the end with a minor bump. + * Similarly fields that are marked as to be only accessed by + * av_opt_ptr() can be reordered. This allows 2 forks to add fields + * without breaking compatibility with each other. + *) + PAVFrame = ^TAVFrame; + TAVFrame = record + (** + * pointer to the picture/channel planes. + * This might be different from the first allocated byte + * - encoding: Set by user + * - decoding: set by AVCodecContext.get_buffer() + *) + data: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; + + (** + * Size, in bytes, of the data for each picture/channel plane. + * + * For audio, only linesize[0] may be set. For planar audio, each channel + * plane must be the same size. + * + * - encoding: Set by user + * - decoding: set by AVCodecContext.get_buffer() + *) + linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; + + (** + * pointers to the data planes/channels. + * + * For video, this should simply point to data[]. + * + * For planar audio, each channel has a separate data pointer, and + * linesize[0] contains the size of each channel buffer. + * For packed audio, there is just one data pointer, and linesize[0] + * contains the total size of the buffer for all channels. + * + * Note: Both data and extended_data will always be set by get_buffer(), + * but for planar audio with more channels that can fit in data, + * extended_data must be used by the decoder in order to access all + * channels. + * + * encoding: set by user + * decoding: set by AVCodecContext.get_buffer() + *) + extended_data: pointer of pbyte; + + (** + * width and height of the video frame + * - encoding: unused + * - decoding: Read by user. + *) + width, height: cint; + + (** + * number of audio samples (per channel) described by this frame + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + nb_samples: cint; + + (** + * format of the frame, -1 if unknown or unset + * Values correspond to enum AVPixelFormat for video frames, + * enum AVSampleFormat for audio) + * - encoding: unused + * - decoding: Read by user. + *) + format: cint; + + (** + * 1 -> keyframe, 0-> not + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + key_frame: cint; + + (** + * Picture type of the frame, see ?_TYPE below. + * - encoding: Set by libavcodec. for coded_picture (and set by user for input). + * - decoding: Set by libavcodec. + *) + pict_type: TAVPictureType; + + (** + * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer. + * This isn't used by libavcodec unless the default get/release_buffer() is used. + * - encoding: + * - decoding: + *) + base: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; + + (** + * sample aspect ratio for the video frame, 0/1 if unknown/unspecified + * - encoding: unused + * - decoding: Read by user. + *) + sample_aspect_ratio: TAVRational; + + (** + * presentation timestamp in time_base units (time when frame should be shown to user) + * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed. + * - encoding: MUST be set by user. + * - decoding: Set by libavcodec. + *) + pts: cint64; + + (** + * pts copied from the AVPacket that was decoded to produce this frame + * - encoding: unused + * - decoding: Read by user. + *) + pkt_pts: cint64; + + (** + * dts copied from the AVPacket that triggered returning this frame + * - encoding: unused + * - decoding: Read by user. + *) + pkt_dts: cint64; + + (** + * picture number in bitstream order + * - encoding: set by + * - decoding: Set by libavcodec. + *) + coded_picture_number: cint; + + (** + * picture number in display order + * - encoding: set by + * - decoding: Set by libavcodec. + *) + display_picture_number: cint; + + (** + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) + * - encoding: Set by libavcodec. for coded_picture (and set by user for input). + * - decoding: Set by libavcodec. + *) + quality: cint; + + (** + * is this picture used as reference + * The values for this are the same as the MpegEncContext.picture_structure + * variable, that is 1->top field, 2->bottom field, 3->frame/both fields. + * Set to 4 for delayed, non-reference frames. + * - encoding: unused + * - decoding: Set by libavcodec. (before get_buffer() call)). + *) + reference: cint; + + (** + * QP table + * - encoding: unused + * - decoding: Set by libavcodec. + *) + qscale_table: PShortint; + + (** + * QP store stride + * - encoding: unused + * - decoding: Set by libavcodec. + *) + qstride: cint; + + (** + * + *) + qscale_type: cint; + + (** + * mbskip_table[mb]>=1 if MB didn't change + * stride= mb_width = (width+15)>>4 + * - encoding: unused + * - decoding: Set by libavcodec. + *) + mbskip_table: pbyte; + + (** + * motion vector table + * @code + * example: + * int mv_sample_log2= 4 - motion_subsample_log2; + * int mb_width= (width+15)>>4; + * int mv_stride= (mb_width << mv_sample_log2) + 1; + * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y]; + * @endcode + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + //int16_t (*motion_val[2])[2]; + motion_val: array [0..1] of pointer; + + (** + * macroblock type table + * mb_type_base + mb_width + 2 + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + mb_type: PCuint; + + (** + * DCT coefficients + * - encoding: unused + * - decoding: Set by libavcodec. + *) + dct_coeff: PsmallInt; + + (** + * motion reference frame index + * the order in which these are stored can depend on the codec. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + ref_index: array [0..1] of PShortint; + + (** + * for some private data of the user + * - encoding: unused + * - decoding: Set by user. + *) + opaque: pointer; + + (** + * error + * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR. + * - decoding: unused + *) + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; + + (** + * type of the buffer (to keep track of who has to deallocate data[*]) + * - encoding: Set by the one who allocates it. + * - decoding: Set by the one who allocates it. + * Note: User allocated (direct rendering) & internal buffers cannot coexist currently. + *) + type_: cint; + + (** + * When decoding, this signals how much the picture must be delayed. + * extra_delay = repeat_pict / (2*fps) + * - encoding: unused + * - decoding: Set by libavcodec. + *) + repeat_pict: cint; + + (** + * The content of the picture is interlaced. + * - encoding: Set by user. + * - decoding: Set by libavcodec. (default 0) + *) + interlaced_frame: cint; + + (** + * If the content is interlaced, is top field displayed first. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + top_field_first: cint; + + (** + * Tell user application that palette has changed from previous frame. + * - encoding: ??? (no palette-enabled encoder yet) + * - decoding: Set by libavcodec. (default 0). + *) + palette_has_changed: cint; + + (** + * codec suggestion on buffer type if != 0 + * - encoding: unused + * - decoding: Set by libavcodec. (before get_buffer() call)). + *) + buffer_hints: cint; + + (** + * Pan scan. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + pan_scan: PAVPanScan; + + (** + * reordered opaque 64bit number (generally a PTS) from AVCodecContext.reordered_opaque + * PTS but can be anything). + * The user sets AVCodecContext.reordered_opaque to represent the input at + * that time, + * the decoder reorders values as needed and sets AVFrame.reordered_opaque + * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque + * @deprecated in favor of pkt_pts + * - encoding: unused + * - decoding: Read by user. + *) + reordered_opaque: cint64; + + (** + * hardware accelerator private data (FFmpeg allocated) + * - encoding: unused + * - decoding: Set by libavcodec + *) + hwaccel_picture_private: pointer; + + (** + * the AVCodecContext which ff_thread_get_buffer() was last called on + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + owner: PAVCodecContext; + + (** + * used by multithreading to store frame-specific info + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + thread_opaque: pointer; + + (** + * log2 of the size of the block which a single vector in motion_val represents: + * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2) + * - encoding: unused + * - decoding: Set by libavcodec. + *) + motion_subsample_log2: cuint8; + + (** + * Sample rate of the audio data. + * + * - encoding: unused + * - decoding: read by user + *) + sample_rate: cint; + + (** + * Channel layout of the audio data. + * + * - encoding: unused + * - decoding: read by user. + *) + channel_layout: cuint64; + + (** + * frame timestamp estimated using various heuristics, in stream time base + * Code outside libavcodec should access this field using: + * av_frame_get_best_effort_timestamp(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + best_effort_timestamp: cint64; + + (** + * reordered pos from the last AVPacket that has been input into the decoder + * Code outside libavcodec should access this field using: + * av_frame_get_pkt_pos(frame) + * - encoding: unused + * - decoding: Read by user. + *) + pkt_pos: cint64; + + (** + * duration of the corresponding packet, expressed in + * AVStream->time_base units, 0 if unknown. + * Code outside libavcodec should access this field using: + * av_frame_get_pkt_duration(frame) + * - encoding: unused + * - decoding: Read by user. + *) + pkt_duration: cint64; + + (** + * metadata. + * Code outside libavcodec should access this field using: + * av_frame_get_metadata(frame) + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + metadata: PAVDictionary; + + (** + * decode error flags of the frame, set to a combination of + * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there + * were errors during the decoding. + * Code outside libavcodec should access this field using: + * av_frame_get_decode_error_flags(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + decode_error_flags: cint; + + (** + * number of audio channels, only used for audio. + * Code outside libavcodec should access this field using: + * av_frame_get_channels(frame) + * - encoding: unused + * - decoding: Read by user. + *) + channels: cint; + + (** + * size of the corresponding packet containing the compressed + * frame. It must be accessed using av_frame_get_pkt_size() and + * av_frame_set_pkt_size(). + * It is set to a negative value if unknown. + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + pkt_size: cint; + end; (** TAVFrame **) + +(** + * Accessors for some AVFrame fields. + * The position of these field in the structure is not part of the ABI, + * they should not be accessed directly outside libavcodec. + *) +function av_frame_get_best_effort_timestamp(frame: {const PAVFrame): cint64; + cdecl; external av__codec; +procedure av_frame_set_best_effort_timestamp(frame: PAVFrame; val: cint64); + cdecl; external av__codec; +function av_frame_get_pkt_duration (frame: {const PAVFrame): cint64; + cdecl; external av__codec; +procedure av_frame_get_pkt_duration (frame: PAVFrame; val: cint64); + cdecl; external av__codec; +function av_frame_get_pkt_pos (frame: {const PAVFrame): cint64; + cdecl; external av__codec; +procedure av_frame_get_pkt_pos (frame: PAVFrame; val: cint64); + cdecl; external av__codec; +function av_frame_get_channel_layout (frame: {const PAVFrame): cint64; + cdecl; external av__codec; +procedure av_frame_get_channel_layout (frame: PAVFrame; val: cint64); + cdecl; external av__codec; +function av_frame_get_channels (frame: {const PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_channels (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_sample_rate (frame: {const PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_sample_rate (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_metadata (frame: {const PAVFrame): PAVDictionary; + cdecl; external av__codec; +procedure av_frame_set_metadata (frame: PAVFrame; val: PAVDictionary); + cdecl; external av__codec; +function av_frame_get_decode_error_flags (frame: {const PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_decode_error_flags (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_pkt_size(frame: {const PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_pkt_size(frame: PAVFrame; val: cint); + cdecl; external av__codec; +} + +type + TAVCodecInternal = record + end; + + PAVCodecInternal = ^TAVCodecInternal; + PAVCodecContext = ^TAVCodecContext; + + PAVClass = ^TAVClass; + + PPAVCodec = ^PAVCodec; + PAVCodec = ^TAVCodec; + + PAVHWAccel = ^TAVHWAccel; + + // int[4] + PAVNDPArray = ^TAVNDPArray; + TAVNDPArray = array [0..AV_NUM_DATA_POINTERS - 1] of cint; + // int (*func)(struct AVCodecContext *c2, void *arg) + TExecuteFunc = function(c2: PAVCodecContext; arg: Pointer): cint; cdecl; + // int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr) + TExecute2Func = function(c2: PAVCodecContext; arg: Pointer; jobnr: cint; threadnr: cint): cint; cdecl; + + TAVFieldOrder = ( + AV_FIELD_UNKNOWN, + AV_FIELD_PROGRESSIVE, + AV_FIELD_TT, //< Top coded_first, top displayed first + AV_FIELD_BB, //< Bottom coded first, bottom displayed first + AV_FIELD_TB, //< Top coded first, bottom displayed first + AV_FIELD_BT //< Bottom coded first, top displayed first + ); + +(** + * main external API structure. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user + * applications. + * The name string for AVOptions options matches the associated command line + * parameter name and can be found in libavcodec/options_table.h + * The AVOption/command line parameter names differ in some cases from the C + * structure field names for historic reasons or brevity. + * sizeof(AVCodecContext) must not be used outside libav*. + *) + TAVCodecContext = record {720} + (** + * information on struct for av_log + * - set by avcodec_alloc_context3 + *) + av_class: PAVClass; + log_level_offset: cint; + + codec_type: TAVMediaType; (* see AVMEDIA_TYPE_xxx *) + codec: PAVCodec; +{$IFDEF FF_API_CODEC_NAME} + (** + * @deprecated this field is not used for anything in libavcodec + *) + {attribute_deprecated} + codec_name: array [0..31] of AnsiChar; +{$IFEND} + codec_id: TAVCodecID; (* see AV_CODEC_ID_xxx *) + + (** + * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A'). + * This is used to work around some encoder bugs. + * A demuxer should set this to what is stored in the field used to identify the codec. + * If there are multiple such fields in a container then the demuxer should choose the one + * which maximizes the information about the used codec. + * If the codec tag field in a container is larger than 32 bits then the demuxer should + * remap the longer ID to 32 bits with a table or other structure. Alternatively a new + * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated + * first. + * - encoding: Set by user, if not then the default based on codec_id will be used. + * - decoding: Set by user, will be converted to uppercase by libavcodec during init. + *) + codec_tag: cuint; + +{$IFDEF FF_API_STREAM_CODEC_TAG} + (** + * @deprecated this field is unused + *) + {attribute_deprecated} + stream_codec_tag: cuint; +{$IFEND} + + priv_data: pointer; + + (** + * Private context used for internal data. + * + * Unlike priv_data, this is not codec-specific. It is used in general + * libavcodec functions. + *) + internal: PAVCodecInternal; + + (** + * Private data of the user, can be used to carry app specific stuff. + * - encoding: Set by user. + * - decoding: Set by user. + *) + opaque: pointer; + + (** + * the average bitrate + * - encoding: Set by user; unused for constant quantizer encoding. + * - decoding: Set by user, may be overwritten by libavcodec + * if this info is available in the stream + *) + bit_rate: cint64; + + (** + * number of bits the bitstream is allowed to diverge from the reference. + * the reference can be CBR (for CBR pass1) or VBR (for pass2) + * - encoding: Set by user; unused for constant quantizer encoding. + * - decoding: unused + *) + bit_rate_tolerance: cint; + + (** + * Global quality for codecs which cannot change it per frame. + * This should be proportional to MPEG-1/2/4 qscale. + * - encoding: Set by user. + * - decoding: unused + *) + global_quality: cint; + + (** + * - encoding: Set by user. + * - decoding: unused + *) + compression_level: cint; + + (** + * AV_CODEC_FLAG_*. + * - encoding: Set by user. + * - decoding: Set by user. + *) + flags: cint; + + (** + * AV_CODEC_FLAG2_* + * - encoding: Set by user. + * - decoding: Set by user. + *) + flags2: cint; + + (** + * some codecs need / can use extradata like Huffman tables. + * MJPEG: Huffman tables + * rv10: additional flags + * MPEG-4: global headers (they can be in the bitstream or here) + * The allocated memory should be AV_FF_INPUT_BUFFER_PADDING_SIZE bytes larger + * than extradata_size to avoid problems if it is read with the bitstream reader. + * The bytewise contents of extradata must not depend on the architecture or CPU endianness. + * - encoding: Set/allocated/freed by libavcodec. + * - decoding: Set/allocated/freed by user. + *) + extradata: pbyte; + extradata_size: cint; + + (** + * This is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. For fixed-fps content, + * timebase should be 1/framerate and timestamp increments should be + * identically 1. + * This often, but not always is the inverse of the frame rate or field rate + * for video. 1/time_base is not the average frame rate if the frame rate is not + * constant. + * + * Like containers, elementary streams also can store timestamps, 1/time_base + * is the unit in which these timestamps are specified. + * As example of such codec time base see ISO/IEC 14496-2:2001(E) + * vop_time_increment_resolution and fixed_vop_rate + * (fixed_vop_rate == 0 implies that it is different from the framerate) + * + * - encoding: MUST be set by user. + * - decoding: the use of this field for decoding is deprecated. + * Use framerate instead. + *) + time_base: TAVRational; + + (** + * For some codecs, the time base is closer to the field rate than the frame rate. + * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration + * if no telecine is used ... + * + * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2. + *) + ticks_per_frame: cint; + + (** + * Codec delay. + * + * Encoding: Number of frames delay there will be from the encoder input to + * the decoder output. (we assume the decoder matches the spec) + * Decoding: Number of frames delay in addition to what a standard decoder + * as specified in the spec would produce. + * + * Video: + * Number of frames the decoded output will be delayed relative to the + * encoded input. + * + * Audio: + * For encoding, this field is unused (see initial_padding). + * + * For decoding, this is the number of samples the decoder needs to + * output before the decoder's output is valid. When seeking, you should + * start decoding this many samples prior to your desired seek point. + * + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + delay: cint; + + (* video only *) + (** + * picture width / height. + * + * @note Those fields may not match the values of the last + * AVFrame output by avcodec_decode_video2 due frame + * reordering. + * + * - encoding: MUST be set by user. + * - decoding: May be set by the user before opening the decoder if known e.g. + * from the container. Some decoders will require the dimensions + * to be set by the caller. During decoding, the decoder may + * overwrite those values as required while parsing the data. + *) + width, height: cint; + + (** + * Bitstream width / height, may be different from width/height e.g. when + * the decoded frame is cropped before being output or lowres is enabled. + * + * @note Those field may not match the value of the last + * AVFrame output by avcodec_receive_frame() due frame + * reordering. + * + * - encoding: unused + * - decoding: May be set by the user before opening the decoder if known + * e.g. from the container. During decoding, the decoder may + * overwrite those values as required while parsing the data. + *) + coded_width, coded_height: cint; + + (** + * the number of pictures in a group of pictures, or 0 for intra_only + * - encoding: Set by user. + * - decoding: unused + *) + gop_size: cint; + + (** + * Pixel format, see AV_PIX_FMT_xxx. + * May be set by the demuxer if known from headers. + * May be overridden by the decoder if it knows better. + * + * @note This field may not match the value of the last + * AVFrame output by avcodec_receive_frame() due frame + * reordering. + * + * - encoding: Set by user. + * - decoding: Set by user if known, overridden by libavcodec while + * parsing the data. + *) + pix_fmt: TAVPixelFormat; + +{$IFDEF FF_API_MOTION_EST} + (** + * This option does nothing + *@deprecated use codec private options instead + *) + {attribute_deprecated} + me_method: cint; +{$ENDIF} + + (** + * If non NULL, 'draw_horiz_band' is called by the libavcodec + * decoder to draw a horizontal band. It improves cache usage. Not + * all codecs can do that. You must check the codec capabilities + * beforehand. + * The function is also used by hardware acceleration APIs. + * It is called at least once during frame decoding to pass + * the data needed for hardware render. + * In that mode instead of pixel data, AVFrame points to + * a structure specific to the acceleration API. The application + * reads the structure and can change some fields to indicate progress + * or mark state. + * - encoding: unused + * - decoding: Set by user. + * @param height the height of the slice + * @param y the y position of the slice + * @param type 1->top field, 2->bottom field, 3->frame + * @param offset offset into the AVFrame.data from which the slice should be read + *) + draw_horiz_band: procedure (s: PAVCodecContext; + src: {const} PAVFrame; offset: PAVNDPArray; + y: cint; type_: cint; height: cint); cdecl; + + (** + * callback to negotiate the pixelFormat + * @param fmt is the list of formats which are supported by the codec, + * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality. + * The first is always the native one. + * @note The callback may be called again immediately if initialization for + * the selected (hardware-accelerated) pixel format failed. + * @warning Behavior is undefined if the callback returns a value not + * in the fmt list of formats. + * @return the chosen format + * - encoding: unused + * - decoding: Set by user, if not set the native format will be chosen. + *) + get_format: function (s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; cdecl; + + (** + * maximum number of B-frames between non-B-frames + * Note: The output will be delayed by max_b_frames+1 relative to the input. + * - encoding: Set by user. + * - decoding: unused + *) + max_b_frames: cint; + + (** + * qscale factor between IP and B-frames + * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset). + * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). + * - encoding: Set by user. + * - decoding: unused + *) + b_quant_factor: cfloat; + +{$IFDEF FF_API_RC_STRATEGY} + (** @deprecated use codec private option instead *) + {attribute_deprecated} + rc_strategy: cint; +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + b_frame_strategy: cint; {deprecated} +{$ENDIF} + + (** + * qscale offset between IP and B-frames + * - encoding: Set by user. + * - decoding: unused + *) + b_quant_offset: cfloat; + + (** + * Size of the frame reordering buffer in the decoder. + * For MPEG-2 it is 1 IPB or 0 low delay IP. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + has_b_frames: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + mpeg_quant: cint; {deprecated} +{$ENDIF} + + (** + * qscale factor between P- and I-frames + * If > 0 then the last P- frame quantizer will be used (q = lastp_q * factor + offset). + * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset). + * - encoding: Set by user. + * - decoding: unused + *) + i_quant_factor: cfloat; + + (** + * qscale offset between P and I-frames + * - encoding: Set by user. + * - decoding: unused + *) + i_quant_offset: cfloat; + + (** + * luminance masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + lumi_masking: cfloat; + + (** + * temporary complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + temporal_cplx_masking: cfloat; + + (** + * spatial complexity masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + spatial_cplx_masking: cfloat; + + (** + * p block masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + p_masking: cfloat; + + (** + * darkness masking (0-> disabled) + * - encoding: Set by user. + * - decoding: unused + *) + dark_masking: cfloat; + + (** + * slice count + * - encoding: Set by libavcodec. + * - decoding: Set by user (or 0). + *) + slice_count: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + prediction_method: cint; {deprecated} +{$ENDIF} + + (** + * slice offsets in the frame in bytes + * - encoding: Set/allocated by libavcodec. + * - decoding: Set/allocated by user (or NULL). + *) + slice_offset: PCint; + + (** + * sample aspect ratio (0 if unknown) + * That is the width of a pixel divided by the height of the pixel. + * Numerator and denominator must be relatively prime and smaller than 256 for some video standards. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + sample_aspect_ratio: TAVRational; + + (** + * motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_cmp: cint; + + (** + * subpixel motion estimation comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_sub_cmp: cint; + (** + * macroblock comparison function (not supported yet) + * - encoding: Set by user. + * - decoding: unused + *) + mb_cmp: cint; + (** + * interlaced DCT comparison function + * - encoding: Set by user. + * - decoding: unused + *) + ildct_cmp: cint; + + (** + * ME diamond size & shape + * - encoding: Set by user. + * - decoding: unused + *) + dia_size: cint; + + (** + * amount of previous MV predictors (2a+1 x 2a+1 square) + * - encoding: Set by user. + * - decoding: unused + *) + last_predictor_count: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + pre_me: cint; {deprecated} +{$ENDIF} + + (** + * motion estimation prepass comparison function + * - encoding: Set by user. + * - decoding: unused + *) + me_pre_cmp: cint; + + (** + * ME prepass diamond size & shape + * - encoding: Set by user. + * - decoding: unused + *) + pre_dia_size: cint; + + (** + * subpel ME quality + * - encoding: Set by user. + * - decoding: unused + *) + me_subpel_quality: cint; + +{$IFDEF FF_API_AFD} + (** + * DTG active format information (additional aspect ratio + * information only used in DVB MPEG-2 transport streams) + * 0 if not set. + * + * - encoding: unused + * - decoding: Set by decoder. + * @deprecated Deprecated in favor of AVSideData + *) + {attribute_deprecated} + dtg_active_format: cint; +{$IFEND} + + (** + * maximum motion estimation search range in subpel units + * If 0 then no limit. + * + * - encoding: Set by user. + * - decoding: unused + *) + me_range: cint; + +{$IFDEF FF_API_QUANT_BIAS} + (** + * @deprecated use encoder private option instead + *) + {attribute_deprecated} + intra_quant_bias: cint; + + (** + * @deprecated use encoder private option instead + *) + {attribute_deprecated} + inter_quant_bias: cint; +{$ENDIF} + + (** + * slice flags + * - encoding: unused + * - decoding: Set by user. + *) + slice_flags: cint; + +{$IFDEF FF_API_XVMC} + (** + * XVideo Motion Acceleration + * - encoding: forbidden + * - decoding: set by decoder + * @deprecated XvMC doesn't need it anymore. + *) + xvmc_acceleration: cint; +{$ENDIF} + + (** + * macroblock decision mode + * - encoding: Set by user. + * - decoding: unused + *) + mb_decision: cint; + + (** + * custom intra quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. + *) + intra_matrix: PWord; + + (** + * custom inter quantization matrix + * - encoding: Set by user, can be NULL. + * - decoding: Set by libavcodec. + *) + inter_matrix: PWord; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + scenechange_threshold: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + noise_reduction: cint; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated this field is unused + *) + {attribute_deprecated} + me_threshold: cint; + + (** + * @deprecated this field is unused + *) + {attribute_deprecated} + mb_threshold: cint; +{$ENDIF} + (** + * precision of the intra DC coefficient - 8 + * - encoding: Set by user. + * - decoding: Set by libavcodec + *) + intra_dc_precision: cint; + + (** + * Number of macroblock rows at the top which are skipped. + * - encoding: unused + * - decoding: Set by user. + *) + skip_top: cint; + + (** + * Number of macroblock rows at the bottom which are skipped. + * - encoding: unused + * - decoding: Set by user. + *) + skip_bottom: cint; + +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + border_masking: cfloat; +{$ENDIF} + (** + * minimum MB Lagrange multiplier + * - encoding: Set by user. + * - decoding: unused + *) + mb_lmin: cint; + + (** + * maximum MB Lagrange multiplier + * - encoding: Set by user. + * - decoding: unused + *) + mb_lmax: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** + * @deprecated use encoder private options instead + *) + me_penalty_compensation: cint; {deprecated} +{$ENDIF} + + (** + * - encoding: Set by user. + * - decoding: unused + *) + bidir_refine: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + brd_scale: cint; {deprecated} +{$ENDIF} + + (** + * minimum GOP size + * - encoding: Set by user. + * - decoding: unused + *) + keyint_min: cint; + + (** + * number of reference frames + * - encoding: Set by user. + * - decoding: Set by lavc. + *) + refs: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + chromaoffset: cint; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_UNUSED_MEMBERS} + (** + * Multiplied by qscale for each frame and added to scene_change_score. + * - encoding: Set by user. + * - decoding: unused + *) + scenechange_factor: cint; {attribute_deprecated} +{$IFEND} + + (** + * Note: Value depends upon the compare function used for fullpel ME. + * - encoding: Set by user. + * - decoding: unused + *) + mv0_threshold: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + b_sensitivity: cint; {deprecated} +{$ENDIF} + + (** + * Chromaticity coordinates of the source primaries. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_primaries: TAVColorPrimaries; + + (** + * Color Transfer Characteristic. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_trc: TAVColorTransferCharacteristic; + + (** + * YUV colorspace type. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + colorspace: TAVColorSpace; + + (** + * MPEG vs JPEG YUV range. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_range: TAVColorRange; + + (** + * This defines the location of chroma samples. + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + chroma_sample_location: TAVChromaLocation; + + (** + * Number of slices. + * Indicates number of picture subdivisions. Used for parallelized + * decoding. + * - encoding: Set by user + * - decoding: unused + *) + slices: cint; + + (** Field order + * - encoding: set by libavcodec + * - decoding: Set by user. + *) + field_order: TAVFieldOrder; + + (* audio only *) + sample_rate: cint; ///< samples per second + channels: cint; ///< number of audio channels + + (** + * audio sample format + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + sample_fmt: TAVSampleFormat; ///< sample format + + (* The following data should not be initialized. *) + (** + * Number of samples per channel in an audio frame. + * + * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame + * except the last must contain exactly frame_size samples per channel. + * May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the + * frame size is not restricted. + * - decoding: may be set by some decoders to indicate constant frame size + *) + frame_size: cint; + + (** + * Frame counter, set by libavcodec. + * + * - decoding: total number of frames returned from the decoder so far. + * - encoding: total number of frames passed to the encoder so far. + * + * @note the counter is not incremented if encoding/decoding resulted in + * an error. + *) + frame_number: cint; ///< audio or video frame number + + (** + * number of bytes per packet if constant and known or 0 + * Used by some WAV based audio codecs. + *) + block_align: cint; + + (** + * Audio cutoff bandwidth (0 means "automatic") + * - encoding: Set by user. + * - decoding: unused + *) + cutoff: cint; + + (** + * Audio channel layout. + * - encoding: set by user. + * - decoding: set by user, may be overwritten by libavcodec. + *) + channel_layout: cuint64; + + (** + * Request decoder to use this channel layout if it can (0 for default) + * - encoding: unused + * - decoding: Set by user. + *) + request_channel_layout: cuint64; + + (** + * Type of service that the audio stream conveys. + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + audio_service_type: TAVAudioServiceType; + + (** + * desired sample format + * - encoding: Not used. + * - decoding: Set by user. + * Decoder will decode to this format if it can. + *) + request_sample_fmt: TAVSampleFormat; + + (** + * This callback is called at the beginning of each frame to get data + * buffer(s) for it. There may be one contiguous buffer for all the data or + * there may be a buffer per each data plane or anything in between. What + * this means is, you may set however many entries in buf[] you feel necessary. + * Each buffer must be reference-counted using the AVBuffer API (see description + * of buf[] below). + * + * The following fields will be set in the frame before this callback is + * called: + * - format + * - width, height (video only) + * - sample_rate, channel_layout, nb_samples (audio only) + * Their values may differ from the corresponding values in + * AVCodecContext. This callback must use the frame values, not the codec + * context values, to calculate the required buffer size. + * + * This callback must fill the following fields in the frame: + * - data[] + * - linesize[] + * - extended_data: + * * if the data is planar audio with more than 8 channels, then this + * callback must allocate and fill extended_data to contain all pointers + * to all data planes. data[] must hold as many pointers as it can. + * extended_data must be allocated with av_malloc() and will be freed in + * av_frame_unref(). + * * otherwise extended_data must point to data + * - buf[] must contain one or more pointers to AVBufferRef structures. Each of + * the frame's data and extended_data pointers must be contained in these. That + * is, one AVBufferRef for each allocated chunk of memory, not necessarily one + * AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(), + * and av_buffer_ref(). + * - extended_buf and nb_extended_buf must be allocated with av_malloc() by + * this callback and filled with the extra buffers if there are more + * buffers than buf[] can hold. extended_buf will be freed in + * av_frame_unref(). + * + * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call + * avcodec_default_get_buffer2() instead of providing buffers allocated by + * some other means. + * + * Each data plane must be aligned to the maximum required by the target + * CPU. + * + * @see avcodec_default_get_buffer2() + * + * Video: + * + * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused + * (read and/or written to if it is writable) later by libavcodec. + * + * avcodec_align_dimensions2() should be used to find the required width and + * height, as they normally need to be rounded up to the next multiple of 16. + * + * Some decoders do not support linesizes changing between frames. + * + * If frame multithreading is used and thread_safe_callbacks is set, + * this callback may be called from a different thread, but not from more + * than one at once. Does not need to be reentrant. + * + * @see avcodec_align_dimensions2() + * + * Audio: + * + * Decoders request a buffer of a particular size by setting + * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may, + * however, utilize only part of the buffer by setting AVFrame.nb_samples + * to a smaller value in the output frame. + * + * As a convenience, av_samples_get_buffer_size() and + * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2() + * functions to find the required data size and to fill data pointers and + * linesize. In AVFrame.linesize, only linesize[0] may be set for audio + * since all planes must be the same size. + * + * @see av_samples_get_buffer_size(), av_samples_fill_arrays() + * + * - encoding: unused + * - decoding: Set by libavcodec, user can override. + *) + get_buffer2: function (s: PAVCodecContext; frame: PAVFrame; flags: cint): cint; cdecl; + + (** + * If non-zero, the decoded audio and video frames returned from + * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted + * and are valid indefinitely. The caller must free them with + * av_frame_unref() when they are not needed anymore. + * Otherwise, the decoded frames must not be freed by the caller and are + * only valid until the next decode call. + * + * This is always automatically enabled if avcodec_receive_frame() is used. + * + * - encoding: unused + * - decoding: set by the caller before avcodec_open2(). + *) + refcounted_frames: cint; + + (* - encoding parameters *) + qcompress: cfloat; ///< amount of qscale change between easy & hard scenes (0.0-1.0) + qblur: cfloat; ///< amount of qscale smoothing over time (0.0-1.0) + + (** + * minimum quantizer + * - encoding: Set by user. + * - decoding: unused + *) + qmin: cint; + + (** + * maximum quantizer + * - encoding: Set by user. + * - decoding: unused + *) + qmax: cint; + + (** + * maximum quantizer difference between frames + * - encoding: Set by user. + * - decoding: unused + *) + max_qdiff: cint; +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + rc_qsquish: cfloat; + + {attribute_deprecated} + rc_qmod_amp: cfloat; + {attribute_deprecated} + rc_qmod_freq: cint; +{$ENDIF} + (** + * decoder bitstream buffer size + * - encoding: Set by user. + * - decoding: unused + *) + rc_buffer_size: cint; + (** + * ratecontrol override, see RcOverride + * - encoding: Allocated/set/freed by user. + * - decoding: unused + *) + rc_override_count: cint; + rc_override: PRcOverride; +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + rc_eq: {const} PAnsiChar; +{$ENDIF} + (** + * maximum bitrate + * - encoding: Set by user. + * - decoding: Set by user, may be overwritten by libavcodec. + *) + rc_max_rate: cint64; + + (** + * minimum bitrate + * - encoding: Set by user. + * - decoding: unused + *) + rc_min_rate: cint64; + +{$IFDEF FF_API_MPV_OPT} + + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + rc_buffer_aggressivity: cfloat; + + {attribute_deprecated} + rc_initial_cplx: cfloat; +{$ENDIF} + (** + * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow. + * - encoding: Set by user. + * - decoding: unused. + *) + rc_max_available_vbv_use: cfloat; + + (** + * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow. + * - encoding: Set by user. + * - decoding: unused. + *) + rc_min_vbv_overflow_use: cfloat; + + (** + * Number of bits which should be loaded into the rc buffer before decoding starts. + * - encoding: Set by user. + * - decoding: unused + *) + rc_initial_buffer_occupancy: cint; + +{$IFDEF FF_API_CODER_TYPE} + (** + * @deprecated use encoder private options instead + *) + coder_type: cint; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + context_model: cint; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_MPV_OPT} + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + lmin: cint; + + (** + * @deprecated use encoder private options instead + *) + {attribute_deprecated} + lmax: cint; +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + frame_skip_threshold: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + frame_skip_factor: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + frame_skip_exp: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + frame_skip_cmp: cint; {deprecated} +{$ENDIF} + + (** + * trellis RD quantization + * - encoding: Set by user. + * - decoding: unused + *) + trellis: cint; + +{$IFDEF FF_API_PRIVATE_OPT} + (** @deprecated use encoder private options instead *) + min_prediction_order: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + max_prediction_order: cint; {deprecated} + + (** @deprecated use encoder private options instead *) + timecode_frame_start: cint64; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_RTP_CALLBACK} + (** + * @deprecated unused + *) + (* The RTP callback: This function is called *) + (* every time the encoder has a packet to send *) + (* Depends on the encoder if the data starts *) + (* with a Start Code (it should) H.263 does. *) + (* mb_nb contains the number of macroblocks *) + (* encoded in the RTP payload *) + rtp_callback: procedure (avctx: PAVCodecContext; data: pointer; + size: cint; mb_nb: cint); cdecl; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_PRIVATE_OPT} + rtp_payload_size: cint; {deprecated} (* The size of the RTP payload: the coder will *) + (* do it's best to deliver a chunk with size *) + (* below rtp_payload_size, the chunk will start *) + (* with a start code on some codecs like H.263 *) + (* This doesn't take account of any particular *) + (* headers inside the transmited RTP payload *) +{$ENDIF} + +{$IFDEF FF_API_STAT_BITS} + (* statistics, used for 2-pass encoding *) + mv_bits: cint; {deprecated} + header_bits: cint; {deprecated} + i_tex_bits: cint; {deprecated} + p_tex_bits: cint; {deprecated} + i_count: cint; {deprecated} + p_count: cint; {deprecated} + skip_count: cint; {deprecated} + misc_bits: cint; {deprecated} + + (** @deprecated this field is unused *) + frame_bits: cint; {deprecated} +{$ENDIF} + + (** + * pass1 encoding statistics output buffer + * - encoding: Set by libavcodec. + * - decoding: unused + *) + stats_out: PAnsiChar; + + (** + * pass2 encoding statistics input buffer + * Concatenated stuff from stats_out of pass1 should be placed here. + * - encoding: Allocated/set/freed by user. + * - decoding: unused + *) + stats_in: PAnsiChar; + + (** + * Work around bugs in encoders which sometimes cannot be detected automatically. + * - encoding: Set by user + * - decoding: Set by user + *) + workaround_bugs: cint; + + (** + * strictly follow the standard (MPEG-4, ...). + * - encoding: Set by user. + * - decoding: Set by user. + * Setting this to STRICT or higher means the encoder and decoder will + * generally do stupid things, whereas setting it to unofficial or lower + * will mean the encoder might produce output that is not supported by all + * spec-compliant decoders. Decoders don't differentiate between normal, + * unofficial and experimental (that is, they always try to decode things + * when they can) unless they are explicitly asked to behave stupidly + * (=strictly conform to the specs) + *) + strict_std_compliance: cint; + + (** + * error concealment flags + * - encoding: unused + * - decoding: Set by user. + *) + error_concealment: cint; + + (** + * debug + * Code outside libavcodec should access this field using AVOptions + * - encoding: Set by user. + * - decoding: Set by user. + *) + debug: cint; + +{$IFDEF FF_API_DEBUG_MV} + (** + * debug + * - encoding: Set by user. + * - decoding: Set by user. + *) + debug_mv: cint; +{$ENDIF} + + (** + * Error recognition; may misdetect some more or less valid parts as errors. + * - encoding: unused + * - decoding: Set by user. + *) + err_recognition: cint; + + (** + * opaque 64-bit number (generally a PTS) that will be reordered and + * output in AVFrame.reordered_opaque + * - encoding: unused + * - decoding: Set by user. + *) + reordered_opaque: cint64; + + (** + * Hardware accelerator in use + * - encoding: unused. + * - decoding: Set by libavcodec + *) + hwaccel: PAVHWAccel; + + (** + * Hardware accelerator context. + * For some hardware accelerators, a global context needs to be + * provided by the user. In that case, this holds display-dependent + * data FFmpeg cannot instantiate itself. Please refer to the + * FFmpeg HW accelerator documentation to know how to fill this + * is. e.g. for VA API, this is a struct vaapi_context. + * - encoding: unused + * - decoding: Set by user + *) + hwaccel_context: pointer; + + (** + * error + * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR. + * - decoding: unused + *) + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; + + (** + * DCT algorithm, see FF_DCT_* below + * - encoding: Set by user. + * - decoding: unused + *) + dct_algo: cint; + + (** + * IDCT algorithm, see FF_IDCT_* below. + * - encoding: Set by user. + * - decoding: Set by user. + *) + idct_algo: cint; + + (** + * bits per sample/pixel from the demuxer (needed for huffyuv). + * - encoding: Set by libavcodec. + * - decoding: Set by user. + *) + bits_per_coded_sample: cint; + + (** + * Bits per sample/pixel of internal libavcodec pixel/sample format. + * - encoding: set by user. + * - decoding: set by libavcodec. + *) + bits_per_raw_sample: cint; + +{$IFDEF FF_API_LOWRES} + (** + * low resolution decoding, 1-> 1/2 size, 2->1/4 size + * - encoding: unused + * - decoding: Set by user. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_lowres(avctx) + *) + lowres: cint; +{$ENDIF} + +{$IFDEF FF_API_CODED_FRAME} + (** + * the picture in the bitstream + * - encoding: Set by libavcodec. + * - decoding: unused + * + * @deprecated use the quality factor packet side data instead + *) + {attribute_deprecated} + coded_frame: PAVFrame; +{$ENDIF} + + (** + * thread count + * is used to decide how many independent tasks should be passed to execute() + * - encoding: Set by user. + * - decoding: Set by user. + *) + thread_count: cint; + + (** + * Which multithreading methods to use. + * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread, + * so clients which cannot provide future frames should not use it. + * + * - encoding: Set by user, otherwise the default is used. + * - decoding: Set by user, otherwise the default is used. + *) + thread_type: cint; + + (** + * Which multithreading methods are in use by the codec. + * - encoding: Set by libavcodec. + * - decoding: Set by libavcodec. + *) + active_thread_type: cint; + + (** + * Set by the client if its custom get_buffer() callback can be called + * from another thread, which allows faster multithreaded decoding. + * draw_horiz_band() will be called from other threads regardless of this setting. + * Ignored if the default get_buffer() is used. + * - encoding: Set by user. + * - decoding: Set by user. + *) + thread_safe_callbacks: cint; + + (** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. + * @param count the number of things to execute + * - encoding: Set by libavcodec, user can override. + * - decoding: Set by libavcodec, user can override. + *) + execute: function (c: PAVCodecContext; func: TExecuteFunc; arg: Pointer; ret: PCint; count: cint; size: cint): cint; cdecl; + + (** + * The codec may call this to execute several independent things. + * It will return only after finishing all tasks. + * The user may replace this with some multithreaded implementation, + * the default implementation will execute the parts serially. + * Also see avcodec_thread_init and e.g. the --enable-pthread configure option. + * @param c context passed also to func + * @param count the number of things to execute + * @param arg2 argument passed unchanged to func + * @param ret return values of executed functions, must have space for "count" values. May be NULL. + * @param func function that will be called count times, with jobnr from 0 to count-1. + * threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no + * two instances of func executing at the same time will have the same threadnr. + * @return always 0 currently, but code should handle a future improvement where when any call to func + * returns < 0 no further calls to func may be done and < 0 is returned. + * - encoding: Set by libavcodec, user can override. + * - decoding: Set by libavcodec, user can override. + *) + execute2: function (c: PAVCodecContext; func: TExecute2Func; arg2: Pointer; ret: Pcint; count: cint): cint; cdecl; + + (** + * noise vs. sse weight for the nsse comparison function + * - encoding: Set by user. + * - decoding: unused + *) + nsse_weight: cint; + + (** + * profile + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + profile: cint; + + (** + * level + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + level: cint; + + (** + * Skip loop filtering for selected frames. + * - encoding: unused + * - decoding: Set by user. + *) + skip_loop_filter: TAVDiscard; + + (** + * Skip IDCT/dequantization for selected frames. + * - encoding: unused + * - decoding: Set by user. + *) + skip_idct: TAVDiscard; + + (** + * Skip decoding for selected frames. + * - encoding: unused + * - decoding: Set by user. + *) + skip_frame: TAVDiscard; + + (** + * Header containing style information for text subtitles. + * For SUBTITLE_ASS subtitle type, it should contain the whole ASS + * [Script Info] and [V4+ Styles] section, plus the [Events] line and + * the Format line following. It shouldn't include any Dialogue line. + * - encoding: Set/allocated/freed by user (before avcodec_open2()) + * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2()) + *) + subtitle_header: Pcuint8; + subtitle_header_size: cint; + +{$IFDEF FF_API_ERROR_RATE} + (** + * @deprecated use the 'error_rate' private AVOption of the mpegvideo + * encoders + *) + error_rate: cint; +{$ENDIF} + +{$IFDEF FF_API_VBV_DELAY} + (** + * VBV delay coded in the last frame (in periods of a 27 MHz clock). + * Used for compliant TS muxing. + * - encoding: Set by libavcodec. + * - decoding: unused. + * @deprecated this value is now exported as a part of + * AV_PKT_DATA_CPB_PROPERTIES packet side data + *) + vbv_delay: cuint64; {deprecated} +{$ENDIF} + +{$IFDEF FF_API_SIDEDATA_ONLY_PKT} + (** + * Encoding only and set by default. Allow encoders to output packets + * that do not contain any encoded data, only side data. + * + * Some encoders need to output such packets, e.g. to update some stream + * parameters at the end of encoding. + * + * @deprecated this field disables the default behaviour and + * it is kept only for compatibility. + *) + side_data_only_packets: cint; {deprecated} +{$ENDIF} + + (** + * Audio only. The number of "priming" samples (padding) inserted by the + * encoder at the beginning of the audio. I.e. this number of leading + * decoded samples must be discarded by the caller to get the original audio + * without leading padding. + * + * - decoding: unused + * - encoding: Set by libavcodec. The timestamps on the output packets are + * adjusted by the encoder so that they always refer to the + * first sample of the data actually contained in the packet, + * including any added padding. E.g. if the timebase is + * 1/samplerate and the timestamp of the first input sample is + * 0, the timestamp of the first output packet will be + * -initial_padding. + *) + initial_padding: cint; + + (** + * - decoding: For codecs that store a framerate value in the compressed + * bitstream, the decoder may export it here. { 0, 1} when + * unknown. + * - encoding: May be used to signal the framerate of CFR content to an + * encoder. + *) + framerate: TAVRational; + + (** + * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx. + * - encoding: unused. + * - decoding: Set by libavcodec before calling get_format() + *) + sw_pix_fmt: TAVPixelFormat; + + (** + * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_pkt_timebase(avctx) + * - encoding unused. + * - decoding set by user + *) + pkt_timebase: TAVRational; + + (** + * AVCodecDescriptor + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_codec_descriptor(avctx) + * - encoding: unused. + * - decoding: set by libavcodec. + *) + codec_descriptor: PAVCodecDescriptor; + +{$IFNDEF FF_API_LOWRES} + (** + * low resolution decoding, 1-> 1/2 size, 2->1/4 size + * - encoding: unused + * - decoding: Set by user. + * Code outside libavcodec should access this field using: + * av_codec_{get,set}_lowres(avctx) + *) + lowres: cint; +{$ENDIF} + + (** + * Current statistics for PTS correction. + * - decoding: maintained and used by libavcodec, not intended to be used by user apps + * - encoding: unused + *) + pts_correction_num_faulty_pts: cint64; /// Number of incorrect PTS values so far + pts_correction_num_faulty_dts: cint64; /// Number of incorrect DTS values so far + pts_correction_last_pts: cint64; /// PTS of the last frame + pts_correction_last_dts: cint64; /// DTS of the last frame + + (** + * Character encoding of the input subtitles file. + * - decoding: set by user + * - encoding: unused + *) + sub_charenc: PAnsiChar; + + (** + * Subtitles character encoding mode. Formats or codecs might be adjusting + * this setting (if they are doing the conversion themselves for instance). + * - decoding: set by libavcodec + * - encoding: unused + *) + sub_charenc_mode: cint; + + (** + * Skip processing alpha if supported by codec. + * Note that if the format uses pre-multiplied alpha (common with VP6, + * and recommended due to better video quality/compression) + * the image will look as if alpha-blended onto a black background. + * However for formats that do not use pre-multiplied alpha + * there might be serious artefacts (though e.g. libswscale currently + * assumes pre-multiplied alpha anyway). + * Code outside libavcodec should access this field using AVOptions + * + * - decoding: set by user + * - encoding: unused + *) + skip_alpha: cint; + + (** + * Number of samples to skip after a discontinuity + * - decoding: unused + * - encoding: set by libavcodec + *) + seek_preroll: cint; + +{$IFNDEF FF_API_DEBUG_MV} + (** + * debug motion vectors + * Code outside libavcodec should access this field using AVOptions + * - encoding: Set by user. + * - decoding: Set by user. + *) + debug_mv: cint; +{$ENDIF} + + (** + * custom intra quantization matrix + * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix() + * - encoding: Set by user, can be NULL. + * - decoding: unused. + *) + chroma_intra_matrix: PWord; + + (** + * dump format separator. + * can be ", " or "\n " or anything else + * Code outside libavcodec should access this field using AVOptions + * (NO direct access). + * - encoding: Set by user. + * - decoding: Set by user. + *) + dump_separator: Pcuint8; + + (** + * ',' separated list of allowed decoders. + * If NULL then all are allowed + * - encoding: unused + * - decoding: set by user through AVOPtions (NO direct access) + *) + codec_whitelist: PAnsiChar; + + (* + * Properties of the stream that gets decoded + * To be accessed through av_codec_get_properties() (NO direct access) + * - encoding: unused + * - decoding: set by libavcodec + *) + properties: cuint; + + (** + * Additional data associated with the entire coded stream. + * + * - decoding: unused + * - encoding: may be set by libavcodec after avcodec_open2(). + *) + coded_side_data: PAVPacketSideData; + nb_coded_side_data: cint; + + (** + * A reference to the AVHWFramesContext describing the input (for encoding) + * or output (decoding) frames. The reference is set by the caller and + * afterwards owned (and freed) by libavcodec. + * + * - decoding: This field should be set by the caller from the get_format() + * callback. The previous reference (if any) will always be + * unreffed by libavcodec before the get_format() call. + * + * If the default get_buffer2() is used with a hwaccel pixel + * format, then this AVHWFramesContext will be used for + * allocating the frame buffers. + * + * - encoding: For hardware encoders configured to use a hwaccel pixel + * format, this field should be set by the caller to a reference + * to the AVHWFramesContext describing input frames. + * AVHWFramesContext.format must be equal to + * AVCodecContext.pix_fmt. + * + * This field should be set before avcodec_open2() is called. + *) + hw_frames_ctx: PAVBufferRef; + + (** + * Control the form of AVSubtitle.rects[N]->ass + * - decoding: set by user + * - encoding: unused + *) + sub_text_format: cint; + + (** + * Audio only. The amount of padding (in samples) appended by the encoder to + * the end of the audio. I.e. this number of decoded samples must be + * discarded by the caller from the end of the stream to get the original + * audio without any trailing padding. + * + * - decoding: unused + * - encoding: unused + *) + trailing_padding: cint; + + end; {TAVCodecContext} + + TAVSubtitleType = ( + SUBTITLE_NONE, + + SUBTITLE_BITMAP, ///< A bitmap, pict will be set + + (** + * Plain text, the text field must be set by the decoder and is + * authoritative. ass and pict fields may contain approximations. + *) + SUBTITLE_TEXT, + + (** + * Formatted text, the ass field must be set by the decoder and is + * authoritative. pict and text fields may contain approximations. + *) + SUBTITLE_ASS + ); {TAVSubtitleType} + +{$IFDEF FF_API_AVPICTURE} + (** + * @defgroup lavc_picture AVPicture + * + * Functions for working with AVPicture + * @{ + *) + + (** + * Picture data structure. + * + * Up to four components can be stored into it, the last component is + * alpha. + * @deprecated use AVFrame or imgutils functions instead + *) + PAVPicture = ^TAVPicture; + TAVPicture = record + data: array [0..AV_NUM_DATA_POINTERS - 1] of PByteArray; {deprecated} + linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; {deprecated} ///< number of bytes per line + end; {TAVPicture} +{$ENDIF} + + PPAVSubtitleRect = ^PAVSubtitleRect; + PAVSubtitleRect = ^TAVSubtitleRect; + TAVSubtitleRect = record + x: cint; ///< top left corner of pict, undefined when pict is not set + y: cint; ///< top left corner of pict, undefined when pict is not set + w: cint; ///< width of pict, undefined when pict is not set + h: cint; ///< height of pict, undefined when pict is not set + nb_colors: cint; ///< number of colors in pict, undefined when pict is not set + +{$IFDEF FF_API_AVPICTURE} + (** + * @deprecated unused + *) + pict: TAVPicture; {deprecated} +{$ENDIF} + (** + * data+linesize for the bitmap of this subtitle. + * Can be set for text/ass as well once they are rendered. + *) + data: Array [0..4] of PByte; + linesize: Array [0..4] of cint; + + type_: TAVSubtitleType; + + text: PAnsiChar; ///< 0 terminated plain UTF-8 text + + (** + * 0 terminated ASS/SSA compatible event line. + * The presentation of this is unaffected by the other values in this + * struct. + *) + ass: PAnsiChar; + + flags: cint; + end; {TAVSubtitleRect} + + PPAVSubtitle = ^PAVSubtitle; + PAVSubtitle = ^TAVSubtitle; + TAVSubtitle = record + format: cuint16; (* 0 = graphics *) + start_display_time: cuint32; (* relative to packet pts, in ms *) + end_display_time: cuint32; (* relative to packet pts, in ms *) + num_rects: cuint; + rects: PPAVSubtitleRect; + pts: cint64; ///< Same as packet pts, in AV_TIME_BASE + end; {TAVSubtitle} + + (** + * This struct describes the properties of an encoded stream. + * + * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must + * be allocated with avcodec_parameters_alloc() and freed with + * avcodec_parameters_free(). + *) + PPAVCodecParameters = ^PAVCodecParameters; + PAVCodecParameters = ^TAVCodecParameters; + TAVCodecParameters = record + (** + * General type of the encoded data. + *) + codec_type: TAVMediaType; + (** + * Specific type of the encoded data (the codec used). + *) + codec_id: TAVCodecID; + (** + * Additional information about the codec (corresponds to the AVI FOURCC). + *) + codec_tag: cuint32; + + (** + * Extra binary data needed for initializing the decoder, codec-dependent. + * + * Must be allocated with av_malloc() and will be freed by + * avcodec_parameters_free(). The allocated size of extradata must be at + * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding + * bytes zeroed. + *) + extradata: Pcuint8; + (** + * Size of the extradata content in bytes. + *) + extradata_size: cint; + + (** + * - video: the pixel format, the value corresponds to enum AVPixelFormat. + * - audio: the sample format, the value corresponds to enum AVSampleFormat. + *) + format: cint; + + (** + * The average bitrate of the encoded data (in bits per second). + *) + bit_rate: cint64; + + (** + * The number of bits per sample in the codedwords. + * + * This is basically the bitrate per sample. It is mandatory for a bunch of + * formats to actually decode them. It's the number of bits for one sample in + * the actual coded bitstream. + * + * This could be for example 4 for ADPCM + * For PCM formats this matches bits_per_raw_sample + * Can be 0 + *) + bits_per_coded_sample: cint; + + (** + * This is the number of valid bits in each output sample. If the + * sample format has more bits, the least significant bits are additional + * padding bits, which are always 0. Use right shifts to reduce the sample + * to its actual size. For example, audio formats with 24 bit samples will + * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32. + * To get the original sample use "(int32_t)sample >> 8"." + * + * For ADPCM this might be 12 or 16 or similar + * Can be 0 + *) + bits_per_raw_sample: cint; + + (** + * Codec-specific bitstream restrictions that the stream conforms to. + *) + profile: cint; + level: cint; + + (** + * Video only. The dimensions of the video frame in pixels. + *) + width: cint; + height: cint; + + (** + * Video only. The aspect ratio (width / height) which a single pixel + * should have when displayed. + * + * When the aspect ratio is unknown / undefined, the numerator should be + * set to 0 (the denominator may have any value). + *) + sample_aspect_ratio: TAVRational; + + (** + * Video only. The order of the fields in interlaced video. + *) + field_order: TAVFieldOrder; + + (** + * Video only. Additional colorspace characteristics. + *) + color_range: TAVColorRange; + color_primaries: TAVColorPrimaries; + color_trc: TAVColorTransferCharacteristic; + color_space: TAVColorSpace; + chroma_location: TAVChromaLocation; + + (** + * Video only. Number of delayed frames. + *) + video_delay: cint; + + (** + * Audio only. The channel layout bitmask. May be 0 if the channel layout is + * unknown or unspecified, otherwise the number of bits set must be equal to + * the channels field. + *) + channel_layout: cuint64; + (** + * Audio only. The number of audio channels. + *) + channels: cint; + (** + * Audio only. The number of audio samples per second. + *) + sample_rate: cint; + (** + * Audio only. The number of bytes per coded audio frame, required by some + * formats. + * + * Corresponds to nBlockAlign in WAVEFORMATEX. + *) + block_align: cint; + (** + * Audio only. Audio frame size, if known. Required by some formats to be static. + *) + frame_size: cint; + + (** + * Audio only. The amount of padding (in samples) inserted by the encoder at + * the beginning of the audio. I.e. this number of leading decoded samples + * must be discarded by the caller to get the original audio without leading + * padding. + *) + initial_padding: cint; + (** + * Audio only. The amount of padding (in samples) appended by the encoder to + * the end of the audio. I.e. this number of decoded samples must be + * discarded by the caller from the end of the stream to get the original + * audio without any trailing padding. + *) + trailing_padding: cint; + (** + * Audio only. Number of samples to skip after a discontinuity. + *) + seek_preroll: cint; + end; {TAVCodecParameters} + +(** + * AVCodec. + *) + TAVCodec = record + (** + * Name of the codec implementation. + * The name is globally unique among encoders and among decoders (but an + * encoder and a decoder can share the same name). + * This is the primary way to find a codec from the user perspective. + *) + name: PAnsiChar; + (** + * Descriptive name for the codec, meant to be more human readable than name. + * You should use the NULL_IF_CONFIG_SMALL() macro to define it. + *) + long_name: {const} PAnsiChar; + type_: TAVMediaType; + id: TAVCodecID; + (** + * Codec capabilities. + * see AV_CODEC_CAP_* + *) + capabilities: cint; + supported_framerates: {const} PAVRational; ///< array of supported framerates, or NULL if any, array is terminated by {0,0} + pix_fmts: {const} PAVPixelFormat; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1 + supported_samplerates: {const} PCint; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 + sample_fmts: {const} PAVSampleFormatArray; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 + channel_layouts: {const} PCuint64; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 + max_lowres: byte; ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres() + priv_class: {const} PAVClass; ///< AVClass for the private context + profiles: {const} PAVProfile; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavcodec and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + priv_data_size: cint; + next: PAVCodec; + (** + * @name Frame-level threading support functions + * @{ + *) + (** + * If defined, called on thread contexts when they are created. + * If the codec allocates writable tables in init(), re-allocate them here. + * priv_data will be set to a copy of the original. + *) + init_thread_copy: function (avctx: PAVCodecContext): Pcint; cdecl; + (** + * Copy necessary context variables from a previous thread context to the current one. + * If not defined, the next thread will start automatically; otherwise, the codec + * must call ff_thread_finish_setup(). + * + * dst and src will (rarely) point to the same context, in which case memcpy should be skipped. + *) + update_thread_context: function (dst: PAVCodecContext; src: {const} PAVCodecContext): cint; cdecl; + (** @} *) + + (** + * Private codec-specific defaults. + *) + defaults: {const} pointer; + + (** + * Initialize codec static data, called from avcodec_register(). + *) + init_static_data: procedure (codec: PAVCodec); cdecl; + + init: function (avctx: PAVCodecContext): cint; cdecl; + encode_sub: function (avctx: PAVCodecContext; buf: PByteArray; buf_size: cint; + sub: {const} PAVSubtitle): cint; cdecl; + (** + * Encode data to an AVPacket. + * + * @param avctx codec context + * @param avpkt output AVPacket (may contain a user-provided buffer) + * @param[in] frame AVFrame containing the raw data to be encoded + * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a + * non-empty packet was returned in avpkt. + * @return 0 on success, negative error code on failure + *) + encode2: function (avctx: PAVCodecContext; avpkt: PAVPacket; frame: {const} PAVFrame; + got_packet_ptr: Pcint): cint; cdecl; + decode: function (avctx: PAVCodecContext; outdata: pointer; var outdata_size: cint; avpkt: PAVPacket): cint; cdecl; + close: function (avctx: PAVCodecContext): cint; cdecl; + (** + * Decode/encode API with decoupled packet/frame dataflow. The API is the + * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except + * that: + * - never called if the codec is closed or the wrong type, + * - AVPacket parameter change side data is applied right before calling + * AVCodec->send_packet, + * - if AV_CODEC_CAP_DELAY is not set, drain packets or frames are never sent, + * - only one drain packet is ever passed down (until the next flush()), + * - a drain AVPacket is always NULL (no need to check for avpkt->size). + *) + send_frame: function(avctx: PAVCodecContext; frame: {const} PAVFrame): cint; cdecl; + send_packet: function(avctx: PAVCodecContext; frame: {const} PAVPacket): cint; cdecl; + receive_frame: function(avctx: PAVCodecContext; frame: PAVFrame): cint; cdecl; + receive_packet: function(avctx: PAVCodecContext; avpkt: PAVPacket): cint; cdecl; + (** + * Flush buffers. + * Will be called when seeking + *) + flush: procedure (avctx: PAVCodecContext); cdecl; + (** + * Internal codec capabilities. + * See FF_CODEC_CAP_* in internal.h + *) + caps_internal: cint; + end; {TAVCodec} + + PMpegEncContext = ^TMpegEncContext; + // To be expanded if needed. + TMpegEncContext = record + end; + +(** + * @defgroup lavc_hwaccel AVHWAccel + * @{ + *) + TAVHWAccel = record + (** + * Name of the hardware accelerated codec. + * The name is globally unique among encoders and among decoders (but an + * encoder and a decoder can share the same name). + *) + name: PAnsiChar; + + (** + * Type of codec implemented by the hardware accelerator. + * + * See AVMediaType_xxx + *) + type_: TAVMediaType; + + (** + * Codec implemented by the hardware accelerator. + * + * See AV_CODEC_ID_xxx + *) + id: TAVCodecID; + + (** + * Supported pixel format. + * + * Only hardware accelerated formats are supported here. + *) + pix_fmt: PAVPixelFormat; + + (** + * Hardware accelerated codec capabilities. + * see HWACCEL_CODEC_CAP_* + *) + capabilities: cint; + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavcodec and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + next: PAVHWAccel; + + (** + * Allocate a custom buffer + *) + alloc_frame: function (avctx: PAVCodecContext; frame: PAVFrame): cint; cdecl; + + (** + * Called at the beginning of each frame or field picture. + * + * Meaningful frame information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. + * The only exception is XvMC, that works on MB level. + * + * Note that buf can be NULL along with buf_size set to 0. + * Otherwise, this means the whole frame is available at this point. + * + * @param avctx the codec context + * @param buf the frame data buffer base + * @param buf_size the size of the frame in bytes + * @return zero if successful, a negative value otherwise + *) + start_frame: function (avctx: PAVCodecContext; + buf: {const} PByteArray; + buf_size: cuint): cint; cdecl; + + (** + * Callback for each slice. + * + * Meaningful slice information (codec specific) is guaranteed to + * be parsed at this point. This function is mandatory. + * + * @param avctx the codec context + * @param buf the slice data buffer base + * @param buf_size the size of the slice in bytes + * @return zero if successful, a negative value otherwise + *) + decode_slice: function (avctx: PAVCodecContext; + buf: {const} PByteArray; + buf_size: cuint): cint; cdecl; + + (** + * Called at the end of each frame or field picture. + * + * The whole picture is parsed at this point and can now be sent + * to the hardware accelerator. This function is mandatory. + * + * @param avctx the codec context + * @return zero if successful, a negative value otherwise + *) + end_frame: function (avctx: PAVCodecContext): cint; cdecl; + + (** + * Size of per-frame hardware accelerator private data. + * + * Private data is allocated with av_mallocz() before + * AVCodecContext.get_buffer() and deallocated after + * AVCodecContext.release_buffer(). + *) + frame_priv_data_size: cint; + + (** + * Called for every Macroblock in a slice. + * + * XvMC uses it to replace the ff_mpv_decode_mb(). + * Instead of decoding to raw picture, MB parameters are + * stored in an array provided by the video driver. + * + * @param s the mpeg context + *) + decode_mb: procedure(s: PMpegEncContext); cdecl; + + (** + * Initialize the hwaccel private data. + * + * This will be called from ff_get_format(), after hwaccel and + * hwaccel_context are set and the hwaccel private data in AVCodecInternal + * is allocated. + *) + init: function (avctx: PAVCodecContext): cint; cdecl; + + (** + * Uninitialize the hwaccel private data. + * + * This will be called from get_format() or avcodec_close(), after hwaccel + * and hwaccel_context are already uninitialized. + *) + uninit: function (avctx: PAVCodecContext): cint; cdecl; + + (** + * Size of the private data to allocate in + * AVCodecInternal.hwaccel_priv_data. + *) + priv_data_size: cint; + end; {TAVHWAccel} + +const + (** + * Hardware acceleration should be used for decoding even if the codec level + * used is unknown or higher than the maximum supported level reported by the + * hardware driver. + * + * It's generally a good idea to pass this flag unless you have a specific + * reason not to, as hardware tends to under-report supported levels. + *) + AV_HWACCEL_FLAG_IGNORE_LEVEL = (1 << 0); + + (** + * Hardware acceleration can output YUV pixel formats with a different chroma + * sampling than 4:2:0 and/or other than 8 bits per component. + *) + AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH = (1 << 1); + + FF_SUB_CHARENC_MODE_DO_NOTHING = -1; ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance) + FF_SUB_CHARENC_MODE_AUTOMATIC = 0; ///< libavcodec will select the mode itself + FF_SUB_CHARENC_MODE_PRE_DECODER = 1; ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv + + FF_CODEC_PROPERTY_LOSSLESS = $00000001; + FF_CODEC_PROPERTY_CLOSED_CAPTIONS = $00000002; + FF_SUB_TEXT_FMT_ASS = 0; +{$IFDEF FF_API_ASS_TIMING} + FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS = 1; +{$ENDIF} + + function av_codec_get_pkt_timebase(avctx: {const} PAVCodecContext): TAVRational; + cdecl; external av__codec; + procedure av_codec_set_pkt_timebase(avctx: {const} PAVCodecContext; val: TAVRational); + cdecl; external av__codec; + + function av_codec_get_codec_descriptor(avctx: {const} PAVCodecContext): PAVCodecDescriptor; + cdecl; external av__codec; + procedure av_codec_set_codec_descriptor(avctx: {const} PAVCodecContext; desc: {const} PAVCodecDescriptor); + cdecl; external av__codec; + + function av_codec_get_codec_properties(avctx: {const} PAVCodecContext): cuint; + cdecl; external av__codec; + + function av_codec_get_lowres(avctx: {const} PAVCodecContext): cint; + cdecl; external av__codec; + procedure av_codec_set_lowres(avctx: PAVCodecContext; val: cint); + cdecl; external av__codec; + + function av_codec_get_seek_preroll(avctx: {const} PAVCodecContext): cint; + cdecl; external av__codec; + procedure av_codec_set_seek_preroll(avctx: PAVCodecContext; val: cint); + cdecl; external av__codec; + + function av_codec_get_max_lowres(codec: {const} PAVCodec): cint; + cdecl; external av__codec; + + function av_codec_get_chroma_intra_matrix(avctx: {const} PAVCodecContext): PWord; + cdecl; external av__codec; + procedure av_codec_set_chroma_intra_matrix(avctx: PAVCodecContext; val: PWord); + cdecl; external av__codec; + +(** + * @ + *) + +const + AV_SUBTITLE_FLAG_FORCED = $00000001; + +(** + * If c is NULL, returns the first registered codec, + * if c is non-NULL, returns the next registered codec after c, + * or NULL if c is the last one. + *) +function av_codec_next(c: {const} PAVCodec): PAVCodec; + cdecl; external av__codec; + +(** + * Return the LIBAVCODEC_VERSION_INT constant. + *) +function avcodec_version(): cuint; + cdecl; external av__codec; + +(** + * Return the libavcodec build-time configuration. + *) +function avcodec_configuration(): PAnsiChar; + cdecl; external av__codec; + +(** + * Return the libavcodec license. + *) +function avcodec_license(): PAnsiChar; + cdecl; external av__codec; + +(** + * Register the codec codec and initialize libavcodec. + * + * @warning either this function or avcodec_register_all() must be called + * before any other libavcodec functions. + * + * @see avcodec_register_all() + *) +procedure avcodec_register(codec: PAVCodec); + cdecl; external av__codec; + +(** + * Register all the codecs, parsers and bitstream filters which were enabled at + * configuration time. If you do not call this function you can select exactly + * which formats you want to support, by using the individual registration + * functions. + * + * @see register_avcodec + * @see avcodec_register + * @see av_register_codec_parser + * @see av_register_bitstream_filter + *) +procedure avcodec_register_all(); + cdecl; external av__codec; + +(** + * Allocate an AVCodecContext and set its fields to default values. The + * resulting struct should be freed with avcodec_free_context(). + * + * @param codec if non-NULL, allocate private data and initialize defaults + * for the given codec. It is illegal to then call avcodec_open2() + * with a different codec. + * + * @return An AVCodecContext filled with default values or NULL on failure. + *) +function avcodec_alloc_context3(codec: {const} PAVCodec): PAVCodecContext; + cdecl; external av__codec; + +(** + * Free the codec context and everything associated with it and write NULL to + * the provided pointer. + *) +procedure avcodec_free_context(var avctx: PAVCodecContext); + cdecl; external av__codec; + +{$IFDEF FF_API_GET_CONTEXT_DEFAULTS} +(** + * @deprecated This function should not be used, as closing and opening a codec + * context multiple time is not supported. A new codec context should be + * allocated for each new use. + *) +procedure avcodec_get_context_defaults3(s: PAVCodecContext; codec: {const} PAVCodec); + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * Get the AVClass for AVCodecContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avcodec_get_class(): {const} PAVClass; + cdecl; external av__codec; + +{$IFDEF FF_API_COPY_CONTEXT} +(** + * Get the AVClass for AVFrame. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avcodec_get_frame_class(): {const} PAVClass; + cdecl; external av__codec; + +(** + * Get the AVClass for AVSubtitleRect. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avcodec_get_subtitle_rect_class(): {const} PAVClass; + cdecl; external av__codec; + +(** + * Copy the settings of the source AVCodecContext into the destination + * AVCodecContext. The resulting destination codec context will be + * unopened, i.e. you are required to call avcodec_open2() before you + * can use this AVCodecContext to decode/encode video/audio data. + * + * @param dest target codec context, should be initialized with + * avcodec_alloc_context3(), but otherwise uninitialized + * @param src source codec context + * @return AVERROR() on error (e.g. memory allocation error), 0 on success + * + * @deprecated The semantics of this function are ill-defined and it should not + * be used. If you need to transfer the stream parameters from one codec context + * to another, use an intermediate AVCodecParameters instance and the + * avcodec_parameters_from_context() / avcodec_parameters_to_context() + * functions. + *) +function avcodec_copy_context(dest: PAVCodecContext; src: {const} PAVCodecContext): cint; + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * Allocate a new AVCodecParameters and set its fields to default values + * (unknown/invalid/0). The returned struct must be freed with + * avcodec_parameters_free(). + *) +function avcodec_parameters_alloc(): PAVCodecParameters; + cdecl; external av__codec; + +(** + * Free an AVCodecParameters instance and everything associated with it and + * write NULL to the supplied pointer. + *) +procedure avcodec_parameters_free(par: PPAVCodecParameters); + cdecl; external av__codec; + +(** + * Copy the contents of src to dst. Any allocated fields in dst are freed and + * replaced with newly allocated duplicates of the corresponding fields in src. + * + * @return >= 0 on success, a negative AVERROR code on failure. + *) +function avcodec_parameters_copy(dst: PAVCodecParameters; src: {const} PAVCodecParameters): cint; + cdecl; external av__codec; + +(** + * Fill the parameters struct based on the values from the supplied codec + * context. Any allocated fields in par are freed and replaced with duplicates + * of the corresponding fields in codec. + * + * @return >= 0 on success, a negative AVERROR code on failure + *) +function avcodec_parameters_from_context(par: PAVCodecParameters; + codec: {const} PAVCodecContext): cint; + cdecl; external av__codec; + +(** + * Fill the codec context based on the values from the supplied codec + * parameters. Any allocated fields in codec that have a corresponding field in + * par are freed and replaced with duplicates of the corresponding field in par. + * Fields in codec that do not have a counterpart in par are not touched. + * + * @return >= 0 on success, a negative AVERROR code on failure. + *) +function avcodec_parameters_to_context(codec: PAVCodecContext; + par: {const} PAVCodecParameters): cint; + cdecl; external av__codec; + +(** + * Initialize the AVCodecContext to use the given AVCodec. Prior to using this + * function the context has to be allocated with avcodec_alloc_context3(). + * + * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(), + * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for + * retrieving a codec. + * + * @warning This function is not thread safe! + * + * @note Always call this function before using decoding routines (such as + * @ref avcodec_receive_frame()). + * + * @code + * avcodec_register_all(); + * av_dict_set(&opts, "b", "2.5M", 0); + * codec = avcodec_find_decoder(AV_CODEC_ID_H264); + * if (!codec) + * exit(1); + * + * context = avcodec_alloc_context3(codec); + * + * if (avcodec_open2(context, codec, opts) < 0) + * exit(1); + * @endcode + * + * @param avctx The context to initialize. + * @param codec The codec to open this context for. If a non-NULL codec has been + * previously passed to avcodec_alloc_context3() or + * for this context, then this parameter MUST be either NULL or + * equal to the previously passed codec. + * @param options A dictionary filled with AVCodecContext and codec-private options. + * On return this object will be filled with options that were not found. + * + * @return zero on success, a negative value on error + * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(), + * av_dict_set(), av_opt_find(). + *) +function avcodec_open2(avctx: PAVCodecContext; codec: {const} PAVCodec; options: PPAVDictionary): cint; + cdecl; external av__codec; + +(** + * Close a given AVCodecContext and free all the data associated with it + * (but not the AVCodecContext itself). + * + * Calling this function on an AVCodecContext that hasn't been opened will free + * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL + * codec. Subsequent calls will do nothing. + * + * @note Do not use this function. Use avcodec_free_context() to destroy a + * codec context (either open or closed). Opening and closing a codec context + * multiple times is not supported anymore -- use multiple codec contexts + * instead. + *) +function avcodec_close(avctx: PAVCodecContext): cint; + cdecl; external av__codec; + +(** + * Free all allocated data in the given subtitle struct. + * + * @param sub AVSubtitle to free. + *) +procedure avsubtitle_free(sub: PAVSubtitle); + cdecl; external av__codec; + +(** + * @} + *) + +(** + * @addtogroup lavc_packet + * @{ + *) + +(** + * Allocate an AVPacket and set its fields to default values. The resulting + * struct must be freed using av_packet_free(). + * + * @return An AVPacket filled with default values or NULL on failure. + * + * @note this only allocates the AVPacket itself, not the data buffers. Those + * must be allocated through other means such as av_new_packet. + * + * @see av_new_packet + *) +function av_packet_alloc(): PAVPacket; + cdecl; external av__codec; + +(** + * Create a new packet that references the same data as src. + * + * This is a shortcut for av_packet_alloc()+av_packet_ref(). + * + * @return newly created AVPacket on success, NULL on error. + * + * @see av_packet_alloc + * @see av_packet_ref + *) +function av_packet_clone(src: PAVPacket): PAVPacket; + cdecl; external av__codec; + +(** + * Free the packet, if the packet is reference counted, it will be + * unreferenced first. + * + * @param packet packet to be freed. The pointer will be set to NULL. + * @note passing NULL is a no-op. + *) +procedure av_packet_free(pkt: PPAVPacket); + cdecl; external av__codec; + +(* + * Initialize optional fields of a packet with default values. + * + * Note, this does not touch the data and size members, which have to be + * initialized separately. + * + * @param pkt packet + *) +procedure av_init_packet(var pkt: TAVPacket); + cdecl; external av__codec; + +(* + * Allocate the payload of a packet and initialize its fields with + * default values. + * + * @param pkt packet + * @param size wanted payload size + * @return 0 if OK, AVERROR_xxx otherwise + *) +function av_new_packet(pkt: PAVPacket; size: cint): cint; + cdecl; external av__codec; + +(* + * Reduce packet size, correctly zeroing padding + * + * @param pkt packet + * @param size new size + *) +procedure av_shrink_packet(pkt: PAVPacket; size: cint); + cdecl; external av__codec; + +(** + * Increase packet size, correctly zeroing padding + * + * @param pkt packet + * @param grow_by number of bytes by which to increase the size of the packet + *) +function av_grow_packet(pkt: PAVPacket; grow_by: cint): cint; + cdecl; external av__codec; + +(** + * Initialize a reference-counted packet from av_malloc()ed data. + * + * @param pkt packet to be initialized. This function will set the data, size, + * buf and destruct fields, all others are left untouched. + * @param data Data allocated by av_malloc() to be used as packet data. If this + * function returns successfully, the data is owned by the underlying AVBuffer. + * The caller may not access the data through other means. + * @param size size of data in bytes, without the padding. I.e. the full buffer + * size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE. + * + * @return 0 on success, a negative AVERROR on error + *) +function av_packet_from_data(pkt: PAVPacket; data: PByte; size: cint): cint; + cdecl; external av__codec; + +{$IFDEF FF_API_AVPACKET_OLD_API} +(* + * @warning This is a hack - the packet memory allocation stuff is broken. The + * packet is allocated if it was not really allocated. + * + * @deprecated Use av_packet_ref + *) +function av_dup_packet(pkt: PAVPacket): cint; + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * Copy packet, including contents + * + * @return 0 on success, negative AVERROR on fail + *) +function av_copy_packet(dst: PAVPacket; src: {const} PAVPacket): cint; + cdecl; external av__codec; + +(** + * Copy packet side data + * + * @return 0 on success, negative AVERROR on fail + *) +function av_copy_packet_side_data(dst: PAVPacket; src: {const} PAVPacket): cint; + cdecl; external av__codec; + +(* + * Free a packet. + * + * @deprecated Use av_packet_unref + * + * @param pkt packet to free + *) +procedure av_free_packet(pkt: PAVPacket); + cdecl; external av__codec; deprecated; + +(** + * Allocate new information of a packet. + * + * @param pkt packet + * @param type side information type + * @param size side information size + * @return pointer to fresh allocated data or NULL otherwise + *) +function av_packet_new_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + size: cint): PByte; + cdecl; external av__codec; + +(** + * Wrap an existing array as a packet side data. + * + * @param pkt packet + * @param type side information type + * @param data the side data array. It must be allocated with the av_malloc() + * family of functions. The ownership of the data is transferred to + * pkt. + * @param size side information size + * @return a non-negative number on success, a negative AVERROR code on + * failure. On failure, the packet is unchanged and the data remains + * owned by the caller. + *) +function av_packet_add_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + data: Pcuint8; size: size_t): cint; + cdecl; external av__codec; + +(** + * Shrink the already allocated side data buffer + * + * @param pkt packet + * @param type side information type + * @param size new side information size + * @return 0 on success, < 0 on failure + *) +function av_packet_shrink_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + size: cint): cint; + cdecl; external av__codec; + +(** + * Get side information from packet. + * + * @param pkt packet + * @param type desired side information type + * @param size pointer for side information size to store (optional) + * @return pointer to data if present or NULL otherwise + *) +function av_packet_get_side_data(pkt: PAVPacket; type_: TAVPacketSideDataType; + size: Pcint): PByte; + cdecl; external av__codec; + +function av_packet_merge_side_data(pkt: PAVPacket): cint; + cdecl; external av__codec; + +function av_packet_split_side_data(pkt: PAVPacket): cint; + cdecl; external av__codec; + +function av_packet_side_data_name(type_: TAVPacketSideDataType): PAnsiChar; + cdecl; external av__codec; + +(** + * Pack a dictionary for use in side_data. + * + * @param dict The dictionary to pack. + * @param size pointer to store the size of the returned data + * @return pointer to data if successful, NULL otherwise + *) +function av_packet_pack_dictionary(dict: PAVDictionary; size: PCuint): PByte; + cdecl; external av__codec; + +(** + * Unpack a dictionary from side_data. + * + * @param data data from side_data + * @param size size of the data + * @param dict the metadata storage dictionary + * @return 0 on success, < 0 on failure + *) +function av_packet_unpack_dictionary(data: {const} PByte; size: cint; dict: PPAVDictionary): cint; + cdecl; external av__codec; + +(** + * Convenience function to free all the side data stored. + * All the other fields stay untouched. + * + * @param pkt packet + *) +procedure av_packet_free_side_data(pkt: PAVPacket); + cdecl; external av__codec; + +(** + * Setup a new reference to the data described by a given packet + * + * If src is reference-counted, setup dst as a new reference to the + * buffer in src. Otherwise allocate a new buffer in dst and copy the + * data from src into it. + * + * All the other fields are copied from src. + * + * @see av_packet_unref + * + * @param dst Destination packet + * @param src Source packet + * + * @return 0 on success, a negative AVERROR on error. + *) +function av_packet_ref(dst: PAVPacket; src: {const} PAVPacket): cint; + cdecl; external av__codec; + +(** + * Wipe the packet. + * + * Unreference the buffer referenced by the packet and reset the + * remaining packet fields to their default values. + * + * @param pkt The packet to be unreferenced. + *) +procedure av_packet_unref(pkt: PAVPacket); + cdecl; external av__codec; + +(** + * Move every field in src to dst and reset src. + * + * @see av_packet_unref + * + * @param src Source packet, will be reset + * @param dst Destination packet + *) +procedure av_packet_move_ref(dst: PAVPacket; src: PAVPacket); + cdecl; external av__codec; + +(** + * Copy only "properties" fields from src to dst. + * + * Properties for the purpose of this function are all the fields + * beside those related to the packet data (buf, data, size) + * + * @param dst Destination packet + * @param src Source packet + * + * @return 0 on success AVERROR on failure. + * + *) +function av_packet_copy_props(dst: PAVPacket; src: {const} PAVPacket): cint; + cdecl; external av__codec; + +(** + * Convert valid timing fields (timestamps / durations) in a packet from one + * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be + * ignored. + * + * @param pkt packet on which the conversion will be performed + * @param tb_src source timebase, in which the timing fields in pkt are + * expressed + * @param tb_dst destination timebase, to which the timing fields will be + * converted + *) +procedure av_packet_rescale_ts(pkt: PAVPacket; tb_src, tb_dst: TAVRational); + cdecl; external av__codec; + +(** + * @ + *) + +(** + * @addtogroup lavc_decoding + * @ + *) + +(** + * Find a registered decoder with a matching codec ID. + * + * @param id CodecID of the requested decoder + * @return A decoder if one was found, NULL otherwise. + *) +function avcodec_find_decoder(id: TAVCodecID): PAVCodec; + cdecl; external av__codec; + +(** + * Find a registered decoder with the specified name. + * + * @param name name of the requested decoder + * @return A decoder if one was found, NULL otherwise. + *) +function avcodec_find_decoder_by_name(name: PAnsiChar): PAVCodec; + cdecl; external av__codec; + +(** + * The default callback for AVCodecContext.get_buffer2(). It is made public so + * it can be called by custom get_buffer2() implementations for decoders without + * AV_CODEC_CAP_DR1 set. + *) +function avcodec_default_get_buffer2(s: PAVCodecContext; frame: PAVFrame; flags: cint): cint; + cdecl; external av__codec; + +{$IFDEF FF_API_EMU_EDGE} +(** + * Return the amount of padding in pixels which the get_buffer callback must + * provide around the edge of the image for codecs which do not have the + * CODEC_FLAG_EMU_EDGE flag. + * + * @return Required padding in pixels. + * + * @deprecated CODEC_FLAG_EMU_EDGE is deprecated, so this function is no longer + * needed + *) +function avcodec_get_edge_width(): cuint; + cdecl; external av__codec; +{$ENDIF} + +(** + * Modify width and height values so that they will result in a memory + * buffer that is acceptable for the codec if you do not use any horizontal + * padding. + * + * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. + *) +procedure avcodec_align_dimensions(s: PAVCodecContext; width: PCint; height: PCint); + cdecl; external av__codec; + +(** + * Modifiy width and height values so that they will result in a memory + * buffer that is acceptable for the codec if you also ensure that all + * line sizes are a multiple of the respective linesize_align[i]. + * + * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened. + *) +procedure avcodec_align_dimensions2(s: PAVCodecContext; width: PCint; height: PCint; + linesize_align: PAVNDPArray); + cdecl; external av__codec; + +(** + * Decode the audio frame of size avpkt->size from avpkt->data into frame. + * + * Some decoders may support multiple frames in a single AVPacket. Such + * decoders would then just decode the first frame and the return value would be + * less than the packet size. In this case, avcodec_decode_audio4 has to be + * called again with an AVPacket containing the remaining data in order to + * decode the second frame, etc... Even if no frames are returned, the packet + * needs to be fed to the decoder with remaining data until it is completely + * consumed or an error occurs. + * + * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input + * and output. This means that for some packets they will not immediately + * produce decoded output and need to be flushed at the end of decoding to get + * all the decoded data. Flushing is done by calling this function with packets + * with avpkt->data set to NULL and avpkt->size set to 0 until it stops + * returning samples. It is safe to flush even those decoders that are not + * marked with AV_CODEC_CAP_DELAY, then no samples will be returned. + * + * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE + * larger than the actual read bytes because some optimized bitstream + * readers read 32 or 64 bits at once and could read over the end. + * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * + * @param avctx the codec context + * @param[out] frame The AVFrame in which to store decoded audio samples. + * The decoder will allocate a buffer for the decoded frame by + * calling the AVCodecContext.get_buffer2() callback. + * When AVCodecContext.refcounted_frames is set to 1, the frame is + * reference counted and the returned reference belongs to the + * caller. The caller must release the frame using av_frame_unref() + * when the frame is no longer needed. The caller may safely write + * to the frame if av_frame_is_writable() returns 1. + * When AVCodecContext.refcounted_frames is set to 0, the returned + * reference belongs to the decoder and is valid only until the + * next call to this function or until closing or flushing the + * decoder. The caller may not write to it. + * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is + * non-zero. Note that this field being set to zero + * does not mean that an error has occurred. For + * decoders with AV_CODEC_CAP_DELAY set, no given decode + * call is guaranteed to produce a frame. + * @param[in] avpkt The input AVPacket containing the input buffer. + * At least avpkt->data and avpkt->size should be set. Some + * decoders might also require additional fields to be set. + * @return A negative error code is returned if an error occurred during + * decoding, otherwise the number of bytes consumed from the input + * AVPacket is returned. + * + * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). + *) +function avcodec_decode_audio4(avctx: PAVCodecContext; frame: PAVFrame; + got_frame_ptr: Pcint; avpkt: PAVPacket): cint; + cdecl; external av__codec; deprecated; + +(** + * Decode the video frame of size avpkt->size from avpkt->data into picture. + * Some decoders may support multiple frames in a single AVPacket, such + * decoders would then just decode the first frame. + * + * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than + * the actual read bytes because some optimized bitstream readers read 32 or 64 + * bits at once and could read over the end. + * + * @warning The end of the input buffer buf should be set to 0 to ensure that + * no overreading happens for damaged MPEG streams. + * + * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay + * between input and output, these need to be fed with avpkt->data=NULL, + * avpkt->size=0 at the end to return the remaining frames. + * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * + * @param avctx the codec context + * @param[out] picture The AVFrame in which the decoded video frame will be stored. + * Use av_frame_alloc() to get an AVFrame. The codec will + * allocate memory for the actual bitmap by calling the + * AVCodecContext.get_buffer2() callback. + * When AVCodecContext.refcounted_frames is set to 1, the frame is + * reference counted and the returned reference belongs to the + * caller. The caller must release the frame using av_frame_unref() + * when the frame is no longer needed. The caller may safely write + * to the frame if av_frame_is_writable() returns 1. + * When AVCodecContext.refcounted_frames is set to 0, the returned + * reference belongs to the decoder and is valid only until the + * next call to this function or until closing or flushing the + * decoder. The caller may not write to it. + * + * @param[in] avpkt The input AVPacket containing the input buffer. + * You can create such packet with av_init_packet() and by then setting + * data and size, some decoders might in addition need other fields like + * flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least + * fields possible. + * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero. + * @return On error a negative value is returned, otherwise the number of bytes + * used or zero if no frame could be decompressed. + * + * @deprecated Use avcodec_send_packet() and avcodec_receive_frame(). + *) +function avcodec_decode_video2(avctx: PAVCodecContext; picture: PAVFrame; + var got_picture_ptr: cint; + avpkt: {const} PAVPacket): cint; + cdecl; external av__codec; deprecated; + +(* + * Decode a subtitle message. + * Return a negative value on error, otherwise return the number of bytes used. + * If no subtitle could be decompressed, got_sub_ptr is zero. + * Otherwise, the subtitle is stored in *sub. + * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for + * simplicity, because the performance difference is expect to be negligible + * and reusing a get_buffer written for video codecs would probably perform badly + * due to a potentially very different allocation pattern. + * + * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input + * and output. This means that for some packets they will not immediately + * produce decoded output and need to be flushed at the end of decoding to get + * all the decoded data. Flushing is done by calling this function with packets + * with avpkt->data set to NULL and avpkt->size set to 0 until it stops + * returning subtitles. It is safe to flush even those decoders that are not + * marked with CODEC_CAP_DELAY, then no subtitles will be returned. + * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * + * @param avctx the codec context + * @param[out] sub The Preallocated AVSubtitle in which the decoded subtitle will be stored, + * must be freed with avsubtitle_free if *got_sub_ptr is set. + * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero. + * @param[in] avpkt The input AVPacket containing the input buffer. + *) +function avcodec_decode_subtitle2(avctx: PAVCodecContext; sub: PAVSubtitle; + var got_sub_ptr: cint; + avpkt: PAVPacket): cint; + cdecl; external av__codec; + +(** + * Supply raw packet data as input to a decoder. + * + * Internally, this call will copy relevant AVCodecContext fields, which can + * influence decoding per-packet, and apply them when the packet is actually + * decoded. (For example AVCodecContext.skip_frame, which might direct the + * decoder to drop the frame contained by the packet sent with this function.) + * + * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE + * larger than the actual read bytes because some optimized bitstream + * readers read 32 or 64 bits at once and could read over the end. + * + * @warning Do not mix this API with the legacy API (like avcodec_decode_video2()) + * on the same AVCodecContext. It will return unexpected results now + * or in future libavcodec versions. + * + * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() + * before packets may be fed to the decoder. + * + * @param avctx codec context + * @param[in] avpkt The input AVPacket. Usually, this will be a single video + * frame, or several complete audio frames. + * Ownership of the packet remains with the caller, and the + * decoder will not write to the packet. The decoder may create + * a reference to the packet data (or copy it if the packet is + * not reference-counted). + * Unlike with older APIs, the packet is always fully consumed, + * and if it contains multiple frames (e.g. some audio codecs), + * will require you to call avcodec_receive_frame() multiple + * times afterwards before you can send a new packet. + * It can be NULL (or an AVPacket with data set to NULL and + * size set to 0); in this case, it is considered a flush + * packet, which signals the end of the stream. Sending the + * first flush packet will return success. Subsequent ones are + * unnecessary and will return AVERROR_EOF. If the decoder + * still has frames buffered, it will return them after sending + * a flush packet. + * + * @return 0 on success, otherwise negative error code: + * AVERROR(EAGAIN): input is not accepted right now - the packet must be + * resent after trying to read output + * AVERROR_EOF: the decoder has been flushed, and no new packets can + * be sent to it (also returned if more than 1 flush + * packet is sent) + * AVERROR(EINVAL): codec not opened, it is an encoder, or requires flush + * AVERROR(ENOMEM): failed to add packet to internal queue, or similar + * other errors: legitimate decoding errors + *) +function avcodec_send_packet(avctx: PAVCodecContext; avpkt: {const} PAVPacket): cint; + cdecl; external av__codec; + +(** + * Return decoded output data from a decoder. + * + * @param avctx codec context + * @param frame This will be set to a reference-counted video or audio + * frame (depending on the decoder type) allocated by the + * decoder. Note that the function will always call + * av_frame_unref(frame) before doing anything else. + * + * @return + * 0: success, a frame was returned + * AVERROR(EAGAIN): output is not available right now - user must try + * to send new input + * AVERROR_EOF: the decoder has been fully flushed, and there will be + * no more output frames + * AVERROR(EINVAL): codec not opened, or it is an encoder + * other negative values: legitimate decoding errors + *) +function avcodec_receive_frame(avctx: PAVCodecContext; frame: PAVFrame): cint; + cdecl; external av__codec; + +(** + * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet() + * to retrieve buffered output packets. + * + * @param avctx codec context + * @param[in] frame AVFrame containing the raw audio or video frame to be encoded. + * Ownership of the frame remains with the caller, and the + * encoder will not write to the frame. The encoder may create + * a reference to the frame data (or copy it if the frame is + * not reference-counted). + * It can be NULL, in which case it is considered a flush + * packet. This signals the end of the stream. If the encoder + * still has packets buffered, it will return them after this + * call. Once flushing mode has been entered, additional flush + * packets are ignored, and sending frames will return + * AVERROR_EOF. + * + * For audio: + * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame + * can have any number of samples. + * If it is not set, frame->nb_samples must be equal to + * avctx->frame_size for all frames except the last. + * The final frame may be smaller than avctx->frame_size. + * @return 0 on success, otherwise negative error code: + * AVERROR(EAGAIN): input is not accepted right now - the frame must be + * resent after trying to read output packets + * AVERROR_EOF: the encoder has been flushed, and no new frames can + * be sent to it + * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a + * decoder, or requires flush + * AVERROR(ENOMEM): failed to add packet to internal queue, or similar + * other errors: legitimate decoding errors + *) +function avcodec_send_frame(avctx: PAVCodecContext; frame: {const} PAVFrame): cint; + cdecl; external av__codec; + +(** + * Read encoded data from the encoder. + * + * @param avctx codec context + * @param avpkt This will be set to a reference-counted packet allocated by the + * encoder. Note that the function will always call + * av_frame_unref(frame) before doing anything else. + * @return 0 on success, otherwise negative error code: + * AVERROR(EAGAIN): output is not available right now - user must try + * to send input + * AVERROR_EOF: the encoder has been fully flushed, and there will be + * no more output packets + * AVERROR(EINVAL): codec not opened, or it is an encoder + * other errors: legitimate decoding errors + *) +function avcodec_receive_packet(avctx: PAVCodecContext; avpkt: PAVPacket): cint; + cdecl; external av__codec; + +(** + * @defgroup lavc_parsing Frame parsing + * @ + *) + +type + TAVPictureStructure = ( + AV_PICTURE_STRUCTURE_UNKNOWN, //< unknown + AV_PICTURE_STRUCTURE_TOP_FIELD, //< coded as top field + AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field + AV_PICTURE_STRUCTURE_FRAME //< coded as frame + ); + +const + AV_PARSER_PTS_NB = 4; + PARSER_FLAG_COMPLETE_FRAMES = $0001; + PARSER_FLAG_ONCE = $0002; +/// Set if the parser has a valid file offset + PARSER_FLAG_FETCHED_OFFSET = $0004; + PARSER_FLAG_USE_CODEC_TS = $1000; + +type + (* frame parsing *) + PAVCodecParserContext = ^TAVCodecParserContext; + PAVCodecParser = ^TAVCodecParser; + + TAVCodecParserContext = record + priv_data: pointer; + parser: PAVCodecParser; + frame_offset: cint64; (* offset of the current frame *) + cur_offset: cint64; (* current offset (incremented by each av_parser_parse()) *) + next_frame_offset: cint64; (* offset of the next frame *) + (* video info *) + pict_type: cint; (* XXX: put it back in AVCodecContext *) + (** + * This field is used for proper frame duration computation in lavf. + * It signals, how much longer the frame duration of the current frame + * is compared to normal frame duration. + * + * frame_duration = (1 + repeat_pict) * time_base + * + * It is used by codecs like H.264 to display telecined material. + *) + repeat_pict: cint; (* XXX: put it back in AVCodecContext *) + pts: cint64; (* pts of the current frame *) + dts: cint64; (* dts of the current frame *) + + (* private data *) + last_pts: cint64; + last_dts: cint64; + fetch_timestamp: cint; + + cur_frame_start_index: cint; + cur_frame_offset: array [0..AV_PARSER_PTS_NB - 1] of cint64; + cur_frame_pts: array [0..AV_PARSER_PTS_NB - 1] of cint64; + cur_frame_dts: array [0..AV_PARSER_PTS_NB - 1] of cint64; + + flags: cint; + + offset: cint64; ///< byte offset from starting packet start + cur_frame_end: array [0..AV_PARSER_PTS_NB - 1] of cint64; + + (** + * Set by parser to 1 for key frames and 0 for non-key frames. + * It is initialized to -1, so if the parser doesn't set this flag, + * old-style fallback using FF_I_TYPE picture type as key frames + * will be used. + *) + key_frame: cint; + +{$IFDEF FF_API_CONVERGENCE_DURATION} + (** + * @deprecated unused + *) + convergence_duration: cint64; {deprecated} +{$ENDIF} + + // Timestamp generation support: + (** + * Synchronization point for start of timestamp generation. + * + * Set to >0 for sync point, 0 for no sync point and <0 for undefined + * (default). + * + * For example, this corresponds to presence of H.264 buffering period + * SEI message. + *) + dts_sync_point: cint; + + (** + * Offset of the current timestamp against last timestamp sync point in + * units of AVCodecContext.time_base. + * + * Set to INT_MIN when dts_sync_point unused. Otherwise, it must + * contain a valid timestamp offset. + * + * Note that the timestamp of sync point has usually a nonzero + * dts_ref_dts_delta, which refers to the previous sync point. Offset of + * the next frame after timestamp sync point will be usually 1. + * + * For example, this corresponds to H.264 cpb_removal_delay. + *) + dts_ref_dts_delta: cint; + + (** + * Presentation delay of current frame in units of AVCodecContext.time_base. + * + * Set to INT_MIN when dts_sync_point unused. Otherwise, it must + * contain valid non-negative timestamp delta (presentation time of a frame + * must not lie in the past). + * + * This delay represents the difference between decoding and presentation + * time of the frame. + * + * For example, this corresponds to H.264 dpb_output_delay. + *) + pts_dts_delta: cint; + + (** + * Position of the packet in file. + * + * Analogous to cur_frame_pts/dts + *) + cur_frame_pos: array [0..AV_PARSER_PTS_NB - 1] of cint64; + + (** + * Byte position of currently parsed frame in stream. + *) + pos: cint64; + + (** + * Previous frame byte position. + *) + last_pos: cint64; + + (** + * Duration of the current frame. + * For audio, this is in units of 1 / AVCodecContext.sample_rate. + * For all other types, this is in units of AVCodecContext.time_base. + *) + duration: cint; + + field_order: TAVFieldOrder; + + (** + * Indicate whether a picture is coded as a frame, top field or bottom field. + * + * For example, H.264 field_pic_flag equal to 0 corresponds to + * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag + * equal to 1 and bottom_field_flag equal to 0 corresponds to + * AV_PICTURE_STRUCTURE_TOP_FIELD. + *) + picture_structure: TAVPictureStructure; + + (** + * Picture number incremented in presentation or output order. + * This field may be reinitialized at the first picture of a new sequence. + * + * For example, this corresponds to H.264 PicOrderCnt. + *) + output_picture_number: cint; + + (** + * Dimensions of the decoded video intended for presentation. + *) + width: cint; + height: cint; + + (** + * Dimensions of the coded video. + *) + coded_width: cint; + coded_height: cint; + + (** + * The format of the coded data, corresponds to enum AVPixelFormat for video + * and for enum AVSampleFormat for audio. + * + * Note that a decoder can have considerable freedom in how exactly it + * decodes the data, so the format reported here might be different from the + * one returned by a decoder. + *) + format: cint; + end; {AVCodecParserContext} + + TAVCodecParser = record + codec_ids: array [0..4] of cint; (* several codec IDs are permitted *) + priv_data_size: cint; + parser_init: function(s: PAVCodecParserContext): cint; cdecl; + (* This callback never returns an error, a negative value means that + * the frame start was in a previous packet. *) + parser_parse: function(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: {const} PPointer; poutbuf_size: PCint; + buf: {const} PByteArray; buf_size: cint): cint; cdecl; + parser_close: procedure(s: PAVCodecParserContext); cdecl; + split: function(avctx: PAVCodecContext; buf: {const} PByteArray; + buf_size: cint): cint; cdecl; + next: PAVCodecParser; + end; {AVCodecParser} + +function av_parser_next(c: {const} PAVCodecParser): PAVCodecParser; + cdecl; external av__codec; + +procedure av_register_codec_parser(parser: PAVCodecParser); + cdecl; external av__codec; + +function av_parser_init(codec_id: cint): PAVCodecParserContext; + cdecl; external av__codec; + +(** + * Parse a packet. + * + * @param s parser context. + * @param avctx codec context. + * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished. + * @param poutbuf_size set to size of parsed buffer or zero if not yet finished. + * @param buf input buffer. + * @param buf_size buffer size in bytes without the padding. I.e. the full buffer + size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE. + To signal EOF, this should be 0 (so that the last frame + can be output). + * @param pts input presentation timestamp. + * @param dts input decoding timestamp. + * @param pos input byte position in stream. + * @return the number of bytes of the input bitstream used. + * + * Example: + * @code + * while (in_len) do + * begin + * len := av_parser_parse2(myparser, AVCodecContext, data, size, + * in_data, in_len, + * pts, dts, pos); + * in_data := in_data + len; + * in_len := in_len - len; + * + * if (size) then + * decode_frame(data, size); + * end; + * @endcode + *) +function av_parser_parse2(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; + poutbuf_size: PCint; + buf: {const} PByteArray; + buf_size: cint; + pts: cint64; + dts: cint64; + pos: cint64): cint; + cdecl; external av__codec; + +(** + * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed + * @deprecated use AVBitStreamFilter + *) +function av_parser_change(s: PAVCodecParserContext; + avctx: PAVCodecContext; + poutbuf: PPointer; poutbuf_size: PCint; + buf: {const} PByteArray; buf_size: cint; keyframe: cint): cint; + cdecl; external av__codec; + +procedure av_parser_close(s: PAVCodecParserContext); + cdecl; external av__codec; + +(** + * @} + * @} + *) + +(** + * @addtogroup lavc_encoding + * @{ + *) + +(** + * Find a registered encoder with a matching codec ID. + * + * @param id AVCodecID of the requested encoder + * @return An encoder if one was found, NULL otherwise. + *) +function avcodec_find_encoder(id: TAVCodecID): PAVCodec; + cdecl; external av__codec; + +(** + * Find a registered encoder with the specified name. + * + * @param name name of the requested encoder + * @return An encoder if one was found, NULL otherwise. + *) +function avcodec_find_encoder_by_name(name: PAnsiChar): PAVCodec; + cdecl; external av__codec; + +(** + * Encode a frame of audio. + * + * Takes input samples from frame and writes the next output packet, if + * available, to avpkt. The output packet does not necessarily contain data for + * the most recent frame, as encoders can delay, split, and combine input frames + * internally as needed. + * + * @param avctx codec context + * @param avpkt output AVPacket. + * The user can supply an output buffer by setting + * avpkt->data and avpkt->size prior to calling the + * function, but if the size of the user-provided data is not + * large enough, encoding will fail. If avpkt->data and + * avpkt->size are set, avpkt->destruct must also be set. All + * other AVPacket fields will be reset by the encoder using + * av_init_packet(). If avpkt->data is NULL, the encoder will + * allocate it. The encoder will set avpkt->size to the size + * of the output packet. + * + * If this function fails or produces no output, avpkt will be + * freed using av_packet_unref(). + * @param[in] frame AVFrame containing the raw audio data to be encoded. + * May be NULL when flushing an encoder that has the + * AV_CODEC_CAP_DELAY capability set. + * If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame + * can have any number of samples. + * If it is not set, frame->nb_samples must be equal to + * avctx->frame_size for all frames except the last. + * The final frame may be smaller than avctx->frame_size. + * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the + * output packet is non-empty, and to 0 if it is + * empty. If the function returns an error, the + * packet can be assumed to be invalid, and the + * value of got_packet_ptr is undefined and should + * not be used. + * @return 0 on success, negative error code on failure + * + * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead + *) +function avcodec_encode_audio2(avctx: PAVCodecContext; avpkt: PAVPacket; + frame: {const} PAVFrame; got_packet_ptr: Pcint): cint; + cdecl; external av__codec; deprecated; + +(** + * Encode a frame of video. + * + * Takes input raw video data from frame and writes the next output packet, if + * available, to avpkt. The output packet does not necessarily contain data for + * the most recent frame, as encoders can delay and reorder input frames + * internally as needed. + * + * @param avctx codec context + * @param avpkt output AVPacket. + * The user can supply an output buffer by setting + * avpkt->data and avpkt->size prior to calling the + * function, but if the size of the user-provided data is not + * large enough, encoding will fail. All other AVPacket fields + * will be reset by the encoder using av_init_packet(). If + * avpkt->data is NULL, the encoder will allocate it. + * The encoder will set avpkt->size to the size of the + * output packet. The returned data (if any) belongs to the + * caller, he is responsible for freeing it. + * + * If this function fails or produces no output, avpkt will be + * freed using av_packet_unref(). + * @param[in] frame AVFrame containing the raw video data to be encoded. + * May be NULL when flushing an encoder that has the + * AV_CODEC_CAP_DELAY capability set. + * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the + * output packet is non-empty, and to 0 if it is + * empty. If the function returns an error, the + * packet can be assumed to be invalid, and the + * value of got_packet_ptr is undefined and should + * not be used. + * @return 0 on success, negative error code on failure + * + * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead + *) +function avcodec_encode_video2(avctx: PAVCodecContext; avpkt: PAVPacket; + frame: {const} PAVFrame; got_packet_ptr: Pcint): cint; + cdecl; external av__codec; deprecated; + +function avcodec_encode_subtitle(avctx: PAVCodecContext; buf: PByteArray; + buf_size: cint; sub: {const} PAVSubtitle): cint; + cdecl; external av__codec; + +(** + * @} + *) + +{$IFDEF FF_API_AVCODEC_RESAMPLE} +(** + * @defgroup lavc_resample Audio resampling + * @ingroup libavc + * @deprecated use libswresample instead + * + * @{ + *) +type + PReSampleContext = pointer; + PAVResampleContext = pointer; + PImgReSampleContext = pointer; + +(** + * Initialize audio resampling context. + * + * @param output_channels number of output channels + * @param input_channels number of input channels + * @param output_rate output sample rate + * @param input_rate input sample rate + * @param sample_fmt_out requested output sample format + * @param sample_fmt_in input sample format + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff frequency + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear if 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + * @return allocated ReSampleContext, NULL if error occurred + *) + function av_audio_resample_init(output_channels: cint; input_channels: cint; + output_rate: cint; input_rate: cint; + sample_fmt_out: TAVSampleFormat; + sample_fmt_in: TAVSampleFormat; + filter_length: cint; log2_phase_count: cint; + linear: cint; cutoff: cdouble): PReSampleContext; + cdecl; external av__codec; deprecated; + +function audio_resample (s: PReSampleContext; output: PSmallint; input: PSmallint; nb_samples: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * Free resample context. + * + * @param s a non-NULL pointer to a resample context previously + * created with av_audio_resample_init() + *) +procedure audio_resample_close (s: PReSampleContext); + cdecl; external av__codec; deprecated; + +(** + * Initialize an audio resampler. + * Note, if either rate is not an integer then simply scale both rates up so they are. + * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq + * @param log2_phase_count log2 of the number of entries in the polyphase filterbank + * @param linear If 1 then the used FIR filter will be linearly interpolated + between the 2 closest, if 0 the closest will be used + * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate + *) +function av_resample_init (out_rate: cint; in_rate: cint; filter_length: cint; + log2_phase_count: cint; linear: cint; cutoff: cdouble): PAVResampleContext; + cdecl; external av__codec; deprecated; + +(** + * Resample an array of samples using a previously configured context. + * @param src an array of unconsumed samples + * @param consumed the number of samples of src which have been consumed are returned here + * @param src_size the number of unconsumed samples available + * @param dst_size the amount of space in samples available in dst + * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. + * @return the number of samples written in dst or -1 if an error occurred + *) +function av_resample (c: PAVResampleContext; dst: PSmallint; src: PSmallint; var consumed: cint; + src_size: cint; dst_size: cint; update_ctx: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * Compensate samplerate/timestamp drift. The compensation is done by changing + * the resampler parameters, so no audible clicks or similar distortions occur + * @param compensation_distance distance in output samples over which the compensation should be performed + * @param sample_delta number of output samples which should be output less + * + * example: av_resample_compensate(c, 10, 500) + * here instead of 510 samples only 500 samples would be output + * + * note, due to rounding the actual compensation might be slightly different, + * especially if the compensation_distance is large and the in_rate used during init is small + *) +procedure av_resample_compensate (c: PAVResampleContext; sample_delta: cint; + compensation_distance: cint); + cdecl; external av__codec; deprecated; + +procedure av_resample_close (c: PAVResampleContext); + cdecl; external av__codec; deprecated; + +(** + * @} + *) +{$ENDIF} + +{$IFDEF FF_API_AVPICTURE} +(** + * @addtogroup lavc_picture + * @{ + *) + +(** + * @deprecated unused + *) +function avpicture_alloc (picture: PAVPicture; pix_fmt: TAVPixelFormat; + width: cint; height: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated unused + *) +procedure avpicture_free (picture: PAVPicture); + cdecl; external av__codec; deprecated; + +(** + * @deprecated use av_image_fill_arrays() instead. + *) +function avpicture_fill (picture: PAVPicture; ptr: pcuint8; + pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated use av_image_copy_to_buffer() instead. + *) +function avpicture_layout (src: {const} PAVPicture; pix_fmt: TAVPixelFormat; + width: cint; height: cint; + dest: PByteArray; dest_size: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated use av_image_get_buffer_size() instead. + *) +function avpicture_get_size (pix_fmt: TAVPixelFormat; width: cint; height: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated av_image_copy() instead. + *) +procedure av_picture_copy(dst: PAVPicture; src: {const} PAVPicture; + pix_fmt: TAVPixelFormat; width: cint; height: cint); + cdecl; external av__codec; deprecated; + +(** + * @deprecated unused + *) +function av_picture_crop(dst: PAVPicture; src: {const} PAVPicture; + pix_fmt: TAVPixelFormat; top_band: cint; left_band: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * @deprecated unused + *) +function av_picture_pad(dst: PAVPicture; src: {const} PAVPicture; + height: cint; width: cint; pix_fmt: TAVPixelFormat; + padtop: cint; padbottom: cint; padleft: cint; + padright: cint; color: PCint): cint; + cdecl; external av__codec; deprecated; + +(** + * @} + *) +{$ENDIF} + +(** + * @defgroup lavc_misc Utility functions + * @ingroup libavc + * + * Miscellaneous utility functions related to both encoding and decoding + * (or neither). + * @ + *) + +(** + * @defgroup lavc_misc_pixfmt Pixel formats + * + * Functions for working with pixel formats. + * @ + *) + +(** + * Utility function to access log2_chroma_w log2_chroma_h from + * the pixel format AVPixFmtDescriptor. + * + * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample + * for one that returns a failure code and continues in case of invalid + * pix_fmts. + * + * @param[in] pix_fmt the pixel format + * @param[out] h_shift store log2_chroma_w + * @param[out] v_shift store log2_chroma_h + * + * @see av_pix_fmt_get_chroma_sub_sample + *) + +procedure avcodec_get_chroma_sub_sample (pix_fmt: TAVPixelFormat; var h_shift: cint; var v_shift: cint); + cdecl; external av__codec; + +(** + * Return a value representing the fourCC code associated to the + * pixel format pix_fmt, or 0 if no associated fourCC code can be + * found. + *) +function avcodec_pix_fmt_to_codec_tag(pix_fmt: TAVPixelFormat): cuint; + cdecl; external av__codec; + +(** + * @deprecated see av_get_pix_fmt_loss() + *) +function avcodec_get_pix_fmt_loss (dst_pix_fmt: TAVPixelFormat; src_pix_fmt: TAVPixelFormat; + has_alpha: cint): cint; + cdecl; external av__codec; + +(** + * Find the best pixel format to convert to given a certain source pixel + * format. When converting from one pixel format to another, information loss + * may occur. For example, when converting from RGB24 to GRAY, the color + * information will be lost. Similarly, other losses occur when converting from + * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of + * the given pixel formats should be used to suffer the least amount of loss. + * The pixel formats from which it chooses one, are determined by the + * pix_fmt_list parameter. + * + * + * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from + * @param[in] src_pix_fmt source pixel format + * @param[in] has_alpha Whether the source pixel format alpha channel is used. + * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur. + * @return The best pixel format to convert to or -1 if none was found. + *) +function avcodec_find_best_pix_fmt_of_list(pix_fmt_list: PAVPixelFormat; + src_pix_fmt: TAVPixelFormat; + has_alpha: cint; loss_ptr: Pcint): TAVPixelFormat; + cdecl; external av__codec; + +(** + * @deprecated see av_find_best_pix_fmt_of_2() + *) +function avcodec_find_best_pix_fmt_of_2(dst_pix_fmt1: TAVPixelFormat; dst_pix_fmt2: TAVPixelFormat; + src_pix_fmt: TAVPixelFormat; has_alpha: cint; loss_ptr: Pcint): TAVPixelFormat; + cdecl; external av__codec; + +function avcodec_find_best_pix_fmt2(dst_pix_fmt1: TAVPixelFormat; dst_pix_fmt2: TAVPixelFormat; + src_pix_fmt: TAVPixelFormat; has_alpha: cint; loss_ptr: Pcint): TAVPixelFormat; + cdecl; external av__codec; deprecated; + +function avcodec_default_get_format(s: PAVCodecContext; fmt: {const} PAVPixelFormat): TAVPixelFormat; + cdecl; external av__codec; + +(** + * @} + *) + +{$IFDEF FF_API_SET_DIMENSIONS} +(** + * @deprecated this function is not supposed to be used from outside of lavc + *) +procedure avcodec_set_dimensions(s: PAVCodecContext; width: cint; height: cint); + cdecl; external av__codec; +{$ENDIF} + +(* Put a string representing the codec tag codec_tag in buf. + * + * @param buf buffer to place codec tag in + * @param buf_size size in bytes of buf + * @param codec_tag codec tag to assign + * @return the length of the string that would have been generated if + * enough space had been available, excluding the trailing null + *) +function av_get_codec_tag_string(buf: PAnsiChar; buf_size: size_t; codec_tag: cuint): size_t; + cdecl; external av__codec; + +procedure avcodec_string(buf: PAnsiChar; buf_size: cint; enc: PAVCodecContext; encode: cint); + cdecl; external av__codec; + +(** + * Return a name for the specified profile, if available. + * + * @param codec the codec that is searched for the given profile + * @param profile the profile value for which a name is requested + * @return A name for the profile if found, NULL otherwise. + *) +function av_get_profile_name(codec: {const} PAVCodec; profile: cint): {const} PAnsiChar; + cdecl; external av__codec; + +(** + * Return a name for the specified profile, if available. + * + * @param codec_id the ID of the codec to which the requested profile belongs + * @param profile the profile value for which a name is requested + * @return A name for the profile if found, NULL otherwise. + * + * @note unlike av_get_profile_name(), which searches a list of profiles + * supported by a specific decoder or encoder implementation, this + * function searches the list of profiles from the AVCodecDescriptor + *) +function avcodec_profile_name(codec_id: TAVCodecID; profile: cint): {const} PChar; + cdecl; external av__codec; + +function avcodec_default_execute(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint; size: cint): cint; + cdecl; external av__codec; + +function avcodec_default_execute2(s: PAVCodecContext; func: TExecuteFunc; arg: Pointer; var ret: cint; count: cint): cint; + cdecl; external av__codec; +//FIXME func typedef + +(** + * Fill AVFrame audio data and linesize pointers. + * + * The buffer buf must be a preallocated buffer with a size big enough + * to contain the specified samples amount. The filled AVFrame data + * pointers will point to this buffer. + * + * AVFrame extended_data channel pointers are allocated if necessary for + * planar audio. + * + * @param frame the AVFrame + * frame->nb_samples must be set prior to calling the + * function. This function fills in frame->data, + * frame->extended_data, frame->linesize[0]. + * @param nb_channels channel count + * @param sample_fmt sample format + * @param buf buffer to use for frame data + * @param buf_size size of buffer + * @param align plane size sample alignment + * @return >=0 on success, negative error code on failure + * @todo return the size in bytes required to store the samples in + * case of success, at the next libavutil bump + *) +function avcodec_fill_audio_frame(frame: PAVFrame; nb_channels: cint; + sample_fmt: TAVSampleFormat; buf: {const} PByte; + buf_size: cint; align: cint): cint; + cdecl; external av__codec; + +(** + * Flush buffers, should be called when seeking or when switching to a different stream. + *) +procedure avcodec_flush_buffers(avctx: PAVCodecContext); + cdecl; external av__codec; + +(** + * Return codec bits per sample. + * + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. + *) +function av_get_bits_per_sample(codec_id: TAVCodecID): cint; + cdecl; external av__codec; + +(** + * Return the PCM codec associated with a sample format. + * @param be endianness, 0 for little, 1 for big, + * -1 (or anything else) for native + * @return AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE + *) +function av_get_pcm_codec(fmt: TAVSampleFormat; be: cint): TAVCodecID; + cdecl; external av__codec; + +(** + * Return codec bits per sample. + * Only return non-zero if the bits per sample is exactly correct, not an + * approximation. + * + * @param[in] codec_id the codec + * @return Number of bits per sample or zero if unknown for the given codec. + *) +function av_get_exact_bits_per_sample(codec_id: TAVCodecID): cint; + cdecl; external av__codec; + +(** + * Return audio frame duration. + * + * @param avctx codec context + * @param frame_bytes size of the frame, or 0 if unknown + * @return frame duration, in samples, if known. 0 if not able to + * determine. + *) +function av_get_audio_frame_duration(avctx: PAVCodecContext; frame_bytes: cint): cint; + cdecl; external av__codec; + +(** + * This function is the same as av_get_audio_frame_duration(), except it works + * with AVCodecParameters instead of an AVCodecContext. + *) +function av_get_audio_frame_duration2(par: PAVCodecParameters; frame_bytes: cint): cint; + cdecl; external av__codec; + +type +{$IFDEF FF_API_OLD_BSF} + PAVBitStreamFilterContext = ^TAVBitStreamFilterContext; + PAVBitStreamFilter = ^TAVBitStreamFilter; + + TAVBitStreamFilterContext = record + priv_data: pointer; + filter: PAVBitStreamFilter; + parser: PAVCodecParserContext; + next: PAVBitStreamFilterContext; + (** + * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter(). + * Not for access by library users. + *) + args: PChar; + end; +{$ENDIF} + + PAVBSFInternal = ^TAVBSFInternal; + TAVBSFInternal = record + end; + + (** + * The bitstream filter state. + * + * This struct must be allocated with av_bsf_alloc() and freed with + * av_bsf_free(). + * + * The fields in the struct will only be changed (by the caller or by the + * filter) as described in their documentation, and are to be considered + * immutable otherwise. + *) + PPAVBSFContext = ^PAVBSFContext; + PAVBSFContext = ^TAVBSFContext; + TAVBSFContext = record + (** + * A class for logging and AVOptions + *) + av_class: {const} PAVClass; + + (** + * The bitstream filter this context is an instance of. + *) + filter: {const} PAVBitStreamFilter; + + (** + * Opaque libavcodec internal data. Must not be touched by the caller in any + * way. + *) + internal: PAVBSFInternal; + + (** + * Opaque filter-specific private data. If filter->priv_class is non-NULL, + * this is an AVOptions-enabled struct. + *) + priv_data: pointer; + + (** + * Parameters of the input stream. Set by the caller before av_bsf_init(). + *) + par_in: PAVCodecParameters; + + (** + * Parameters of the output stream. Set by the filter in av_bsf_init(). + *) + par_out: PAVCodecParameters; + + (** + * The timebase used for the timestamps of the input packets. Set by the + * caller before av_bsf_init(). + *) + time_base_in: TAVRational; + + (** + * The timebase used for the timestamps of the output packets. Set by the + * filter in av_bsf_init(). + *) + time_base_out: TAVRational; + end; {TAVBSFContext} + + TAVBitStreamFilter = record + name: PAnsiChar; + + (** + * A list of codec ids supported by the filter, terminated by + * AV_CODEC_ID_NONE. + * May be NULL, in that case the bitstream filter works with any codec id. + *) + codec_ids: PAVCodecID; + + (** + * A class for the private data, used to declare bitstream filter private + * AVOptions. This field is NULL for bitstream filters that do not declare + * any options. + * + * If this field is non-NULL, the first member of the filter private data + * must be a pointer to AVClass, which will be set by libavcodec generic + * code to this class. + *) + priv_class: PAVClass; + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavcodec and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + + priv_data_size: cint; + init: function(ctx: PAVBSFContext): cint; cdecl; + filter: function(ctx: PAVBSFContext; pkt: PAVPacket): cint; cdecl; + close: procedure(ctx: PAVBSFContext); cdecl; + end; + + PPAVBSFList = ^PAVBSFList; + PAVBSFList = ^TAVBSFList; + TAVBSFList = record + end; + +{$IFDEF FF_API_OLD_BSF} +(** + * Register a bitstream filter. + * + * The filter will be accessible to the application code through + * av_bitstream_filter_next() or can be directly initialized with + * av_bitstream_filter_init(). + * + * @see avcodec_register_all() + *) +procedure av_register_bitstream_filter(bsf: PAVBitStreamFilter); + cdecl; external av__codec; deprecated; + +(** + * Create and initialize a bitstream filter context given a bitstream + * filter name. + * + * The returned context must be freed with av_bitstream_filter_close(). + * + * @param name the name of the bitstream filter + * @return a bitstream filter context if a matching filter was found + * and successfully initialized, NULL otherwise + *) +function av_bitstream_filter_init(name: {const} PAnsiChar): PAVBitStreamFilterContext; + cdecl; external av__codec; deprecated; + +(** + * Filter bitstream. + * + * This function filters the buffer buf with size buf_size, and places the + * filtered buffer in the buffer pointed to by poutbuf. + * + * The output buffer must be freed by the caller. + * + * @param bsfc bitstream filter context created by av_bitstream_filter_init() + * @param avctx AVCodecContext accessed by the filter, may be NULL. + * If specified, this must point to the encoder context of the + * output stream the packet is sent to. + * @param args arguments which specify the filter configuration, may be NULL + * @param poutbuf pointer which is updated to point to the filtered buffer + * @param poutbuf_size pointer which is updated to the filtered buffer size in bytes + * @param buf buffer containing the data to filter + * @param buf_size size in bytes of buf + * @param keyframe set to non-zero if the buffer to filter corresponds to a key-frame packet data + * @return >= 0 in case of success, or a negative error code in case of failure + * + * If the return value is positive, an output buffer is allocated and + * is available in *poutbuf, and is distinct from the input buffer. + * + * If the return value is 0, the output buffer is not allocated and + * should be considered identical to the input buffer, or in case + * *poutbuf was set it points to the input buffer (not necessarily to + * its starting address). A special case is if *poutbuf was set to NULL and + * *poutbuf_size was set to 0, which indicates the packet should be dropped. + *) +function av_bitstream_filter_filter(bsfc: PAVBitStreamFilterContext; + avctx: PAVCodecContext; args: {const} PAnsiChar; + poutbuf: PPointer; poutbuf_size: PCint; + buf: {const} PByte; buf_size: cint; keyframe: cint): cint; + cdecl; external av__codec; deprecated; + +(** + * Release bitstream filter context. + * + * @param bsf the bitstream filter context created with + * av_bitstream_filter_init(), can be NULL + *) +procedure av_bitstream_filter_close(bsf: PAVBitStreamFilterContext); + cdecl; external av__codec; deprecated; + +(** + * If f is NULL, return the first registered bitstream filter, + * if f is non-NULL, return the next registered bitstream filter + * after f, or NULL if f is the last one. + * + * This function can be used to iterate over all registered bitstream + * filters. + *) +function av_bitstream_filter_next(f: {const} PAVBitStreamFilter): PAVBitStreamFilter; + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * @return a bitstream filter with the specified name or NULL if no such + * bitstream filter exists. + *) +function av_bsf_get_by_name(name: {const} PAnsiChar): {const} PAVBitStreamFilter; + cdecl; external av__codec; + +(** + * Iterate over all registered bitstream filters. + * + * @param opaque a pointer where libavcodec will store the iteration state. Must + * point to NULL to start the iteration. + * + * @return the next registered bitstream filter or NULL when the iteration is + * finished + *) +function av_bsf_next(opaque: pointer): {const} PAVBitStreamFilter; + cdecl; external av__codec; + +(** + * Allocate a context for a given bitstream filter. The caller must fill in the + * context parameters as described in the documentation and then call + * av_bsf_init() before sending any data to the filter. + * + * @param filter the filter for which to allocate an instance. + * @param ctx a pointer into which the pointer to the newly-allocated context + * will be written. It must be freed with av_bsf_free() after the + * filtering is done. + * + * @return 0 on success, a negative AVERROR code on failure + *) +function av_bsf_alloc(filter: {const} PAVBitStreamFilter; ctx: PPAVBSFContext): cint; + cdecl; external av__codec; + +(** + * Prepare the filter for use, after all the parameters and options have been + * set. + *) +function av_bsf_init(ctx: PAVBSFContext): cint; + cdecl; external av__codec; + +(** + * Submit a packet for filtering. + * + * After sending each packet, the filter must be completely drained by calling + * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or + * AVERROR_EOF. + * + * @param pkt the packet to filter. pkt must contain some payload (i.e data or + * side data must be present in pkt). The bitstream filter will take ownership of + * the packet and reset the contents of pkt. pkt is not touched if an error occurs. + * This parameter may be NULL, which signals the end of the stream (i.e. no more + * packets will be sent). That will cause the filter to output any packets it + * may have buffered internally. + * + * @return 0 on success, a negative AVERROR on error. + *) +function av_bsf_send_packet(ctx: PAVBSFContext; pkt: PAVPacket): cint; + cdecl; external av__codec; + +(** + * Retrieve a filtered packet. + * + * @param[out] pkt this struct will be filled with the contents of the filtered + * packet. It is owned by the caller and must be freed using + * av_packet_unref() when it is no longer needed. + * This parameter should be "clean" (i.e. freshly allocated + * with av_packet_alloc() or unreffed with av_packet_unref()) + * when this function is called. If this function returns + * successfully, the contents of pkt will be completely + * overwritten by the returned data. On failure, pkt is not + * touched. + * + * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the + * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there + * will be no further output from the filter. Another negative AVERROR value if + * an error occurs. + * + * @note one input packet may result in several output packets, so after sending + * a packet with av_bsf_send_packet(), this function needs to be called + * repeatedly until it stops returning 0. It is also possible for a filter to + * output fewer packets than were sent to it, so this function may return + * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call. + *) +function av_bsf_receive_packet(ctx: PAVBSFContext; pkt: PAVPacket): cint; + cdecl; external av__codec; + +(** + * Free a bitstream filter context and everything associated with it; write NULL + * into the supplied pointer. + *) +procedure av_bsf_free(ctx: PPAVBSFContext); + cdecl; external av__codec; + +(** + * Get the AVClass for AVBSFContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function av_bsf_get_class(): {const} PAVClass; + cdecl; external av__codec; + +(** + * Allocate empty list of bitstream filters. + * The list must be later freed by av_bsf_list_free() + * or finalized by av_bsf_list_finalize(). + * + * @return Pointer to @ref AVBSFList on success, NULL in case of failure + *) +function av_bsf_list_alloc(): PAVBSFList; + cdecl; external av__codec; + +(** + * Free list of bitstream filters. + * + * @param lst Pointer to pointer returned by av_bsf_list_alloc() + *) +procedure av_bsf_list_free(lst: PPAVBSFList); + cdecl; external av__codec; + +(** + * Append bitstream filter to the list of bitstream filters. + * + * @param lst List to append to + * @param bsf Filter context to be appended + * + * @return >=0 on success, negative AVERROR in case of failure + *) +function av_bsf_list_append(lst: PAVBSFList; bsf: PAVBSFContext): cint; + cdecl; external av__codec; + +(** + * Construct new bitstream filter context given it's name and options + * and append it to the list of bitstream filters. + * + * @param lst List to append to + * @param bsf_name Name of the bitstream filter + * @param options Options for the bitstream filter, can be set to NULL + * + * @return >=0 on success, negative AVERROR in case of failure + *) +function av_bsf_list_append2(lst: PAVBSFList; bsf_name: {const} Pcchar; options: PPAVDictionary): cint; + cdecl; external av__codec; + +(** + * Finalize list of bitstream filters. + * + * This function will transform @ref AVBSFList to single @ref AVBSFContext, + * so the whole chain of bitstream filters can be treated as single filter + * freshly allocated by av_bsf_alloc(). + * If the call is successful, @ref AVBSFList structure is freed and lst + * will be set to NULL. In case of failure, caller is responsible for + * freeing the structure by av_bsf_list_free() + * + * @param lst Filter list structure to be transformed + * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure + * representing the chain of bitstream filters + * + * @return >=0 on success, negative AVERROR in case of failure + *) +function av_bsf_list_finalize(lst: PPAVBSFList; bsf: PPAVBSFContext): cint; + cdecl; external av__codec; + +(** + * Parse string describing list of bitstream filters and create single + * @ref AVBSFContext describing the whole chain of bitstream filters. + * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly + * allocated by av_bsf_alloc(). + * + * @param str String describing chain of bitstream filters in format + * `bsf1[=opt1=val1:opt2=val2][,bsf2]` + * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure + * representing the chain of bitstream filters + * + * @return >=0 on success, negative AVERROR in case of failure + *) +function av_bsf_list_parse_str(str: {const} Pcchar; bsf: PPAVBSFContext): cint; + cdecl; external av__codec; + +(** + * Get null/pass-through bitstream filter. + * + * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter + * + * @return + *) +function av_bsf_get_null_filter(bsf: PPAVBSFContext): cint; + cdecl; external av__codec; + +(* memory *) + +(** + * Same behaviour av_fast_malloc but the buffer has additional + * FF_INPUT_BUFFER_PADDING_SIZE at the end which will will always be 0. + * + * In addition the whole buffer will initially and after resizes + * be 0-initialized so that no uninitialized data will ever appear. + *) +procedure av_fast_padded_malloc(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__codec; + +(** + * Same behaviour av_fast_padded_malloc except that buffer will always + * be 0-initialized after call. + *) +procedure av_fast_padded_mallocz(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__codec; + +(** + * Encode extradata length to a buffer. Used by xiph codecs. + * + * @param s buffer to write to; must be at least (v/255+1) bytes long + * @param v size of extradata in bytes + * @return number of bytes written to the buffer. + *) +function av_xiphlacing(s: PByte; v: cuint): cuint; + cdecl; external av__codec; + +{$IFDEF FF_API_MISSING_SAMPLE} +(** + * Log a generic warning message about a missing feature. This function is + * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) + * only, and would normally not be used by applications. + * @param[in] avc a pointer to an arbitrary struct of which the first field is + * a pointer to an AVClass struct + * @param[in] feature string containing the name of the missing feature + * @param[in] want_sample indicates if samples are wanted which exhibit this feature. + * If want_sample is non-zero, additional verbiage will be added to the log + * message which tells the user how to report samples to the development + * mailing list. + * @deprecated Use avpriv_report_missing_feature() instead. + *) +procedure av_log_missing_feature(avc: Pointer; feature: {const} PAnsiChar; want_sample: cint); + cdecl; external av__codec; deprecated; + +(** + * Log a generic warning message asking for a sample. This function is + * intended to be used internally by FFmpeg (libavcodec, libavformat, etc.) + * only, and would normally not be used by applications. + * @param[in] avc a pointer to an arbitrary struct of which the first field is + * a pointer to an AVClass struct + * @param[in] msg string containing an optional message, or NULL if no message + * @deprecated Use avpriv_request_sample() instead. + *) +procedure av_log_ask_for_sample(avc: Pointer; msg: {const} PAnsiChar); {todo: av_printf_format(2, 3);} + cdecl; external av__codec; deprecated; +{$ENDIF} + +(** + * Register the hardware accelerator hwaccel. + *) +procedure av_register_hwaccel (hwaccel: PAVHWAccel) + cdecl; external av__codec; + +(** + * If hwaccel is NULL, returns the first registered hardware accelerator, + * if hwaccel is non-NULL, returns the next registered hardware accelerator + * after hwaccel, or NULL if hwaccel is the last one. + *) +function av_hwaccel_next (hwaccel: {const} PAVHWAccel): PAVHWAccel; + cdecl; external av__codec; + +(** + * Lock operation used by lockmgr + *) +type + TAVLockOp = ( + AV_LOCK_CREATE, ///< Create a mutex + AV_LOCK_OBTAIN, ///< Lock the mutex + AV_LOCK_RELEASE, ///< Unlock the mutex + AV_LOCK_DESTROY ///< Free mutex resources + ); + +(** + * Register a user provided lock manager supporting the operations + * specified by AVLockOp. The "mutex" argument to the function points + * to a (void * ) where the lockmgr should store/get a pointer to a user + * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the + * value left by the last call for all other ops. If the lock manager is + * unable to perform the op then it should leave the mutex in the same + * state as when it was called and return a non-zero value. However, + * when called with AV_LOCK_DESTROY the mutex will always be assumed to + * have been successfully destroyed. If av_lockmgr_register succeeds + * it will return a non-negative value, if it fails it will return a + * negative value and destroy all mutex and unregister all callbacks. + * av_lockmgr_register is not thread-safe, it must be called from a + * single thread before any calls which make use of locking are used. + * + * @param cb User defined callback. av_lockmgr_register invokes calls + * to this callback and the previously registered callback. + * The callback will be used to create more than one mutex + * each of which must be backed by its own underlying locking + * mechanism (i.e. do not use a single static object to + * implement your lock manager). If cb is set to NULL the + * lockmgr will be unregistered. + *) +// ToDo: Implement and test this +//function av_lockmgr_register(cb: function (mutex: Ppointer; op: TAVLockOp)): cint; +// cdecl; external av__codec; + +(** + * Get the type of the given codec. + *) +function avcodec_get_type(codec_id: TAVCodecID): TAVMediaType; + cdecl; external av__codec; + +(** + * Get the name of a codec. + * @return a static string identifying the codec; never NULL + *) +function avcodec_get_name(id: TAVCodecID): PAnsiChar; + cdecl; external av__codec; + +(** + * @return a positive value if s is open (i.e. avcodec_open2() was called on it + * with no corresponding avcodec_close()), 0 otherwise. + *) +function avcodec_is_open(s: PAVCodecContext): cint; + cdecl; external av__codec; + +(** + * @return a non-zero number if codec is an encoder, zero otherwise + *) +function av_codec_is_encoder(codec: {const} PAVCodec): cint; + cdecl; external av__codec; + +(** + * @return a non-zero number if codec is a decoder, zero otherwise + *) +function av_codec_is_decoder(codec: {const} PAVCodec): cint; + cdecl; external av__codec; + +(** + * @return descriptor for given codec ID or NULL if no descriptor exists. + *) +function avcodec_descriptor_get(id: TAVCodecID): PAVCodecDescriptor; + cdecl; external av__codec; + +(** + * Iterate over all codec descriptors known to libavcodec. + * + * @param prev previous descriptor. NULL to get the first descriptor. + * + * @return next descriptor or NULL after the last descriptor + *) +function avcodec_descriptor_next(prev: {const} PAVCodecDescriptor): PAVCodecDescriptor; + cdecl; external av__codec; + +(** + * @return codec descriptor with the given name or NULL if no such descriptor + * exists. + *) +function avcodec_descriptor_get_by_name(name: {const} PAnsiChar): PAVCodecDescriptor; + cdecl; external av__codec; + +(** + * Allocate a CPB properties structure and initialize its fields to default + * values. + * + * @param size if non-NULL, the size of the allocated struct will be written + * here. This is useful for embedding it in side data. + * + * @return the newly allocated struct or NULL on failure + *) +function av_cpb_properties_alloc(size: Psize_t): PAVCPBProperties; + cdecl; external av__codec; + +(** + * @} + *) + +implementation + +end. diff --git a/src/lib/ffmpeg-3.2/avformat.pas b/src/lib/ffmpeg-3.2/avformat.pas new file mode 100644 index 00000000..e6221e0e --- /dev/null +++ b/src/lib/ffmpeg-3.2/avformat.pas @@ -0,0 +1,3207 @@ +(* + * copyright (c) 2001 Fabrice Bellard + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of version 2.0 libavformat/avformat.h + * Version: 56.4.101 + *) + +unit avformat; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} (* for the HasInline define *) +{$I ff_api-defines.inc} (* FF_API_* defines *) + +{$IFDEF DARWIN} + {$linklib libavformat} +{$ENDIF} + +interface + +uses + ctypes, + avcodec, + avio, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + SysUtils, + UConfig; + +const + (* + * IMPORTANT: This headers are valid for all minor revisions of ffmpeg + * version 2.4.* + *) + (* Max. supported version by this header *) + LIBAVFORMAT_MAX_VERSION_MAJOR = 57; + LIBAVFORMAT_MAX_VERSION_MINOR = 56; + LIBAVFORMAT_MAX_VERSION_RELEASE = 100; + LIBAVFORMAT_MAX_VERSION = (LIBAVFORMAT_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVFORMAT_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVFORMAT_MAX_VERSION_RELEASE * VERSION_RELEASE); + + (* Min. supported version by this header *) + LIBAVFORMAT_MIN_VERSION_MAJOR = 57; + LIBAVFORMAT_MIN_VERSION_MINOR = 56; + LIBAVFORMAT_MIN_VERSION_RELEASE = 100; + LIBAVFORMAT_MIN_VERSION = (LIBAVFORMAT_MIN_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVFORMAT_MIN_VERSION_MINOR * VERSION_MINOR) + + (LIBAVFORMAT_MIN_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBAVFORMAT_VERSION < LIBAVFORMAT_MIN_VERSION)} + {$MESSAGE Error 'Linked version of libavformat is too old!'} +{$IFEND} + +(* Check if linked versions are supported *) +{$IF (LIBAVFORMAT_VERSION > LIBAVFORMAT_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libavformat is not yet supported!'} +{$IFEND} + +{ +const + LIBAVFORMAT_BUILD = LIBAVFORMAT_VERSION_INT; + LIBAVFORMAT_IDENT = 'Lavf' AV_STRINGIFY(LIBAVFORMAT_VERSION); +} + +(** + * @defgroup libavf libavformat + * I/O and Muxing/Demuxing Library + * + * Libavformat (lavf) is a library for dealing with various media container + * formats. Its main two purposes are demuxing - i.e. splitting a media file + * into component streams, and the reverse process of muxing - writing supplied + * data in a specified container format. It also has an @ref lavf_io + * "I/O module" which supports a number of protocols for accessing the data (e.g. + * file, tcp, http and others). Before using lavf, you need to call + * av_register_all() to register all compiled muxers, demuxers and protocols. + * Unless you are absolutely sure you won't use libavformat's network + * capabilities, you should also call avformat_network_init(). + * + * A supported input format is described by an AVInputFormat struct, conversely + * an output format is described by AVOutputFormat. You can iterate over all + * registered input/output formats using the av_iformat_next() / + * av_oformat_next() functions. The protocols layer is not part of the public + * API, so you can only get the names of supported protocols with the + * avio_enum_protocols() function. + * + * Main lavf structure used for both muxing and demuxing is AVFormatContext, + * which exports all information about the file being read or written. As with + * most Libavformat structures, its size is not part of public ABI, so it cannot be + * allocated on stack or directly with av_malloc(). To create an + * AVFormatContext, use avformat_alloc_context() (some functions, like + * avformat_open_input() might do that for you). + * + * Most importantly an AVFormatContext contains: + * @li the @ref AVFormatContext.iformat "input" or @ref AVFormatContext.oformat + * "output" format. It is either autodetected or set by user for input; + * always set by user for output. + * @li an @ref AVFormatContext.streams "array" of AVStreams, which describe all + * elementary streams stored in the file. AVStreams are typically referred to + * using their index in this array. + * @li an @ref AVFormatContext.pb "I/O context". It is either opened by lavf or + * set by user for input, always set by user for output (unless you are dealing + * with an AVFMT_NOFILE format). + * + * @section lavf_options Passing options to (de)muxers + * It is possible to configure lavf muxers and demuxers using the @ref avoptions + * mechanism. Generic (format-independent) libavformat options are provided by + * AVFormatContext, they can be examined from a user program by calling + * av_opt_next() / av_opt_find() on an allocated AVFormatContext (or its AVClass + * from avformat_get_class()). Private (format-specific) options are provided by + * AVFormatContext.priv_data if and only if AVInputFormat.priv_class / + * AVOutputFormat.priv_class of the corresponding format struct is non-NULL. + * Further options may be provided by the @ref AVFormatContext.pb "I/O context", + * if its AVClass is non-NULL, and the protocols layer. See the discussion on + * nesting in @ref avoptions documentation to learn how to access those. + * + * @section urls + * URL strings in libavformat are made of a scheme/protocol, a ':', and a + * scheme specific string. URLs without a scheme and ':' used for local files + * are supported but deprecated. "file:" should be used for local files. + * + * It is important that the scheme string is not taken from untrusted + * sources without checks. + * + * Note that some schemes/protocols are quite powerful, allowing access to + * both local and remote files, parts of them, concatenations of them, local + * audio and video devices and so on. + * + * @{ + * + * @defgroup lavf_decoding Demuxing + * @defgroup lavf_decoding Demuxing + * @ + * Demuxers read a media file and split it into chunks of data (@em packets). A + * @ref AVPacket "packet" contains one or more encoded frames which belongs to a + * single elementary stream. In the lavf API this process is represented by the + * avformat_open_input() function for opening a file, av_read_frame() for + * reading a single packet and finally avformat_close_input(), which does the + * cleanup. + * + * @section lavf_decoding_open Opening a media file + * The minimum information required to open a file is its URL, which + * is passed to avformat_open_input(), as in the following code: + * @code + * const char *url = "file:in.mp3"; + * AVFormatContext *s = NULL; + * int ret = avformat_open_input(&s, url, NULL, NULL); + * if (ret < 0) + * abort(); + * @endcode + * The above code attempts to allocate an AVFormatContext, open the + * specified file (autodetecting the format) and read the header, exporting the + * information stored there into s. Some formats do not have a header or do not + * store enough information there, so it is recommended that you call the + * avformat_find_stream_info() function which tries to read and decode a few + * frames to find missing information. + * + * In some cases you might want to preallocate an AVFormatContext yourself with + * avformat_alloc_context() and do some tweaking on it before passing it to + * avformat_open_input(). One such case is when you want to use custom functions + * for reading input data instead of lavf internal I/O layer. + * To do that, create your own AVIOContext with avio_alloc_context(), passing + * your reading callbacks to it. Then set the @em pb field of your + * AVFormatContext to newly created AVIOContext. + * + * Since the format of the opened file is in general not known until after + * avformat_open_input() has returned, it is not possible to set demuxer private + * options on a preallocated context. Instead, the options should be passed to + * avformat_open_input() wrapped in an AVDictionary: + * @code + * AVDictionary *options = NULL; + * av_dict_set(&options, "video_size", "640x480", 0); + * av_dict_set(&options, "pixel_format", "rgb24", 0); + * + * if (avformat_open_input(&s, url, NULL, &options) < 0) + * abort(); + * av_dict_free(&options); + * @endcode + * This code passes the private options 'video_size' and 'pixel_format' to the + * demuxer. They would be necessary for e.g. the rawvideo demuxer, since it + * cannot know how to interpret raw video data otherwise. If the format turns + * out to be something different than raw video, those options will not be + * recognized by the demuxer and therefore will not be applied. Such unrecognized + * options are then returned in the options dictionary (recognized options are + * consumed). The calling program can handle such unrecognized options as it + * wishes, e.g. + * @code + * AVDictionaryEntry *e; + * if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) { + * fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key); + * abort(); + * } + * @endcode + * + * After you have finished reading the file, you must close it with + * avformat_close_input(). It will free everything associated with the file. + * + * @section lavf_decoding_read Reading from an opened file + * Reading data from an opened AVFormatContext is done by repeatedly calling + * av_read_frame() on it. Each call, if successful, will return an AVPacket + * containing encoded data for one AVStream, identified by + * AVPacket.stream_index. This packet may be passed straight into the libavcodec + * decoding functions avcodec_send_packet() or avcodec_decode_subtitle2() if the + * caller wishes to decode the data. + * + * AVPacket.pts, AVPacket.dts and AVPacket.duration timing information will be + * set if known. They may also be unset (i.e. AV_NOPTS_VALUE for + * pts/dts, 0 for duration) if the stream does not provide them. The timing + * information will be in AVStream.time_base units, i.e. it has to be + * multiplied by the timebase to convert them to seconds. + * + * If AVPacket.buf is set on the returned packet, then the packet is + * allocated dynamically and the user may keep it indefinitely. + * Otherwise, if AVPacket.buf is NULL, the packet data is backed by a + * static storage somewhere inside the demuxer and the packet is only valid + * until the next av_read_frame() call or closing the file. If the caller + * requires a longer lifetime, av_dup_packet() will make an av_malloc()ed copy + * of it. + * In both cases, the packet must be freed with av_packet_unref() when it is no + * longer needed. + * + * @section lavf_decoding_seek Seeking + * @ + * + * @defgroup lavf_encoding Muxing + * @ + * Muxers take encoded data in the form of @ref AVPacket "AVPackets" and write + * it into files or other output bytestreams in the specified container format. + * + * The main API functions for muxing are avformat_write_header() for writing the + * file header, av_write_frame() / av_interleaved_write_frame() for writing the + * packets and av_write_trailer() for finalizing the file. + * + * At the beginning of the muxing process, the caller must first call + * avformat_alloc_context() to create a muxing context. The caller then sets up + * the muxer by filling the various fields in this context: + * + * - The @ref AVFormatContext.oformat "oformat" field must be set to select the + * muxer that will be used. + * - Unless the format is of the AVFMT_NOFILE type, the @ref AVFormatContext.pb + * "pb" field must be set to an opened IO context, either returned from + * avio_open2() or a custom one. + * - Unless the format is of the AVFMT_NOSTREAMS type, at least one stream must + * be created with the avformat_new_stream() function. The caller should fill + * the @ref AVStream.codecpar "stream codec parameters" information, such as the + * codec @ref AVCodecParameters.codec_type "type", @ref AVCodecParameters.codec_id + * "id" and other parameters (e.g. width / height, the pixel or sample format, + * etc.) as known. The @ref AVStream.time_base "stream timebase" should + * be set to the timebase that the caller desires to use for this stream (note + * that the timebase actually used by the muxer can be different, as will be + * described later). + * - It is advised to manually initialize only the relevant fields in + * AVCodecParameters, rather than using @ref avcodec_parameters_copy() during + * remuxing: there is no guarantee that the codec context values remain valid + * for both input and output format contexts. + * - The caller may fill in additional information, such as @ref + * AVFormatContext.metadata "global" or @ref AVStream.metadata "per-stream" + * metadata, @ref AVFormatContext.chapters "chapters", @ref + * AVFormatContext.programs "programs", etc. as described in the + * AVFormatContext documentation. Whether such information will actually be + * stored in the output depends on what the container format and the muxer + * support. + * + * When the muxing context is fully set up, the caller must call + * avformat_write_header() to initialize the muxer internals and write the file + * header. Whether anything actually is written to the IO context at this step + * depends on the muxer, but this function must always be called. Any muxer + * private options must be passed in the options parameter to this function. + * + * The data is then sent to the muxer by repeatedly calling av_write_frame() or + * av_interleaved_write_frame() (consult those functions' documentation for + * discussion on the difference between them; only one of them may be used with + * a single muxing context, they should not be mixed). Do note that the timing + * information on the packets sent to the muxer must be in the corresponding + * AVStream's timebase. That timebase is set by the muxer (in the + * avformat_write_header() step) and may be different from the timebase + * requested by the caller. + * + * Once all the data has been written, the caller must call av_write_trailer() + * to flush any buffered packets and finalize the output file, then close the IO + * context (if any) and finally free the muxing context with + * avformat_free_context(). + * @} + * + * @defgroup lavf_io I/O Read/Write + * @{ + * @section lavf_io_dirlist Directory listing + * The directory listing API makes it possible to list files on remote servers. + * + * Some of possible use cases: + * - an "open file" dialog to choose files from a remote location, + * - a recursive media finder providing a player with an ability to play all + * files from a given directory. + * + * @subsection lavf_io_dirlist_open Opening a directory + * At first, a directory needs to be opened by calling avio_open_dir() + * supplied with a URL and, optionally, ::AVDictionary containing + * protocol-specific parameters. The function returns zero or positive + * integer and allocates AVIODirContext on success. + * + * @code + * AVIODirContext *ctx = NULL; + * if (avio_open_dir(&ctx, "smb://example.com/some_dir", NULL) < 0) { + * fprintf(stderr, "Cannot open directory.\n"); + * abort(); + * } + * @endcode + * + * This code tries to open a sample directory using smb protocol without + * any additional parameters. + * + * @subsection lavf_io_dirlist_read Reading entries + * Each directory's entry (i.e. file, another directory, anything else + * within ::AVIODirEntryType) is represented by AVIODirEntry. + * Reading consecutive entries from an opened AVIODirContext is done by + * repeatedly calling avio_read_dir() on it. Each call returns zero or + * positive integer if successful. Reading can be stopped right after the + * NULL entry has been read -- it means there are no entries left to be + * read. The following code reads all entries from a directory associated + * with ctx and prints their names to standard output. + * @code + * AVIODirEntry *entry = NULL; + * for (;;) { + * if (avio_read_dir(ctx, &entry) < 0) { + * fprintf(stderr, "Cannot list directory.\n"); + * abort(); + * } + * if (!entry) + * break; + * printf("%s\n", entry->name); + * avio_free_directory_entry(&entry); + * } + * @endcode + * @} + * + * @defgroup lavf_codec Demuxers + * @{ + * @defgroup lavf_codec_native Native Demuxers + * @{ + * @} + * @defgroup lavf_codec_wrappers External library wrappers + * @{ + * @} + * @} + * @defgroup lavf_protos I/O Protocols + * @{ + * @} + * @defgroup lavf_internal Internal + * @{ + * @} + * @} + *) + +//type + +(* + * @defgroup metadata_api Public Metadata API + * @ + * @ingroup libavf + * The metadata API allows libavformat to export metadata tags to a client + * application when demuxing. Conversely it allows a client application to + * set metadata when muxing. + * + * Metadata is exported or set as pairs of key/value strings in the 'metadata' + * fields of the AVFormatContext, AVStream, AVChapter and AVProgram structs + * using the @ref lavu_dict "AVDictionary" API. Like all strings in FFmpeg, + * metadata is assumed to be UTF-8 encoded Unicode. Note that metadata + * exported by demuxers isn't checked to be valid UTF-8 in most cases. + * + * Important concepts to keep in mind: + * - Keys are unique; there can never be 2 tags with the same key. This is + * also meant semantically, i.e., a demuxer should not knowingly produce + * several keys that are literally different but semantically identical. + * E.g., key=Author5, key=Author6. In this example, all authors must be + * placed in the same tag. + * - Metadata is flat, not hierarchical; there are no subtags. If you + * want to store, e.g., the email address of the child of producer Alice + * and actor Bob, that could have key=alice_and_bobs_childs_email_address. + * - Several modifiers can be applied to the tag name. This is done by + * appending a dash character ('-') and the modifier name in the order + * they appear in the list below -- e.g. foo-eng-sort, not foo-sort-eng. + * - language -- a tag whose value is localized for a particular language + * is appended with the ISO 639-2/B 3-letter language code. + * For example: Author-ger=Michael, Author-eng=Mike + * The original/default language is in the unqualified "Author" tag. + * A demuxer should set a default if it sets any translated tag. + * - sorting -- a modified version of a tag that should be used for + * sorting will have '-sort' appended. E.g. artist="The Beatles", + * artist-sort="Beatles, The". + * + * - Demuxers attempt to export metadata in a generic format, however tags + * with no generic equivalents are left as they are stored in the container. + * Follows a list of generic tag names: + * + @verbatim + album -- name of the set this work belongs to + album_artist -- main creator of the set/album, if different from artist. + e.g. "Various Artists" for compilation albums. + artist -- main creator of the work + comment -- any additional description of the file. + composer -- who composed the work, if different from artist. + copyright -- name of copyright holder. + creation_time-- date when the file was created, preferably in ISO 8601. + date -- date when the work was created, preferably in ISO 8601. + disc -- number of a subset, e.g. disc in a multi-disc collection. + encoder -- name/settings of the software/hardware that produced the file. + encoded_by -- person/group who created the file. + filename -- original name of the file. + genre -- <self-evident>. + language -- main language in which the work is performed, preferably + in ISO 639-2 format. Multiple languages can be specified by + separating them with commas. + performer -- artist who performed the work, if different from artist. + E.g for "Also sprach Zarathustra", artist would be "Richard + Strauss" and performer "London Philharmonic Orchestra". + publisher -- name of the label/publisher. + service_name -- name of the service in broadcasting (channel name). + service_provider -- name of the service provider in broadcasting. + title -- name of the work. + track -- number of this work in the set, can be in form current/total. + variant_bitrate -- the total bitrate of the bitrate variant that the current stream is part of + @endverbatim + * + * Look in the examples section for an application example how to use the Metadata API. + * + * @ + *) + +(* packet functions *) + +(** + * Allocate and read the payload of a packet and initialize its fields with + * default values. + * + * @param s associated IO context + * @param pkt packet + * @param size desired payload size + * @return >0 (read size) if OK, AVERROR_xxx otherwise + *) +function av_get_packet(s: PAVIOContext; var pkt: TAVPacket; size: cint): cint; + cdecl; external av__format; + +(** + * Read data and append it to the current content of the AVPacket. + * If pkt->size is 0 this is identical to av_get_packet. + * Note that this uses av_grow_packet and thus involves a realloc + * which is inefficient. Thus this function should only be used + * when there is no reasonable way to know (an upper bound of) + * the final size. + * + * @param s associated IO context + * @param pkt packet + * @param size amount of data to read + * @return >0 (read size) if OK, AVERROR_xxx otherwise, previous data + * will not be lost even if an error occurs. + *) +function av_append_packet(s: PAVIOContext; var pkt: TAVPacket; size: cint): cint; + cdecl; external av__format; + +{$IFDEF FF_API_LAVF_FRAC} +(*************************************************) +(* fractional numbers for exact pts handling *) + +type + (** + * The exact value of the fractional number is: 'val + num / den'. + * num is assumed to be 0 <= num < den. + *) + PAVFrac = ^TAVFrac; + TAVFrac = record + val, num, den: cint64; + end; +{$ENDIF} + +{$IFNDEF FPC} + //defines for delphi + size_t = cardinal; +{$ENDIF} + +(*************************************************) +(* input/output formats *) + +type + (** + * This structure contains the data a format has to probe a file. + *) + TAVProbeData = record + filename: PAnsiChar; + buf: PByteArray; (**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. *) + buf_size: cint; (**< Size of buf except extra allocated bytes *) + {const} mime_type: PAnsiChar; (**< mime_type, when known. *) + end; + +const + AVPROBE_SCORE_EXTENSION = 50; ///< score for file extension + AVPROBE_SCORE_MIME = 75; ///< score for file mime type + AVPROBE_SCORE_MAX = 100; ///< maximum score + + AVPROBE_SCORE_RETRY = (AVPROBE_SCORE_MAX DIV 4); + AVPROBE_SCORE_STREAM_RETRY = (AVPROBE_SCORE_MAX DIV 4-1); + + AVPROBE_PADDING_SIZE = 32; ///< extra allocated bytes at the end of the probe buffer + +/// Demuxer will use avio_open, no opened file should be provided by the caller. + AVFMT_NOFILE = $0001; + AVFMT_NEEDNUMBER = $0002; (**< Needs '%d' in filename. *) + AVFMT_SHOW_IDS = $0008; (**< Show format stream IDs numbers. *) +{$IFDEF FF_API_LAVF_FMT_RAWPICTURE} + AVFMT_RAWPICTURE = $0020; (**< Format wants AVPicture structure for + raw picture data. @deprecated Not used anymore *) +{$ENDIF} + AVFMT_GLOBALHEADER = $0040; (**< Format wants global header. *) + AVFMT_NOTIMESTAMPS = $0080; (**< Format does not need / have any timestamps. *) + AVFMT_GENERIC_INDEX = $0100; (**< Use generic index building code. *) + AVFMT_TS_DISCONT = $0200; (**< Format allows timestamp discontinuities. *) + AVFMT_VARIABLE_FPS = $0400; (**< Format allows variable fps. *) + AVFMT_NODIMENSIONS = $0800; (**< Format does not need width/height *) + AVFMT_NOSTREAMS = $1000; (**< Format does not require any streams *) + AVFMT_NOBINSEARCH = $2000; (**< Format does not allow to fall back to binary search via read_timestamp *) + AVFMT_NOGENSEARCH = $4000; (**< Format does not allow to fall back to generic search *) + AVFMT_NO_BYTE_SEEK = $8000; (**< Format does not allow seeking by bytes *) + AVFMT_ALLOW_FLUSH = $10000;(**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. *) + AVFMT_TS_NONSTRICT = $20000;(**< Format does not require strictly + increasing timestamps, but they must + still be monotonic *) + AVFMT_TS_NEGATIVE = $40000; (**< Format allows muxing negative + timestamps. If not set the timestamp + will be shifted in av_write_frame and + av_interleaved_write_frame so they + start from 0. + The user or muxer can override this through + AVFormatContext.avoid_negative_ts + *) + + AVFMT_SEEK_TO_PTS = $4000000; (**< Seeking is based on PTS *) + + // used by AVIndexEntry + AVINDEX_KEYFRAME = $0001; + AVINDEX_DISCARD_FRAME = $0002; (** + * Flag is used to indicate which frame should be discarded after decoding. + *) + AVFMTCTX_NOHEADER = $0001; (**< signal that no header is present + (streams are added dynamically) *) + + MAX_STREAMS = 20; + + AVFMT_FLAG_GENPTS = $0001; ///< Generate missing pts even if it requires parsing future frames. + AVFMT_FLAG_IGNIDX = $0002; ///< Ignore index. + AVFMT_FLAG_NONBLOCK = $0004; ///< Do not block when reading packets from input. + AVFMT_FLAG_IGNDTS = $0008; ///< Ignore DTS on frames that contain both DTS & PTS + AVFMT_FLAG_NOFILLIN = $0010; ///< Do not infer any values from other values, just return what is stored in the container + AVFMT_FLAG_NOPARSE = $0020; ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled + AVFMT_FLAG_NOBUFFER = $0040; ///< Do not buffer frames when possible + AVFMT_FLAG_CUSTOM_IO = $0080; ///< The caller has supplied a custom AVIOContext, don't avio_close() it. + AVFMT_FLAG_DISCARD_CORRUPT = $0100; ///< Discard frames marked corrupted + AVFMT_FLAG_FLUSH_PACKETS = $0200; ///< Flush the AVIOContext every packet. +(** + * When muxing, try to avoid writing any random/volatile data to the output. + * This includes any random IDs, real-time timestamps/dates, muxer version, etc. + * + * This flag is mainly intended for testing. + *) + AVFMT_FLAG_BITEXACT = $0400; + AVFMT_FLAG_MP4A_LATM = $8000; ///< Enable RTP MP4A-LATM payload + AVFMT_FLAG_SORT_DTS = $10000; ///< try to interleave outputted packets by dts (using this flag can slow demuxing down) + AVFMT_FLAG_PRIV_OPT = $20000; ///< Enable use of private options by delaying codec open (this could be made default once all code is converted) + AVFMT_FLAG_KEEP_SIDE_DATA = $40000; ///< Don't merge side data but keep it separate. + AVFMT_FLAG_FAST_SEEK = $80000; ///< Enable fast, but inaccurate seeks for some formats + AVFMT_FLAG_SHORTEST = $100000; ///< Stop muxing when the shortest stream stops. + AVFMT_FLAG_AUTO_BSF = $200000; ///< Wait for packet data before writing a header, and add bitstream filters as requested by the muxer + + // used by AVStream + AVSTREAM_EVENT_FLAG_METADATA_UPDATED = $0001; ///< The call resulted in updated metadata. + MAX_STD_TIMEBASES = (30*12+30+3+6); + MAX_REORDER_DELAY = 16; + + // used by TAVProgram + AV_PROGRAM_RUNNING = 1; + + + AV_DISPOSITION_DEFAULT = $0001; + AV_DISPOSITION_DUB = $0002; + AV_DISPOSITION_ORIGINAL = $0004; + AV_DISPOSITION_COMMENT = $0008; + AV_DISPOSITION_LYRICS = $0010; + AV_DISPOSITION_KARAOKE = $0020; + + (** + * Track should be used during playback by default. + * Useful for subtitle track that should be displayed + * even when user did not explicitly ask for subtitles. + *) + AV_DISPOSITION_FORCED = $0040; + AV_DISPOSITION_HEARING_IMPAIRED = $0080; (**< stream for hearing impaired audiences *) + AV_DISPOSITION_VISUAL_IMPAIRED = $0100; (**< stream for visual impaired audiences *) + AV_DISPOSITION_CLEAN_EFFECTS = $0200; (**< stream without voice *) +(** + * The stream is stored in the file as an attached picture/"cover art" (e.g. + * APIC frame in ID3v2). The first (usually only) packet associated with it + * will be returned among the first few packets read from the file unless + * seeking takes place. It can also be accessed at any time in + * AVStream.attached_pic. + *) + AV_DISPOSITION_ATTACHED_PIC = $0400; + +(** + * The stream is sparse, and contains thumbnail images, often corresponding + * to chapter markers. Only ever used with AV_DISPOSITION_ATTACHED_PIC. + *) + AV_DISPOSITION_TIMED_THUMBNAILS = $0800; + +(** + * To specify text track kind (different from subtitles default). + *) + AV_DISPOSITION_CAPTIONS = $10000; + AV_DISPOSITION_DESCRIPTIONS = $20000; + AV_DISPOSITION_METADATA = $40000; + +(** + * Options for behavior on timestamp wrap detection. + *) + AV_PTS_WRAP_IGNORE = 0; ///< ignore the wrap + AV_PTS_WRAP_ADD_OFFSET = 1; ///< add the format specific offset on wrap detection + AV_PTS_WRAP_SUB_OFFSET = -1; ///< subtract the format specific offset on wrap detection + + // used by TAVFormatContext.debug + FF_FDEBUG_TS = 0001; + AVFMT_EVENT_FLAG_METADATA_UPDATED = 0001; ///< The call resulted in updated metadata. + + RAW_PACKET_BUFFER_SIZE = 2500000; + + AVFMT_AVOID_NEG_TS_AUTO = -1; ///< Enabled when required by target format + AVFMT_AVOID_NEG_TS_MAKE_NON_NEGATIVE = 1; ///< Shift timestamps so they are non negative + AVFMT_AVOID_NEG_TS_MAKE_ZERO = 2; ///< Shift timestamps so that they start at 0 + +type + PPAVCodecTag = ^PAVCodecTag; + PAVCodecTag = Pointer; + + PAVOutputFormat = ^TAVOutputFormat; + PAVProbeData = ^TAVProbeData; + + PAVInputFormat = ^TAVInputFormat; + PAVIndexEntry = ^TAVIndexEntry; + + PPAVStream = ^PAVStream; + PAVStream = ^TAVStream; + PAVPacketList = ^TAVPacketList; + TAVPacketList = record + pkt: TAVPacket; + next: PAVPacketList; + end; (*AVPacketList*) + + PPAVProgram = ^PAVProgram; + PAVProgram = ^TAVProgram; + + PPAVFormatContext = ^PAVFormatContext; + PAVFormatContext = ^TAVFormatContext; + +(** + * Convert all the metadata sets from ctx according to the source and + * destination conversion tables. + * + * @param d_conv destination tags format conversion table + * @param s_conv source tags format conversion table + *) + PAVMetadataConv = ^TAVMetadataConv; + TAVMetadataConv = record + ctx: PAVFormatContext; + d_conv: {const} PAVMetadataConv; + s_conv: {const} PAVMetadataConv; + end; + + (** From libavdevice/avdevice.h **) + PPAVDeviceInfo = ^PAVDeviceInfo; + PAVDeviceInfo = ^TAVDeviceInfo; + TAVDeviceInfo = record + device_name: PAnsiChar; (**< device name, format depends on device *) + device_description: PAnsiChar; (**< human friendly name *) + end; {TAVDeviceInfo} + + PAVDeviceInfoList = ^TAVDeviceInfoList; + TAVDeviceInfoList = record + devices: PPAVDeviceInfo; (**< list of autodetected devices *) + nb_devices: cint; (**< number of autodetected devices *) + default_device: cint; (**< index of default device or -1 if no default *) + end; {TAVDeviceInfoList} + + PAVDeviceCapabilitiesQuery = ^TAVDeviceCapabilitiesQuery; + TAVDeviceCapabilitiesQuery = record + end; + + PFFFrac = ^TFFFrac; + TFFFrac = record + val: cint64; + num: cint64; + den: cint64; + end; + +(** + * @addtogroup lavf_encoding + * @ + *) + TAVOutputFormat = record + name: PAnsiChar; + (** + * Descriptive name for the format, meant to be more human-readable + * than name. You should use the NULL_IF_CONFIG_SMALL() macro + * to define it. + *) + long_name: PAnsiChar; + mime_type: PAnsiChar; + extensions: PAnsiChar; (**< comma-separated filename extensions *) + (* output support *) + audio_codec: TAVCodecID; (**< default audio codec *) + video_codec: TAVCodecID; (**< default video codec *) + subtitle_codec: TAVCodecID; (**< default subtitle codec *) + (** + * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, + * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS, + * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, + * AVFMT_TS_NONSTRICT, AVFMT_TS_NEGATIVE + *) + flags: cint; + + (** + * List of supported codec_id-codec_tag pairs, ordered by "better + * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. + *) + codec_tag: {const} PPAVCodecTag; + + priv_class: {const} PAVClass; ///< AVClass for the private context + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + next: PAVOutputFormat; + (** + * size of private data so that it can be allocated in the wrapper + *) + priv_data_size: cint; + + write_header: function (c: PAVFormatContext): cint; cdecl; + (** + * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, + * pkt can be NULL in order to flush data buffered in the muxer. + * When flushing, return 0 if there still is more data to flush, + * or 1 if everything was flushed and there is no more buffered + * data. + *) + write_packet: function (c: PAVFormatContext; pkt: PAVPacket): cint; cdecl; + write_trailer: function (c: PAVFormatContext): cint; cdecl; + (** + * Currently only used to set pixel format if not YUV420P. + *) + interleave_packet: function (s: PAVFormatContext; out_: PAVPacket; + in_: PAVPacket; flush: cint): cint; cdecl; + (** + * Test if the given codec can be stored in this container. + * + * @return 1 if the codec is supported, 0 if it is not. + * A negative number if unknown. + * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC + *) + query_codec: function (id: TAVCodecID; std_compliance: cint): cint; cdecl; + + get_output_timestamp: procedure (s: PAVFormatContext; stream: cint; + dts: Pcint64; wall: Pcint64); cdecl; + + (** + * Allows sending messages from application to device. + *) + control_message: function(s: PAVFormatContext; type_: cint; data: pointer; + data_size: size_t): cint; cdecl; + + (** + * Write an uncoded AVFrame. + * + * See av_write_uncoded_frame() for details. + * + * The library will free *frame afterwards, but the muxer can prevent it + * by setting the pointer to NULL. + *) + write_uncodec_frame: function(s: PAVFormatContext; stream_index: cint; + frame: PPAVFrame; flags: cuint): cint; cdecl; + + (** + * Returns device list with it properties. + * @see avdevice_list_devices() for more details. + *) + get_device_list: function(s: PAVFormatContext; device_list: PAVDeviceInfoList): cint; cdecl; + + (** + * Initialize device capabilities submodule. + * @see avdevice_capabilities_create() for more details. + *) + create_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; + + (** + * Free device capabilities submodule. + * @see avdevice_capabilities_free() for more details. + *) + free_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; + + data_codec: TAVCodecID; (**< default data codec *) + + (** + * Initialize format. May allocate data here, and set any AVFormatContext or + * AVStream parameters that need to be set before packets are sent. + * This method must not write output. + * + * Return 0 if streams were fully configured, 1 if not, negative AVERROR on failure + * + * Any allocations made here must be freed in deinit(). + *) + init: function(s: PAVFormatContext): cint; cdecl; + + (** + * Deinitialize format. If present, this is called whenever the muxer is being + * destroyed, regardless of whether or not the header has been written. + * + * If a trailer is being written, this is called after write_trailer(). + * + * This is called if init() fails as well. + *) + deinit: procedure(s: PAVFormatContext); + + (** + * Set up any necessary bitstream filtering and extract any extra data needed + * for the global header. + * Return 0 if more packets from this stream must be checked; 1 if not. + *) + check_bitstream: function(s: PAVFormatContext; pkt: {const} PAVPacket): cint; cdecl; + end; +(** + * @} + *) + +(** + * @addtogroup lavf_decoding + * @ + *) + TAVInputFormat = record + (** + * A comma separated list of short names for the format. New names + * may be appended with a minor bump. + *) + name: PAnsiChar; + + (** + * Descriptive name for the format, meant to be more human-readable + * than name. You should use the NULL_IF_CONFIG_SMALL() macro + * to define it. + *) + long_name: PAnsiChar; + + (** + * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS, + * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH, + * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS. + *) + flags: cint; + + (** + * If extensions are defined, then no probe is done. You should + * usually not use extension format guessing because it is not + * reliable enough + *) + extensions: PAnsiChar; + + codec_tag: {const} PPAVCodecTag; + + priv_class: {const} PAVClass; ///< AVClass for the private context + + (** + * Comma-separated list of mime types. + * It is used check for matching mime types while probing. + * @see av_probe_input_format2 + *) + mime_type: {const} PAnsiChar; + + (***************************************************************** + * No fields below this line are part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + next: PAVInputFormat; + + (** + * Raw demuxers store their codec ID here. + *) + raw_codec_id: cint; + + (** + * Size of private data so that it can be allocated in the wrapper. + *) + priv_data_size: cint; + + (** + * Tell if a given file has a chance of being parsed as this format. + * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes + * big so you do not have to check for that unless you need more. + *) + read_probe: function (p: PAVProbeData): cint; cdecl; + + (** + * Read the format header and initialize the AVFormatContext + * structure. Return 0 if OK. Only used in raw format right + * now. 'avformat_new_stream' should be called to create new streams. + *) + read_header: function (c: PAVFormatContext): cint; cdecl; + + (** + * Read one packet and put it in 'pkt'. pts and flags are also + * set. 'avformat_new_stream' can be called only if the flag + * AVFMTCTX_NOHEADER is used. + * @return 0 on success, < 0 on error. + * When returning an error, pkt must not have been allocated + * or must be freed before returning + *) + read_packet: function (c: PAVFormatContext; var pkt: TAVPacket): cint; cdecl; + + (** + * Close the stream. The AVFormatContext and AVStreams are not + * freed by this function + *) + read_close: function (c: PAVFormatContext): cint; cdecl; + + (** + * Seek to a given timestamp relative to the frames in + * stream component stream_index. + * @param stream_index Must not be -1. + * @param flags Selects which direction should be preferred if no exact + * match is available. + * @return >= 0 on success (but not necessarily the new offset) + *) + read_seek: function (c: PAVFormatContext; stream_index: cint; + timestamp: cint64; flags: cint): cint; cdecl; + + (** + * Get the next timestamp in stream[stream_index].time_base units. + * @return the timestamp or AV_NOPTS_VALUE if an error occurred + *) + read_timestamp: function (s: PAVFormatContext; stream_index: cint; + pos: pint64; pos_limit: cint64): cint64; cdecl; + + (** + * Start/resume playing - only meaningful if using a network-based format + * (RTSP). + *) + read_play: function (c: PAVFormatContext): cint; cdecl; + + (** + * Pause playing - only meaningful if using a network-based format + * (RTSP). + *) + read_pause: function (c: PAVFormatContext): cint; cdecl; + + (** + * Seek to timestamp ts. + * Seeking will be done so that the point from which all active streams + * can be presented successfully will be closest to ts and within min/max_ts. + * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. + *) + read_seek2: function (s: PAVFormatContext; + stream_index: cint; + min_ts: cint64; + ts: cint64; + max_ts: cint64; + flags: cint): cint; cdecl; + + (** + * Returns device list with it properties. + * @see avdevice_list_devices() for more details. + *) + get_device_list: function(s: PAVFormatContext; device_list: PAVDeviceInfoList): cint; cdecl; + + (** + * Initialize device capabilities submodule. + * @see avdevice_capabilities_create() for more details. + *) + create_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; + + (** + * Free device capabilities submodule. + * @see avdevice_capabilities_free() for more details. + *) + free_device_capabilities: function(s: PAVFormatContext; caps: PAVDeviceCapabilitiesQuery): cint; cdecl; + + end; +(** + * @} + *) + + TAVStreamParseType = ( + AVSTREAM_PARSE_NONE, + AVSTREAM_PARSE_FULL, (**< full parsing and repack *) + AVSTREAM_PARSE_HEADERS, (**< Only parse headers, do not repack. *) + AVSTREAM_PARSE_TIMESTAMPS, (**< full parsing and interpolation of timestamps for frames not starting on a packet boundary *) + AVSTREAM_PARSE_FULL_ONCE, (**< full parsing and repack of the first frame only, only implemented for H.264 currently *) + AVSTREAM_PARSE_FULL_RAW = $57415230 // MKTAG(0,'R','A','W'), + (**< full parsing and repack with timestamp and position generation by parser for raw + this assumes that each packet in the file contains no demuxer level headers and + just codec level data, otherwise position generation would fail *) + ); + + TAVIndexEntry = record + pos: cint64; + timestamp: cint64; (**< + * Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are available + * when seeking to this entry. That means preferable PTS on keyframe based formats. + * But demuxers can choose to store a different timestamp, if it is more convenient for the implementation or nothing better + * is known + *) + { Delphi doesn't support bitfields -> use flags_size instead + int flags:2; + int size:30; //Yeah, trying to keep the size of this small to reduce memory requirements (it is 24 vs. 32 bytes due to possible 8-byte alignment). + } + flags_size: cint; // 0..1: flags, 2..31: size + min_distance: cint; (**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. *) + end; + + Tduration_error = array[0..1] of array[0..MAX_STD_TIMEBASES - 1] of cdouble; + PStreamInfo = ^TStreamInfo; + TStreamInfo = record + last_dts: cint64; + duration_gcd: cint64; + duration_count: cint; + rfps_duration_sum: cint64; + duration_error: ^Tduration_error; + codec_info_duration: cint64; + codec_info_duration_fields: cint64; + (** + * 0 -> decoder has not been searched for yet. + * >0 -> decoder found + * <0 -> decoder with codec_id == -found_decoder has not been found + *) + found_decoder: cint; + + (** + * Those are used for average framerate estimation. + *) + fps_first_dts: cint64; + fps_first_dts_idx: cint; + fps_last_dts: cint64; + fps_last_dts_idx: cint; + end; + + (** + * Stream structure. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVStream) must not be used outside libav*. + *) + TAVStream = record + index: cint; (**< stream index in AVFormatContext *) + (** + * Format-specific stream ID. + * decoding: set by libavformat + * encoding: set by the user, replaced by libavformat if left unset + *) + id: cint; (**< format-specific stream ID *) +{$IFDEF FF_API_LAVF_AVCTX} + (** + * @deprecated use the codecpar struct instead + *) + codec: PAVCodecContext; {deprecated} +{$ENDIF} + priv_data: pointer; + +{$IFDEF FF_API_LAVF_FRAC} + (** + * @deprecated this field is unused + *) + pts: TAVFrac; {attribute_deprecated} +{$ENDIF} + + (** + * This is the fundamental unit of time (in seconds) in terms + * of which frame timestamps are represented. + * + * decoding: set by libavformat + * encoding: May be set by the caller before avformat_write_header() to + * provide a hint to the muxer about the desired timebase. In + * avformat_write_header(), the muxer will overwrite this field + * with the timebase that will actually be used for the timestamps + * written into the file (which may or may not be related to the + * user-provided one, depending on the format). + *) + time_base: TAVRational; + + (** + * Decoding: pts of the first frame of the stream in presentation order, in stream time base. + * Only set this if you are absolutely 100% sure that the value you set + * it to really is the pts of the first frame. + * This may be undefined (AV_NOPTS_VALUE). + * @note The ASF header does NOT contain a correct start_time the ASF + * demuxer must NOT set this. + *) + start_time: cint64; + + (** + * Decoding: duration of the stream, in stream time base. + * If a source file does not specify a duration, but does specify + * a bitrate, this value will be estimated from bitrate and file size. + *) + duration: cint64; + + nb_frames: cint64; ///< number of frames in this stream if known or 0 + + disposition: cint; (**< AV_DISPOSITION_* bitfield *) + + discard: TAVDiscard; ///< Selects which packets can be discarded at will and do not need to be demuxed. + + (** + * sample aspect ratio (0 if unknown) + * - encoding: Set by user. + * - decoding: Set by libavformat. + *) + sample_aspect_ratio: TAVRational; + + metadata: PAVDictionary; + + (** + * Average framerate + * + * - demuxing: May be set by libavformat when creating the stream or in + * avformat_find_stream_info(). + * - muxing: May be set by the caller before avformat_write_header(). + *) + avg_frame_rate: TAVRational; + + (** + * For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet + * will contain the attached picture. + * + * decoding: set by libavformat, must not be modified by the caller. + * encoding: unused + *) + attached_pic: TAVPacket; + + (** + * An array of side data that applies to the whole stream (i.e. the + * container does not allow it to change between packets). + * + * There may be no overlap between the side data in this array and side data + * in the packets. I.e. a given side data is either exported by the muxer + * (demuxing) / set by the caller (muxing) in this array, then it never + * appears in the packets, or the side data is exported / sent through + * the packets (always in the first packet where the value becomes known or + * changes), then it does not appear in this array. + * + * - demuxing: Set by libavformat when the stream is created. + * - muxing: May be set by the caller before avformat_write_header(). + * + * Freed by libavformat in avformat_free_context(). + * + * @see av_format_inject_global_side_data() + *) + side_data: PAVPacketSideData; + + (** + * The number of elements in the AVStream.side_data array. + *) + nb_side_data: cint; + + (** + * Flags for the user to detect events happening on the stream. Flags must + * be cleared by the user once the event has been handled. + * A combination of AVSTREAM_EVENT_FLAG_*. + *) + event_flags: cint; + + (***************************************************************** + * All fields below this line are not part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + + (** + * Stream information used internally by av_find_stream_info() + *) + info: PStreamInfo; + + pts_wrap_bits: cint; (**< number of bits in pts (used for wrapping control) *) + + // Timestamp generation support: + (** + * Timestamp corresponding to the last dts sync point. + * + * Initialized when AVCodecParserContext.dts_sync_point >= 0 and + * a DTS is received from the underlying container. Otherwise set to + * AV_NOPTS_VALUE by default. + *) + first_dts: cint64; + cur_dts: cint64; + last_IP_pts: cint64; + last_IP_duration: cint; + + (** + * Number of packets to buffer for codec probing + *) + probe_packets: cint; + + (** + * Number of frames that have been demuxed during av_find_stream_info() + *) + codec_info_nb_frames: cint; + + (* av_read_frame() support *) + need_parsing: TAVStreamParseType; + parser: PAVCodecParserContext; + + (** + * last packet in packet_buffer for this stream when muxing. + *) + last_in_packet_buffer: PAVPacketList; + probe_data: TAVProbeData; + pts_buffer: array [0..MAX_REORDER_DELAY] of cint64; + + index_entries: PAVIndexEntry; (**< Only used if the format does not + support seeking natively. *) + nb_index_entries: cint; + index_entries_allocated_size: cuint; + + (** + * Real base framerate of the stream. + * This is the lowest framerate with which all timestamps can be + * represented accurately (it is the least common multiple of all + * framerates in the stream). Note, this value is just a guess! + * For example, if the time base is 1/90000 and all frames have either + * approximately 3600 or 1800 timer ticks, then r_frame_rate will be 50/1. + * + * Code outside avformat should access this field using: + * av_stream_get/set_r_frame_rate(stream) + *) + r_frame_rate: TAVRational; + + (** + * Stream Identifier + * This is the MPEG-TS stream identifier +1 + * 0 means unknown + *) + stream_identifier: cint; + + interleaver_chunk_size: cint64; + interleaver_chunk_duration: cint64; + + (** + * stream probing state + * -1 -> probing finished + * 0 -> no probing requested + * rest -> perform probing with request_probe being the minimum score to accept. + * NOT PART OF PUBLIC API + *) + request_probe: cint; + (** + * Indicates that everything up to the next keyframe + * should be discarded. + *) + skip_to_keyframe: cint; + + (** + * Number of samples to skip at the start of the frame decoded from the next packet. + *) + skip_samples: cint; + + (** + * If not 0, the number of samples that should be skipped from the start of + * the stream (the samples are removed from packets with pts==0, which also + * assumes negative timestamps do not happen). + * Intended for use with formats such as mp3 with ad-hoc gapless audio + * support. + *) + start_skip_samples: cint64; + + (** + * If not 0, the first audio sample that should be discarded from the stream. + * This is broken by design (needs global sample count), but can't be + * avoided for broken by design formats such as mp3 with ad-hoc gapless + * audio support. + *) + first_discard_sample: cint64; + + (** + * The sample after last sample that is intended to be discarded after + * first_discard_sample. Works on frame boundaries only. Used to prevent + * early EOF if the gapless info is broken (considered concatenated mp3s). + *) + last_discard_sample: cint64; + + (** + * Number of internally decoded frames, used internally in libavformat, do not access + * its lifetime differs from info which is why it is not in that structure. + *) + nb_decoded_frames: cint; + + (** + * Timestamp offset added to timestamps before muxing + * NOT PART OF PUBLIC API + *) + mux_ts_offset: cint64; + + (** + * Internal data to check for wrapping of the time stamp + *) + pts_wrap_reference: cint64; + + (** + * Options for behavior, when a wrap is detected. + * + * Defined by AV_PTS_WRAP_ values. + * + * If correction is enabled, there are two possibilities: + * If the first time stamp is near the wrap point, the wrap offset + * will be subtracted, which will create negative time stamps. + * Otherwise the offset will be added. + *) + pts_wrap_behavior: cint; + + (** + * Internal data to prevent doing update_initial_durations() twice + *) + update_initial_durations_done: cint; + + (** + * Internal data to generate dts from pts + *) + pts_reorder_error: array[0..MAX_REORDER_DELAY] of cint64; + pts_reorder_error_count: array[0..MAX_REORDER_DELAY] of byte; + + (** + * Internal data to analyze DTS and detect faulty mpeg streams + *) + last_dts_for_order_check: cint64; + dts_ordered: byte; + dts_misordered: byte; + + (** + * Internal data to inject global side data + *) + inject_global_side_data: cint; + + (** + * String containing paris of key and values describing recommended encoder configuration. + * Paris are separated by ','. + * Keys are separated from values by '='. + *) + recommended_encoder_configuration: PAnsiChar; + + (** + * display aspect ratio (0 if unknown) + * - encoding: unused + * - decoding: Set by libavformat to calculate sample_aspect_ratio internally + *) + display_aspect_ratio: TAVRational; + + priv_pts: PFFFrac; + + (** + * An opaque field for libavformat internal usage. + * Must not be accessed in any way by callers. + *) + internal: pointer; + + (* + * Codec parameters associated with this stream. Allocated and freed by + * libavformat in avformat_new_stream() and avformat_free_context() + * respectively. + * + * - demuxing: filled by libavformat on stream creation or in + * avformat_find_stream_info() + * - muxing: filled by the caller before avformat_write_header() + *) + codecpar: PAVCodecParameters; + end; (** TAVStream **) + +(** + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVProgram) must not be used outside libav*. + *) + TAVProgram = record + id: cint; + flags: cint; + discard: TAVDiscard; ///< selects which program to discard and which to feed to the caller + stream_index: Pcuint; + nb_stream_indexes: cuint; + metadata: PAVDictionary; + + program_num: cint; + pmt_pid: cint; + pcr_pid: cint; + + (***************************************************************** + * All fields below this line are not part of the public API. They + * may not be used outside of libavformat and can be changed and + * removed at will. + * New public fields should be added right above. + ***************************************************************** + *) + start_time: cint64; + end_time: cint64; + + pts_wrap_reference: cint64; ///< reference dts for wrap detection + pts_wrap_behavior: cint; ///< behavior on wrap detection + end; (*AVProgram*) + + PAVChapter = ^TAVChapter; + TAVChapter = record + id: cint; ///< unique ID to identify the chapter + time_base: TAVRational; ///< time base in which the start/end timestamps are specified + start, end_: cint64; ///< chapter start/end time in time_base units + metadata: PAVDictionary; + end; (*AVChapter*) + + TAVChapterArray = array[0..(MaxInt div SizeOf(TAVChapter))-1] of TAVChapter; + PAVChapterArray = ^TAVChapterArray; + + (** + * The duration of a video can be estimated through various ways, and this enum can be used + * to know how the duration was estimated. + *) + TAVDurationEstimationMethod = ( + AVFMT_DURATION_FROM_PTS, ///< Duration accurately estimated from PTSes + AVFMT_DURATION_FROM_STREAM, ///< Duration estimated from a stream with a known duration + AVFMT_DURATION_FROM_BITRATE ///< Duration estimated from bitrate (less accurate) + ); + + PAVFormatInternal = ^TAVFormatInternal; + TAVFormatInternal = record + (** + * Number of streams relevant for interleaving. + * Muxing only. + *) + nb_interleaved_streams: cint; + inject_global_side_data: cint; + end; + + TAv_format_control_message = function (s: PAVFormatContext; type_: cint; + data: pointer; data_size: size_t): cint; cdecl; + + TAVOpenCallback = function (s: PAVFormatContext; pb: PPAVIOContext; url: {const} PAnsiChar; flags: cint; + int_cb: {const} PAVIOInterruptCB; options: PPAVDictionary): cint; cdecl; + + (** + * Format I/O context. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVFormatContext) must not be used outside libav*, use + * avformat_alloc_context() to create an AVFormatContext. + * + * Fields can be accessed through AVOptions (av_opt* ), + * the name string used matches the associated command line parameter name and + * can be found in libavformat/options_table.h. + * The AVOption/command line parameter names differ in some cases from the C + * structure field names for historic reasons or brevity. + *) + TAVFormatContext = record + (** + * A class for logging and @ref avoptions. Set by avformat_alloc_context(). + * Exports (de)muxer private options if they exist. + *) + av_class: PAVClass; (**< Set by avformat_alloc_context. *) + + (** + * The input container format. + * + * Demuxing only, set by avformat_open_input(). + *) + iformat: PAVInputFormat; + + (** + * The output container format. + * + * Muxing only, must be set by the caller before avformat_write_header(). + *) + oformat: PAVOutputFormat; + + (** + * Format private data. This is an AVOptions-enabled struct + * if and only if iformat/oformat.priv_class is not NULL. + * + * - muxing: set by avformat_write_header() + * - demuxing: set by avformat_open_input() + *) + priv_data: pointer; + + (* + * I/O context. + * + * - demuxing: either set by the user before avformat_open_input() (then + * the user must close it manually) or set by avformat_open_input(). + * - muxing: set by the user before avformat_write_header(). The caller must + * take care of closing / freeing the IO context. + * + * Do NOT set this field if AVFMT_NOFILE flag is set in + * iformat/oformat.flags. In such a case, the (de)muxer will handle + * I/O in some other way and this field will be NULL. + *) + pb: PAVIOContext; + + (* stream info *) + (** + * Flags signalling stream properties. A combination of AVFMTCTX_*. + * Set by libavformat. + *) + ctx_flags: cint; + + (** + * Number of elements in AVFormatContext.streams. + * + * Set by avformat_new_stream(), must not be modified by any other code. + *) + nb_streams: cuint; + + (** + * A list of all streams in the file. New streams are created with + * avformat_new_stream(). + * + * - demuxing: streams are created by libavformat in avformat_open_input(). + * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also + * appear in av_read_frame(). + * - muxing: streams are created by the user before avformat_write_header(). + * + * Freed by libavformat in avformat_free_context(). + *) + streams: PPAVStream; + + (** + * input or output filename + * + * - demuxing: set by avformat_open_input() + * - muxing: may be set by the caller before avformat_write_header() + *) + filename: array [0..1023] of AnsiChar; (* input or output filename *) + + (** + * Position of the first frame of the component, in + * AV_TIME_BASE fractional seconds. NEVER set this value directly: + * It is deduced from the AVStream values. + * + * Demuxing only, set by libavformat. + *) + start_time: cint64; + (** + * Duration of the stream, in AV_TIME_BASE fractional + * seconds. Only set this value if you know none of the individual stream + * durations and also dont set any of them. This is deduced from the + * AVStream values if not set. + *) + duration: cint64; + + (** + * Total stream bitrate in bit/s, 0 if not + * available. Never set it directly if the file_size and the + * duration are known as ffmpeg can compute it automatically. + *) + bit_rate: cint64; + + packet_size: cuint; + max_delay: cint; + + (** + * Flags modifying the (de)muxer behaviour. A combination of AVFMT_FLAG_*. + * Set by the user before avformat_open_input() / avformat_write_header(). + *) + flags: cint; + + (** + * Maximum size of the data read from input for determining + * the input container format. + * Demuxing only, set by the caller before avformat_open_input(). + *) + probesize: cint64; + + (** + * Maximum duration (in AV_TIME_BASE units) of the data read + * from input in avformat_find_stream_info(). + * Demuxing only, set by the caller before avformat_find_stream_info(). + * Can be set to 0 to let avformat choose using a heuristic. + *) + max_analyze_duration: cint64; + + key: pbyte; + keylen: cint; + + nb_programs: cuint; + programs: PPAVProgram; + + (** + * Forced video codec_id. + * Demuxing: Set by user. + *) + video_codec_id: TAVCodecID; + + (** + * Forced audio codec_id. + * Demuxing: Set by user. + *) + audio_codec_id: TAVCodecID; + + (** + * Forced subtitle codec_id. + * Demuxing: Set by user. + *) + subtitle_codec_id: TAVCodecID; + + (** + * Maximum amount of memory in bytes to use for the index of each stream. + * If the index exceeds this size, entries will be discarded as + * needed to maintain a smaller size. This can lead to slower or less + * accurate seeking (depends on demuxer). + * Demuxers for which a full in-memory index is mandatory will ignore + * this. + * - muxing: unused + * - demuxing: set by user + *) + max_index_size: cuint; + + (** + * Maximum amount of memory in bytes to use for buffering frames + * obtained from realtime capture devices. + *) + max_picture_buffer: cuint; + + nb_chapters: cuint; + chapters: PAVChapterArray; + + (** + * Metadata that applies to the whole file. + * + * - demuxing: set by libavformat in avformat_open_input() + * - muxing: may be set by the caller before avformat_write_header() + * + * Freed by libavformat in avformat_free_context(). + *) + metadata: PAVDictionary; + + (** + * Start time of the stream in real world time, in microseconds + * since the Unix epoch (00:00 1st January 1970). That is, pts=0 in the + * stream was captured at this real world time. + * - muxing: Set by the caller before avformat_write_header(). If set to + * either 0 or AV_NOPTS_VALUE, then the current wall-time will + * be used. + * - demuxing: Set by libavformat. AV_NOPTS_VALUE if unknown. Note that + * the value may become known after some number of frames + * have been received. + *) + start_time_realtime: cint64; + + (** + * The number of frames used for determining the framerate in + * avformat_find_stream_info(). + * Demuxing only, set by the caller before avformat_find_stream_info(). + *) + fps_probe_size: cint; + + (** + * Error recognition; higher values will detect more errors but may + * misdetect some more or less valid parts as errors. + * Demuxing only, set by the caller before avformat_open_input(). + *) + error_recognition: cint; + + (** + * Custom interrupt callbacks for the I/O layer. + * + * demuxing: set by the user before avformat_open_input(). + * muxing: set by the user before avformat_write_header() + * (mainly useful for AVFMT_NOFILE formats). The callback + * should also be passed to avio_open2() if it's used to + * open the file. + *) + interrupt_callback: TAVIOInterruptCB; + + (** + * Flags to enable debugging. + *) + debug: cint; + + (** + * Maximum buffering duration for interleaving. + * + * To ensure all the streams are interleaved correctly, + * av_interleaved_write_frame() will wait until it has at least one packet + * for each stream before actually writing any packets to the output file. + * When some streams are "sparse" (i.e. there are large gaps between + * successive packets), this can result in excessive buffering. + * + * This field specifies the maximum difference between the timestamps of the + * first and the last packet in the muxing queue, above which libavformat + * will output a packet regardless of whether it has queued a packet for all + * the streams. + * + * Muxing only, set by the caller before avformat_write_header(). + *) + max_interleave_delta: cint64; + + (** + * Allow non-standard and experimental extension + * @see AVCodecContext.strict_std_compliance + *) + strict_std_compliance: cint; + + (** + * Flags for the user to detect events happening on the file. Flags must + * be cleared by the user once the event has been handled. + * A combination of AVFMT_EVENT_FLAG_*. + *) + event_flags: cint; + + (** + * Maximum number of packets to read while waiting for the first timestamp. + * Decoding only. + *) + max_ts_probe: cint; + + (** + * Avoid negative timestamps during muxing. + * Any value of the AVFMT_AVOID_NEG_TS_* constants. + * Note, this only works when using av_interleaved_write_frame. (interleave_packet_per_dts is in use) + * - muxing: Set by user + * - demuxing: unused + *) + avoid_negative_ts: cint; + + (** + * Transport stream id. + * This will be moved into demuxer private options. Thus no API/ABI compatibility + *) + ts_id: cint; + + (** + * Audio preload in microseconds. + * Note, not all formats support this and unpredictable things may happen if it is used when not supported. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + *) + audio_preload: cint; + + (** + * Max chunk time in microseconds. + * Note, not all formats support this and unpredictable things may happen if it is used when not supported. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + *) + max_chunk_duration: cint; + + (** + * Max chunk size in bytes + * Note, not all formats support this and unpredictable things may happen if it is used when not supported. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + *) + max_chunk_size: cint; + + (** + * forces the use of wallclock timestamps as pts/dts of packets + * This has undefined results in the presence of B frames. + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + *) + use_wallclock_as_timestamps: cint; + + (** + * avio flags, used to force AVIO_FLAG_DIRECT. + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + *) + avio_flags: cint; + + (** + * The duration field can be estimated through various ways, and this field can be used + * to know how the duration was estimated. + * - encoding: unused + * - decoding: Read by user via AVOptions (NO direct access) + *) + duration_estimation_method: TAVDurationEstimationMethod; + + (** + * Skip initial bytes when opening stream + * - encoding: unused + * - decoding: Set by user via AVOptions (NO direct access) + *) + skip_initial_bytes: cint64; + + (** + * Correct single timestamp overflows + * - encoding: unused + * - decoding: Set by user via AVOPtions (NO direct access) + *) + correct_ts_overflow: cuint; + + (** + * Force seeking to any (also non key) frames. + * - encoding: unused + * - decoding: Set by user via AVOPtions (NO direct access) + *) + seek2any: cint; + + (** + * Flush the I/O context after each packet. + * - encoding: Set by user via AVOptions (NO direct access) + * - decoding: unused + *) + flush_packets: cint; + + (** + * format probing score. + * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes + * the format. + * - encoding: unused + * - decoding: set by avformat, read by user via av_format_get_probe_score() (NO direct access) + *) + probe_score: cint; + + (** + * number of bytes to read maximally to identify format. + * - encoding: unused + * - decoding: set by user through AVOPtions (NO direct access) + *) + format_probesize: cint; + + (** + * ',' separated list of allowed decoders. + * If NULL then all are allowed + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + codec_whitelist: PAnsiChar; + + (** + * ',' separated list of allowed demuxers. + * If NULL then all are allowed + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + format_whitelist: PAnsiChar; + + + (** + * An opaque field for libavformat internal usage. + * Must not be accessed in any way by callers. + *) + internal: PAVFormatInternal; + + (** + * IO repositioned flag. + * This is set by avformat when the underlaying IO context read pointer + * is repositioned, for example when doing byte based seeking. + * Demuxers can use the flag to detect such changes. + *) + io_repositioned: cint; + + (** + * Forced video codec. + * This allows forcing a specific decoder, even when there are multiple with + * the same codec_id. + * Demuxing: Set by user via av_format_set_video_codec (NO direct access). + *) + video_codec: PAVCodec; + + (** + * Forced audio codec. + * This allows forcing a specific decoder, even when there are multiple with + * the same codec_id. + * Demuxing: Set by user via av_format_set_audio_codec (NO direct access). + *) + audio_codec: PAVCodec; + + (** + * Forced subtitle codec. + * This allows forcing a specific decoder, even when there are multiple with + * the same codec_id. + * Demuxing: Set by user via av_format_set_subtitle_codec (NO direct access). + *) + subtitle_codec: PAVCodec; + + (** + * Forced data codec. + * This allows forcing a specific decoder, even when there are multiple with + * the same codec_id. + * Demuxing: Set by user via av_format_set_data_codec (NO direct access). + *) + data_codec: PAVCodec; + + (** + * Number of bytes to be written as padding in a metadata header. + * Demuxing: Unused. + * Muxing: Set by user via av_format_set_metadata_header_padding. + *) + metadata_header_padding: cint; + + (** + * User data. + * This is a place for some private data of the user. + *) + opaque: pointer; + + (** + * Callback used by devices to communicate with application. + *) + control_message_cb: TAv_format_control_message; + + (** + * Output timestamp offset, in microseconds. + * Muxing: set by user via AVOptions (NO direct access) + *) + output_ts_offset: cint64; + + (** + * dump format separator. + * can be ", " or "\n " or anything else + * Code outside libavformat should access this field using AVOptions + * (NO direct access). + * - muxing: Set by user. + * - demuxing: Set by user. + *) + dump_separator: Pcuint8; + + (** + * Forced Data codec_id. + * Demuxing: Set by user. + *) + data_codec_id: TAVCodecID; +{$IFDEF FF_API_OLD_OPEN_CALLBACKS} + (** + * Called to open further IO contexts when needed for demuxing. + * + * This can be set by the user application to perform security checks on + * the URLs before opening them. + * The function should behave like avio_open2(), AVFormatContext is provided + * as contextual information and to reach AVFormatContext.opaque. + * + * If NULL then some simple checks are used together with avio_open2(). + * + * Must not be accessed directly from outside avformat. + * @See av_format_set_open_cb() + * + * Demuxing: Set by user. + * + * @deprecated Use io_open and io_close. + *) + open_cb: function(s: PAVFormatContext; p: PPAVIOContext; url: {const} PAnsiChar; flags: cint; int_cb: {const} PAVIOInterruptCB; options: PPAVDictionary): cint; cdecl; {deprecated} +{$ENDIF} + + (** + * ',' separated list of allowed protocols. + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + protocol_whitelist: pchar; + + (* + * A callback for opening new IO streams. + * + * Whenever a muxer or a demuxer needs to open an IO stream (typically from + * avformat_open_input() for demuxers, but for certain formats can happen at + * other times as well), it will call this callback to obtain an IO context. + * + * @param s the format context + * @param pb on success, the newly opened IO context should be returned here + * @param url the url to open + * @param flags a combination of AVIO_FLAG_* + * @param options a dictionary of additional options, with the same + * semantics as in avio_open2() + * @return 0 on success, a negative AVERROR code on failure + * + * @note Certain muxers and demuxers do nesting, i.e. they open one or more + * additional internal format contexts. Thus the AVFormatContext pointer + * passed to this callback may be different from the one facing the caller. + * It will, however, have the same 'opaque' field. + *) + io_open: function(s: PAVFormatContext; pb: PPAVIOContext; url: {const} pchar; + flags: cint; options: PPAVDictionary): cint; cdecl; + + (** + * A callback for closing the streams opened with AVFormatContext.io_open(). + *) + io_close: procedure(s: PAVFormatContext; pb: PAVIOContext); cdecl; + + (** + * ',' separated list of disallowed protocols. + * - encoding: unused + * - decoding: set by user through AVOptions (NO direct access) + *) + protocol_blacklist: PAnsiChar; + end; (** TAVFormatContext **) + + TAVTimebaseSource = ( + AVFMT_TBCF_AUTO = -1, + AVFMT_TBCF_DECODER, + AVFMT_TBCF_DEMUXER, +{$IFDEF FF_API_R_FRAME_RATE} + AVFMT_TBCF_R_FRAMERATE +{$ENDIF} + ); + +function av_format_get_probe_score(s: {const} PAVFormatContext): cint; + cdecl; external av__format; +function av_format_get_video_codec(s: {const} PAVFormatContext): PAVCodec; + cdecl; external av__format; +procedure av_format_set_video_codec(s: PAVFormatContext; c: PAVCodec); + cdecl; external av__format; +function av_format_get_audio_codec(s: {const} PAVFormatContext): PAVCodec; + cdecl; external av__format; +procedure av_format_set_audio_codec(s: PAVFormatContext; c: PAVCodec); + cdecl; external av__format; +function av_format_get_subtitle_codec(s: {const} PAVFormatContext): PAVCodec; + cdecl; external av__format; +procedure av_format_set_subtitle_codec(s: PAVFormatContext; c: PAVCodec); + cdecl; external av__format; +function av_format_get_data_codec(s: {const} PAVFormatContext): PAVCodec; + cdecl; external av__format; +procedure av_format_set_data_codec(s: PAVFormatContext; c: PAVCodec); + cdecl; external av__format; +function av_format_get_metadata_header_padding(s: {const} PAVFormatContext): cint; + cdecl; external av__format; +procedure av_format_set_metadata_header_padding(s: PAVFormatContext; c: cint); + cdecl; external av__format; +procedure av_format_get_opaque(s: {const} PAVFormatContext); + cdecl; external av__format; +procedure av_format_set_opaque(s: PAVFormatContext; opaque: pointer); + cdecl; external av__format; +function av_format_get_control_message_cb(s: {const} PAVFormatContext): TAv_format_control_message; + cdecl; external av__format; +procedure av_format_set_control_message_cb(s: PAVFormatContext; callback: TAv_format_control_message); + cdecl; external av__format; +{$IFDEF FF_API_OLD_OPEN_CALLBACKS} +function av_format_get_open_cb(s: {const} PAVFormatContext): TAVOpenCallback; {deprecated} + cdecl; external av__format; +procedure av_format_set_open_cb(s: PAVFormatContext; callback: TAVOpenCallback); {deprecated} + cdecl; external av__format; +{$ENDIF} + +(** + * This function will cause global side data to be injected in the next packet + * of each stream as well as after any subsequent seek. + *) +procedure av_format_inject_global_side_data(s: PAVFormatContext); + cdecl; external av__format; + +(** + * Returns the method used to set ctx->duration. + * + * @return AVFMT_DURATION_FROM_PTS, AVFMT_DURATION_FROM_STREAM, or AVFMT_DURATION_FROM_BITRATE. + *) +function av_fmt_ctx_get_duration_estimation_method(ctx: {const} PAVFormatContext): TAVDurationEstimationMethod; + cdecl; external av__format; + +function av_stream_get_r_frame_rate({const} s: PAVStream): TAVRational; + cdecl; external av__format; +procedure av_stream_set_r_frame_rate(s: PAVStream; r: TAVRational); + cdecl; external av__format; +function av_stream_get_parser(s: {const} PAVStream): PAVCodecParserContext; + cdecl; external av__format; +function av_stream_get_recommended_encoder_configuration({const} s: PAVStream): PAnsiChar; + cdecl; external av__format; +procedure av_stream_set_recommended_encoder_configuration(s: PAVStream; configuration: PAnsiChar); + cdecl; external av__format; + +(** + * Returns the pts of the last muxed packet + its duration + * + * the retuned value is undefined when used with a demuxer. + *) +function av_stream_get_end_pts(st: {const} PAVStream): cint64; + cdecl; external av__format; + +(** + * @defgroup lavf_core Core functions + * @ingroup libavf + * + * Functions for querying libavformat capabilities, allocating core structures, + * etc. + * @ + *) + +(** + * Return the LIBAVFORMAT_VERSION_INT constant. + *) +function avformat_version(): cuint; + cdecl; external av__format; + +(** + * Return the libavformat build-time configuration. + *) +function avformat_configuration(): {const} PansiChar; + cdecl; external av__format; + +(** + * Return the libavformat license. + *) +function avformat_license(): {const} PansiChar; + cdecl; external av__format; + +(** + * Initialize libavformat and register all the muxers, demuxers and + * protocols. If you do not call this function, then you can select + * exactly which formats you want to support. + * + * @see av_register_input_format() + * @see av_register_output_format() + * @see av_register_protocol() + *) +procedure av_register_all(); + cdecl; external av__format; + +procedure av_register_input_format(format: PAVInputFormat); + cdecl; external av__format; +procedure av_register_output_format(format: PAVOutputFormat); + cdecl; external av__format; + +(** + * Do global initialization of network components. This is optional, + * but recommended, since it avoids the overhead of implicitly + * doing the setup for each session. + * + * Calling this function will become mandatory if using network + * protocols at some major version bump. + *) +function avformat_network_init(): cint; + cdecl; external av__format; + +(** + * Undo the initialization done by avformat_network_init. + *) +function avformat_network_deinit(): cint; + cdecl; external av__format; + +(** + * If f is NULL, returns the first registered input format, + * if f is non-NULL, returns the next registered input format after f + * or NULL if f is the last one. + *) +function av_iformat_next(f: {const} PAVInputFormat): PAVInputFormat; + cdecl; external av__format; +(** + * If f is NULL, returns the first registered output format, + * if f is non-NULL, returns the next registered input format after f + * or NULL if f is the last one. + *) +function av_oformat_next(f: {const} PAVOutputFormat): PAVOutputFormat; + cdecl; external av__format; + +(** + * Allocate an AVFormatContext. + * Can be freed with av_free() but do not forget to free everything you + * explicitly allocated as well! + *) +function avformat_alloc_context(): PAVFormatContext; + cdecl; external av__format; + +(** + * Free an AVFormatContext and all its streams. + * @param s context to free + *) +procedure avformat_free_context(s: PAVFormatContext); + cdecl; external av__format; + +(** + * Get the AVClass for AVFormatContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function avformat_get_class(): {const} PAVClass; + cdecl; external av__format; + +(** + * Add a new stream to a media file. + * + * When demuxing, it is called by the demuxer in read_header(). If the + * flag AVFMTCTX_NOHEADER is set in s.ctx_flags, then it may also + * be called in read_packet(). + * + * When muxing, should be called by the user before avformat_write_header(). + * + * User is required to call avcodec_close() and avformat_free_context() to + * clean up the allocation by avformat_new_stream(). + * + * @param s media file handle + * @param c If non-NULL, the AVCodecContext corresponding to the new stream + * will be initialized to use this codec. This is needed for e.g. codec-specific + * defaults to be set, so codec should be provided if it is known. + * + * @return newly created stream or NULL on error. + *) +function avformat_new_stream(s: PAVFormatContext; c: {const} PAVCodec): PAVStream; + cdecl; external av__format; + +(** + * Allocate new information from stream. + * + * @param stream stream + * @param type desired side information type + * @param size side information size + * @return pointer to fresh allocated data or NULL otherwise + *) +function av_stream_new_side_data(stream: PAVStream; + type_: TAVPacketSideDataType; size: cint): Pcuint8; + cdecl; external av__format; + +(** + * Get side information from stream. + * + * @param stream stream + * @param type desired side information type + * @param size pointer for side information size to store (optional) + * @return pointer to data if present or NULL otherwise + *) +{$IFDEF FF_API_NOCONST_GET_SIDE_DATA} +function av_stream_get_side_data(stream: PAVStream; + type_: TAVPacketSideDataType; size: Pcint): Pcuint8; + cdecl; external av__format; +{$ELSE} +function av_stream_get_side_data(stream: {const} PAVStream; + type_: TAVPacketSideDataType; size: Pcint): Pcuint8; + cdecl; external av__format; +{$ENDIF} + +function av_new_program(s: PAVFormatContext; id: cint): PAVProgram; + cdecl; external av__format; + +(** + * @} + *) + +{$IFDEF FF_API_PKT_DUMP} +procedure av_pkt_dump(f: PAVFile; pkt: PAVPacket; dump_payload: cint); {deprecated} + cdecl; external av__format; +procedure av_pkt_dump_log(avcl: Pointer; level: cint; pkt: PAVPacket; dump_payload: cint); {deprecated} + cdecl; external av__format; +{$IFEND} + +(** + * Allocate an AVFormatContext for an output format. + * avformat_free_context() can be used to free the context and + * everything allocated by the framework within it. + * + * @param *ctx is set to the created format context, or to NULL in + * case of failure + * @param oformat format to use for allocating the context, if NULL + * format_name and filename are used instead + * @param format_name the name of output format to use for allocating the + * context, if NULL filename is used instead + * @param filename the name of the filename to use for allocating the + * context, may be NULL + * @return >= 0 in case of success, a negative AVERROR code in case of + * failure + *) +function avformat_alloc_output_context2(ctx: PPAVFormatContext; oformat: PAVOutputFormat; + {const} format_name: PAnsiChar; {const} filename: PAnsiChar): cint; + cdecl; external av__format; + +(** + * @addtogroup lavf_decoding + * @ + *) + +(** + * Find AVInputFormat based on the short name of the input format. + *) +function av_find_input_format(short_name: PAnsiChar): PAVInputFormat; + cdecl; external av__format; + +(** + * Guess the file format. + * + * @param pd data to be probed + * @param is_opened Whether the file is already opened; determines whether + * demuxers with or without AVFMT_NOFILE are probed. + *) +function av_probe_input_format(pd: PAVProbeData; is_opened: cint): PAVInputFormat; + cdecl; external av__format; + +(** + * Guess the file format. + * + * @param pd data to be probed + * @param is_opened Whether the file is already opened; determines whether + * demuxers with or without AVFMT_NOFILE are probed. + * @param score_max A probe score larger that this is required to accept a + * detection, the variable is set to the actual detection + * score afterwards. + * If the score is <= AVPROBE_SCORE_MAX / 4 it is recommended + * to retry with a larger probe buffer. + *) +function av_probe_input_format2(pd: PAVProbeData; is_opened: cint; score_max: PCint): PAVInputFormat; + cdecl; external av__format; + +(** + * Guess the file format. + * + * @param is_opened Whether the file is already opened; determines whether + * demuxers with or without AVFMT_NOFILE are probed. + * @param score_ret The score of the best detection. + *) +function av_probe_input_format3(pd: PAVProbeData; is_opened: cint; score_ret: Pcint): PAVInputFormat; + cdecl; external av__format; + +(** + * Probe a bytestream to determine the input format. Each time a probe returns + * with a score that is too low, the probe buffer size is increased and another + * attempt is made. When the maximum probe size is reached, the input format + * with the highest score is returned. + * + * @param pb the bytestream to probe + * @param fmt the input format is put here + * @param url the url of the stream + * @param logctx the log context + * @param offset the offset within the bytestream to probe from + * @param max_probe_size the maximum probe buffer size (zero for default) + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code otherwise + *) +function av_probe_input_buffer2(pb: PAVIOContext; var fmt: PAVInputFormat; + url: {const} PAnsiChar; logctx: pointer; + offset: cuint; max_probe_size: cuint): cint; + cdecl; external av__format; + +(** + * Like av_probe_input_buffer2() but returns 0 on success + *) +function av_probe_input_buffer(pb: PAVIOContext; var fmt: PAVInputFormat; + url: {const} PAnsiChar; logctx: pointer; + offset: cuint; max_probe_size: cuint): cint; + cdecl; external av__format; + +(** + * Open an input stream and read the header. The codecs are not opened. + * The stream must be closed with av_close_input_file(). + * + * @param ps Pointer to user-supplied AVFormatContext (allocated by avformat_alloc_context). + * May be a pointer to NULL, in which case an AVFormatContext is allocated by this + * function and written into ps. + * Note that a user-supplied AVFormatContext will be freed on failure. + * @param url URL of the stream to open. + * @param fmt If non-NULL, this parameter forces a specific input format. + * Otherwise the format is autodetected. + * @param options A dictionary filled with AVFormatContext and demuxer-private options. + * On return this parameter will be destroyed and replaced with a dict containing + * options that were not found. May be NULL. + * + * @return 0 on success, a negative AVERROR on failure. + * + * @note If you want to use custom IO, preallocate the format context and set its pb field. + *) +function avformat_open_input(ps: PPAVFormatContext; url: {const} PAnsiChar; fmt: PAVInputFormat; options: PPAVDictionary): cint; + cdecl; external av__format; + +function av_demuxer_open(ic: PAVFormatContext): cint; + cdecl; external av__format; deprecated; + +(** + * Read packets of a media file to get stream information. This + * is useful for file formats with no headers such as MPEG. This + * function also computes the real framerate in case of MPEG-2 repeat + * frame mode. + * The logical file position is not changed by this function; + * examined packets may be buffered for later processing. + * + * @param ic media file handle + * @param options If non-NULL, an ic.nb_streams long array of pointers to + * dictionaries, where i-th member contains options for + * codec corresponding to i-th stream. + * On return each dictionary will be filled with options that were not found. + * @return >=0 if OK, AVERROR_xxx on error + * + * @note this function isn't guaranteed to open all the codecs, so + * options being non-empty at return is a perfectly normal behavior. + * + * @todo Let the user decide somehow what information is needed so that + * we do not waste time getting stuff the user does not need. + *) +function avformat_find_stream_info(ic: PAVFormatContext; options: PPAVDictionary): cint; + cdecl; external av__format; + +(** + * Find the programs which belong to a given stream. + * + * @param ic media file handle + * @param last the last found program, the search will start after this + * program, or from the beginning if it is NULL + * @param s stream index + * @return the next program which belongs to s, NULL if no program is found or + * the last program is not among the programs of ic. + *) +function av_find_program_from_stream(ic: PAVFormatContext; last: PAVProgram; s: cint): PAVProgram; + cdecl; external av__format; + +procedure av_program_add_stream_index(ac: PAVFormatContext; progid: cint; idx: cuint); + cdecl; external av__format; + +(** + * Find the "best" stream in the file. + * The best stream is determined according to various heuristics as the most + * likely to be what the user expects. + * If the decoder parameter is non-NULL, av_find_best_stream will find the + * default decoder for the stream's codec; streams for which no decoder can + * be found are ignored. + * + * @param ic media file handle + * @param type stream type: video, audio, subtitles, etc. + * @param wanted_stream_nb user-requested stream number, + * or -1 for automatic selection + * @param related_stream try to find a stream related (eg. in the same + * program) to this one, or -1 if none + * @param decoder_ret if non-NULL, returns the decoder for the + * selected stream + * @param flags flags; none are currently defined + * @return the non-negative stream number in case of success, + * AVERROR_STREAM_NOT_FOUND if no stream with the requested type + * could be found, + * AVERROR_DECODER_NOT_FOUND if streams were found but no decoder + * @note If av_find_best_stream returns successfully and decoder_ret is not + * NULL, then *decoder_ret is guaranteed to be set to a valid AVCodec. + *) +function av_find_best_stream(ic: PAVFormatContext; + type_: TAVMediaType; + wanted_stream_nb: cint; + related_stream: cint; + decoder_ret: PPAVCodec; + flags: cint): cint; + cdecl; external av__format; + +(** + * Return the next frame of a stream. + * This function returns what is stored in the file, and does not validate + * that what is there are valid frames for the decoder. It will split what is + * stored in the file into frames and return one for each call. It will not + * omit invalid data between valid frames so as to give the decoder the maximum + * information possible for decoding. + * + * If pkt->buf is NULL, then the packet is valid until the next + * av_read_frame() or until avformat_close_input(). Otherwise the packet + * is valid indefinitely. In both cases the packet must be freed with + * av_packet_unref when it is no longer needed. For video, the packet contains + * exactly one frame. For audio, it contains an integer number of frames if each + * frame has a known fixed size (e.g. PCM or ADPCM data). If the audio frames + * have a variable size (e.g. MPEG audio), then it contains one frame. + * + * pkt->pts, pkt->dts and pkt->duration are always set to correct + * values in AVStream.time_base units (and guessed if the format cannot + * provide them). pkt->pts can be AV_NOPTS_VALUE if the video format + * has B-frames, so it is better to rely on pkt->dts if you do not + * decompress the payload. + * + * @return 0 if OK, < 0 on error or end of file + *) +function av_read_frame(s: PAVFormatContext; var pkt: TAVPacket): cint; + cdecl; external av__format; + +(** + * Seek to the keyframe at timestamp. + * 'timestamp' in 'stream_index'. + * + * @param s media file handle + * @param stream_index If stream_index is (-1), a default + * stream is selected, and timestamp is automatically converted + * from AV_TIME_BASE units to the stream specific time_base. + * @param timestamp Timestamp in AVStream.time_base units + * or, if no stream is specified, in AV_TIME_BASE units. + * @param flags flags which select direction and seeking mode + * @return >= 0 on success + *) +function av_seek_frame(s: PAVFormatContext; stream_index: cint; timestamp: cint64; + flags: cint): cint; + cdecl; external av__format; + + +(** + * Seek to timestamp ts. + * Seeking will be done so that the point from which all active streams + * can be presented successfully will be closest to ts and within min/max_ts. + * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL. + * + * If flags contain AVSEEK_FLAG_BYTE, then all timestamps are in bytes and + * are the file position (this may not be supported by all demuxers). + * If flags contain AVSEEK_FLAG_FRAME, then all timestamps are in frames + * in the stream with stream_index (this may not be supported by all demuxers). + * Otherwise all timestamps are in units of the stream selected by stream_index + * or if stream_index is -1, in AV_TIME_BASE units. + * If flags contain AVSEEK_FLAG_ANY, then non-keyframes are treated as + * keyframes (this may not be supported by all demuxers). + * If flags contain AVSEEK_FLAG_BACKWARD, it is ignored. + * + * @param s media file handle + * @param stream_index index of the stream which is used as time base reference + * @param min_ts smallest acceptable timestamp + * @param ts target timestamp + * @param max_ts largest acceptable timestamp + * @param flags flags + * @return >=0 on success, error code otherwise + * + * @note This is part of the new seek API which is still under construction. + * Thus do not use this yet. It may change at any time, do not expect + * ABI compatibility yet! + *) +function avformat_seek_file(s: PAVFormatContext; stream_index: cint; min_ts, ts, max_ts: cint64; flags: cint): cint; + cdecl; external av__format; + +(** + * Discard all internally buffered data. This can be useful when dealing with + * discontinuities in the byte stream. Generally works only with formats that + * can resync. This includes headerless formats like MPEG-TS/TS but should also + * work with NUT, Ogg and in a limited way AVI for example. + * + * The set of streams, the detected duration, stream parameters and codecs do + * not change when calling this function. If you want a complete reset, it's + * better to open a new AVFormatContext. + * + * This does not flush the AVIOContext (s->pb). If necessary, call + * avio_flush(s->pb) before calling this function. + * + * @param s media file handle + * @return >=0 on success, error code otherwise + *) +function avformat_flush(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Start playing a network-based stream (e.g. RTSP stream) at the + * current position. + *) +function av_read_play(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Pause a network-based stream (e.g. RTSP stream). + * + * Use av_read_play() to resume it. + *) +function av_read_pause(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Close an opened input AVFormatContext. Free it and all its contents + * and set *s to NULL. + *) +procedure avformat_close_input(s: PPAVFormatContext); + cdecl; external av__format; +(** + * @} + *) + +const + AVSEEK_FLAG_BACKWARD = 1; ///< seek backward + AVSEEK_FLAG_BYTE = 2; ///< seeking based on position in bytes + AVSEEK_FLAG_ANY = 4; ///< seek to any frame, even non-keyframes + AVSEEK_FLAG_FRAME = 8; + + AVSTREAM_INIT_IN_WRITE_HEADER = 0; ///< stream parameters initialized in avformat_write_header + AVSTREAM_INIT_IN_INIT_OUTPUT = 1; ///< stream parameters initialized in avformat_init_output + + AV_FRAME_FILENAME_FLAGS_MULTIPLE = 1; ///< Allow multiple %d + +(** + * @addtogroup lavf_encoding + * @{ + *) +(** + * Allocate the stream private data and write the stream header to + * an output media file. + * + * @param s Media file handle, must be allocated with avformat_alloc_context(). + * Its oformat field must be set to the desired output format; + * Its pb field must be set to an already opened AVIOContext. + * @param options An AVDictionary filled with AVFormatContext and muxer-private options. + * On return this parameter will be destroyed and replaced with a dict containing + * options that were not found. May be NULL. + * + * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec had not already been fully initialized in avformat_init, + * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec had already been fully initialized in avformat_init, + * negative AVERROR on failure. + * + * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_init_output. + *) +function avformat_write_header(s: PAVFormatContext; options: {PPAVDictionary} pointer): cint; + cdecl; external av__format; + +(** + * Allocate the stream private data and initialize the codec, but do not write the header. + * May optionally be used before avformat_write_header to initialize stream parameters + * before actually writing the header. + * If using this function, do not pass the same options to avformat_write_header. + * + * @param s Media file handle, must be allocated with avformat_alloc_context(). + * Its oformat field must be set to the desired output format; + * Its pb field must be set to an already opened AVIOContext. + * @param options An AVDictionary filled with AVFormatContext and muxer-private options. + * On return this parameter will be destroyed and replaced with a dict containing + * options that were not found. May be NULL. + * + * @return AVSTREAM_INIT_IN_WRITE_HEADER on success if the codec requires avformat_write_header to fully initialize, + * AVSTREAM_INIT_IN_INIT_OUTPUT on success if the codec has been fully initialized, + * negative AVERROR on failure. + * + * @see av_opt_find, av_dict_set, avio_open, av_oformat_next, avformat_write_header. + *) +{av_warn_unused_result} +function avformat_init_output(s: PAVFormatContext; options: PPAVDictionary): cint; + cdecl; external av__format; + +(** + * Write a packet to an output media file. + * + * This function passes the packet directly to the muxer, without any buffering + * or reordering. The caller is responsible for correctly interleaving the + * packets if the format requires it. Callers that want libavformat to handle + * the interleaving should call av_interleaved_write_frame() instead of this + * function. + * + * @param s media file handle + * @param pkt The packet containing the data to be written. Note that unlike + * av_interleaved_write_frame(), this function does not take + * ownership of the packet passed to it (though some muxers may make + * an internal reference to the input packet). + * <br> + * This parameter can be NULL (at any time, not just at the end), in + * order to immediately flush data buffered within the muxer, for + * muxers that buffer up data internally before writing it to the + * output. + * <br> + * Packet's @ref AVPacket.stream_index "stream_index" field must be + * set to the index of the corresponding stream in @ref + * AVFormatContext.streams "s->streams". + * <br> + * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") + * must be set to correct values in the stream's timebase (unless the + * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then + * they can be set to AV_NOPTS_VALUE). + * The dts for subsequent packets passed to this function must be strictly + * increasing when compared in their respective timebases (unless the + * output format is flagged with the AVFMT_TS_NONSTRICT, then they + * merely have to be nondecreasing). @ref AVPacket.duration + * "duration") should also be set if known. + * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush + * + * @see av_interleaved_write_frame() + *) +function av_write_frame(s: PAVFormatContext; pkt: PAVPacket): cint; + cdecl; external av__format; + +(** + * Write a packet to an output media file ensuring correct interleaving. + * + * This function will buffer the packets internally as needed to make sure the + * packets in the output file are properly interleaved in the order of + * increasing dts. Callers doing their own interleaving should call + * av_write_frame() instead of this function. + * + * Using this function instead of av_write_frame() can give muxers advance + * knowledge of future packets, improving e.g. the behaviour of the mp4 + * muxer for VFR content in fragmenting mode. + * + * @param s media file handle + * @param pkt The packet containing the data to be written. + * <br> + * If the packet is reference-counted, this function will take + * ownership of this reference and unreference it later when it sees + * fit. + * The caller must not access the data through this reference after + * this function returns. If the packet is not reference-counted, + * libavformat will make a copy. + * <br> + * This parameter can be NULL (at any time, not just at the end), to + * flush the interleaving queues. + * <br> + * Packet's @ref AVPacket.stream_index "stream_index" field must be + * set to the index of the corresponding stream in @ref + * AVFormatContext.streams "s->streams". + * <br> + * The timestamps (@ref AVPacket.pts "pts", @ref AVPacket.dts "dts") + * must be set to correct values in the stream's timebase (unless the + * output format is flagged with the AVFMT_NOTIMESTAMPS flag, then + * they can be set to AV_NOPTS_VALUE). + * The dts for subsequent packets in one stream must be strictly + * increasing (unless the output format is flagged with the + * AVFMT_TS_NONSTRICT, then they merely have to be nondecreasing). + * @ref AVPacket.duration "duration") should also be set if known. + * + * @return 0 on success, a negative AVERROR on error. Libavformat will always + * take care of freeing the packet, even if this function fails. + * + * @see av_write_frame(), AVFormatContext.max_interleave_delta + *) +function av_interleaved_write_frame(s: PAVFormatContext; var pkt: TAVPacket): cint; + cdecl; external av__format; + +(** + * Write an uncoded frame to an output media file. + * + * The frame must be correctly interleaved according to the container + * specification; if not, then av_interleaved_write_frame() must be used. + * + * See av_interleaved_write_frame() for details. + *) +function av_write_uncoded_frame(s: PAVFormatContext; stream_index: cint; + frame: PAVFrame): cint; + cdecl; external av__format; + +(** + * Write an uncoded frame to an output media file. + * + * If the muxer supports it, this function makes it possible to write an AVFrame + * structure directly, without encoding it into a packet. + * It is mostly useful for devices and similar special muxers that use raw + * video or PCM data and will not serialize it into a byte stream. + * + * To test whether it is possible to use it with a given muxer and stream, + * use av_write_uncoded_frame_query(). + * + * The caller gives up ownership of the frame and must not access it + * afterwards. + * + * @return >=0 for success, a negative code on error + *) +function av_interleaved_write_uncoded_frame(s: PAVFormatContext; stream_index: cint; + frame: PAVFrame): cint; + cdecl; external av__format; + + +(** + * Test whether a muxer supports uncoded frame. + * + * @return >=0 if an uncoded frame can be written to that muxer and stream, + * <0 if not + *) +function av_write_uncoded_frame_query(s: PAVFormatContext; stream_index: cint): cint; + cdecl; external av__format; + +(** + * Write the stream trailer to an output media file and free the + * file private data. + * + * May only be called after a successful call to avformat_write_header. + * + * @param s media file handle + * @return 0 if OK, AVERROR_xxx on error + *) +function av_write_trailer(s: pAVFormatContext): cint; + cdecl; external av__format; + +(** + * Return the output format in the list of registered output formats + * which best matches the provided parameters, or return NULL if + * there is no match. + * + * @param short_name if non-NULL checks if short_name matches with the + * names of the registered formats + * @param filename if non-NULL checks if filename terminates with the + * extensions of the registered formats + * @param mime_type if non-NULL checks if mime_type matches with the + * MIME type of the registered formats + *) +function av_guess_format(short_name: PAnsiChar; + filename: PAnsiChar; + mime_type: PAnsiChar): PAVOutputFormat; + cdecl; external av__format; + +(** + * Guess the codec ID based upon muxer and filename. + *) +function av_guess_codec(fmt: PAVOutputFormat; short_name: PAnsiChar; + filename: PAnsiChar; mime_type: PAnsiChar; + type_: TCodecType): TAVCodecID; + cdecl; external av__format; + +(** + * Get timing information for the data currently output. + * The exact meaning of "currently output" depends on the format. + * It is mostly relevant for devices that have an internal buffer and/or + * work in real time. + * @param s media file handle + * @param stream stream in the media file + * @param[out] dts DTS of the last packet output for the stream, in stream + * time_base units + * @param[out] wall absolute time when that packet whas output, + * in microsecond + * @return 0 if OK, AVERROR(ENOSYS) if the format does not support it + * Note: some formats or devices may not allow to measure dts and wall + * atomically. + *) +function av_get_output_timestamp(s: PAVFormatContext; stream: cint; + dts: Pcint64; wall: Pcint64): cint; + cdecl; external av__format; + + +(** + * @} + *) + + +(** + * @defgroup lavf_misc Utility functions + * @ingroup libavf + * @ + * + * Miscellaneous utility functions related to both muxing and demuxing + * (or neither). + *) + +(** + * Send a nice hexadecimal dump of a buffer to the specified file stream. + * + * @param f The file stream pointer where the dump should be sent to. + * @param buf buffer + * @param size buffer size + * + * @see av_hex_dump_log, av_pkt_dump2, av_pkt_dump_log2 + *) +procedure av_hex_dump(f: PAVFile; buf: {const} PByteArray; size: cint); {<-?FILE} + cdecl; external av__format; + +(** + * Send a nice hexadecimal dump of a buffer to the log. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message, lower values signifying + * higher importance. + * @param buf buffer + * @param size buffer size + * + * @see av_hex_dump, av_pkt_dump, av_pkt_dump_log + *) +procedure av_hex_dump_log(avcl: Pointer; level: cint; buf: {const} PByteArray; size: cint); + cdecl; external av__format; + +(** + * Send a nice dump of a packet to the specified file stream. + * + * @param f The file stream pointer where the dump should be sent to. + * @param pkt packet to dump + * @param dump_payload True if the payload must be displayed, too. + * @param st AVStream that the packet belongs to + *) +procedure av_pkt_dump2(f: PAVFile; pkt: {const} PAVPacket; dump_payload: cint; st: {const} PAVStream); + cdecl; external av__format; + +(** + * Send a nice dump of a packet to the log. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message, lower values signifying + * higher importance. + * @param pkt packet to dump + * @param dump_payload True if the payload must be displayed, too. + * @param st AVStream that the packet belongs to + *) +procedure av_pkt_dump_log2(avcl: pointer; level: cint; pkt: {const} PAVPacket; dump_payload: cint; + st: {const} PAVStream); + cdecl; external av__format; + +(** + * Get the AVCodecID for the given codec tag tag. + * If no codec id is found returns AV_CODEC_ID_NONE. + * + * @param tags list of supported codec_id-codec_tag pairs, as stored + * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag + * @param tag codec tag to match to a codec ID + *) +function av_codec_get_id(var tags: PAVCodecTag; tag: cuint): TAVCodecID; + cdecl; external av__format; + +(** + * Getsthe codec tag for the given codec id id. + * If no codec tag is found returns 0. + * + * @param tags list of supported codec_id-codec_tag pairs, as stored + * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag + * @param id codec ID to match to a codec tag + *) +function av_codec_get_tag(var tags: PAVCodecTag; id: TAVCodecID): cuint; + cdecl; external av__format; + +(** + * Get the codec tag for the given codec id. + * + * @param tags list of supported codec_id - codec_tag pairs, as stored + * in AVInputFormat.codec_tag and AVOutputFormat.codec_tag + * @param id codec id that should be searched for in the list + * @param tag A pointer to the found tag + * @return 0 if id was not found in tags, > 0 if it was found + *) +function av_codec_get_tag2(var tags: PAVCodecTag; id: TAVCodecID; + tag: Pcuint): cint; + cdecl; external av__format; + +function av_find_default_stream_index(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Get the index for a specific timestamp. + * + * @param st stream that the timestamp belongs to + * @param timestamp timestamp to retrieve the index for + * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond + * to the timestamp which is <= the requested one, if backward + * is 0, then it will be >= + * if AVSEEK_FLAG_ANY seek to any frame, only keyframes otherwise + * @return < 0 if no such timestamp could be found + *) +function av_index_search_timestamp(st: PAVStream; timestamp: cint64; flags: cint): cint; + cdecl; external av__format; + +(** + * Add an index entry into a sorted list. Update the entry if the list + * already contains it. + * + * @param timestamp timestamp in the timebase of the given stream + *) +function av_add_index_entry(st: PAVStream; pos: cint64; timestamp: cint64; + size: cint; distance: cint; flags: cint): cint; + cdecl; external av__format; + +(** + * Split a URL string into components. + * + * The pointers to buffers for storing individual components may be null, + * in order to ignore that component. Buffers for components not found are + * set to empty strings. If the port is not found, it is set to a negative + * value. + * + * @param proto the buffer for the protocol + * @param proto_size the size of the proto buffer + * @param authorization the buffer for the authorization + * @param authorization_size the size of the authorization buffer + * @param hostname the buffer for the host name + * @param hostname_size the size of the hostname buffer + * @param port_ptr a pointer to store the port number in + * @param path the buffer for the path + * @param path_size the size of the path buffer + * @param url the URL to split + *) +procedure av_url_split(proto: PAnsiChar; proto_size: cint; + authorization: PAnsiChar; authorization_size: cint; + hostname: PAnsiChar; hostname_size: cint; + port_ptr: Pcint; + path: PAnsiChar; path_size: cint; + url: {const} PAnsiChar); + cdecl; external av__format; + +(** + * Print detailed information about the input or output format, such as + * duration, bitrate, streams, container, programs, metadata, side data, + * codec and time base. + * + * @param ic the context to analyze + * @param index index of the stream to dump information about + * @param url the URL to print, such as source or destination file + * @param is_output Select whether the specified context is an input(0) or output(1) + *) +procedure av_dump_format(ic: PAVFormatContext; + index: cint; + url: {const} PAnsiChar; + is_output: cint); + cdecl; external av__format; + +(** + * Return in 'buf' the path with '%d' replaced by a number. + * + * Also handles the '%0nd' format where 'n' is the total number + * of digits and '%%'. + * + * @param buf destination buffer + * @param buf_size destination buffer size + * @param path numbered sequence string + * @param number frame number + * @param flags AV_FRAME_FILENAME_FLAGS_* + * @return 0 if OK, -1 on format error + *) +function av_get_frame_filename2(buf: PAnsiChar; buf_size: cint; + path: {const} PAnsiChar; number: cint; flags: cint): cint; + cdecl; external av__format; +function av_get_frame_filename(buf: PAnsiChar; buf_size: cint; + path: {const} PAnsiChar; number: cint): cint; + cdecl; external av__format; + +(** + * Check whether filename actually is a numbered sequence generator. + * + * @param filename possible numbered sequence string + * @return 1 if a valid numbered sequence string, 0 otherwise + *) +function av_filename_number_test(filename: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Generate an SDP for an RTP session. + * + * Note, this overwrites the id values of AVStreams in the muxer contexts + * for getting unique dynamic payload types. + * + * @param ac array of AVFormatContexts describing the RTP streams. If the + * array is composed by only one context, such context can contain + * multiple AVStreams (one AVStream per RTP stream). Otherwise, + * all the contexts in the array (an AVCodecContext per RTP stream) + * must contain only one AVStream. + * @param n_files number of AVCodecContexts contained in ac + * @param buf buffer where the SDP will be stored (must be allocated by + * the caller) + * @param size the size of the buffer + * @return 0 if OK, AVERROR_xxx on error + *) +function av_sdp_create(ac: pointer; n_files: cint; buf: PAnsiChar; size: cint): cint; + cdecl; external av__format; + +(** + * Return a positive value if the given filename has one of the given + * extensions, 0 otherwise. + * + * @param filename file name to check against the given extensions + * @param extensions a comma-separated list of filename extensions + *) +function av_match_ext(filename: {const} Pchar; extensions: {const} Pchar): cint; + cdecl; external av__format; + +(** + * Test if the given container can store a codec. + * + * @param ofmt container to check for compatibility + * @param codec_id codec to potentially store in container + * @param std_compliance standards compliance level, one of FF_COMPLIANCE_* + * + * @return 1 if codec with ID codec_id can be stored in ofmt, 0 if it cannot. + * A negative number if this information is not available. + *) +function avformat_query_codec(ofmt: {const} PAVOutputFormat; codec_id: TAVCodecID; + std_compliance: cint): cint; + cdecl; external av__format; + +(** + * @defgroup riff_fourcc RIFF FourCCs + * @ + * Get the tables mapping RIFF FourCCs to libavcodec AVCodecIDs. The tables are + * meant to be passed to av_codec_get_id()/av_codec_get_tag() as in the + * following code: + * @code + * uint32_t tag = MKTAG('H', '2', '6', '4'); + * const struct AVCodecTag *table[] = { avformat_get_riff_video_tags(), 0 }; + * enum AVCodecID id = av_codec_get_id(table, tag); + * @endcode + *) +(** + * @return the table mapping RIFF FourCCs for video to libavcodec AVCodecID. + *) +function avformat_get_riff_video_tags(): {const} PAVCodecTag; + cdecl; external av__format; +(** + * @return the table mapping RIFF FourCCs for audio to AVCodecID. + *) +function avformat_get_riff_audio_tags(): {const} PAVCodecTag; + cdecl; external av__format; + +(** + * @return the table mapping MOV FourCCs for video to libavcodec AVCodecID. + *) +function avformat_get_mov_video_tags(): {const} PAVCodecTag; + cdecl; external av__format; + +(** + * @return the table mapping MOV FourCCs for audio to AVCodecID. + *) +function avformat_get_mov_audio_tags(): {const} PAVCodecTag; + cdecl; external av__format; + +(** + * Guess the sample aspect ratio of a frame, based on both the stream and the + * frame aspect ratio. + * + * Since the frame aspect ratio is set by the codec but the stream aspect ratio + * is set by the demuxer, these two may not be equal. This function tries to + * return the value that you should use if you would like to display the frame. + * + * Basic logic is to use the stream aspect ratio if it is set to something sane + * otherwise use the frame aspect ratio. This way a container setting, which is + * usually easy to modify can override the coded value in the frames. + * + * @param format the format context which the stream is part of + * @param stream the stream which the frame is part of + * @param frame the frame with the aspect ratio to be determined + * @return the guessed (valid) sample_aspect_ratio, 0/1 if no idea + *) +function av_guess_sample_aspect_ratio(format: PAVFormatContext; stream: PAVStream; frame: PAVFrame): TAVRational; + cdecl; external av__format; + +(** + * Guess the frame rate, based on both the container and codec information. + * + * @param ctx the format context which the stream is part of + * @param stream the stream which the frame is part of + * @param frame the frame for which the frame rate should be determined, may be NULL + * @return the guessed (valid) frame rate, 0/1 if no idea + *) +function av_guess_frame_rate(ctx: PAVFormatContext; stream: PAVStream; frame: PAVFrame): TAVRational; + cdecl; external av__format; + +(** + * Check if the stream st contained in s is matched by the stream specifier + * spec. + * + * See the "stream specifiers" chapter in the documentation for the syntax + * of spec. + * + * @return >0 if st is matched by spec; + * 0 if st is not matched by spec; + * AVERROR code if spec is invalid + * + * @note A stream specifier can match several streams in the format. + *) +function avformat_match_stream_specifier(s: PAVFormatContext; st: PAVStream; + spec: PAnsiChar): cint; + cdecl; external av__format; + +function avformat_queue_attached_pictures(s: PAVFormatContext): cint; + cdecl; external av__format; + +(** + * Apply a list of bitstream filters to a packet. + * + * @param codec AVCodecContext, usually from an AVStream + * @param pkt the packet to apply filters to. If, on success, the returned + * packet has size == 0 and side_data_elems == 0, it indicates that + * the packet should be dropped + * @param pkt the packet to apply filters to + * @param bsfc a NULL-terminated list of filters to apply + * @return >=0 on success; + * AVERROR code on failure + *) +{$IFDEF FF_API_OLD_BSF} +function av_apply_bitstream_filters(codec: PAVCodecContext; pkt: PAVPacket; + bsfc: PAVBitStreamFilterContext): cint; + cdecl; external av__format; deprecated; +{$ENDIF} + +(** + * Transfer internal timing information from one stream to another. + * + * This function is useful when doing stream copy. + * + * @param ofmt target output format for ost + * @param ost output stream which needs timings copy and adjustments + * @param ist reference input stream to copy timings from + * @param copy_tb define from where the stream codec timebase needs to be imported + *) +function avformat_transfer_internal_stream_timing_info(ofmt: {const} PAVOutputFormat; + ost: PAVStream; ist: {const} PAVStream; + copy_tb: TAVTimebaseSource): cint; + cdecl; external av__format; + +(** + * Get the internal codec timebase from a stream. + * + * @param st input stream to extract the timebase from + *) +function av_stream_get_codec_timebase(st: {const} PAVStream): TAVRational; + cdecl; external av__format; + +implementation + +end. diff --git a/src/lib/ffmpeg-3.2/avio.pas b/src/lib/ffmpeg-3.2/avio.pas new file mode 100644 index 00000000..023429e0 --- /dev/null +++ b/src/lib/ffmpeg-3.2/avio.pas @@ -0,0 +1,928 @@ +(* + * copyright (c) 2001 Fabrice Bellard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavformat/avio.h + * unbuffered I/O operations + * @warning This file has to be considered an internal but installed + * header, so it should not be directly included in your projects. + * + * update to + * avformat version: 56.4.101 + *) + +unit avio; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} + +interface + +uses + ctypes, + {$IFDEF UNIX} + BaseUnix, // for SEEK_CUR + {$ENDIF} + avcodec, + avutil, + SysUtils, + UConfig; + +(** + * Those FF_API_* defines are not part of public API. + * They may change, break or disappear at any time. + *) +const + FF_API_URL_CLASS = (LIBAVFORMAT_VERSION_MAJOR >= 53); + +const + AVIO_SEEKABLE_NORMAL = 0001; (**< Seeking works like for a local file *) + +type + TReadWriteFunc = function(opaque: Pointer; buf: PByteArray; buf_size: cint): cint; cdecl; + TSeekFunc = function(opaque: Pointer; offset: cint64; whence: cint): cint64; cdecl; + Tcallback = function(p: pointer): cint; cdecl; + +type +(** + * Callback for checking whether to abort blocking functions. + * AVERROR_EXIT is returned in this case by the interrupted + * function. During blocking operations, callback is called with + * opaque as parameter. If the callback returns 1, the + * blocking operation will be aborted. + * + * No members can be added to this struct without a major bump, if + * new elements have been added after this struct in AVFormatContext + * or AVIOContext. + *) + PAVIOInterruptCB = ^TAVIOInterruptCB; + TAVIOInterruptCB = record + callback: Tcallback; + opaque: pointer; + end; (*TAVIOInterruptCB*) + + (** + * Directory entry types. + *) + TAVIODirEntryType = ( + AVIO_ENTRY_UNKNOWN, + AVIO_ENTRY_BLOCK_DEVICE, + AVIO_ENTRY_CHARACTER_DEVICE, + AVIO_ENTRY_DIRECTORY, + AVIO_ENTRY_NAMED_PIPE, + AVIO_ENTRY_SYMBOLIC_LINK, + AVIO_ENTRY_SOCKET, + AVIO_ENTRY_FILE, + AVIO_ENTRY_SERVER, + AVIO_ENTRY_SHARE, + AVIO_ENTRY_WORKGROUP + ); + + TAVIODataMarkerType = ( + (** + * Header data; this needs to be present for the stream to be decodeable. + *) + AVIO_DATA_MARKER_HEADER, + (** + * A point in the output bytestream where a decoder can start decoding + * (i.e. a keyframe). A demuxer/decoder given the data flagged with + * AVIO_DATA_MARKER_HEADER, followed by any AVIO_DATA_MARKER_SYNC_POINT, + * should give decodeable results. + *) + AVIO_DATA_MARKER_SYNC_POINT, + (** + * A point in the output bytestream where a demuxer can start parsing + * (for non self synchronizing bytestream formats). That is, any + * non-keyframe packet start point. + *) + AVIO_DATA_MARKER_BOUNDARY_POINT, + (** + * This is any, unlabelled data. It can either be a muxer not marking + * any positions at all, it can be an actual boundary/sync point + * that the muxer chooses not to mark, or a later part of a packet/fragment + * that is cut into multiple write callbacks due to limited IO buffer size. + *) + AVIO_DATA_MARKER_UNKNOWN, + (** + * Trailer data, which doesn't contain actual content, but only for + * finalizing the output file. + *) + AVIO_DATA_MARKER_TRAILER + ); + + (** + * Describes single entry of the directory. + * + * Only name and type fields are guaranteed be set. + * Rest of fields are protocol or/and platform dependent and might be unknown. + *) + PPAVIODirEntry = ^PAVIODirEntry; + PAVIODirEntry = ^TAVIODirEntry; + TAVIODirEntry = record + name: PAnsiChar; (**< Filename *) + type_: cint; (**< Type of the entry *) + utf8: cint; (**< Set to 1 when name is encoded with UTF-8, 0 otherwise. + Name can be encoded with UTF-8 even though 0 is set. *) + size: cint64; (**< File size in bytes, -1 if unknown. *) + modification_timestamp: cint64; (**< Time of last modification in microseconds since unix + epoch, -1 if unknown. *) + access_timestamp: cint64; (**< Time of last access in microseconds since unix epoch, + -1 if unknown. *) + status_change_timestamp: cint64; (**< Time of last status change in microseconds since unix + epoch, -1 if unknown. *) + user_id: cint64; (**< User ID of owner, -1 if unknown. *) + group_id: cint64; (**< Group ID of owner, -1 if unknown. *) + filemode: cint64; (**< Unix file mode, -1 if unknown. *) + end; + + PPAVIODirContext = ^PAVIODirContext; + PAVIODirContext = ^TAVIODirContext; + TAVIODirContext = record + url_context: pointer; + (** struct URLContext *url_context; *) + end; + +(** + * Bytestream IO Context. + * New fields can be added to the end with minor version bumps. + * Removal, reordering and changes to existing fields require a major + * version bump. + * sizeof(AVIOContext) must not be used outside libav*. + * + * @note None of the function pointers in AVIOContext should be called + * directly, they should only be set by the client application + * when implementing custom I/O. Normally these are set to the + * function pointers specified in avio_alloc_context() + *) + PPAVIOContext = ^PAVIOContext; + PAVIOContext = ^TAVIOContext; + TAVIOContext = record + (** + * A class for private options. + * + * If this AVIOContext is created by avio_open2(), av_class is set and + * passes the options down to protocols. + * + * If this AVIOContext is manually allocated, then av_class may be set by + * the caller. + * + * warning -- this field can be NULL, be sure to not pass this AVIOContext + * to any av_opt_* functions in that case. + *) + av_class: {const} PAVClass; + + (* + * The following shows the relationship between buffer, buf_ptr, buf_end, buf_size, + * and pos, when reading and when writing (since AVIOContext is used for both): + * + ********************************************************************************** + * READING + ********************************************************************************** + * + * | buffer_size | + * |---------------------------------------| + * | | + * + * buffer buf_ptr buf_end + * +---------------+-----------------------+ + * |/ / / / / / / /|/ / / / / / /| | + * read buffer: |/ / consumed / | to be read /| | + * |/ / / / / / / /|/ / / / / / /| | + * +---------------+-----------------------+ + * + * pos + * +-------------------------------------------+-----------------+ + * input file: | | | + * +-------------------------------------------+-----------------+ + * + * + ********************************************************************************** + * WRITING + ********************************************************************************** + * + * | buffer_size | + * |-------------------------------| + * | | + * + * buffer buf_ptr buf_end + * +-------------------+-----------+ + * |/ / / / / / / / / /| | + * write buffer: | / to be flushed / | | + * |/ / / / / / / / / /| | + * +-------------------+-----------+ + * + * pos + * +--------------------------+-----------------------------------+ + * output file: | | | + * +--------------------------+-----------------------------------+ + * + *) + + buffer: PByteArray; (**< Start of the buffer. *) + buffer_size: cint; (**< Maximum buffer size *) + buf_ptr: PByteArray; (**< Current position in the buffer *) + buf_end: PByteArray; (**< End of the data, may be less than + buffer+buffer_size if the read function returned + less data than requested, e.g. for streams where + no more data has been received yet. *) + opaque: pointer; (**< A private pointer, passed to the read/write/seek/... + functions. *) + read_packet: TReadWriteFunc; + write_packet: TReadWriteFunc; + seek: TSeekFunc; + pos: cint64; (**< position in the file of the current buffer *) + must_flush: cint; (**< true if the next seek should flush *) + eof_reached: cint; (**< true if eof reached *) + write_flag: cint; (**< true if open for writing *) + max_packet_size: cint; + checksum: culong; + checksum_ptr: PByteArray; + update_checksum: function (checksum: culong; buf: {const} PAnsiChar; size: cuint): culong; cdecl; + error: cint; (**< contains the error code or 0 if no error happened *) + (** + * Pause or resume playback for network streaming protocols - e.g. MMS. + *) + read_pause: function(opaque: Pointer; pause: cint): cint; cdecl; + (** + * Seek to a given timestamp in stream with the specified stream_index. + * Needed for some network streaming protocols which don't support seeking + * to byte position. + *) + read_seek: function(opaque: Pointer; stream_index: cint; + timestamp: cint64; flags: cint): cint64; cdecl; + (** + * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. + *) + seekable: cint; + + (** + * max filesize, used to limit allocations + * This field is internal to libavformat and access from outside is not allowed. + *) + maxsize: cint64; + + (** + * avio_read and avio_write should if possible be satisfied directly + * instead of going through a buffer, and avio_seek will always + * call the underlying seek function directly. + *) + direct: cint; + + (** + * Bytes read statistic + * This field is internal to libavformat and access from outside is not allowed. + *) + bytes_read: cint64; + + (** + * seek statistic + * This field is internal to libavformat and access from outside is not allowed. + *) + seek_count: cint; + + (** + * writeout statistic + * This field is internal to libavformat and access from outside is not allowed. + *) + writeout_count: cint; + + (** + * Original buffer size + * used internally after probing and ensure seekback to reset the buffer size + * This field is internal to libavformat and access from outside is not allowed. + *) + orig_buffer_size: cint; + + (** + * Threshold to favor readahead over seek. + * This is current internal only, do not use from outside. + *) + short_seek_threshold: cint; + + (** + * ',' separated list of allowed protocols. + *) + protocol_whitelist: {const} PAnsiChar; + + (** + * A callback that is used instead of write_packet. + *) + write_data_type: function(opaque: pointer; buf: Pcuint8; buf_size: cint; + type_: TAVIODataMarkerType; time: cint64): cint; cdecl; + (** + * If set, don't call write_data_type separately for AVIO_DATA_MARKER_BOUNDARY_POINT, + * but ignore them and treat them as AVIO_DATA_MARKER_UNKNOWN (to avoid needlessly + * small chunks of data returned from the callback). + *) + ignore_boundary_point: cint; + + (** + * Internal, not meant to be used from outside of AVIOContext. + *) + current_type: TAVIODataMarkerType; + last_time: cint64; + end; {AVIOContext} + +(* unbuffered I/O *) + +(** + * Return the name of the protocol that will handle the passed URL. + * + * NULL is returned if no protocol could be found for the given URL. + * + * @return Name of the protocol or NULL. + *) +function avio_find_protocol_name(url: {const} PAnsiChar): {const} PAnsiChar; + cdecl; external av__format; + +(** + * Return AVIO_* access flags corresponding to the access permissions + * of the resource in url, or a negative value corresponding to an + * AVERROR code in case of failure. The returned access flags are + * masked by the value in flags. + * + * @note This function is intrinsically unsafe, in the sense that the + * checked resource may change its existence or permission status from + * one call to another. Thus you should not trust the returned value, + * unless you are sure that no other processes are accessing the + * checked resource. + *) +function avio_check(url: {const} PAnsiChar; flags: cint): cint; + cdecl; external av__format; + +(** + * Move or rename a resource. + * + * @note url_src and url_dst should share the same protocol and authority. + * + * @param url_src url to resource to be moved + * @param url_dst new url to resource if the operation succeeded + * @return >=0 on success or negative on error. + *) +function avpriv_io_move(url_src: {const} PAnsiChar; url_dst: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Delete a resource. + * + * @param url resource to be deleted. + * @return >=0 on success or negative on error. + *) +function avpriv_io_delete(url: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Open directory for reading. + * + * @param s directory read context. Pointer to a NULL pointer must be passed. + * @param url directory to be listed. + * @param options A dictionary filled with protocol-private options. On return + * this parameter will be destroyed and replaced with a dictionary + * containing options that were not found. May be NULL. + * @return >=0 on success or negative on error. + *) +function avio_open_dir(s: PPAVIODirContext; url: {const} PAnsiChar; options: PPAVDictionary): cint; + cdecl; external av__format; + +(** + * Get next directory entry. + * + * Returned entry must be freed with avio_free_directory_entry(). In particular + * it may outlive AVIODirContext. + * + * @param s directory read context. + * @param[out] next next entry or NULL when no more entries. + * @return >=0 on success or negative on error. End of list is not considered an + * error. + *) +function avio_read_dir(s: PAVIODirContext; next: PPAVIODirEntry): cint; + cdecl; external av__format; + +(** + * Close directory. + * + * @note Entries created using avio_read_dir() are not deleted and must be + * freeded with avio_free_directory_entry(). + * + * @param s directory read context. + * @return >=0 on success or negative on error. + *) +function avio_close_dir(s: PPAVIODirContext): cint; + cdecl; external av__format; + +(** + * Free entry allocated by avio_read_dir(). + * + * @param entry entry to be freed. + *) +procedure avio_free_directory_entry(entry: PPAVIODirEntry); + cdecl; external av__format; + +(** + * Allocate and initialize an AVIOContext for buffered I/O. It must be later + * freed with av_free(). + * + * @param buffer Memory block for input/output operations via AVIOContext. + * The buffer must be allocated with av_malloc() and friends. + * It may be freed and replaced with a new buffer by libavformat. + * AVIOContext.buffer holds the buffer currently in use, + * which must be later freed with av_free(). + * @param buffer_size The buffer size is very important for performance. + * For protocols with fixed blocksize it should be set to this blocksize. + * For others a typical size is a cache page, e.g. 4kb. + * @param write_flag Set to 1 if the buffer should be writable, 0 otherwise. + * @param opaque An opaque pointer to user-specific data. + * @param read_packet A function for refilling the buffer, may be NULL. + * @param write_packet A function for writing the buffer contents, may be NULL. + * The function may not change the input buffers content. + * @param seek A function for seeking to specified byte position, may be NULL. + * + * @return Allocated AVIOContext or NULL on failure. + *) +function avio_alloc_context( + buffer: PAnsiChar; + buffer_size: cint; + write_flag: cint; + opaque: Pointer; + read_packet: TReadWriteFunc; + write_packet: TReadWriteFunc; + seek: TSeekFunc): PAVIOContext; + cdecl; external av__format; + +procedure avio_w8(s: PAVIOContext; b: cint); + cdecl; external av__format; +procedure avio_write(s: PAVIOContext; buf: {const} PAnsiChar; size: cint); + cdecl; external av__format; +procedure avio_wl64(s: PAVIOContext; val: cuint64); + cdecl; external av__format; +procedure avio_wb64(s: PAVIOContext; val: cuint64); + cdecl; external av__format; +procedure avio_wl32(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wb32(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wl24(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wb24(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wl16(s: PAVIOContext; val: cuint); + cdecl; external av__format; +procedure avio_wb16(s: PAVIOContext; val: cuint); + cdecl; external av__format; + +(** + * Write a NULL-terminated string. + * @return number of bytes written. + *) +function avio_put_str(s: PAVIOContext; str: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Convert an UTF-8 string to UTF-16LE and write it. + * @param s the AVIOContext + * @param str NULL-terminated UTF-8 string + * + * @return number of bytes written. + *) +function avio_put_str16le(s: PAVIOContext; str: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Convert an UTF-8 string to UTF-16BE and write it. + * @param s the AVIOContext + * @param str NULL-terminated UTF-8 string + * + * @return number of bytes written. + *) +function avio_put_str16be(s: PAVIOContext; str: {const} PAnsiChar): cint; + cdecl; external av__format; + +(** + * Mark the written bytestream as a specific type. + * + * Zero-length ranges are omitted from the output. + * + * @param time the stream time the current bytestream pos corresponds to + * (in AV_TIME_BASE units), or AV_NOPTS_VALUE if unknown or not + * applicable + * @param type the kind of data written starting at the current pos + *) +procedure avio_write_marker(s: PAVIOContext; time: cint64; type_: TAVIODataMarkerType); + cdecl; external av__format; + +const +(** + * ORing this as the "whence" parameter to a seek function causes it to + * return the filesize without seeking anywhere. Supporting this is optional. + * If it is not supported then the seek function will return <0. + *) + AVSEEK_SIZE = $10000; + +(** + * Passing this flag as into the "whence" parameter to a seek function causes it to + * seek by any means (like reopening and linear reading) or other normally unreasonable + * means that can be extremely slow. + * This may be ignored by the seek code. + *) + AVSEEK_FORCE = $20000; + +(** + * fseek() equivalent for AVIOContext. + * @return new position or AVERROR. + *) +function avio_seek(s: PAVIOContext; offset: cint64; whence: cint): cint64; + cdecl; external av__format; + +(** + * Skip given number of bytes forward + * @return new position or AVERROR. + *) +function avio_skip(s: PAVIOContext; offset: cint64): cint64; + cdecl; external av__format; + +{$IFDEF UNIX} +(** + * ftell() equivalent for AVIOContext. + * @return position or AVERROR. + *) +function avio_tell(s: PAVIOContext): cint64; {$IFDEF HasInline}inline;{$ENDIF} +{$ELSE} +{$ENDIF} + +(** + * Get the filesize. + * @return filesize or AVERROR + *) +function avio_size(s: PAVIOContext): cint64; + cdecl; external av__format; + +(** + * feof() equivalent for AVIOContext. + * @return non zero if and only if end of file + *) +function avio_feof(s: PAVIOContext): cint; + cdecl; external av__format; +{$IFDEF FF_API_URL_FEOF} +(** + * @deprecated use avio_feof() + *) +function url_feof(s: PAVIOContext): cint; + cdecl; external av__format; {attribute_deprecated} +{$ENDIF} + +(** @warning Writes up to 4 KiB per call *) +function avio_printf(s: PAVIOContext; fmt: {const} PAnsiChar; args: array of const): cint; + cdecl; external av__format; + +(** + * Force flushing of buffered data. + * + * For write streams, force the buffered data to be immediately written to the output, + * without to wait to fill the internal buffer. + * + * For read streams, discard all currently buffered data, and advance the + * reported file position to that of the underlying stream. This does not + * read new data, and does not perform any seeks. + *) +procedure avio_flush(s: PAVIOContext); + cdecl; external av__format; + +(** + * Read size bytes from AVIOContext into buf. + * @return number of bytes read or AVERROR + *) +function avio_read(s: PAVIOContext; buf: Pbyte; size: cint): cint; + cdecl; external av__format; + +(** + * @name Functions for reading from AVIOContext + * @ + * + * @note return 0 if EOF, so you cannot use it if EOF handling is + * necessary + *) +function avio_r8(s: PAVIOContext): cint; + cdecl; external av__format; + +function avio_rl16(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rl24(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rl32(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rl64(s: PAVIOContext): cuint64; + cdecl; external av__format; + +function avio_rb16(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rb24(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rb32(s: PAVIOContext): cuint; + cdecl; external av__format; + +function avio_rb64(s: PAVIOContext): cuint64; + cdecl; external av__format; + +(** + * @ + *) +(** + * Read a string from pb into buf. The reading will terminate when either + * a NULL character was encountered, maxlen bytes have been read, or nothing + * more can be read from pb. The result is guaranteed to be NULL-terminated, it + * will be truncated if buf is too small. + * Note that the string is not interpreted or validated in any way, it + * might get truncated in the middle of a sequence for multi-byte encodings. + * + * @return number of bytes read (is always <= maxlen). + * If reading ends on EOF or error, the return value will be one more than + * bytes actually read. + *) +function avio_get_str(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; + cdecl; external av__format; + +(** + * Read a UTF-16 string from pb and convert it to UTF-8. + * The reading will terminate when either a null or invalid character was + * encountered or maxlen bytes have been read. + * @return number of bytes read (is always <= maxlen) + *) +function avio_get_str16le(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; + cdecl; external av__format; + +function avio_get_str16be(pb: PAVIOContext; maxlen: cint; buf: PAnsiChar; buflen: cint): cint; + cdecl; external av__format; + +(** + * @name URL open modes + * The flags argument to avio_open must be one of the following + * constants, optionally ORed with other flags. + * @{ + *) +const + AVIO_FLAG_READ = 1; (**< read-only *) + AVIO_FLAG_WRITE = 2; (**< write-only *) + AVIO_FLAG_READ_WRITE = {(AVIO_FLAG_READ|AVIO_FLAG_WRITE)} 3; (**< read-write pseudo flag *) +(** + * @ + *) + +const +(** + * Use non-blocking mode. + * If this flag is set, operations on the context will return + * AVERROR(EAGAIN) if they can not be performed immediately. + * If this flag is not set, operations on the context will never return + * AVERROR(EAGAIN). + * Note that this flag does not affect the opening/connecting of the + * context. Connecting a protocol will always block if necessary (e.g. on + * network protocols) but never hang (e.g. on busy devices). + * Warning: non-blocking protocols is work-in-progress; this flag may be + * silently ignored. + *) + AVIO_FLAG_NONBLOCK = 8; + +(** + * Use direct mode. + * avio_read and avio_write should if possible be satisfied directly + * instead of going through a buffer, and avio_seek will always + * call the underlying seek function directly. + *) + AVIO_FLAG_DIRECT = $8000; + +(** + * Create and initialize a AVIOContext for accessing the + * resource indicated by url. + * @note When the resource indicated by url has been opened in + * read+write mode, the AVIOContext can be used only for writing. + * + * @param s Used to return the pointer to the created AVIOContext. + * In case of failure the pointed to value is set to NULL. + * @param flags flags which control how the resource indicated by url + * is to be opened + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + *) +function avio_open(s: PPAVIOContext; url: {const} PAnsiChar; flags: cint): cint; + cdecl; external av__format; + +(** + * Create and initialize a AVIOContext for accessing the + * resource indicated by url. + * @note When the resource indicated by url has been opened in + * read+write mode, the AVIOContext can be used only for writing. + * + * @param s Used to return the pointer to the created AVIOContext. + * In case of failure the pointed to value is set to NULL. + * @param flags flags which control how the resource indicated by url + * is to be opened + * @param int_cb an interrupt callback to be used at the protocols level + * @param options A dictionary filled with protocol-private options. On return + * this parameter will be destroyed and replaced with a dict containing options + * that were not found. May be NULL. + * @return 0 in case of success, a negative value corresponding to an + * AVERROR code in case of failure + *) +function avio_open2(s: PPAVIOContext; {const} url: PAnsiChar; flags: cint; + {const} int_cb: PAVIOInterruptCB; options: PPAVDictionary): cint; + cdecl; external av__format; + +(** + * Close the resource accessed by the AVIOContext s and free it. + * This function can only be used if s was opened by avio_open(). + * + * The internal buffer is automatically flushed before closing the + * resource. + * + * @return 0 on success, an AVERROR < 0 on error. + * @see avio_close + *) +function avio_close(s: PAVIOContext): cint; + cdecl; external av__format; + +(** + * Close the resource accessed by the AVIOContext *s, free it + * and set the pointer pointing to it to NULL. + * This function can only be used if s was opened by avio_open(). + * + * The internal buffer is automatically flushed before closing the + * resource. + * + * @return 0 on success, an AVERROR < 0 on error. + * @see avio_close + *) +function avio_closep(s: PPAVIOContext): cint; + cdecl; external av__format; + +(** + * Open a write only memory stream. + * + * @param s new IO context + * @return zero if no error. + *) +function avio_open_dyn_buf(s: PPAVIOContext): cint; + cdecl; external av__format; + +(** + * Return the written size and a pointer to the buffer. The buffer + * must be freed with av_free(). + * Padding of AV_INPUT_BUFFER_PADDING_SIZE is added to the buffer. + * + * @param s IO context + * @param pbuffer pointer to a byte buffer + * @return the length of the byte buffer + *) +function avio_close_dyn_buf(s: PAVIOContext; var pbuffer: Pcuint8): cint; + cdecl; external av__format; + +(** + * Iterate through names of available protocols. + * + * @param opaque A private pointer representing current protocol. + * It must be a pointer to NULL on first iteration and will + * be updated by successive calls to avio_enum_protocols. + * @param output If set to 1, iterate over output protocols, + * otherwise over input protocols. + * + * @return A static string containing the name of current protocol or NULL + *) +function avio_enum_protocols(var opaque: Pointer; output: cint): {const} PAnsiChar; + cdecl; external av__format; + +(** + * Pause and resume playing - only meaningful if using a network streaming + * protocol (e.g. MMS). + * @param pause 1 for pause, 0 for resume + *) +function avio_pause(h: PAVIOContext; pause: cint): cint; + cdecl; external av__format; + +(** + * Seek to a given timestamp relative to some component stream. + * Only meaningful if using a network streaming protocol (e.g. MMS.). + * @param stream_index The stream index that the timestamp is relative to. + * If stream_index is (-1) the timestamp should be in AV_TIME_BASE + * units from the beginning of the presentation. + * If a stream_index >= 0 is used and the protocol does not support + * seeking based on component streams, the call will fail with ENOTSUP. + * @param timestamp timestamp in AVStream.time_base units + * or if there is no stream specified then in AV_TIME_BASE units. + * @param flags Optional combination of AVSEEK_FLAG_BACKWARD, AVSEEK_FLAG_BYTE + * and AVSEEK_FLAG_ANY. The protocol may silently ignore + * AVSEEK_FLAG_BACKWARD and AVSEEK_FLAG_ANY, but AVSEEK_FLAG_BYTE will + * fail with ENOTSUP if used and not supported. + * @return >= 0 on success + * @see AVInputFormat: : read_seek + *) +function avio_seek_time(h: PAVIOContext; stream_index: cint; + timestamp: cint64; flags: cint): cint64; + cdecl; external av__format; + +(* Avoid a warning. The header can not be included because it breaks c++. *) +type + PAVBPrint = ^TAVBPrint; + TAVBPrint = record + end; + +(** + * Read contents of h into print buffer, up to max_size bytes, or up to EOF. + * + * @return 0 for success (max_size bytes read or EOF reached), negative error + * code otherwise + *) +function avio_read_to_bprint(h: PAVIOContext; pb: PAVBPrint; max_size: size_t): cint; + cdecl; external av__format; + +(** + * Accept and allocate a client context on a server context. + * @param s the server context + * @param c the client context, must be unallocated + * @return >= 0 on success or a negative value corresponding + * to an AVERROR on failure + *) +function avio_accept(s: PAVIOContext; c: PPAVIOContext): cint; + cdecl; external av__format; + +(** + * Perform one step of the protocol handshake to accept a new client. + * This function must be called on a client returned by avio_accept() before + * using it as a read/write context. + * It is separate from avio_accept() because it may block. + * A step of the handshake is defined by places where the application may + * decide to change the proceedings. + * For example, on a protocol with a request header and a reply header, each + * one can constitute a step because the application may use the parameters + * from the request to change parameters in the reply; or each individual + * chunk of the request can constitute a step. + * If the handshake is already finished, avio_handshake() does nothing and + * returns 0 immediately. + * + * @param c the client context to perform the handshake on + * @return 0 on a complete and successful handshake + * > 0 if the handshake progressed, but is not complete + * < 0 for an AVERROR code + *) +function avio_handshake(c: PAVIOContext): cint; + cdecl; external av__format; + +implementation + +(** + * For SEEK_CUR on Windows + * values taken from stdio.h of C + *) +{$IFNDEF SEEK_SET} +const + SEEK_SET = 0; +{$ENDIF} + +{$IFNDEF SEEK_CUR} +const + SEEK_CUR = 1; +{$ENDIF} + +{$IFNDEF SEEK_END} +const + SEEK_END = 2; +{$ENDIF} + +function avio_tell(s: PAVIOContext): cint64; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := avio_seek(s, 0, SEEK_CUR); +end; + + +end. diff --git a/src/lib/ffmpeg-3.2/avutil.pas b/src/lib/ffmpeg-3.2/avutil.pas new file mode 100644 index 00000000..ebb1a3be --- /dev/null +++ b/src/lib/ffmpeg-3.2/avutil.pas @@ -0,0 +1,366 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversions of + * + * libavutil/avutil.h: + * version: 54.7.100 + * + *) + +unit avutil; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) + {$MACRO ON} (* Turn macro support on *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I ff_api-defines.inc} (* FF_API_* defines *) + +{$IFDEF DARWIN} + {$linklib libavutil} +{$ENDIF} + +interface + +uses + ctypes, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + (* Max. supported version by this header *) + LIBAVUTIL_MAX_VERSION_MAJOR = 55; + LIBAVUTIL_MAX_VERSION_MINOR = 34; + LIBAVUTIL_MAX_VERSION_RELEASE = 100; + LIBAVUTIL_MAX_VERSION = (LIBAVUTIL_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVUTIL_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBAVUTIL_MAX_VERSION_RELEASE * VERSION_RELEASE); + + (* Min. supported version by this header *) + LIBAVUTIL_MIN_VERSION_MAJOR = 55; + LIBAVUTIL_MIN_VERSION_MINOR = 34; + LIBAVUTIL_MIN_VERSION_RELEASE = 100; + LIBAVUTIL_MIN_VERSION = (LIBAVUTIL_MIN_VERSION_MAJOR * VERSION_MAJOR) + + (LIBAVUTIL_MIN_VERSION_MINOR * VERSION_MINOR) + + (LIBAVUTIL_MIN_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBAVUTIL_VERSION < LIBAVUTIL_MIN_VERSION)} + {$MESSAGE Error 'Linked version of libavutil is too old!'} +{$IFEND} + +{$IF (LIBAVUTIL_VERSION > LIBAVUTIL_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libavutil is not yet supported!'} +{$IFEND} + +type +{$IFNDEF FPC} + // defines for Delphi + size_t = cardinal; +{$ENDIF} + Psize_t = ^size_t; + +(** + * Return the LIBAVUTIL_VERSION_INT constant. + *) +function avutil_version(): cuint; + cdecl; external av__util; + +(** + * Return an informative version string. This usually is the actual release + * version number or a git commit description. This string has no fixed format + * and can change any time. It should never be parsed by code. + *) +function av_version_info(): PAnsiChar; + cdecl; external av__util; + +(** + * Return the libavutil build-time configuration. + *) +function avutil_configuration(): PAnsiChar; + cdecl; external av__util; + +(** + * Return the libavutil license. + *) +function avutil_license(): PAnsiChar; + cdecl; external av__util; + +(** + * @addtogroup lavu_media Media Type + * @brief Media Type + *) + +type + + PAVFile = pointer; + + TAVMediaType = ( + AVMEDIA_TYPE_UNKNOWN = -1, ///< Usually treated as AVMEDIA_TYPE_DATA + AVMEDIA_TYPE_VIDEO, + AVMEDIA_TYPE_AUDIO, + AVMEDIA_TYPE_DATA, ///< Opaque data information usually continuous + AVMEDIA_TYPE_SUBTITLE, + AVMEDIA_TYPE_ATTACHMENT, ///< Opaque data information usually sparse + AVMEDIA_TYPE_NB + ); + +(** + * Return a string describing the media_type enum, NULL if media_type + * is unknown. + *) +function av_get_media_type_string(media_type: TAVMediaType): PAnsiChar; + cdecl; external av__util; + +const + FF_LAMBDA_SHIFT = 7; + FF_LAMBDA_SCALE = (1 shl FF_LAMBDA_SHIFT); + FF_QP2LAMBDA = 118; ///< factor to convert from H.263 QP to lambda + FF_LAMBDA_MAX = (256*128-1); + + FF_QUALITY_SCALE = FF_LAMBDA_SCALE; //FIXME maybe remove + +(** + * @brief Undefined timestamp value + * + * Usually reported by demuxer that work on containers that do not provide + * either pts or dts. + *) + + AV_NOPTS_VALUE = $8000000000000000; + +(** + * Internal time base represented as integer + *) + + AV_TIME_BASE = 1000000; + +(** + * Internal time base represented as fractional value + *) + + AV_TIME_BASE_Q : TAVRational = (num: 1; den: AV_TIME_BASE); + +(** + * @} + * @} + * @defgroup lavu_picture Image related + * + * AVPicture types, pixel formats and basic image planes manipulation. + * + * @ + *) + +type + TAVPictureType = ( + AV_PICTURE_TYPE_NONE = 0, ///< Undefined + AV_PICTURE_TYPE_I, ///< Intra + AV_PICTURE_TYPE_P, ///< Predicted + AV_PICTURE_TYPE_B, ///< Bi-dir predicted + AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG-4 + AV_PICTURE_TYPE_SI, ///< Switching Intra + AV_PICTURE_TYPE_SP, ///< Switching Predicted + AV_PICTURE_TYPE_BI ///< BI type + ); + +(** + * Return a single letter to describe the given picture type + * pict_type. + * + * @param[in] pict_type the picture type @return a single character + * representing the picture type, '?' if pict_type is unknown + *) +function av_get_picture_type_char(pict_type: TAVPictureType): PAnsiChar; + cdecl; external av__util; + +(** + * Return x default pointer in case p is NULL. + *) +function av_x_if_null(p: {const} pointer; x: {const} pointer): pointer; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Compute the length of an integer list. + * + * @param elsize size in bytes of each list element (only 1, 2, 4 or 8) + * @param term list terminator (usually 0 or -1) + * @param list pointer to the list + * @return length of the list, in elements, not counting the terminator + *) +function av_int_list_length_for_size(elsize: cuint; + {const} list: pointer; term: cuint64): cuint; {av_pure} + cdecl; external av__util; + +(** + * Compute the length of an integer list. + * + * @param term list terminator (usually 0 or -1) + * @param list pointer to the list + * @return length of the list, in elements, not counting the terminator + *) +function av_int_list_length({const} list: pointer; term: cuint64): cuint; + +(** + * Open a file using a UTF-8 filename. + * The API of this function matches POSIX fopen(), errors are returned through + * errno. + *) +function av_fopen_utf8(path: {const} Pchar; mode: {const} Pchar): PAVFile; + cdecl; external av__util; + +(** + * Return the fractional representation of the internal time base. + *) +function av_get_time_base_q: TAVRational; + cdecl; external av__util; + +{$INCLUDE libavutil/cpu.pas} + +{$INCLUDE libavutil/dict.pas} + +{$INCLUDE libavutil/error.pas} + +{$INCLUDE libavutil/mathematics.pas} + +{$INCLUDE libavutil/mem.pas} + +{$INCLUDE libavutil/log.pas} + +{$INCLUDE libavutil/pixfmt.pas} + +{$INCLUDE libavutil/samplefmt.pas} + +{$INCLUDE libavutil/opt.pas} + +{$INCLUDE libavutil/buffer.pas} + +{$INCLUDE libavutil/frame.pas} + + +(* libavutil/common.h *) // until now MKTAG and MKBETAG is all from common.h KMS 19/5/2010 + +(** + * MKTAG and MKBETAG are usually used to convert a magic string to an enumeration index. + * In Pascal this can probably not be used and the functions could be removed. + * KMS 8/6/2012 + *) +function MKTAG (a, b, c, d: AnsiChar): integer; {$IFDEF HasInline}inline;{$ENDIF} +function MKBETAG(a, b, c, d: AnsiChar): integer; {$IFDEF HasInline}inline;{$ENDIF} + +implementation + +uses + SysUtils; + +function av_x_if_null(p: {const} pointer; x: {const} pointer): pointer; {$IFDEF HasInline}inline;{$ENDIF} +begin + if p = nil then + Result := x + else + Result := p; +end; + +function av_int_list_length({const} list: pointer; term: cuint64): cuint; +begin + // KMS 2013: It is not really clear whether it should be sizeof(pointer) or sizeof(cint). + // Going for the larger one (pointer) should at least prevent buffer overflows. + // So, the result is either 4 byte or 8 byte. + Result := av_int_list_length_for_size(sizeof(pointer), list, term); +end; + +(* libavutil/common.h *) + +function MKTAG(a, b, c, d: AnsiChar): integer; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := (ord(a) or (ord(b) shl 8) or (ord(c) shl 16) or (ord(d) shl 24)); +end; + +function MKBETAG(a, b, c, d: AnsiChar): integer; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := (ord(d) or (ord(c) shl 8) or (ord(b) shl 16) or (ord(a) shl 24)); +end; + +(* libavutil/error.h *) + +function av_make_error_string(errbuf: Pchar; errbuf_size: size_t; errnum: cint): Pchar; {$IFDEF HasInline}inline;{$ENDIF} +begin + av_strerror(errnum, errbuf, errbuf_size); + av_make_error_string := errbuf; +end; + +function av_err2str(errnum: cint): pchar; {$IFDEF HasInline}inline;{$ENDIF} +var + errbuf: Pchar; +begin + errbuf := stralloc(AV_ERROR_MAX_STRING_SIZE); + av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE, errnum); + av_err2str := errbuf; +end; + +(* libavutil/mem.h *) + +function av_size_mult(a: size_t; b: size_t; r: Psize_t): size_t; + cdecl; external av__util; +(* To Be Implemented, March 2012 KMS *) +//function av_size_mult(a: size_t; b: size_t; r: pointer): size_t; +//begin +// { +// size_t t = a * b; +// /* Hack inspired from glibc: only try the division if nelem and elsize +// * are both greater than sqrt(SIZE_MAX). */ +// if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) +// return AVERROR(EINVAL); +// *r = t; +// return 0; +//} +//end; + +function av_malloc_array(nmemb: size_t; size: size_t): pointer; {$IFDEF HasInline}inline;{$ENDIF} {av_alloc_size(1,2)} +begin + if (size <= 0 ) or (nmemb >= maxint / size) then + av_malloc_array := NIL + else + av_malloc_array := av_malloc(nmemb * size); +end; + +function av_mallocz_array(nmemb: size_t; size: size_t): pointer; {$IFDEF HasInline}inline;{$ENDIF} {av_alloc_size(1,2)} +begin + if (size <= 0 ) or (nmemb >= maxint / size) then + av_mallocz_array := NIL + else + av_mallocz_array := av_mallocz(nmemb * size); +end; + +function AVERROR(e: integer): integer; +begin + AVERROR := AVERROR_SIGN * e; +end; + +end. diff --git a/src/lib/ffmpeg-3.2/ff_api-defines.inc b/src/lib/ffmpeg-3.2/ff_api-defines.inc new file mode 100644 index 00000000..3a3bcf0e --- /dev/null +++ b/src/lib/ffmpeg-3.2/ff_api-defines.inc @@ -0,0 +1,260 @@ +// prevent pasdoc from parsing this file +{$IFNDEF PASDOC} + +(** + * FF_API_* defines may be placed below to indicate public API that will be + * dropped at a future version bump. The defines themselves are not part of + * the public API and may change, break or disappear at any time. + *) + +(** avcodec defines *) +{$ifndef FF_API_VIMA_DECODER} +{$define FF_API_VIMA_DECODER := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AUDIO_CONVERT} +{$define FF_API_AUDIO_CONVERT := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AVCODEC_RESAMPLE} +{$define FF_API_AVCODEC_RESAMPLE := FF_API_AUDIO_CONVERT} +{$endif} +{$ifndef FF_API_GETCHROMA} +{$define FF_API_GETCHROMA := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_MISSING_SAMPLE} +{$define FF_API_MISSING_SAMPLE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LOWRES} +{$define FF_API_LOWRES := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_CAP_VDPAU} +{$define FF_API_CAP_VDPAU := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_BUFS_VDPAU} +{$define FF_API_BUFS_VDPAU := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_VOXWARE} +{$define FF_API_VOXWARE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_SET_DIMENSIONS} +{$define FF_API_SET_DIMENSIONS := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_DEBUG_MV} +{$define FF_API_DEBUG_MV := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AC_VLC} +{$define FF_API_AC_VLC := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_OLD_MSMPEG4} +{$define FF_API_OLD_MSMPEG4 := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ASPECT_EXTENDED} +{$define FF_API_ASPECT_EXTENDED := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ARCH_ALPHA} +{$define FF_API_ARCH_ALPHA := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_XVMC} +{$define FF_API_XVMC := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ERROR_RATE} +{$define FF_API_ERROR_RATE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_QSCALE_TYPE} +{$define FF_API_QSCALE_TYPE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_MB_TYPE} +{$define FF_API_MB_TYPE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_MAX_BFRAMES} +{$define FF_API_MAX_BFRAMES := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_NEG_LINESIZES} +{$define FF_API_NEG_LINESIZES := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_EMU_EDGE} +{$define FF_API_EMU_EDGE := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ARCH_SH4} +{$define FF_API_ARCH_SH4 := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_ARCH_SPARC} +{$define FF_API_ARCH_SPARC := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_UNUSED_MEMBERS} +{$define FF_API_UNUSED_MEMBERS := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_IDCT_XVIDMMX} +{$define FF_API_IDCT_XVIDMMX := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_INPUT_PRESERVED} +{$define FF_API_INPUT_PRESERVED := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_NORMALIZE_AQP} +{$define FF_API_NORMALIZE_AQP := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_GMC} +{$define FF_API_GMC := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_MV0} +{$define FF_API_MV0 := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_CODEC_NAME} +{$define FF_API_CODEC_NAME := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AFD} +{$define FF_API_AFD := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_VISMV} +(* XXX: don't forget to drop the -vismv documentation *) +{$define FF_API_VISMV := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AUDIOENC_DELAY} +{$define FF_API_AUDIOENC_DELAY := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_VAAPI_CONTEXT} +{$define FF_API_VAAPI_CONTEXT := (LIBAVCODEC_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_AVCTX_TIMEBASE} +{$define FF_API_AVCTX_TIMEBASE := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_MPV_OPT} +{$define FF_API_MPV_OPT := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_STREAM_CODEC_TAG} +{$define FF_API_STREAM_CODEC_TAG := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_QUANT_BIAS} +{$define FF_API_QUANT_BIAS := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_RC_STRATEGY} +{$define FF_API_RC_STRATEGY := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_CODED_FRAME} +{$define FF_API_CODED_FRAME := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_MOTION_EST} +{$define FF_API_MOTION_EST := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_WITHOUT_PREFIX} +{$define FF_API_WITHOUT_PREFIX := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_SIDEDATA_ONLY_PKT} +{$define FF_API_SIDEDATA_ONLY_PKT:= (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_VDPAU_PROFILE} +{$define FF_API_VDPAU_PROFILE := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_CONVERGENCE_DURATION} +{$define FF_API_CONVERGENCE_DURATION := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_AVPICTURE} +{$define FF_API_AVPICTURE := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_AVPACKET_OLD_API} +{$define FF_API_AVPACKET_OLD_API := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_RTP_CALLBACK} +{$define FF_API_RTP_CALLBACK := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_VBV_DELAY} +{$define FF_API_VBV_DELAY := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_CODER_TYPE} +{$define FF_API_CODER_TYPE := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_STAT_BITS} +{$define FF_API_STAT_BITS := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_PRIVATE_OPT} +{$define FF_API_PRIVATE_OPT := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_ASS_TIMING} +{$define FF_API_ASS_TIMING := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_OLD_BSF} +{$define FF_API_OLD_BSF := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_COPY_CONTEXT} +{$define FF_API_COPY_CONTEXT := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_GET_CONTEXT_DEFAULTS} +{$define FF_API_GET_CONTEXT_DEFAULTS := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} +{$ifndef FF_API_NVENC_OLD_NAME} +{$define FF_API_NVENC_OLD_NAME := (LIBAVCODEC_VERSION_MAJOR < 59)} +{$endif} + +(* avutil defines *) +{$ifndef FF_API_VDPAU} +{$define FF_API_VDPAU := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_XVMC} +{$define FF_API_XVMC := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_OPT_TYPE_METADATA} +{$define FF_API_OPT_TYPE_METADATA := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_DLOG} +{$define FF_API_DLOG := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_VAAPI} +{$define FF_API_VAAPI := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_FRAME_QP} +{$define FF_API_FRAME_QP := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_PLUS1_MINUS1} +{$define FF_API_PLUS1_MINUS1 := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_ERROR_FRAME} +{$define FF_API_ERROR_FRAME := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_CRC_BIG_TABLE} +{$define FF_API_CRC_BIG_TABLE := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} +{$ifndef FF_API_PKT_PTS} +{$define FF_API_PKT_PTS := (LIBAVUTIL_VERSION_MAJOR < 56)} +{$endif} + +(** avformat FF_API defines *) +{$ifndef FF_API_LAVF_BITEXACT} +{$define FF_API_LAVF_BITEXACT := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LAVF_FRAC} +{$define FF_API_LAVF_FRAC := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LAVF_CODEC_TB} +{$define FF_API_LAVF_CODEC_TB := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_URL_FEOF} +{$define FF_API_URL_FEOF := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LAVF_FMT_RAWPICTURE} +{$define FF_API_LAVF_FMT_RAWPICTURE := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_COMPUTE_PKT_FIELDS2} +{$define FF_API_COMPUTE_PKT_FIELDS2 := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_OLD_OPEN_CALLBACKS} +{$define FF_API_OLD_OPEN_CALLBACKS := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_LAVF_AVCTX} +{$define FF_API_LAVF_AVCTX := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_NOCONST_GET_SIDE_DATA} +{$define FF_API_NOCONST_GET_SIDE_DATA := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} +{$ifndef FF_API_HTTP_USER_AGENT} +{$define FF_API_HTTP_USER_AGENT := (LIBAVFORMAT_VERSION_MAJOR < 58)} +{$endif} + +{$ifndef FF_API_R_FRAME_RATE} +{$define FF_API_R_FRAME_RATE := 1} +{$endif} + +(** swscale FF_API defines *) +{$ifndef FF_API_SWS_VECTOR} +{$define FF_API_SWS_VECTOR := (LIBSWSCALE_VERSION_MAJOR < 6)} +{$endif} + +{$ENDIF PASDOC} diff --git a/src/lib/ffmpeg-3.2/libavcodec/audioconvert.pas b/src/lib/ffmpeg-3.2/libavcodec/audioconvert.pas new file mode 100644 index 00000000..cf6c96bb --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavcodec/audioconvert.pas @@ -0,0 +1,294 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/channel_layout.h and libavcodec/audioconvert.h + * avutil version 52.66.100; avcodec version 55.52.102 + * + *) + +(** libavutil/channel_layout.h **) + +(** + * @file + * audio channel layout utility functions + *) + +(** + * @defgroup channel_masks Audio channel masks + * + * A channel layout is a 64-bits integer with a bit set for every channel. + * The number of bits set must be equal to the number of channels. + * The value 0 means that the channel layout is not known. + * @note this data structure is not powerful enough to handle channels + * combinations that have the same channel multiple times, such as + * dual-mono. + * + *) +const + {* Audio channel masks *} + AV_CH_FRONT_LEFT = $00000001; + AV_CH_FRONT_RIGHT = $00000002; + AV_CH_FRONT_CENTER = $00000004; + AV_CH_LOW_FREQUENCY = $00000008; + AV_CH_BACK_LEFT = $00000010; + AV_CH_BACK_RIGHT = $00000020; + AV_CH_FRONT_LEFT_OF_CENTER = $00000040; + AV_CH_FRONT_RIGHT_OF_CENTER = $00000080; + AV_CH_BACK_CENTER = $00000100; + AV_CH_SIDE_LEFT = $00000200; + AV_CH_SIDE_RIGHT = $00000400; + AV_CH_TOP_CENTER = $00000800; + AV_CH_TOP_FRONT_LEFT = $00001000; + AV_CH_TOP_FRONT_CENTER = $00002000; + AV_CH_TOP_FRONT_RIGHT = $00004000; + AV_CH_TOP_BACK_LEFT = $00008000; + AV_CH_TOP_BACK_CENTER = $00010000; + AV_CH_TOP_BACK_RIGHT = $00020000; + AV_CH_STEREO_LEFT = $20000000; ///< Stereo downmix. + AV_CH_STEREO_RIGHT = $40000000; ///< See AV_CH_STEREO_LEFT. + AV_CH_WIDE_LEFT = $0000000080000000; + AV_CH_WIDE_RIGHT = $0000000100000000; + AV_CH_SURROUND_DIRECT_LEFT = $0000000200000000; + AV_CH_SURROUND_DIRECT_RIGHT = $0000000400000000; + AV_CH_LOW_FREQUENCY_2 = $0000000800000000; + +(** Channel mask value used for AVCodecContext.request_channel_layout + * to indicate that the user requests the channel order of the decoder output + * to be the native codec channel order. + *) + AV_CH_LAYOUT_NATIVE = $8000000000000000; + +(** + * @} + * @defgroup channel_mask_c Audio channel convenience macros + * @{ + * *) + AV_CH_LAYOUT_MONO = (AV_CH_FRONT_CENTER); + AV_CH_LAYOUT_STEREO = (AV_CH_FRONT_LEFT or AV_CH_FRONT_RIGHT); + AV_CH_LAYOUT_2POINT1 = (AV_CH_LAYOUT_STEREO or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_2_1 = (AV_CH_LAYOUT_STEREO or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_SURROUND = (AV_CH_LAYOUT_STEREO or AV_CH_FRONT_CENTER); + AV_CH_LAYOUT_3POINT1 = (AV_CH_LAYOUT_SURROUND or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_4POINT0 = (AV_CH_LAYOUT_SURROUND or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_4POINT1 = (AV_CH_LAYOUT_4POINT0 or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_2_2 = (AV_CH_LAYOUT_STEREO or AV_CH_SIDE_LEFT or AV_CH_SIDE_RIGHT); + AV_CH_LAYOUT_QUAD = (AV_CH_LAYOUT_STEREO or AV_CH_BACK_LEFT or AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_5POINT0 = (AV_CH_LAYOUT_SURROUND or AV_CH_SIDE_LEFT or AV_CH_SIDE_RIGHT); + AV_CH_LAYOUT_5POINT1 = (AV_CH_LAYOUT_5POINT0 or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_5POINT0_BACK = (AV_CH_LAYOUT_SURROUND or AV_CH_BACK_LEFT or + AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_5POINT1_BACK = (AV_CH_LAYOUT_5POINT0_BACK or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_6POINT0 = (AV_CH_LAYOUT_5POINT0 or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_6POINT0_FRONT = (AV_CH_LAYOUT_2_2 or AV_CH_FRONT_LEFT_OF_CENTER or + AV_CH_FRONT_RIGHT_OF_CENTER); + AV_CH_LAYOUT_HEXAGONAL = (AV_CH_LAYOUT_5POINT0_BACK or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_6POINT1 = (AV_CH_LAYOUT_5POINT1 or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_6POINT1_BACK = (AV_CH_LAYOUT_5POINT1_BACK or AV_CH_BACK_CENTER); + AV_CH_LAYOUT_6POINT1_FRONT = (AV_CH_LAYOUT_6POINT0_FRONT or AV_CH_LOW_FREQUENCY); + AV_CH_LAYOUT_7POINT0 = (AV_CH_LAYOUT_5POINT0 or AV_CH_BACK_LEFT or AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_7POINT0_FRONT = (AV_CH_LAYOUT_5POINT0 or AV_CH_FRONT_LEFT_OF_CENTER or + AV_CH_FRONT_RIGHT_OF_CENTER); + AV_CH_LAYOUT_7POINT1 = (AV_CH_LAYOUT_5POINT1 or AV_CH_BACK_LEFT or AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_7POINT1_WIDE = (AV_CH_LAYOUT_5POINT1 or AV_CH_FRONT_LEFT_OF_CENTER or + AV_CH_FRONT_RIGHT_OF_CENTER); + AV_CH_LAYOUT_OCTAGONAL = (AV_CH_LAYOUT_5POINT0 or AV_CH_BACK_LEFT or AV_CH_BACK_CENTER or + AV_CH_BACK_RIGHT); + AV_CH_LAYOUT_HEXADECAGONAL = (AV_CH_LAYOUT_OCTAGONAL or AV_CH_WIDE_LEFT or AV_CH_WIDE_RIGHT or AV_CH_TOP_BACK_LEFT or + AV_CH_TOP_BACK_RIGHT or AV_CH_TOP_BACK_CENTER or AV_CH_TOP_FRONT_CENTER or + AV_CH_TOP_FRONT_LEFT or AV_CH_TOP_FRONT_RIGHT); + AV_CH_LAYOUT_STEREO_DOWNMIX = (AV_CH_STEREO_LEFT or AV_CH_STEREO_RIGHT); + +type + TAVMatrixEncoding = ( + AV_MATRIX_ENCODING_NONE, + AV_MATRIX_ENCODING_DOLBY, + AV_MATRIX_ENCODING_DPLII, + AV_MATRIX_ENCODING_DPLIIX, + AV_MATRIX_ENCODING_DPLIIZ, + AV_MATRIX_ENCODING_DOLBYEX, + AV_MATRIX_ENCODING_DOLBYHEADPHONE, + AV_MATRIX_ENCODING_NB + ); + +(** + * Return a channel layout id that matches name, or 0 if no match is found. + * + * name can be one or several of the following notations, + * separated by '+' or '|': + * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0, + * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); + * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, + * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); + * - a number of channels, in decimal, optionally followed by 'c', yielding + * the default channel layout for that number of channels (@see + * av_get_default_channel_layout); + * - a channel layout mask, in hexadecimal starting with "0x" (see the + * AV_CH_* macros). + * + * Example: "stereo+FC" = "2+FC" = "2c+1c" = "0x7" + *) +function av_get_channel_layout(name: {const} PAnsiChar): cuint64; + cdecl; external av__util; + +(** + * Return a description of a channel layout. + * If nb_channels is <= 0, it is guessed from the channel_layout. + * + * @param buf put here the string containing the channel layout + * @param buf_size size in bytes of the buffer + *) +procedure av_get_channel_layout_string(buf: PAnsiChar; buf_size: cint; nb_channels: cint; channel_layout: cuint64); + cdecl; external av__util; + +type +// Type definition from libavutil/bprint.h +// The actual record is padded to a certain number of bytes. +// As of now (2013) this number is 1024. + PAVBPrint = ^TAVBPrint; + TAVBPrint = record + case integer of + 0 : (paddedRecord: array[1..1024] of byte); + 1 : ( + str: PAnsiChar; //** string so far */ + len: cuint; //** length so far */ + size: cuint; //** allocated memory */ + size_max: cuint; //** maximum allocated memory */ + reserved_internal_buffer: Pchar + ); + end; + +(** + * Append a description of a channel layout to a bprint buffer. + *) +procedure av_bprint_channel_layout(bp: PAVBPrint; nb_channels: cint; channel_layout: cuint64); + cdecl; external av__util; + +(** + * Return the number of channels in the channel layout. + *) +function av_get_channel_layout_nb_channels(channel_layout: cuint64): cint; + cdecl; external av__util; + +(** + * Return default channel layout for a given number of channels. + *) +function av_get_default_channel_layout(nb_channels: cint): cint64; + cdecl; external av__util; + +(** + * Get the index of a channel in channel_layout. + * + * @param channel a channel layout describing exactly one channel which must be + * present in channel_layout. + * + * @return index of channel in channel_layout on success, a negative AVERROR + * on error. + *) +function av_get_channel_layout_channel_index(channel_layout: cuint64; + channel: cuint64): cint; + cdecl; external av__util; + +(** + * Get the channel with the given index in channel_layout. + *) +function av_channel_layout_extract_channel(channel_layout: cuint64; index: cint): cuint64; + cdecl; external av__util; + +(** + * Get the name of a given channel. + * + * @return channel name on success, NULL on error. + *) +function av_get_channel_name(channel: cuint64): PAnsiChar; + cdecl; external av__util; + +(** + * Get the description of a given channel. + * + * @param channel a channel layout with a single channel + * @return channel description on success, NULL on error + *) +function av_get_channel_description(channel: cuint64): PAnsiChar; + cdecl; external av__util; + +(** + * Get the value and name of a standard channel layout. + * + * @param[in] index index in an internal list, starting at 0 + * @param[out] layout channel layout mask + * @param[out] name name of the layout + * @return 0 if the layout exists, + * <0 if index is beyond the limits + *) +function av_get_standard_channel_layout(index: cuint; layout: Pcuint64; + name: {const} PPAnsiChar): cint; + cdecl; external av__util; + +{$IFDEF FF_API_AUDIO_CONVERT} + +(** libavcodec/audioconvert.h **) + +// type definition from libavcodec/audioconvert.c +type + PAVAudioConvert = ^TAVAudioConvert; + TAVAudioConvert = record + in_channels, out_channels: cint; + fmt_pair: cint; + end; + +(** + * Create an audio sample format converter context + * @param out_fmt Output sample format + * @param out_channels Number of output channels + * @param in_fmt Input sample format + * @param in_channels Number of input channels + * @param[in] matrix Channel mixing matrix (of dimension in_channel*out_channels). Set to NULL to ignore. + * @param flags See AV_CPU_FLAG_xx + * @return NULL on error + *) +function av_audio_convert_alloc(out_fmt: TAVSampleFormat; out_channels: cint; + in_fmt: TAVSampleFormat; in_channels: cint; + matrix: {const} Pcfloat; flags: cint): PAVAudioConvert; + cdecl; external av__codec; + +(** + * Free audio sample format converter context + *) +procedure av_audio_convert_free(ctx: PAVAudioConvert); + cdecl; external av__codec; + +type + P6 = array [1..6] of pointer; + I6 = array [1..6] of cint; + +(** + * Convert between audio sample formats + * @param[in] out array of output buffers for each channel. set to NULL to ignore processing of the given channel. + * @param[in] out_stride distance between consecutive output samples (measured in bytes) + * @param[in] in array of input buffers for each channel + * @param[in] in_stride distance between consecutive input samples (measured in bytes) + * @param len length of audio frame size (measured in samples) + *) +function av_audio_convert(ctx: PAVAudioConvert; + out[6]: {const} P6; out_stride[6]: {const} I6; + in[6]: {const} P6; in_stride[6]: {const} I6; len: cint): cint; + cdecl; external av__codec; + +{$IFEND} diff --git a/src/lib/ffmpeg-3.2/libavutil/buffer.pas b/src/lib/ffmpeg-3.2/libavutil/buffer.pas new file mode 100644 index 00000000..0cf47b05 --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/buffer.pas @@ -0,0 +1,309 @@ +(* + * AVOptions + * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/buffer.h + * avutil version 54.7.100 + * + *) + +const +(** + * Always treat the buffer as read-only, even when it has only one + * reference. + *) + AV_BUFFER_FLAG_READONLY = (1 << 0); + +type +(** + * @defgroup lavu_buffer AVBuffer + * @ingroup lavu_data + * + * @ + * AVBuffer is an API for reference-counted data buffers. + * + * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer + * represents the data buffer itself; it is opaque and not meant to be accessed + * by the caller directly, but only through AVBufferRef. However, the caller may + * e.g. compare two AVBuffer pointers to check whether two different references + * are describing the same data buffer. AVBufferRef represents a single + * reference to an AVBuffer and it is the object that may be manipulated by the + * caller directly. + * + * There are two functions provided for creating a new AVBuffer with a single + * reference -- av_buffer_alloc() to just allocate a new buffer, and + * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing + * reference, additional references may be created with av_buffer_ref(). + * Use av_buffer_unref() to free a reference (this will automatically free the + * data once all the references are freed). + * + * The convention throughout this API and the rest of FFmpeg is such that the + * buffer is considered writable if there exists only one reference to it (and + * it has not been marked as read-only). The av_buffer_is_writable() function is + * provided to check whether this is true and av_buffer_make_writable() will + * automatically create a new writable buffer when necessary. + * Of course nothing prevents the calling code from violating this convention, + * however that is safe only when all the existing references are under its + * control. + * + * @note Referencing and unreferencing the buffers is thread-safe and thus + * may be done from multiple threads simultaneously without any need for + * additional locking. + * + * @note Two different references to the same buffer can point to different + * parts of the buffer (i.e. their AVBufferRef.data will not be equal). + *) + +(** + * A reference counted buffer type. It is opaque and is meant to be used through + * references (AVBufferRef). + *) + TAVBuffer = record + end; + +(** + * A reference to a data buffer. + * + * The size of this struct is not a part of the public ABI and it is not meant + * to be allocated directly. + *) + PPAVBufferRef = ^PAVBufferRef; + PAVBufferRef = ^TAVBufferRef; + TAVBufferRef = record + buffer: TAVBuffer; + (** + * The data buffer. It is considered writable if and only if + * this is the only reference to the buffer, in which case + * av_buffer_is_writable() returns 1. + *) + data: PByte; + (** + * Size of data in bytes. + *) + size: cint; + end; + + //callbacks used in the functions av_buffer_create and av_buffer_pool_init respectively + TFree = procedure(opaque: pointer; data: pbyte); + TAlloc = function(size: cint): PAVBufferRef; + TAlloc2 = function(opaque: pointer; size: cint): PAVBufferRef; + TPoolFree = procedure(opaque: pointer); + +(** + * The buffer pool. This structure is opaque and not meant to be accessed + * directly. It is allocated with av_buffer_pool_init() and freed with + * av_buffer_pool_uninit(). + *) + PPAVBufferPool = ^PAVBufferPool; + PAVBufferPool = ^TAVBufferPool; + TAVBufferPool = record + end; + +(** + * Allocate an AVBuffer of the given size using av_malloc(). + * + * @return an AVBufferRef of given size or NULL when out of memory + *) +function av_buffer_alloc(size: cint): PAVBufferRef; + cdecl; external av__util; + +(** + * Same as av_buffer_alloc(), except the returned buffer will be initialized + * to zero. + *) +function av_buffer_allocz(size: cint): PAVBufferRef; + cdecl; external av__util; + +(** + * Create an AVBuffer from an existing array. + * + * If this function is successful, data is owned by the AVBuffer. The caller may + * only access data through the returned AVBufferRef and references derived from + * it. + * If this function fails, data is left untouched. + * @param data data array + * @param size size of data in bytes + * @param free a callback for freeing this buffer's data + * @param opaque parameter to be got for processing or passed to free + * @param flags a combination of AV_BUFFER_FLAG_* + * + * @return an AVBufferRef referring to data on success, NULL on failure. + *) + +function av_buffer_create(data: PByte; size: cint; + free: TFree; + opaque: pointer; flags: cint): PAVBufferRef; + cdecl; external av__util; + +(** + * Default free callback, which calls av_free() on the buffer data. + * This function is meant to be passed to av_buffer_create(), not called + * directly. + *) +procedure av_buffer_default_free(opaque: pointer; data: pbyte); + cdecl; external av__util; + +(** + * Create a new reference to an AVBuffer. + * + * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on + * failure. + *) +function av_buffer_ref(buf: PAVBufferRef): PAVBufferRef; + cdecl; external av__util; + +(** + * Free a given reference and automatically free the buffer if there are no more + * references to it. + * + * @param buf the reference to be freed. The pointer is set to NULL on return. + *) +procedure av_buffer_unref(buf: PPAVBufferRef); + cdecl; external av__util; + +(** + * @return 1 if the caller may write to the data referred to by buf (which is + * true if and only if buf is the only reference to the underlying AVBuffer). + * Return 0 otherwise. + * A positive answer is valid until av_buffer_ref() is called on buf. + *) +function av_buffer_is_writable(buf: {const} PAVBufferRef): cint; + cdecl; external av__util; + +(** + * @return the opaque parameter set by av_buffer_create. + *) +procedure av_buffer_get_opaque(buf: {const} PAVBufferRef); + cdecl; external av__util; + +function av_buffer_get_ref_count(buf: {const} PAVBufferRef): cint; + cdecl; external av__util; + +(** + * Create a writable reference from a given buffer reference, avoiding data copy + * if possible. + * + * @param buf buffer reference to make writable. On success, buf is either left + * untouched, or it is unreferenced and a new writable AVBufferRef is + * written in its place. On failure, buf is left untouched. + * @return 0 on success, a negative AVERROR on failure. + *) +function av_buffer_make_writable(buf: PPAVBufferRef): cint; + cdecl; external av__util; + +(** + * Reallocate a given buffer. + * + * @param buf a buffer reference to reallocate. On success, buf will be + * unreferenced and a new reference with the required size will be + * written in its place. On failure buf will be left untouched. *buf + * may be NULL, then a new buffer is allocated. + * @param size required new buffer size. + * @return 0 on success, a negative AVERROR on failure. + * + * @note the buffer is actually reallocated with av_realloc() only if it was + * initially allocated through av_buffer_realloc(NULL) and there is only one + * reference to it (i.e. the one passed to this function). In all other cases + * a new buffer is allocated and the data is copied. + *) +function av_buffer_realloc(buf: PPAVBufferRef; size: cint): cint; + cdecl; external av__util; + +(** + * @defgroup lavu_bufferpool AVBufferPool + * @ingroup lavu_data + * + * @ + * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers. + * + * Frequently allocating and freeing large buffers may be slow. AVBufferPool is + * meant to solve this in cases when the caller needs a set of buffers of the + * same size (the most obvious use case being buffers for raw video or audio + * frames). + * + * At the beginning, the user must call av_buffer_pool_init() to create the + * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to + * get a reference to a new buffer, similar to av_buffer_alloc(). This new + * reference works in all aspects the same way as the one created by + * av_buffer_alloc(). However, when the last reference to this buffer is + * unreferenced, it is returned to the pool instead of being freed and will be + * reused for subsequent av_buffer_pool_get() calls. + * + * When the caller is done with the pool and no longer needs to allocate any new + * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable. + * Once all the buffers are released, it will automatically be freed. + * + * Allocating and releasing buffers with this API is thread-safe as long as + * either the default alloc callback is used, or the user-supplied one is + * thread-safe. + *) + +(** + * Allocate and initialize a buffer pool. + * + * @param size size of each buffer in this pool + * @param alloc a function that will be used to allocate new buffers when the + * pool is empty. May be NULL, then the default allocator will be used + * (av_buffer_alloc()). + * @return newly created buffer pool on success, NULL on error. + *) +function av_buffer_pool_init(size: cint; alloc: TAlloc): PAVBufferPool; + cdecl; external av__util; + +(** + * Allocate and initialize a buffer pool with a more complex allocator. + * + * @param size size of each buffer in this pool + * @param opaque arbitrary user data used by the allocator + * @param alloc a function that will be used to allocate new buffers when the + * pool is empty. + * @param pool_free a function that will be called immediately before the pool + * is freed. I.e. after av_buffer_pool_can_uninit() is called + * by the pool and all the frames are returned to the pool and + * freed. It is intended to uninitialize the user opaque data. + * @return newly created buffer pool on success, NULL on error. + *) +function av_buffer_pool_init2(size: cint; opaque: pointer; + alloc: TAlloc2; + pool_free: TPoolFree): PAVBufferPool; + cdecl; external av__util; + +(** + * Mark the pool as being available for freeing. It will actually be freed only + * once all the allocated buffers associated with the pool are released. Thus it + * is safe to call this function while some of the allocated buffers are still + * in use. + * + * @param pool pointer to the pool to be freed. It will be set to NULL. + *) +procedure av_buffer_pool_uninit(pool: PPAVBufferPool); + cdecl; external av__util; + +(** + * Allocate a new AVBuffer, reusing an old buffer from the pool when available. + * This function may be called simultaneously from multiple threads. + * + * @return a reference to the new buffer on success, NULL on error. + *) +function av_buffer_pool_get(pool: PAVBufferPool): PAVBufferRef; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.2/libavutil/cpu.pas b/src/lib/ffmpeg-3.2/libavutil/cpu.pas new file mode 100644 index 00000000..1e1e6777 --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/cpu.pas @@ -0,0 +1,124 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/cpu.h + * avutil version 54.7.100 + * + *) + +const + + AV_CPU_FLAG_FORCE = $80000000; (* force usage of selected flags (OR) *) + + (* lower 16 bits - CPU features *) + AV_CPU_FLAG_MMX = $0001; ///< standard MMX + AV_CPU_FLAG_MMXEXT = $0002; ///< SSE integer functions or AMD MMX ext + AV_CPU_FLAG_MMX2 = $0002; ///< SSE integer functions or AMD MMX ext + AV_CPU_FLAG_3DNOW = $0004; ///< AMD 3DNOW + AV_CPU_FLAG_SSE = $0008; ///< SSE functions + AV_CPU_FLAG_SSE2 = $0010; ///< PIV SSE2 functions + AV_CPU_FLAG_SSE2SLOW = $40000000; ///< SSE2 supported, but usually not faster + ///< than regular MMX/SSE (e.g. Core1) + AV_CPU_FLAG_3DNOWEXT = $0020; ///< AMD 3DNowExt + AV_CPU_FLAG_SSE3 = $0040; ///< Prescott SSE3 functions + AV_CPU_FLAG_SSE3SLOW = $20000000; ///< SSE3 supported, but usually not faster + ///< than regular MMX/SSE (e.g. Core1) + AV_CPU_FLAG_SSSE3 = $0080; ///< Conroe SSSE3 functions + AV_CPU_FLAG_ATOM = $10000000; ///< Atom processor, some SSSE3 instructions are slower + AV_CPU_FLAG_SSE4 = $0100; ///< Penryn SSE4.1 functions + AV_CPU_FLAG_SSE42 = $0200; ///< Nehalem SSE4.2 functions + AV_CPU_FLAG_AESNI = $80000; ///< Advanced Encryption Standard functions + AV_CPU_FLAG_AVX = $4000; ///< AVX functions: requires OS support even if YMM registers aren't used + AV_CPU_FLAG_AVXSLOW = $8000000; ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer) + AV_CPU_FLAG_XOP = $0400; ///< Bulldozer XOP functions + AV_CPU_FLAG_FMA4 = $0800; ///< Bulldozer FMA4 functions + + AV_CPU_FLAG_CMOV = $1000; ///< supports cmov instruction + + AV_CPU_FLAG_AVX2 = $8000; ///< AVX2 functions: requires OS support even if YMM registers aren't used + AV_CPU_FLAG_FMA3 = $10000; ///< Haswell FMA3 functions + AV_CPU_FLAG_BMI1 = $20000; ///< Bit Manipulation Instruction Set 1 + AV_CPU_FLAG_BMI2 = $40000; ///< Bit Manipulation Instruction Set 2 + + AV_CPU_FLAG_ALTIVEC = $0001; ///< standard + AV_CPU_FLAG_VSX = $0002; ///< ISA 2.06 + AV_CPU_FLAG_POWER8 = $0004; ///< ISA 2.07 + + AV_CPU_FLAG_ARMV5TE = (1 << 0); + AV_CPU_FLAG_ARMV6 = (1 << 1); + AV_CPU_FLAG_ARMV6T2 = (1 << 2); + AV_CPU_FLAG_VFP = (1 << 3); + AV_CPU_FLAG_VFPV3 = (1 << 4); + AV_CPU_FLAG_NEON = (1 << 5); + AV_CPU_FLAG_ARMV8 = (1 << 6); + AV_CPU_FLAG_VFP_VM = (1 << 7); ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations + AV_CPU_FLAG_SETEND = (1 <<16); + +(** + * Return the flags which specify extensions supported by the CPU. + * The returned value is affected by av_force_cpu_flags() if that was used + * before. So av_get_cpu_flags() can easily be used in an application to + * detect the enabled cpu flags. + *) +function av_get_cpu_flags(): cint; + cdecl; external av__util; + +(** + * Disables cpu detection and forces the specified flags. + * -1 is a special case that disables forcing of specific flags. + *) +procedure av_force_cpu_flags(flags: cint); + cdecl; external av__util; + +(** + * Set a mask on flags returned by av_get_cpu_flags(). + * This function is mainly useful for testing. + * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible + * + * @warning this function is not thread safe. + *) +procedure av_set_cpu_flags_mask(mask: cint); + cdecl; external av__util; deprecated; + +(** + * Parse CPU flags from a string. + * + * The returned flags contain the specified flags as well as related unspecified flags. + * + * This function exists only for compatibility with libav. + * Please use av_parse_cpu_caps() when possible. + * @return a combination of AV_CPU_* flags, negative on error. + *) +function av_parse_cpu_flags(s: {const} PAnsiChar): cint; + cdecl; external av__util; deprecated; + +(** + * Parse CPU caps from a string and update the given AV_CPU_* flags based on that. + * + * @return negative on error. + *) +function av_parse_cpu_caps(flags: Pcuint; s: {const} PAnsiChar): cint; + cdecl; external av__util; + +(** + * @return the number of logical CPU cores present. + *) +function av_cpu_count(): cint; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.2/libavutil/dict.pas b/src/lib/ffmpeg-3.2/libavutil/dict.pas new file mode 100644 index 00000000..ef54610c --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/dict.pas @@ -0,0 +1,168 @@ +(* + * AVDictionary + * copyright (c) 2011 Karl-Michael Schindler <karl-michael.schindler@web.de> + * + * 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 + * + * This is a part of the Pascal port of ffmpeg. + * + * Conversion of libavutil/dict.h + * avutil version 54.7.100 + * + *) + +const + AV_DICT_MATCH_CASE = 1; + AV_DICT_IGNORE_SUFFIX = 2; + AV_DICT_DONT_STRDUP_KEY = 4; (**< Take ownership of a key that's been + allocated with av_malloc() or another memory allocation function. *) + AV_DICT_DONT_STRDUP_VAL = 8; (**< Take ownership of a value that's been + allocated with av_malloc() or another memory allocation function. *) + AV_DICT_DONT_OVERWRITE = 16; (**< Don't overwrite existing entries. *) + AV_DICT_APPEND = 32; (**< If the entry already exists, append to it. Note that no + delimiter is added, the strings are simply concatenated. *) + AV_DICT_MULTIKEY = 64; (**< Allow to store several equal keys in the dictionary *) + +type + PAVDictionaryEntry = ^TAVDictionaryEntry; + TAVDictionaryEntry = record + key: PAnsiChar; + value: PAnsiChar; + end; + +(* with the "help" of libavutil/internal.h: *) + + PPAVDictionary = ^PAVDictionary; + PAVDictionary = ^TAVDictionary; + TAVDictionary = record + count: cint; + elems: PAVDictionaryEntry; + end; + +(** + * Get a dictionary entry with matching key. + * + * The returned entry key or value must not be changed, or it will + * cause undefined behavior. + * + * To iterate through all the dictionary entries, you can set the matching key + * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag. + * + * @param key matching key + * @param prev Set to the previous matching element to find the next. + * If set to NULL the first matching element is returned. + * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved + * @return found entry or NULL in case no matching entry was found in the dictionary + *) +function av_dict_get({const} m: PAVDictionary; {const} key: PAnsiChar; {const} prev: PAVDictionaryEntry; flags: cint): PAVDictionaryEntry; + cdecl; external av__util; + +(** + * Get number of entries in dictionary. + * + * @param m dictionary + * @return number of entries in dictionary + *) +function av_dict_count({const} m: PAVDictionary): cint; + cdecl; external av__util; + +(** + * Set the given entry in *pm, overwriting an existing entry. + * + * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set, + * these arguments will be freed on error. + * + * Warning: Adding a new entry to a dictionary invalidates all existing entries + * previously returned with av_dict_get. + * + * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL + * a dictionary struct is allocated and put in *pm. + * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags) + * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags). + * Passing a NULL value will cause an existing entry to be deleted. + * @return >= 0 on success otherwise an error code <0 + *) +function av_dict_set(var pm: PAVDictionary; {const} key: PAnsiChar; {const} value: PAnsiChar; flags: cint): cint; + cdecl; external av__util; + +(** + * Convenience wrapper for av_dict_set that converts the value to a string + * and stores it. + * + * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error. + *) +function av_dict_set_int(var pm: PAVDictionary; {const} key: PAnsiChar; + value: cint64; flags: cint): cint; + cdecl; external av__util; + +(** + * Parse the key/value pairs list and add the parsed entries to a dictionary. + * + * In case of failure, all the successfully set entries are stored in + * *pm. You may need to manually free the created dictionary. + * + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other + * @param flags flags to use when adding to dictionary. + * AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL + * are ignored since the key/value tokens will always + * be duplicated. + * @return 0 on success, negative AVERROR code on failure + *) +function av_dict_parse_string(var pm: PAVDictionary; {const} str: PAnsiChar; + {const} key_val_sep: PAnsiChar; {const} pairs_sep: PAnsiChar; + flags: cint): cint; + cdecl; external av__util; + +(** + * Copy entries from one AVDictionary struct into another. + * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL, + * this function will allocate a struct for you and put it in *dst + * @param src pointer to source AVDictionary struct + * @param flags flags to use when setting entries in *dst + * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag + * @return 0 on success, negative AVERROR code on failure. If dst was allocated + * by this function, callers should free the associated memory. + *) +function av_dict_copy(var dst: PAVDictionary; {const} src: PAVDictionary; flags: cint): cint; + cdecl; external av__util; + +(** + * Get dictionary entries as a string. + * + * Create a string containing dictionary's entries. + * Such string may be passed back to av_dict_parse_string(). + * @note String is escaped with backslashes ('\'). + * + * @param[in] m dictionary + * @param[out] buffer Pointer to buffer that will be allocated with string containg entries. + * Buffer must be freed by the caller when is no longer needed. + * @param[in] key_val_sep character used to separate key from value + * @param[in] pairs_sep character used to separate two pairs from each other + * @return >= 0 on success, negative on error + * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same. + *) +function av_dict_get_string({const} m: PAVDictionary; buffer: PPAnsiChar; + {const} key_val_sep: AnsiChar; {const} pairs_sep: AnsiChar): cint; + cdecl; external av__util; + +(** + * Free all the memory allocated for an AVDictionary struct + * and all keys and values. + *) +procedure av_dict_free(var m: PAVDictionary); + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.2/libavutil/error.pas b/src/lib/ffmpeg-3.2/libavutil/error.pas new file mode 100644 index 00000000..f972aa7d --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/error.pas @@ -0,0 +1,169 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/error.h + * avutil version 54.7.100 + * + *) + +(** + * @file + * error code definitions + *) + +(** + * @addtogroup lavu_error + * + * @ + *) + +{* error handling *} + +const +{$IFDEF UNIX} + ENOENT = ESysENOENT; + EIO = ESysEIO; + ENOMEM = ESysENOMEM; + EINVAL = ESysEINVAL; + EDOM = ESysEDOM; + ENOSYS = ESysENOSYS; + EILSEQ = ESysEILSEQ; + EPIPE = ESysEPIPE; + EAGAIN = ESysEAGAIN; +{$ELSE} + ENOENT = 2; + EIO = 5; + EAGAIN = 11; + ENOMEM = 12; + EINVAL = 22; + EPIPE = 32; // just an assumption. needs to be checked. + EDOM = 33; + {$IFDEF MSWINDOWS} + // Note: we assume that ffmpeg was compiled with MinGW. + // This must be changed if DLLs were compiled with cygwin. + ENOSYS = 40; // MSVC/MINGW: 40, CYGWIN: 88, LINUX/FPC: 38 + EILSEQ = 42; // MSVC/MINGW: 42, CYGWIN: 138, LINUX/FPC: 84 + {$ENDIF} +{$ENDIF} + +(** + * We need the sign of the error, because some platforms have + * E* and errno already negated. The previous version failed + * with Delphi, because it needed EINVAL defined. + * Warning: This code is platform dependent and assumes constants + * to be 32 bit. + * This version does the following steps: + * 1) shr 30: shifts the sign bit to bit position 2 + * 2) and $00000002: sets all other bits to zero + * positive EINVAL gives 0, negative gives 2 + * 3) - 1: positive EINVAL gives -1, negative 1 + *) +const + AVERROR_SIGN = (EINVAL shr 30) and $00000002 - 1; + +(* +#if EDOM > 0 +#define AVERROR(e) (-(e)) {**< Returns a negative error code from a POSIX error code, to return from library functions. *} +#define AVUNERROR(e) (-(e)) {**< Returns a POSIX error code from a library function error return value. *} +#else +{* Some platforms have E* and errno already negated. *} +#define AVERROR(e) (e) +#define AVUNERROR(e) (e) +#endif +*) +function AVERROR(e: integer): integer; + +const + + // Note: function calls as constant-initializers are invalid + AVERROR_BSF_NOT_FOUND = -(ord($F8) or (ord('B') shl 8) or (ord('S') shl 16) or (ord('F') shl 24)); ///< Bitstream filter not found + AVERROR_BUG = -(ord('B') or (ord('U') shl 8) or (ord('G') shl 16) or (ord('!') shl 24)); ///< Internal bug, also see AVERROR_BUG2 + AVERROR_BUFFER_TOO_SMALL = -(ord('B') or (ord('U') shl 8) or (ord('F') shl 16) or (ord('S') shl 24)); ///< Buffer too small + AVERROR_DECODER_NOT_FOUND = -(ord($F8) or (ord('D') shl 8) or (ord('E') shl 16) or (ord('C') shl 24)); ///< Decoder not found + AVERROR_DEMUXER_NOT_FOUND = -(ord($F8) or (ord('D') shl 8) or (ord('E') shl 16) or (ord('M') shl 24)); ///< Demuxer not found + AVERROR_ENCODER_NOT_FOUND = -(ord($F8) or (ord('E') shl 8) or (ord('N') shl 16) or (ord('C') shl 24)); ///< Encoder not found + AVERROR_EOF = -(ord('E') or (ord('O') shl 8) or (ord('F') shl 16) or (ord(' ') shl 24)); ///< End of file + AVERROR_EXIT = -(ord('E') or (ord('X') shl 8) or (ord('I') shl 16) or (ord('T') shl 24)); ///< Immediate exit was requested; the called function should not be restarted + AVERROR_EXTERNAL = -(ord('E') or (ord('X') shl 8) or (ord('T') shl 16) or (ord(' ') shl 24)); ///< Generic error in an external library + AVERROR_FILTER_NOT_FOUND = -(ord($F8) or (ord('F') shl 8) or (ord('I') shl 16) or (ord('L') shl 24)); ///< Filter not found + AVERROR_INVALIDDATA = -(ord('I') or (ord('N') shl 8) or (ord('D') shl 16) or (ord('A') shl 24)); ///< Invalid data found when processing input + AVERROR_MUXER_NOT_FOUND = -(ord($F8) or (ord('M') shl 8) or (ord('U') shl 16) or (ord('X') shl 24)); ///< Muxer not found + AVERROR_OPTION_NOT_FOUND = -(ord($F8) or (ord('O') shl 8) or (ord('P') shl 16) or (ord('T') shl 24)); ///< Option not found + AVERROR_PATCHWELCOME = -(ord('P') or (ord('A') shl 8) or (ord('W') shl 16) or (ord('E') shl 24)); ///< Not yet implemented in FFmpeg, patches welcome + AVERROR_PROTOCOL_NOT_FOUND = -(ord($F8) or (ord('P') shl 8) or (ord('R') shl 16) or (ord('O') shl 24)); ///< Protocol not found + AVERROR_STREAM_NOT_FOUND = -(ord($F8) or (ord('S') shl 8) or (ord('T') shl 16) or (ord('R') shl 24)); ///< Stream not found + +(** + * This is semantically identical to AVERROR_BUG + * it has been introduced in Libav after our AVERROR_BUG and with a modified value. + *) + AVERROR_BUG2 = -(ord('B') or (ord('U') shl 8) or (ord('G') shl 16) or (ord(' ') shl 24)); + AVERROR_UNKNOWN = -(ord('U') or (ord('N') shl 8) or (ord('K') shl 16) or (ord('N') shl 24)); ///< Unknown error, typically from an external library + AVERROR_EXPERIMENTAL = -($2bb2afa8); ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it. + AVERROR_INPUT_CHANGED = -($636e6701); ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED) + AVERROR_OUTPUT_CHANGED = -($636e6702); ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED) +(* HTTP & RTSP errors *) + AVERROR_HTTP_BAD_REQUEST = -(ord($F8) or (ord('4') shl 8) or (ord('0') shl 16) or (ord('0') shl 24)); + AVERROR_HTTP_UNAUTHORIZED = -(ord($F8) or (ord('4') shl 8) or (ord('0') shl 16) or (ord('1') shl 24)); + AVERROR_HTTP_FORBIDDEN = -(ord($F8) or (ord('4') shl 8) or (ord('0') shl 16) or (ord('3') shl 24)); + AVERROR_HTTP_NOT_FOUND = -(ord($F8) or (ord('4') shl 8) or (ord('0') shl 16) or (ord('4') shl 24)); + AVERROR_HTTP_OTHER_4XX = -(ord($F8) or (ord('4') shl 8) or (ord('X') shl 16) or (ord('X') shl 24)); + AVERROR_HTTP_SERVER_ERROR = -(ord($F8) or (ord('5') shl 8) or (ord('X') shl 16) or (ord('X') shl 24)); + + AV_ERROR_MAX_STRING_SIZE = 64; + +(* + * Put a description of the AVERROR code errnum in errbuf. + * In case of failure the global variable errno is set to indicate the + * error. Even in case of failure av_strerror() will print a generic + * error message indicating the errnum provided to errbuf. + * + * @param errnum error code to describe + * @param errbuf buffer to which description is written + * @param errbuf_size the size in bytes of errbuf + * @return 0 on success, a negative value if a description for errnum + * cannot be found + *) +function av_strerror(errnum: cint; errbuf: PAnsiChar; errbuf_size: size_t): cint; + cdecl; external av__util; + +(** + * Fill the provided buffer with a string containing an error string + * corresponding to the AVERROR code errnum. + * + * @param errbuf a buffer + * @param errbuf_size size in bytes of errbuf + * @param errnum error code to describe + * @return the buffer in input, filled with the error description + * @see av_strerror() + *) +function av_make_error_string(errbuf: Pchar; errbuf_size: size_t; errnum: cint): Pchar; {$IFDEF HasInline}inline;{$ENDIF} +// Note: defined in avutil.pas + +(** + * Convenience macro, the return value should be used only directly in + * function arguments but never stand-alone. + *) +function av_err2str(errnum: cint): pchar; {$IFDEF HasInline}inline;{$ENDIF} +// Note: defined in avutil.pas + +(** + * @} + *) diff --git a/src/lib/ffmpeg-3.2/libavutil/frame.pas b/src/lib/ffmpeg-3.2/libavutil/frame.pas new file mode 100644 index 00000000..8cd8a14e --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/frame.pas @@ -0,0 +1,827 @@ +(* + * AVOptions + * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/frame.h + * avutil version 54.7.100 + * +*) + +const + AV_NUM_DATA_POINTERS = 8; + + (** from the definitions of TAVFrame *) + + (** + * The frame data may be corrupted, e.g. due to decoding errors. + *) + AV_FRAME_FLAG_CORRUPT = (1 << 0); + (** + * A flag to mark the frames which need to be decoded, but shouldn't be output. + *) + AV_FRAME_FLAG_DISCARD = (1 << 2); + + FF_DECODE_ERROR_INVALID_BITSTREAM = 1; + FF_DECODE_ERROR_MISSING_REFERENCE = 2; + + +type +(* is already in pixfmt.pas + TAVColorSpace = ( + AVCOL_SPC_RGB = 0, + AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B + AVCOL_SPC_UNSPECIFIED = 2, + AVCOL_SPC_FCC = 4, + AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 + AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC / functionally identical to above + AVCOL_SPC_SMPTE240M_ = 7, + AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system + AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system + AVCOL_SPC_NB ///< Not part of ABI + ); + + TAVColorRange = ( + AVCOL_RANGE_UNSPECIFIED = 0, + AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges + AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + AVCOL_RANGE_NB ///< Not part of ABI + ); +*) + +(* Note: AVPanScan is defined in avcodec.h but is here to avoid reference problems - Brian-ch 28/09/2014 + * + * Pan Scan area. + * This specifies the area which should be displayed. + * Note there may be multiple such areas for one frame. + *) + PAVPanScan = ^TAVPanScan; + TAVPanScan = record {24} + (*** id. + * - encoding: set by user. + * - decoding: set by libavcodec. *) + id: cint; + + (*** width and height in 1/16 pel + * - encoding: set by user. + * - decoding: set by libavcodec. *) + width: cint; + height: cint; + + (*** position of the top left corner in 1/16 pel for up to 3 fields/frames. + * - encoding: set by user. + * - decoding: set by libavcodec. *) + position: array [0..2] of array [0..1] of cint16; + end; {TAVPanScan} + + (** + * @defgroup lavu_frame AVFrame + * @ingroup lavu_data + * + * @ + * AVFrame is an abstraction for reference-counted raw multimedia data. + *) + TAVFrameSideDataType = ( + (** + * The data is the AVPanScan struct defined in libavcodec. + *) + AV_FRAME_DATA_PANSCAN, + (** + * ATSC A53 Part 4 Closed Captions. + * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data. + * The number of bytes of CC data is AVFrameSideData.size. + *) + AV_FRAME_DATA_A53_CC, + (** + * Stereoscopic 3d metadata. + * The data is the AVStereo3D struct defined in libavutil/stereo3d.h. + *) + AV_FRAME_DATA_STEREO3D, + (** + * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h. + *) + AV_FRAME_DATA_MATRIXENCODING, + (** + * Metadata relevant to a downmix procedure. + * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h. + *) + AV_FRAME_DATA_DOWNMIX_INFO, + (** + * ReplayGain information in the form of the AVReplayGain struct. + *) + AV_FRAME_DATA_REPLAYGAIN, + (** + * This side data contains a 3x3 transformation matrix describing an affine + * transformation that needs to be applied to the frame for correct + * presentation. + * + * See libavutil/display.h for a detailed description of the data. + *) + AV_FRAME_DATA_DISPLAYMATRIX, + (** + * Active Format Description data consisting of a single byte as specified + * in ETSI TS 101 154 using AVActiveFormatDescription enum. + *) + AV_FRAME_DATA_AFD, + (** + * Motion vectors exported by some codecs (on demand through the export_mvs + * flag set in the libavcodec AVCodecContext flags2 option). + * The data is the AVMotionVector struct defined in + * libavutil/motion_vector.h. + *) + AV_FRAME_DATA_MOTION_VECTORS, + (** + * Recommmends skipping the specified number of samples. This is exported + * only if the "skip_manual" AVOption is set in libavcodec. + * This has the same format as AV_PKT_DATA_SKIP_SAMPLES. + * @code + * u32le number of samples to skip from start of this packet + * u32le number of samples to skip from end of this packet + * u8 reason for start skip + * u8 reason for end skip (0=padding silence, 1=convergence) + * @endcode + *) + AV_FRAME_DATA_SKIP_SAMPLES, + (** + * This side data must be associated with an audio frame and corresponds to + * enum AVAudioServiceType defined in avcodec.h. + *) + AV_FRAME_DATA_AUDIO_SERVICE_TYPE, + (** + * Mastering display metadata associated with a video frame. The payload is + * an AVMasteringDisplayMetadata type and contains information about the + * mastering display color volume. + *) + AV_FRAME_DATA_MASTERING_DISPLAY_METADATA, + (** + * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. + * This is set on the first frame of a GOP that has a temporal reference of 0. + *) + AV_FRAME_DATA_GOP_TIMECODE + ); + + TAVActiveFormatDescription = ( + AV_AFD_SAME = 8, + AV_AFD_4_3 = 9, + AV_AFD_16_9 = 10, + AV_AFD_14_9 = 11, + AV_AFD_4_3_SP_14_9 = 13, + AV_AFD_16_9_SP_14_9 = 14, + AV_AFD_SP_4_3 = 15 + ); {TAVActiveFormatDescription} + + PAVFrameSideData = ^TAVFrameSideData; +(** + * Structure to hold side data for an AVFrame. + * + * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added + * to the end with a minor bump. + *) + TAVFrameSideData = record + type_: TAVFrameSideDataType; + data: PByte; + size: cint; + metadata: TAVDictionary; + buf: PAVBufferRef; + end; {TAVFrameSideData} + +(** + * This structure describes decoded (raw) audio or video data. + * + * AVFrame must be allocated using av_frame_alloc(). Note that this only + * allocates the AVFrame itself, the buffers for the data must be managed + * through other means (see below). + * AVFrame must be freed with av_frame_free(). + * + * AVFrame is typically allocated once and then reused multiple times to hold + * different data (e.g. a single AVFrame to hold frames received from a + * decoder). In such a case, av_frame_unref() will free any references held by + * the frame and reset it to its original clean state before it + * is reused again. + * + * The data described by an AVFrame is usually reference counted through the + * AVBuffer API. The underlying buffer references are stored in AVFrame.buf / + * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at + * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case, + * every single data plane must be contained in one of the buffers in + * AVFrame.buf or AVFrame.extended_buf. + * There may be a single buffer for all the data, or one separate buffer for + * each plane, or anything in between. + * + * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added + * to the end with a minor bump. + * Similarly fields that are marked as to be only accessed by + * av_opt_ptr() can be reordered. This allows 2 forks to add fields + * without breaking compatibility with each other. + * + * Fields can be accessed through AVOptions, the name string used, matches the + * C structure field name for fields accessible through AVOptions. The AVClass + * for AVFrame can be obtained from avcodec_get_frame_class() + *) + PPAVFrame = ^PAVFrame; + PAVFrame = ^TAVFrame; + TAVFrame = record + (** + * pointer to the picture/channel planes. + * This might be different from the first allocated byte + * + * Some decoders access areas outside 0,0 - width,height, please + * see avcodec_align_dimensions2(). Some filters and swscale can read + * up to 16 bytes beyond the planes, if these filters are to be used, + * then 16 extra bytes must be allocated. + * + * NOTE: Except for hwaccel formats, pointers not needed by the format + * MUST be set to NULL. + *) + data: array [0..AV_NUM_DATA_POINTERS - 1] of pbyte; + + (** + * For video, size in bytes of each picture line. + * For audio, size in bytes of each plane. + * + * For audio, only linesize[0] may be set. For planar audio, each channel + * plane must be the same size. + * + * For video the linesizes should be multiples of the CPUs alignment + * preference, this is 16 or 32 for modern desktop CPUs. + * Some code requires such alignment other code can be slower without + * correct alignment, for yet other it makes no difference. + * + * @note The linesize may be larger than the size of usable data -- there + * may be extra padding present for performance reasons. + *) + linesize: array [0..AV_NUM_DATA_POINTERS - 1] of cint; + + (** + * pointers to the data planes/channels. + * + * For video, this should simply point to data[]. + * + * For planar audio, each channel has a separate data pointer, and + * linesize[0] contains the size of each channel buffer. + * For packed audio, there is just one data pointer, and linesize[0] + * contains the total size of the buffer for all channels. + * + * Note: Both data and extended_data will always be set by get_buffer(), + * but for planar audio with more channels that can fit in data, + * extended_data must be used in order to access all channels. + *) + extended_data: ^pbyte; + + (** + * width and height of the video frame + *) + width, height: cint; + (** + * number of audio samples (per channel) described by this frame + *) + nb_samples: cint; + + (** + * format of the frame, -1 if unknown or unset + * Values correspond to enum AVPixelFormat for video frames, + * enum AVSampleFormat for audio) + *) + format: cint; + + (** + * 1 -> keyframe, 0-> not + *) + key_frame: cint; + + (** + * Picture type of the frame + *) + pict_type: TAVPictureType; + + (** + * sample aspect ratio for the video frame, 0/1 if unknown/unspecified + *) + sample_aspect_ratio: TAVRational; + + (** + * presentation timestamp in time_base units (time when frame should be shown to user) + *) + pts: cint64; + +{$IFDEF FF_API_PKT_PTS} + (** + * PTS copied from the AVPacket that was decoded to produce this frame. + *) + pkt_pts: cint64; {deprecated} +{$ENDIF} + + (** + * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used) + * This is also the Presentation time of this AVFrame calculated from + * only AVPacket.dts values without pts values. + *) + pkt_dts: cint64; + + (** + * picture number in bitstream order + *) + coded_picture_number: cint; + + (** + * picture number in display order + *) + display_picture_number: cint; + + (** + * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) + *) + quality: cint; + + (** + * for some private data of the user + *) + opaque: pointer; + +{$IFDEF FF_API_ERROR_FRAME} + (** + * @deprecated unused + *) + error: array [0..AV_NUM_DATA_POINTERS - 1] of cuint64; {deprecated} +{$ENDIF} + + (** + * When decoding, this signals how much the picture must be delayed. + * extra_delay = repeat_pict / (2*fps) + *) + repeat_pict: cint; + + (** + * The content of the picture is interlaced. + *) + interlaced_frame: cint; + + (** + * If the content is interlaced, is top field displayed first. + *) + top_field_first: cint; + + (** + * Tell user application that palette has changed from previous frame. + *) + palette_has_changed: cint; + + (** + * reordered opaque 64 bits (generally an integer or a double precision float + * PTS but can be anything). + * The user sets AVCodecContext.reordered_opaque to represent the input at + * that time, + * the decoder reorders values as needed and sets AVFrame.reordered_opaque + * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque + * @deprecated in favor of pkt_pts + *) + reordered_opaque: cint64; + + (** + * Sample rate of the audio data. + *) + sample_rate: cint; + + (** + * Channel layout of the audio data. + *) + channel_layout: cuint64; + + (** + * AVBuffer references backing the data for this frame. If all elements of + * this array are NULL, then this frame is not reference counted. This array + * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must + * also be non-NULL for all j < i. + * + * There may be at most one AVBuffer per data plane, so for video this array + * always contains all the references. For planar audio with more than + * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in + * this array. Then the extra AVBufferRef pointers are stored in the + * extended_buf array. + *) + buf: array [0..AV_NUM_DATA_POINTERS - 1] of PAVBufferRef; + + (** + * For planar audio which requires more than AV_NUM_DATA_POINTERS + * AVBufferRef pointers, this array will hold all the references which + * cannot fit into AVFrame.buf. + * + * Note that this is different from AVFrame.extended_data, which always + * contains all the pointers. This array only contains the extra pointers, + * which cannot fit into AVFrame.buf. + * + * This array is always allocated using av_malloc() by whoever constructs + * the frame. It is freed in av_frame_unref(). + *) + extended_buf: PPAVBufferRef; + + (** + * Number of elements in extended_buf. + *) + nb_extended_buf: cint; + + side_data: ^PAVFrameSideData; + nb_side_data: cint; + + (** + * @defgroup lavu_frame_flags AV_FRAME_FLAGS + * @ingroup lavu_frame + * Flags describing additional frame properties. + * + * @ + *) + + (** + * Frame flags, a combination of @ref lavu_frame_flags + *) + flags: cint; + + (** + * MPEG vs JPEG YUV range. + * It must be accessed using av_frame_get_color_range() and + * av_frame_set_color_range(). + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + color_range: TAVColorRange; + + color_primaries: TAVColorPrimaries; + + color_trc: TAVColorTransferCharacteristic; + + (** + * YUV colorspace type. + * It must be accessed using av_frame_get_colorspace() and + * av_frame_set_colorspace(). + * - encoding: Set by user + * - decoding: Set by libavcodec + *) + colorspace: TAVColorSpace; + + chroma_location: TAVChromaLocation; + + (** + * frame timestamp estimated using various heuristics, in stream time base + * Code outside libavutil should access this field using: + * av_frame_get_best_effort_timestamp(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + best_effort_timestamp: cint64; + + (** + * reordered pos from the last AVPacket that has been input into the decoder + * Code outside libavutil should access this field using: + * av_frame_get_pkt_pos(frame) + * - encoding: unused + * - decoding: Read by user. + *) + pkt_pos: cint64; + + (** + * duration of the corresponding packet, expressed in + * AVStream->time_base units, 0 if unknown. + * Code outside libavutil should access this field using: + * av_frame_get_pkt_duration(frame) + * - encoding: unused + * - decoding: Read by user. + *) + pkt_duration: cint64; + + (** + * metadata. + * Code outside libavutil should access this field using: + * av_frame_get_metadata(frame) + * - encoding: Set by user. + * - decoding: Set by libavcodec. + *) + metadata: PAVDictionary; + + (** + * decode error flags of the frame, set to a combination of + * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there + * were errors during the decoding. + * Code outside libavutil should access this field using: + * av_frame_get_decode_error_flags(frame) + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + decode_error_flags: cint; + + (** + * number of audio channels, only used for audio. + * Code outside libavutil should access this field using: + * av_frame_get_channels(frame) + * - encoding: unused + * - decoding: Read by user. + *) + channels: cint; + + (** + * size of the corresponding packet containing the compressed + * frame. It must be accessed using av_frame_get_pkt_size() and + * av_frame_set_pkt_size(). + * It is set to a negative value if unknown. + * - encoding: unused + * - decoding: set by libavcodec, read by user. + *) + pkt_size: cint; + +{$IFDEF FF_API_FRAME_QP} + (** + * QP table + * Not to be accessed directly from outside libavutil + *) + qscale_table: PByte; {deprecated} + (** + * QP store stride + * Not to be accessed directly from outside libavutil + *) + qstride: cint; {deprecated} + + qscale_type: cint; {deprecated} + (** + * Not to be accessed directly from outside libavutil + *) + qp_table_buf: PAVBufferRef; {deprecated} +{$ENDIF} + (** + * For hwaccel-format frames, this should be a reference to the + * AVHWFramesContext describing the frame. + *) + hw_frames_ctx: PAVBufferRef; + end; {TAVFrame} + +(** + * Accessors for some AVFrame fields. + * The position of these field in the structure is not part of the ABI, + * they should not be accessed directly outside libavutil. + *) +function av_frame_get_best_effort_timestamp(frame: {const} PAVFrame): cint64; + cdecl; external av__codec; overload; +procedure av_frame_set_best_effort_timestamp(frame: PAVFrame; val: cint64); + cdecl; external av__codec; overload; +function av_frame_get_pkt_duration (frame: {const} PAVFrame): cint64; + cdecl; external av__codec; overload; +procedure av_frame_get_pkt_duration (frame: PAVFrame; val: cint64); + cdecl; external av__codec; overload; +function av_frame_get_pkt_pos (frame: {const} PAVFrame): cint64; + cdecl; external av__codec; overload; +procedure av_frame_get_pkt_pos (frame: PAVFrame; val: cint64); + cdecl; external av__codec; overload; +function av_frame_get_channel_layout (frame: {const} PAVFrame): cint64; + cdecl; external av__codec; overload; +procedure av_frame_get_channel_layout (frame: PAVFrame; val: cint64); + cdecl; external av__codec; overload; +function av_frame_get_channels (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_channels (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_sample_rate (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_sample_rate (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_metadata (frame: {const} PAVFrame): PAVDictionary; + cdecl; external av__codec; +procedure av_frame_set_metadata (frame: PAVFrame; val: PAVDictionary); + cdecl; external av__codec; +function av_frame_get_decode_error_flags (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_decode_error_flags (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function av_frame_get_pkt_size (frame: {const} PAVFrame): cint; + cdecl; external av__codec; +procedure av_frame_set_pkt_size (frame: PAVFrame; val: cint); + cdecl; external av__codec; +function avpriv_frame_get_metadatap(frame: PAVFrame): PPAVDictionary; + cdecl; external av__codec; +{$IFDEF FF_API_FRAME_QP} +function av_frame_get_qp_table(f: PAVFrame; stride: pcint; type_: pcint): PByte; + cdecl; external av__codec; +function av_frame_set_qp_table(f: PAVFrame; buf: PAVBufferRef; stride: cint; type_: cint): cint; + cdecl; external av__codec; +{$ENDIF} +function av_frame_get_colorspace(frame: {const} PAVFrame): TAVColorSpace; + cdecl; external av__codec; +procedure av_frame_set_colorspace(frame: PAVFrame; val: TAVColorSpace); + cdecl; external av__codec; +procedure av_frame_set_color_range(frame: PAVFrame; val: TAVColorSpace); + cdecl; external av__codec; + +(** + * Get the name of a colorspace. + * @return a static string identifying the colorspace; can be NULL. + *) +function av_get_colorspace_name(val: TAVColorSpace): PAnsiChar; + cdecl; external av__codec; + +(** + * Allocate an AVFrame and set its fields to default values. The resulting + * struct must be freed using av_frame_free(). + * + * @return An AVFrame filled with default values or NULL on failure. + * + * @note this only allocates the AVFrame itself, not the data buffers. Those + * must be allocated through other means, e.g. with av_frame_get_buffer() or + * manually. + *) +function av_frame_alloc(): PAVFrame; + cdecl; external av__util; + +(** + * Free the frame and any dynamically allocated objects in it, + * e.g. extended_data. If the frame is reference counted, it will be + * unreferenced first. + * + * @param frame frame to be freed. The pointer will be set to NULL. + *) +procedure av_frame_free(frame: PPAVFrame); + cdecl; external av__codec; + +(** + * Set up a new reference to the data described by the source frame. + * + * Copy frame properties from src to dst and create a new reference for each + * AVBufferRef from src. + * + * If src is not reference counted, new buffers are allocated and the data is + * copied. + * + * @warning: dst MUST have been either unreferenced with av_frame_unref(dst), + * or newly allocated with av_frame_alloc() before calling this + * function, or undefined behavior will occur. + * + * @return 0 on success, a negative AVERROR on error + *) +function av_frame_ref(dst: PAVFrame; src: {const} PAVFrame): cint; + cdecl; external av__codec; + +(** + * Create a new frame that references the same data as src. + * + * This is a shortcut for av_frame_alloc()+av_frame_ref(). + * + * @return newly created AVFrame on success, NULL on error. + *) +function av_frame_clone(src: {const} PAVFrame): PAVFrame; + cdecl; external av__codec; + +(** + * Unreference all the buffers referenced by frame and reset the frame fields. + *) +procedure av_frame_unref(frame: PAVFrame); + cdecl; external av__util; + +(** + * Move everything contained in src to dst and reset src. + * + * @warning: dst is not unreferenced, but directly overwritten without reading + * or deallocating its contents. Call av_frame_unref(dst) manually + * before calling this function to ensure that no memory is leaked. + *) +procedure av_frame_move_ref(dst, src: PAVFrame); + cdecl; external av__codec; + +(** + * Allocate new buffer(s) for audio or video data. + * + * The following fields must be set on frame before calling this function: + * - format (pixel format for video, sample format for audio) + * - width and height for video + * - nb_samples and channel_layout for audio + * + * This function will fill AVFrame.data and AVFrame.buf arrays and, if + * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf. + * For planar formats, one buffer will be allocated for each plane. + * + * @warning: if frame already has been allocated, calling this function will + * leak memory. In addition, undefined behavior can occur in certain + * cases. + * + * @param frame frame in which to store the new buffers. + * @param align required buffer size alignment + * + * @return 0 on success, a negative AVERROR on error. + *) +function av_frame_get_buffer(frame: PAVFrame; align: cint): cint; + cdecl; external av__codec; + +(** + * Check if the frame data is writable. + * + * @return A positive value if the frame data is writable (which is true if and + * only if each of the underlying buffers has only one reference, namely the one + * stored in this frame). Return 0 otherwise. + * + * If 1 is returned the answer is valid until av_buffer_ref() is called on any + * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly). + * + * @see av_frame_make_writable(), av_buffer_is_writable() + *) +function av_frame_is_writable(frame: PAVFrame): cint; + cdecl; external av__codec; + +(** + * Ensure that the frame data is writable, avoiding data copy if possible. + * + * Do nothing if the frame is writable, allocate new buffers and copy the data + * if it is not. + * + * @return 0 on success, a negative AVERROR on error. + * + * @see av_frame_is_writable(), av_buffer_is_writable(), + * av_buffer_make_writable() + *) +function av_frame_make_writable(frame: PAVFrame): cint; + cdecl; external av__codec; + +(** + * Copy the frame data from src to dst. + * + * This function does not allocate anything, dst must be already initialized and + * allocated with the same parameters as src. + * + * This function only copies the frame data (i.e. the contents of the data / + * extended data arrays), not any other properties. + * + * @return >= 0 on success, a negative AVERROR on error. + *) +function av_frame_copy(dst: PAVFrame; src: {const} PAVFrame): cint; + cdecl; external av__codec; + +(** + * Copy only "metadata" fields from src to dst. + * + * Metadata for the purpose of this function are those fields that do not affect + * the data layout in the buffers. E.g. pts, sample rate (for audio) or sample + * aspect ratio (for video), but not width/height or channel layout. + * Side data is also copied. + *) +function av_frame_copy_props(dst: PAVFrame; src: {const} PAVFrame): cint; + cdecl; external av__codec; + +(** + * Get the buffer reference a given data plane is stored in. + * + * @param plane index of the data plane of interest in frame->extended_data. + * + * @return the buffer reference that contains the plane or NULL if the input + * frame is not valid. + *) +function av_frame_get_plane_buffer(frame: PAVFrame; plane: cint): PAVBufferRef; + cdecl; external av__codec; + +(** + * Add a new side data to a frame. + * + * @param frame a frame to which the side data should be added + * @param type type of the added side data + * @param size size of the side data + * + * @return newly added side data on success, NULL on error + *) +function av_frame_new_side_data(frame: PAVFrame; + type_: TAVFrameSideDataType; + size: cint): PAVFrameSideData; + cdecl; external av__codec; + +(** + * @return a pointer to the side data of a given type on success, NULL if there + * is no side data with such type in this frame. + *) +function av_frame_get_side_data(frame: {const} PAVFrame; type_: TAVFrameSideDataType): PAVFrameSideData; + cdecl; external av__codec; + +(** + * If side data of the supplied type exists in the frame, free it and remove it + * from the frame. + *) +procedure av_frame_remove_side_data(frame: PAVFrame; type_: TAVFrameSideDataType); + cdecl; external av__codec; + +(** + * @return a string identifying the side data type + *) +function av_frame_side_data_name(type_: TAVFrameSideDataType): PAnsiChar; + cdecl; external av__codec; + diff --git a/src/lib/ffmpeg-3.2/libavutil/log.pas b/src/lib/ffmpeg-3.2/libavutil/log.pas new file mode 100644 index 00000000..c184047f --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/log.pas @@ -0,0 +1,545 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/log.h + * avutil version 54.7.100 + * + *) + +(** + * @file + * log + *) + +type + (* from opt.h *) + TAVOptionType = ( + AV_OPT_TYPE_FLAGS, + AV_OPT_TYPE_INT, + AV_OPT_TYPE_INT64, + AV_OPT_TYPE_DOUBLE, + AV_OPT_TYPE_FLOAT, + AV_OPT_TYPE_STRING, + AV_OPT_TYPE_RATIONAL, + AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length + AV_OPT_TYPE_DICT, + AV_OPT_TYPE_CONST = 128, + AV_OPT_TYPE_BOOL = $424F4F4C, ///< MKBETAG('B','O','O','L'), + AV_OPT_TYPE_CHANNEL_LAYOUT = $43484C41, ///< MKBETAG('C','H','L','A'), + AV_OPT_TYPE_COLOR = $434F4C52, ///< MKBETAG('C','O','L','R'), + AV_OPT_TYPE_DURATION = $44555220, ///< MKBETAG('D','U','R',' '), + AV_OPT_TYPE_PIXEL_FMlT = $50464D54, ///< MKBETAG('P','F','M','T') + AV_OPT_TYPE_SAMPLE_FMT = $53464D54, ///< MKBETAG('S','F','M','T') + AV_OPT_TYPE_IMAGE_SIZE = $53495A45, ///< MKBETAG('S','I','Z','E'), offset must point to two consecutive integers + AV_OPT_TYPE_VIDEO_RATE = $56524154 ///< MKBETAG('V','R','A','T'), offset must point to TAVRational + ); + +const + AV_OPT_FLAG_ENCODING_PARAM = 1; ///< a generic parameter which can be set by the user for muxing or encoding + AV_OPT_FLAG_DECODING_PARAM = 2; ///< a generic parameter which can be set by the user for demuxing or decoding +{$IFDEF FF_API_OPT_TYPE_METADATA} + AV_OPT_FLAG_METADATA = 4; ///< some data extracted or inserted into the file like title, comment, ... +{$ENDIF} + AV_OPT_FLAG_AUDIO_PARAM = 8; + AV_OPT_FLAG_VIDEO_PARAM = 16; + AV_OPT_FLAG_SUBTITLE_PARAM = 32; + (** + * The option is intended for exporting values to the caller. + *) + AV_OPT_FLAG_EXPORT = 64; + (** + * The option may not be set through the AVOptions API, only read. + * This flag only makes sense when AV_OPT_FLAG_EXPORT is also set. + *) + AV_OPT_FLAG_READONLY = 128; + AV_OPT_FLAG_FILTERING_PARAM = 1 shl 16; ///< a generic parameter which can be set by the user for filtering + +type + (** + * AVOption + *) + PAVOption = ^TAVOption; + TAVOption = record + name: {const} PAnsiChar; + + (** + * short English help text + * @todo What about other languages? + *) + help: {const} PAnsiChar; + + (** + * The offset relative to the context structure where the option + * value is stored. It should be 0 for named constants. + *) + offset: cint; + type_: TAVOptionType; + + (** + * the default value for scalar options + *) + default_val: record + case cint of + 0: (i64: cint64); + 1: (dbl: cdouble); + 2: (str: PAnsiChar); + (* TODO those are unused now *) + 3: (q: TAVRational); + end; + min: cdouble; ///< minimum valid value for the option + max: cdouble; ///< maximum valid value for the option + + flags: cint; +//FIXME think about enc-audio, ... style flags + + (** + * The logical unit to which the option belongs. Non-constant + * options and corresponding named constants share the same + * unit. May be NULL. + *) + unit_: {const} PAnsiChar; + end; + +type + PAVClassCategory = ^TAVClassCategory; + TAVClassCategory = ( + AV_CLASS_CATEGORY_NA = 0, + AV_CLASS_CATEGORY_INPUT, + AV_CLASS_CATEGORY_OUTPUT, + AV_CLASS_CATEGORY_MUXER, + AV_CLASS_CATEGORY_DEMUXER, + AV_CLASS_CATEGORY_ENCODER, + AV_CLASS_CATEGORY_DECODER, + AV_CLASS_CATEGORY_FILTER, + AV_CLASS_CATEGORY_BITSTREAM_FILTER, + AV_CLASS_CATEGORY_SWSCALER, + AV_CLASS_CATEGORY_SWRESAMPLER, + AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40, + AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT, + AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT, + AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT, + AV_CLASS_CATEGORY_DEVICE_OUTPUT, + AV_CLASS_CATEGORY_DEVICE_INPUT, + AV_CLASS_CATEGORY_NB ///< not part of ABI/API + ); + +(* +#define AV_IS_INPUT_DEVICE(category) \ + (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \ + ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \ + ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT)) + +#define AV_IS_OUTPUT_DEVICE(category) \ + (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \ + ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \ + ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT)) +*) + +// struct AVOptionRanges; + + (** + * A single allowed range of values, or a single allowed value. + *) + PAVOptionRange = ^TAVOptionRange; + PPAVOptionRange = ^PAVOptionRange; + TAVOptionRange = record + str: {const} PAnsiChar; + (** + * Value range. + * For string ranges this represents the min/max length. + * For dimensions this represents the min/max pixel count or width/height in multi-component case. + *) + value_min, value_max: cdouble; + (** + * Value's component range. + * For string this represents the unicode range for chars, 0-127 limits to ASCII. + *) + component_min, component_max: cdouble; + (** + * Range flag. + * If set to 1 the struct encodes a range, if set to 0 a single value. + *) + is_range: cint; + end; + + (** + * List of AVOptionRange structs. + *) + PAVOptionRanges = ^TAVOptionRanges; + PPAVOptionRanges = ^PAVOptionRanges; + TAVOptionRanges = record + (** + * Array of option ranges. + * + * Most of option types use just one component. + * Following describes multi-component option types: + * + * AV_OPT_TYPE_IMAGE_SIZE: + * component index 0: range of pixel count (width * height). + * component index 1: range of width. + * component index 2: range of height. + * + * @note To obtain multi-component version of this structure, user must + * provide AV_OPT_MULTI_COMPONENT_RANGE to av_opt_query_ranges or + * av_opt_query_ranges_default function. + * + * Multi-component range can be read as in following example: + * + * @code + * int range_index, component_index; + * AVOptionRanges *ranges; + * AVOptionRange *range[3]; //may require more than 3 in the future. + * av_opt_query_ranges(&ranges, obj, key, AV_OPT_MULTI_COMPONENT_RANGE); + * for (range_index = 0; range_index < ranges->nb_ranges; range_index++) { + * for (component_index = 0; component_index < ranges->nb_components; component_index++) + * range[component_index] = ranges->range[ranges->nb_ranges * component_index + range_index]; + * //do something with range here. + * } + * av_opt_freep_ranges(&ranges); + * @endcode + *) + range: PPAVOptionRange; + (** + * Number of ranges per component. + *) + nb_ranges: cint; + (** + * Number of componentes. + *) + nb_components: cint; + end; + +(** + * Describe the class of an AVClass context structure. That is an + * arbitrary struct of which the first field is a pointer to an + * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.). + *) + PAVClass = ^TAVClass; + TAVClass = record + (** + * The name of the class; usually it is the same name as the + * context structure type to which the AVClass is associated. + *) + class_name: PAnsiChar; + + (** + * A pointer to a function which returns the name of a context + * instance ctx associated with the class. + *) + item_name: function(ctx: pointer): PAnsiChar; cdecl; + + (** + * a pointer to the first option specified in the class if any or NULL + * + * @see av_set_default_options() + *) + option: PAVOption; + + (** + * LIBAVUTIL_VERSION with which this structure was created. + * This is used to allow fields to be added without requiring major + * version bumps everywhere. + *) + version: cint; + + (** + * Offset in the structure where log_level_offset is stored. + * 0 means there is no such variable + *) + log_level_offset_offset: cint; + + (** + * Offset in the structure where a pointer to the parent context for + * logging is stored. For example a decoder could pass its AVCodecContext + * to eval as such a parent context, which an av_log() implementation + * could then leverage to display the parent context. + * The offset can be NULL. + *) + parent_log_context_offset: cint; + + (** + * Return next AVOptions-enabled child or NULL + *) + child_next: function (obj: pointer; prev: pointer): pointer; cdecl; + + (** + * Return an AVClass corresponding to the next potential + * AVOptions-enabled child. + * + * The difference between child_next and this is that + * child_next iterates over _already existing_ objects, while + * child_class_next iterates over _all possible_ children. + *) + child_class_next: function (prev: {const} PAVClass): {const} PAVClass; cdecl; + + (** + * Category used for visualization (like color) + * This is only set if the category is equal for all objects using this class. + * available since version (51 << 16 | 56 << 8 | 100) + *) + category: TAVClassCategory; + + (** + * Callback to return the category. + * available since version (51 << 16 | 59 << 8 | 100) + *) + get_category: function (ctx: pointer): PAVClassCategory; cdecl; + + (** + * Callback to return the supported/allowed ranges. + * available since version (52.12) + *) + query_ranges: function (P: PPAVOptionRanges; obj: pointer; key: {const} PAnsiChar; flags: cint): cint; cdecl; +end; + +const +(** + * Print no output. + *) + AV_LOG_QUIET = -8; + +(** + * Something went really wrong and we will crash now. + *) + AV_LOG_PANIC = 0; + +(** + * Something went wrong and recovery is not possible. + * For example, no header was found for a format which depends + * on headers or an illegal combination of parameters is used. + *) + AV_LOG_FATAL = 8; + +(** + * Something went wrong and cannot losslessly be recovered. + * However, not all future data is affected. + *) + AV_LOG_ERROR = 16; + +(** + * Something somehow does not look correct. This may or may not + * lead to problems. An example would be the use of '-vstrict -2'. + *) + AV_LOG_WARNING = 24; + +(** + * Standard information. + *) + AV_LOG_INFO = 32; + +(** + * Detailed information. + *) + AV_LOG_VERBOSE = 40; + +(** + * Stuff which is only useful for libav* developers. + *) + AV_LOG_DEBUG = 48; + +(** + * Extremely verbose debugging, useful for libav* development. + *) + AV_LOG_TRACE = 56; + + AV_LOG_MAX_OFFSET = (AV_LOG_DEBUG - AV_LOG_QUIET); + +(** + * Sets additional colors for extended debugging sessions. + * @code + av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n"); + @endcode + * Requires 256color terminal support. Uses outside debugging is not + * recommended. + *) +{** to be translated if needed + AV_LOG_C(x) (x << 8) +**} + +(** + * Send the specified message to the log if the level is less than or equal + * to the current av_log_level. By default, all logging messages are sent to + * stderr. This behavior can be altered by setting a different logging callback + * function. + * @see av_log_set_callback + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct or NULL if general log. + * @param level The importance level of the message expressed using a @ref + * lavu_log_constants "Logging Constant". + * @param fmt The format string (printf-compatible) that specifies how + * subsequent arguments are converted to output. + *) +{** to be translated if needed +void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4); +**} + +type + va_list = pointer; + +(** + * Send the specified message to the log if the level is less than or equal + * to the current av_log_level. By default, all logging messages are sent to + * stderr. This behavior can be altered by setting a different logging callback + * function. + * @see av_log_set_callback + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message expressed using a @ref + * lavu_log_constants "Logging Constant". + * @param fmt The format string (printf-compatible) that specifies how + * subsequent arguments are converted to output. + * @param vl The arguments referenced by the format string. + *) +procedure av_vlog(avcl: pointer; level: cint; fmt: {const} PAnsiChar; vl: va_list); + cdecl; external av__util; + +(** + * Get the current log level + * + * @see lavu_log_constants + * + * @return Current log level + *) +function av_log_get_level(): cint; + cdecl; external av__util; + +(** + * Set the log level + * + * @see lavu_log_constants + * + * @param level Logging level + *) +procedure av_log_set_level(level: cint); + cdecl; external av__util; + +(** + * Set the logging callback + * + * @note The callback must be thread safe, even if the application does not use + * threads itself as some codecs are multithreaded. + * + * @see av_log_default_callback + * + * @param callback A logging function with a compatible signature. + *) +{** to be translated if needed +void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)); +**} + +(** + * Default logging callback + * + * It prints the message to stderr, optionally colorizing it. + * + * @param avcl A pointer to an arbitrary struct of which the first field is a + * pointer to an AVClass struct. + * @param level The importance level of the message expressed using a @ref + * lavu_log_constants "Logging Constant". + * @param fmt The format string (printf-compatible) that specifies how + * subsequent arguments are converted to output. + * @param vl The arguments referenced by the format string. + *) +{** to be translated if needed +void av_log_default_callback(void* avcl, int level, const char *fmt, va_list vl); +**} + +(** + * Return the context name + * + * @param ctx The AVClass context + * + * @return The AVClass class_name + *) +function av_default_item_name(ctx: pointer): PAnsiChar; + cdecl; external av__util; +function av_default_get_category(ptr: pointer): TAVClassCategory; + cdecl; external av__util; + +(** + * Format a line of log the same way as the default callback. + * @param line buffer to receive the formatted line + * @param line_size size of the buffer + * @param print_prefix used to store whether the prefix must be printed; + * must point to a persistent integer initially set to 1 + *) +procedure av_log_format_line(ptr: pointer; level: cint; fmt: {const} PAnsiChar; vl: va_list; + line: PAnsiChar; line_size: cint; print_prefix: Pcint); + cdecl; external av__util; + +(** + * Format a line of log the same way as the default callback. + * @param line buffer to receive the formatted line; + * may be NULL if line_size is 0 + * @param line_size size of the buffer; at most line_size-1 characters will + * be written to the buffer, plus one null terminator + * @param print_prefix used to store whether the prefix must be printed; + * must point to a persistent integer initially set to 1 + * @return Returns a negative value if an error occurred, otherwise returns + * the number of characters that would have been written for a + * sufficiently large buffer, not including the terminating null + * character. If the return value is not less than line_size, it means + * that the log message was truncated to fit the buffer. + *) +function av_log_format_line2(ptr: pointer; level: cint; fmt: {const} PAnsiChar; vl: va_list; + line: PAnsiChar; line_size: cint; print_prefix: Pcint): cint; + cdecl; external av__util; + +{$IFDEF FF_API_DLOG} +(** + * av_dlog macros + * @deprecated unused + * Useful to print debug messages that shouldn't get compiled in normally. + *) +(** to be translated if needed +#ifdef DEBUG +# define av_dlog(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__) +#else +# define av_dlog(pctx, ...) do { if (0) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0) +#endif +**) +{$ENDIF} //FF_API_DLOG + +const +(** + * Skip repeated messages, this requires the user app to use av_log() instead of + * (f)printf as the 2 would otherwise interfere and lead to + * "Last message repeated x times" messages below (f)printf messages with some + * bad luck. + * Also to receive the last, "last repeated" line if any, the user app must + * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end + *) + AV_LOG_SKIP_REPEATED = 1; + +(** + * Include the log severity in messages originating from codecs. + * + * Results in messages such as: + * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts + *) + AV_LOG_PRINT_LEVEL = 2; + +procedure av_log_set_flags(arg: cint); + cdecl; external av__util; + +function av_log_get_flags: cint; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.2/libavutil/mathematics.pas b/src/lib/ffmpeg-3.2/libavutil/mathematics.pas new file mode 100644 index 00000000..f6df1368 --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/mathematics.pas @@ -0,0 +1,222 @@ +(* + * copyright (c) 2005-2012 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/mathematics.h + * avutil version 54.7.100 + * + *) + +(** + * @file + * @addtogroup lavu_math + * Mathematical utilities for working with timestamp and time base. + *) + +const + M_E = 2.7182818284590452354; // e + M_LN2 = 0.69314718055994530942; // log_e 2 + M_LN10 = 2.30258509299404568402; // log_e 10 + M_LOG2_10 = 3.32192809488736234787; // log_2 10 + M_PHI = 1.61803398874989484820; // phi / golden ratio + M_PI = 3.14159265358979323846; // pi + M_PI_2 = 1.57079632679489661923; // pi/2 + M_SQRT1_2 = 0.70710678118654752440; // 1/sqrt(2) + M_SQRT2 = 1.41421356237309504880; // sqrt(2) + NAN = $7fc00000; + INFINITY = $7f800000; + +(** + * @addtogroup lavu_math + * @ + *) + +type + (** + * Rounding methods. + *) + TAVRounding = ( + AV_ROUND_ZERO = 0, ///< Round toward zero. + AV_ROUND_INF = 1, ///< Round away from zero. + AV_ROUND_DOWN = 2, ///< Round toward -infinity. + AV_ROUND_UP = 3, ///< Round toward +infinity. + AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero. + (** + * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through + * unchanged, avoiding special cases for #AV_NOPTS_VALUE. + * + * Unlike other values of the enumeration AVRounding, this value is a + * bitmask that must be used in conjunction with another value of the + * enumeration through a bitwise OR, in order to set behavior for normal + * cases. + * + * @code{.c} + * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); + * // Rescaling 3: + * // Calculating 3 * 1 / 2 + * // 3 / 2 is rounded up to 2 + * // => 2 + * + * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX); + * // Rescaling AV_NOPTS_VALUE: + * // AV_NOPTS_VALUE == INT64_MIN + * // AV_NOPTS_VALUE is passed through + * // => AV_NOPTS_VALUE + * @endcode + *) + AV_ROUND_PASS_MINMAX = 8192 + ); + +(** + * Compute the greatest common divisor of two integer operands. + * + * @param a,b Operands + * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0; + * if a == 0 and b == 0, returns 0. + *) +function av_gcd(a, b: cint64): cint64; + cdecl; external av__util; {av_const} + +(** + * Rescale a 64-bit integer with rounding to nearest. + * + * The operation is mathematically equivalent to `a * b / c`, but writing that + * directly can overflow. + * + * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF. + * + * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd() + *) +function av_rescale (a, b, c: cint64): cint64; + cdecl; external av__util; {av_const} + +(** + * Rescale a 64-bit integer with specified rounding. + * + * The operation is mathematically equivalent to `a * b / c`, but writing that + * directly can overflow, and does not support different rounding methods. + * + * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd() + *) +function av_rescale_rnd (a, b, c: cint64; rnd: TAVRounding): cint64; + cdecl; external av__util; {av_const} + +(** + * Rescale a 64-bit integer by 2 rational numbers. + * + * The operation is mathematically equivalent to `a * bq / cq`. + * + * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF. + * + * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd() + *) +function av_rescale_q (a: cint64; bq, cq: TAVRational): cint64; + cdecl; external av__util; {av_const} + +(** + * Rescale a 64-bit integer by 2 rational numbers with specified rounding. + * + * The operation is mathematically equivalent to `a * bq / cq`. + * + * @see av_rescale(), av_rescale_rnd(), av_rescale_q() + *) +function av_rescale_q_rnd(a: cint64; bq, cq: TAVRational; + rnd: TAVRounding): cint64; + cdecl; external av__util; {av_const} + +(** + * Compare two timestamps each in its own time base. + * + * @return One of the following values: + * - -1 if `ts_a` is before `ts_b` + * - 1 if `ts_a` is after `ts_b` + * - 0 if they represent the same position + * + * @warning + * The result of the function is undefined if one of the timestamps is outside + * the `int64_t` range when represented in the other's timebase. + *) +function av_compare_ts(ts_a: cint64; tb_a: TAVRational; ts_b: cint64; tb_b: TAVRational): cint; + cdecl; external av__util; + +(** + * Compare the remainders of two integer operands divided by a common divisor. + * + * In other words, compare the least significant `log2(mod)` bits of integers + * `a` and `b`. + * + * @code{.c} + * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10 (0x1) < 0x02 % 0x10 (0x2) + * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02) + * @endcode + * + * @param a,b Operands + * @param mod Divisor; must be a power of 2 + * @return + * - a negative value if `a % mod < b % mod` + * - a positive value if `a % mod > b % mod` + * - zero if `a % mod == b % mod` + *) +function av_compare_mod(a, b, modVar: cuint64): cint64; + cdecl; external av__util; + +(** + * Rescale a timestamp while preserving known durations. + * + * This function is designed to be called per audio packet to scale the input + * timestamp to a different time base. Compared to a simple av_rescale_q() + * call, this function is robust against possible inconsistent frame durations. + * + * The `last` parameter is a state variable that must be preserved for all + * subsequent calls for the same stream. For the first call, `*last` should be + * initialized to #AV_NOPTS_VALUE. + * + * @param[in] in_tb Input time base + * @param[in] in_ts Input timestamp + * @param[in] fs_tb Duration time base; typically this is finer-grained + * (greater) than `in_tb` and `out_tb` + * @param[in] duration Duration till the next call to this function (i.e. + * duration of the current packet/frame) + * @param[in,out] last Pointer to a timestamp expressed in terms of + * `fs_tb`, acting as a state variable + * @param[in] out_tb Output timebase + * @return Timestamp expressed in terms of `out_tb` + * + * @note In the context of this function, "duration" is in term of samples, not + * seconds. + *) +function av_rescale_delta(in_tb: TAVRational; in_ts: cint64; fs_tb: TAVRational; duration: cint; last: Pcint64; out_tb: TAVRational): cint64; + cdecl; external av__util; + +(** + * Add a value to a timestamp. + * + * This function guarantees that when the same value is repeatly added that + * no accumulation of rounding errors occurs. + * + * @param ts Input timestamp + * @param ts_tb Input timestamp timebase + * @param inc value to add to ts + * @param inc_tb inc timebase + *) +function av_add_stable(ts_tb: TAVRational; ts: cint64; inc_tb: TAVRational; inc: cint64): cint64; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.2/libavutil/mem.pas b/src/lib/ffmpeg-3.2/libavutil/mem.pas new file mode 100644 index 00000000..6dfd7444 --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/mem.pas @@ -0,0 +1,578 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/mem.h + * avutil version 52.66.100 + * + *) + +(** + * @file + * error code definitions + *) + +(* Memory handling functions *) + +(** + * @defgroup lavu_mem_funcs Heap Management + * Functions responsible for allocating, freeing, and copying memory. + * + * All memory allocation functions have a built-in upper limit of `INT_MAX` + * bytes. This may be changed with av_max_alloc(), although exercise extreme + * caution when doing so. + * + * @{ + *) + +(** + * Allocate a memory block with alignment suitable for all memory accesses + * (including vectors if available on the CPU). + * + * @param size Size in bytes for the memory block to be allocated + * @return Pointer to the allocated block, or `NULL` if the block cannot + * be allocated + * @see av_mallocz() + * @see av_mallocz() + *) +function av_malloc(size: size_t): pointer; + cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)} + +(** + * Allocate a memory block with alignment suitable for all memory accesses + * (including vectors if available on the CPU) and zero all the bytes of the + * block. + * + * @param size Size in bytes for the memory block to be allocated + * @return Pointer to the allocated block, or `NULL` if it cannot be allocated + * @see av_malloc() + *) +function av_mallocz(size: size_t): pointer; + cdecl; external av__util; {av_malloc_attrib av_alloc_size(1)} + +(** + * Allocate a memory block for an array with av_malloc(). + * + * The allocated memory will have size `size * nmemb` bytes. + * + * @param nmemb Number of element + * @param size Size of a single element + * @return Pointer to the allocated block, or `NULL` if the block cannot + * be allocated + * @see av_malloc() + *) +function av_malloc_array(nmemb: size_t; size: size_t): pointer; {$IFDEF HasInline}inline;{$ENDIF} {av_alloc_size(1, 2)} +// Note: defined in avutil.pas + +(** + * Allocate a memory block for an array with av_mallocz(). + * + * The allocated memory will have size `size * nmemb` bytes. + * + * @param nmemb Number of elements + * @param size Size of the single element + * @return Pointer to the allocated block, or `NULL` if the block cannot + * be allocated + * + * @see av_mallocz() + * @see av_malloc_array() + *) +function av_mallocz_array(nmemb: size_t; size: size_t): pointer; {$IFDEF HasInline}inline;{$ENDIF} {av_alloc_size(1, 2)} +// Note: defined in avutil.pas + +(** + * Allocate a block of nmemb * size bytes with alignment suitable for all + * memory accesses (including vectors if available on the CPU) and + * zero all the bytes of the block. + * The allocation will fail if nmemb * size is greater than or equal + * to INT_MAX. + * @param nmemb + * @param size + * @return Pointer to the allocated block, NULL if it cannot be allocated. + *) +function av_calloc(nmemb: size_t; size: size_t): pointer; + cdecl; external av__util; {av_malloc_attrib} + +(** + * Allocate, reallocate, or free a block of memory. + * + * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is + * zero, free the memory block pointed to by `ptr`. Otherwise, expand or + * shrink that block of memory according to `size`. + * + * @param ptr Pointer to a memory block already allocated with + * av_realloc() or `NULL` + * @param size Size in bytes of the memory block to be allocated or + * reallocated + * + * @return Pointer to a newly-reallocated block or `NULL` if the block + * cannot be reallocated or the function is used to free the memory block + * + * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be + * correctly aligned. + * @see av_fast_realloc() + * @see av_reallocp() + *) +function av_realloc(ptr: pointer; size: size_t): pointer; + cdecl; external av__util; {av_alloc_size(2)} + +(** + * Allocate, reallocate, or free a block of memory through a pointer to a + * pointer. + * + * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is + * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or + * shrink that block of memory according to `size`. + * + * @param[in,out] ptr Pointer to a pointer to a memory block already allocated + * with av_realloc(), or a pointer to `NULL`. The pointer + * is updated on success, or freed on failure. + * @param[in] size Size in bytes for the memory block to be allocated or + * reallocated + * + * @return Zero on success, an AVERROR error code on failure + * + * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be + * correctly aligned. + *) +function av_reallocp(ptr: pointer; elsize: size_t): cint; + cdecl; external av__util; + +(** + * Allocate, reallocate, or free a block of memory. + * + * This function does the same thing as av_realloc(), except: + * - It takes two size arguments and allocates `nelem * elsize` bytes, + * after checking the result of the multiplication for integer overflow. + * - It frees the input block in case of failure, thus avoiding the memory + * leak with the classic + * @code{.c} + * buf = realloc(buf); + * if (!buf) + * return -1; + * @endcode + * pattern. + *) +function av_realloc_f(ptr: pointer; nelem: size_t; elsize: size_t): pointer; + cdecl; external av__util; + +(** + * Allocate, reallocate, or free an array. + * + * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If + * `nmemb` is zero, free the memory block pointed to by `ptr`. + * + * @param ptr Pointer to a memory block already allocated with + * av_realloc() or `NULL` + * @param nmemb Number of elements in the array + * @param size Size of the single element of the array + * + * @return Pointer to a newly-reallocated block or NULL if the block + * cannot be reallocated or the function is used to free the memory block + * + * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be + * correctly aligned. + * @see av_reallocp_array() + *) +function av_realloc_array(ptr: pointer; nmemb, size: size_t): pointer; {av_alloc_size(2, 3)} + cdecl; external av__util; + +(** + * Allocate, reallocate, or free an array through a pointer to a pointer. + * + * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is + * zero, free the memory block pointed to by `*ptr`. + * + * @param[in,out] ptr Pointer to a pointer to a memory block already + * allocated with av_realloc(), or a pointer to `NULL`. + * The pointer is updated on success, or freed on failure. + * @param[in] nmemb Number of elements + * @param[in] size Size of the single element + * + * @return Zero on success, an AVERROR error code on failure + * + * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be + * correctly aligned. + *) +function av_reallocp_array(ptr: pointer; nmemb, size: size_t): cint; {av_alloc_size(2, 3)} + cdecl; external av__util; + +(** + * Reallocate the given buffer if it is not large enough, otherwise do nothing. + * + * If the given buffer is `NULL`, then a new uninitialized buffer is allocated. + * + * If the given buffer is not large enough, and reallocation fails, `NULL` is + * returned and `*size` is set to 0, but the original buffer is not changed or + * freed. + * + * A typical use pattern follows: + * + * @code{.c} + * uint8_t *buf = ...; + * uint8_t *new_buf = av_fast_realloc(buf, ¤t_size, size_needed); + * if (!new_buf) { + * // Allocation failed; clean up original buffer + * av_freep(&buf); + * return AVERROR(ENOMEM); + * } + * @endcode + * + * @param[in,out] ptr Already allocated buffer, or `NULL` + * @param[in,out] size Pointer to current size of buffer `ptr`. `*size` is + * changed to `min_size` in case of success or 0 in + * case of failure + * @param[in] min_size New size of buffer `ptr` + * @return `ptr` if the buffer is large enough, a pointer to newly reallocated + * buffer if the buffer was not large enough, or `NULL` in case of + * error + * @see av_realloc() + * @see av_fast_malloc() + *) +function av_fast_realloc(ptr: pointer; size: Pcuint; min_size: size_t): pointer; + cdecl; external av__util; + +(** + * Allocate a buffer, reusing the given one if large enough. + * + * Contrary to av_fast_realloc(), the current buffer contents might not be + * preserved and on error the old buffer is freed, thus no special handling to + * avoid memleaks is necessary. + * + * `*ptr` is allowed to be `NULL`, in which case allocation always happens if + * `size_needed` is greater than 0. + * + * @code{.c} + * uint8_t *buf = ...; + * av_fast_malloc(&buf, ¤t_size, size_needed); + * if (!buf) { + * // Allocation failed; buf already freed + * return AVERROR(ENOMEM); + * } + * @endcode + * + * @param[in,out] ptr Pointer to pointer to an already allocated buffer. + * `*ptr` will be overwritten with pointer to new + * buffer on success or `NULL` on failure + * @param[in,out] size Pointer to current size of buffer `*ptr`. `*size` is + * changed to `min_size` in case of success or 0 in + * case of failure + * @param[in] min_size New size of buffer `*ptr` + * @see av_realloc() + * @see av_fast_mallocz() + *) +procedure av_fast_malloc(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__util; + +(** + * Allocate and clear a buffer, reusing the given one if large enough. + * + * Like av_fast_malloc(), but all newly allocated space is initially cleared. + * Reused buffer is not cleared. + * + * `*ptr` is allowed to be `NULL`, in which case allocation always happens if + * `size_needed` is greater than 0. + * + * @param[in,out] ptr Pointer to pointer to an already allocated buffer. + * `*ptr` will be overwritten with pointer to new + * buffer on success or `NULL` on failure + * @param[in,out] size Pointer to current size of buffer `*ptr`. `*size` is + * changed to `min_size` in case of success or 0 in + * case of failure + * @param[in] min_size New size of buffer `*ptr` + * @see av_fast_malloc() + *) +procedure av_fast_mallocz(ptr: pointer; size: Pcuint; min_size: size_t); + cdecl; external av__util; + +(** + * Free a memory block which has been allocated with a function of av_malloc() + * or av_realloc() family. + * + * @param ptr Pointer to the memory block which should be freed. + * + * @note `ptr = NULL` is explicitly allowed. + * @note It is recommended that you use av_freep() instead, to prevent leaving + * behind dangling pointers. + * @see av_freep() + *) +procedure av_free(ptr: pointer); + cdecl; external av__util; + +(** + * Free a memory block which has been allocated with a function of av_malloc() + * or av_realloc() family, and set the pointer pointing to it to `NULL`. + * + * @code{.c} + * uint8_t *buf = av_malloc(16); + * av_free(buf); + * // buf now contains a dangling pointer to freed memory, and accidental + * // dereference of buf will result in a use-after-free, which may be a + * // security risk. + * + * uint8_t *buf = av_malloc(16); + * av_freep(&buf); + * // buf is now NULL, and accidental dereference will only result in a + * // NULL-pointer dereference. + * @endcode + * + * @param ptr Pointer to the pointer to the memory block which should be freed + * @note `*ptr = NULL` is safe and leads to no action. + * @see av_free() + *) +procedure av_freep (ptr: pointer); + cdecl; external av__util; + +(** + * Duplicate a string. + * + * @param s String to be duplicated + * @return Pointer to a newly-allocated string containing a + * copy of `s` or `NULL` if the string cannot be allocated + * @see av_strndup() + *) +function av_strdup({const} s: PAnsiChar): PAnsiChar; + cdecl; external av__util; {av_malloc_attrib} + +(** + * Duplicate a substring of a string. + * + * @param s String to be duplicated + * @param len Maximum length of the resulting string (not counting the + * terminating byte) + * @return Pointer to a newly-allocated string containing a + * substring of `s` or `NULL` if the string cannot be allocated + *) +function av_strndup({const} s: PAnsiChar; len: size_t): PAnsiChar; + cdecl; external av__util; {av_malloc_attrib} + +(** + * Duplicate a buffer with av_malloc(). + * + * @param p Buffer to be duplicated + * @param size Size in bytes of the buffer copied + * @return Pointer to a newly allocated buffer containing a + * copy of `p` or `NULL` if the buffer cannot be allocated + *) +function av_memdup({const} p: pointer; size: size_t): pointer; + cdecl; external av__util; + +(** + * Overlapping memcpy() implementation. + * + * @param dst Destination buffer + * @param back Number of bytes back to start copying (i.e. the initial size of + * the overlapping window); must be > 0 + * @param cnt Number of bytes to copy; must be >= 0 + * + * @note `cnt > back` is valid, this will copy the bytes we just copied, + * thus creating a repeating pattern with a period length of `back`. + *) +procedure av_memcpy_backptr(dst: Pcuint8; back: cint; cnt: cint); + cdecl; external av__util; + +(** + * @} + *) + +(** + * @defgroup lavu_mem_dynarray Dynamic Array + * + * Utilities to make an array grow when needed. + * + * Sometimes, the programmer would want to have an array that can grow when + * needed. The libavutil dynamic array utilities fill that need. + * + * libavutil supports two systems of appending elements onto a dynamically + * allocated array, the first one storing the pointer to the value in the + * array, and the second storing the value directly. In both systems, the + * caller is responsible for maintaining a variable containing the length of + * the array, as well as freeing of the array after use. + * + * The first system stores pointers to values in a block of dynamically + * allocated memory. Since only pointers are stored, the function does not need + * to know the size of the type. Both av_dynarray_add() and + * av_dynarray_add_nofree() implement this system. + * + * @code + * type **array = NULL; //< an array of pointers to values + * int nb = 0; //< a variable to keep track of the length of the array + * + * type to_be_added = ...; + * type to_be_added2 = ...; + * + * av_dynarray_add(&array, &nb, &to_be_added); + * if (nb == 0) + * return AVERROR(ENOMEM); + * + * av_dynarray_add(&array, &nb, &to_be_added2); + * if (nb == 0) + * return AVERROR(ENOMEM); + * + * // Now: + * // nb == 2 + * // &to_be_added == array[0] + * // &to_be_added2 == array[1] + * + * av_freep(&array); + * @endcode + * + * The second system stores the value directly in a block of memory. As a + * result, the function has to know the size of the type. av_dynarray2_add() + * implements this mechanism. + * + * @code + * type *array = NULL; //< an array of values + * int nb = 0; //< a variable to keep track of the length of the array + * + * type to_be_added = ...; + * type to_be_added2 = ...; + * + * type *addr = av_dynarray2_add((void ** )&array, &nb, sizeof(*array), NULL); + * if (!addr) + * return AVERROR(ENOMEM); + * memcpy(addr, &to_be_added, sizeof(to_be_added)); + * + * // Shortcut of the above. + * type *addr = av_dynarray2_add((void ** )&array, &nb, sizeof(*array), + * (const void * )&to_be_added2); + * if (!addr) + * return AVERROR(ENOMEM); + * + * // Now: + * // nb == 2 + * // to_be_added == array[0] + * // to_be_added2 == array[1] + * + * av_freep(&array); + * @endcode + * + * @{ + *) + + +(** + * Add the pointer to an element to a dynamic array. + * + * The array to grow is supposed to be an array of pointers to + * structures, and the element to add must be a pointer to an already + * allocated structure. + * + * The array is reallocated when its size reaches powers of 2. + * Therefore, the amortized cost of adding an element is constant. + * + * In case of success, the pointer to the array is updated in order to + * point to the new grown array, and the number pointed to by `nb_ptr` + * is incremented. + * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and + * `*nb_ptr` is set to 0. + * + * @param[in,out] tab_ptr Pointer to the array to grow + * @param[in,out] nb_ptr Pointer to the number of elements in the array + * @param[in] elem Element to add + * @see av_dynarray_add_nofree(), av_dynarray2_add() + *) +procedure av_dynarray_add(tab_ptr: pointer; nb_ptr: Pcint; elem: pointer); + cdecl; external av__util; + +(** + * Add an element to a dynamic array. + * + * Function has the same functionality as av_dynarray_add(), + * but it doesn't free memory on fails. It returns error code + * instead and leave current buffer untouched. + * + * @return >=0 on success, negative otherwise + * @see av_dynarray_add(), av_dynarray2_add() + *) +function av_dynarray_add_nofree(tab_ptr: pointer; nb_ptr: Pcint; elem: pointer): cint; + cdecl; external av__util; + +(** + * Add an element of size `elem_size` to a dynamic array. + * + * The array is reallocated when its number of elements reaches powers of 2. + * Therefore, the amortized cost of adding an element is constant. + * + * In case of success, the pointer to the array is updated in order to + * point to the new grown array, and the number pointed to by `nb_ptr` + * is incremented. + * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and + * `*nb_ptr` is set to 0. + * + * @param[in,out] tab_ptr Pointer to the array to grow + * @param[in,out] nb_ptr Pointer to the number of elements in the array + * @param[in] elem_size Size in bytes of an element in the array + * @param[in] elem_data Pointer to the data of the element to add. If + * `NULL`, the space of the newly added element is + * allocated but left uninitialized. + * + * @return Pointer to the data of the element to copy in the newly allocated + * space + * @see av_dynarray_add(), av_dynarray_add_nofree() + *) +function av_dynarray2_add(tab_ptr: Pointer; nb_ptr: Pcint; elem_size: size_t; + {const} elem_data: Pcuint8): pointer; + cdecl; external av__util; + +(** + * @} + *) + +(** + * @defgroup lavu_mem_misc Miscellaneous Functions + * + * Other functions related to memory allocation. + * + * @{ + *) + +(** + * Multiply two `size_t` values checking for overflow. + * + * @param[in] a,b Operands of multiplication + * @param[out] r Pointer to the result of the operation + * @return 0 on success, AVERROR(EINVAL) on overflow + *) +//static inline int av_size_mult(size_t a, size_t b, size_t *r) +{ + size_t t = a * b; + /* Hack inspired from glibc: don't try the division if nelem and elsize + * are both less than sqrt(SIZE_MAX). */ + if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b) + return AVERROR(EINVAL); + *r = t; + return 0; +} + +(** + * Set the maximum size that may be allocated in one block. + * + * The value specified with this function is effective for all libavutil's @ref + * lavu_mem_funcs "heap management functions." + * + * By default, the max value is defined as `INT_MAX`. + * + * @param max Value to be set as the new maximum size + * + * @warning Exercise extreme caution when using this function. Don't touch + * this if you do not understand the full consequence of doing so. + *) +procedure av_max_alloc(max: size_t); + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.2/libavutil/opt.pas b/src/lib/ffmpeg-3.2/libavutil/opt.pas new file mode 100644 index 00000000..87ec68aa --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/opt.pas @@ -0,0 +1,507 @@ +(* + * AVOptions + * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/opt.h + * avutil version 54.7.100 + * + *) + +(** + * Show the obj options. + * + * @param req_flags requested flags for the options to show. Show only the + * options for which it is opt->flags & req_flags. + * @param rej_flags rejected flags for the options to show. Show only the + * options for which it is !(opt->flags & req_flags). + * @param av_log_obj log context to use for showing the options + *) +function av_opt_show2(obj: pointer; av_log_obj: pointer; req_flags: cint; rej_flags: cint): cint; + cdecl; external av__util; + +(** + * Set the values of all AVOption fields to their default values. + * + * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) + *) +procedure av_opt_set_defaults(s: pointer); + cdecl; external av__util; + +(** + * Set the values of all AVOption fields to their default values. Only these + * AVOption fields for which (opt->flags & mask) == flags will have their + * default applied to s. + * + * @param s an AVOption-enabled struct (its first member must be a pointer to AVClass) + * @param mask combination of AV_OPT_FLAG_* + * @param flags combination of AV_OPT_FLAG_* + *) +procedure av_opt_set_defaults2(s: Pointer; mask: cint; flags: cint); + cdecl; external av__util; deprecated; + +(** + * Parse the key/value pairs list in opts. For each key/value pair + * found, stores the value in the field in ctx that is named like the + * key. ctx must be an AVClass context, storing is done using + * AVOptions. + * + * @param opts options string to parse, may be NULL + * @param key_val_sep a 0-terminated list of characters used to + * separate key from value + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other + * @return the number of successfully set key/value pairs, or a negative + * value corresponding to an AVERROR code in case of error: + * AVERROR(EINVAL) if opts cannot be parsed, + * the error code issued by av_set_string3() if a key/value pair + * cannot be set +*) +function av_set_options_string(ctx: pointer; opts: {const} PAnsiChar; + key_val_sep: {const} PAnsiChar; pairs_sep: {const} PAnsiChar): cint; + cdecl; external av__util; + +(** + * Parse the key-value pairs list in opts. For each key=value pair found, + * set the value of the corresponding option in ctx. + * + * @param ctx the AVClass object to set options on + * @param opts the options string, key-value pairs separated by a + * delimiter + * @param shorthand a NULL-terminated array of options names for shorthand + * notation: if the first field in opts has no key part, + * the key is taken from the first element of shorthand; + * then again for the second, etc., until either opts is + * finished, shorthand is finished or a named option is + * found; after that, all options must be named + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value, for example '=' + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other, for example ':' or ',' + * @return the number of successfully set key=value pairs, or a negative + * value corresponding to an AVERROR code in case of error: + * AVERROR(EINVAL) if opts cannot be parsed, + * the error code issued by av_set_string3() if a key/value pair + * cannot be set + * + * Options names must use only the following characters: a-z A-Z 0-9 - . / _ + * Separators must use characters distinct from option names and from each + * other. + *) +function av_opt_set_from_string(ctx: pointer; opts: {const} PAnsiChar; + shorthand: {const} PAnsiChar; + key_val_sep: {const} PAnsiChar; pairs_sep: {const} PAnsiChar): cint; + cdecl; external av__util; + +(** + * Free all allocated objects in obj. + *) +procedure av_opt_free(obj: pointer); + cdecl; external av__util; + +(** + * Check whether a particular flag is set in a flags field. + * + * @param field_name the name of the flag field option + * @param flag_name the name of the flag to check + * @return non-zero if the flag is set, zero if the flag isn't set, + * isn't of the right type, or the flags field doesn't exist. + *) +function av_opt_flag_is_set(obj: pointer; field_name: {const} PAnsiChar; flag_name: {const} PAnsiChar): cint; + cdecl; external av__util; + +(** + * Set all the options from a given dictionary on an object. + * + * @param obj a struct whose first element is a pointer to AVClass + * @param options options to process. This dictionary will be freed and replaced + * by a new one containing all options not found in obj. + * Of course this new dictionary needs to be freed by caller + * with av_dict_free(). + * + * @return 0 on success, a negative AVERROR if some option was found in obj, + * but could not be set. + * + * @see av_dict_copy() + *) +function av_opt_set_dict(obj: pointer; var options: PAVDictionary): cint; + cdecl; external av__util; + +(** + * Set all the options from a given dictionary on an object. + * + * @param obj a struct whose first element is a pointer to AVClass + * @param options options to process. This dictionary will be freed and replaced + * by a new one containing all options not found in obj. + * Of course this new dictionary needs to be freed by caller + * with av_dict_free(). + * @param search_flags A combination of AV_OPT_SEARCH_*. + * + * @return 0 on success, a negative AVERROR if some option was found in obj, + * but could not be set. + * + * @see av_dict_copy() + *) +function av_opt_set_dict2(obj: pointer; var options: PAVDictionary; search_flags: cint): cint; + cdecl; external av__util; + +(** + * Extract a key-value pair from the beginning of a string. + * + * @param ropts pointer to the options string, will be updated to + * point to the rest of the string (one of the pairs_sep + * or the final NUL) + * @param key_val_sep a 0-terminated list of characters used to separate + * key from value, for example '=' + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other, for example ':' or ',' + * @param flags flags; see the AV_OPT_FLAG_* values below + * @param rkey parsed key; must be freed using av_free() + * @param rval parsed value; must be freed using av_free() + * + * @return >=0 for success, or a negative value corresponding to an + * AVERROR code in case of error; in particular: + * AVERROR(EINVAL) if no key is present + * + *) +function av_opt_get_key_value(ropts: {const} PPAnsiChar; + key_val_sep: {const} PAnsiChar; pairs_sep: {const} PAnsiChar; + flags: byte; + rkey, rval: PPAnsiChar): cint; + cdecl; external av__util; + +const + (** + * Accept to parse a value without a key; the key will then be returned + * as NULL. + *) + AV_OPT_FLAG_IMPLICIT_KEY = 1; + +(** + * @defgroup opt_eval_funcs Evaluating option strings + * @ + * This group of functions can be used to evaluate option strings + * and get numbers out of them. They do the same thing as av_opt_set(), + * except the result is written into the caller-supplied pointer. + * + * @param obj a struct whose first element is a pointer to AVClass. + * @param o an option for which the string is to be evaluated. + * @param val string to be evaluated. + * @param *_out value of the string will be written here. + * + * @return 0 on success, a negative number on failure. + *) +function av_opt_eval_flags (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; flags_out: Pcint): cint; + cdecl; external av__util; +function av_opt_eval_int (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; int_out: Pcint): cint; + cdecl; external av__util; +function av_opt_eval_int64 (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; int64_out: Pcint64): cint; + cdecl; external av__util; +function av_opt_eval_float (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; float_out: Pcfloat): cint; + cdecl; external av__util; +function av_opt_eval_double(obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; double_out: Pcdouble): cint; + cdecl; external av__util; +function av_opt_eval_q (obj: pointer; o: {const} PAVOption; val: {const} PAnsiChar; q_out: PAVRational): cint; + cdecl; external av__util; +(** + * @ + *) + +const + AV_OPT_SEARCH_CHILDREN = (1 << 0); (**< Search in possible children of the + given object first.*) +(** + * The obj passed to av_opt_find() is fake -- only a double pointer to AVClass + * instead of a required pointer to a struct containing AVClass. This is + * useful for searching for options without needing to allocate the corresponding + * object. + *) + AV_OPT_SEARCH_FAKE_OBJ = (1 << 1); + +(** + * In av_opt_get, return NULL if the option has a pointer type and is set to NULL, + * rather than returning an empty string. + *) + AV_OPT_ALLOW_NULL = (1 << 2); +(** + * Allows av_opt_query_ranges and av_opt_query_ranges_default to return more than + * one component for certain option types. + * @see AVOptionRanges for details. + *) + AV_OPT_MULTI_COMPONENT_RANGE = (1 << 12); + +(** + * Look for an option in an object. Consider only options which + * have all the specified flags set. + * + * @param[in] obj A pointer to a struct whose first element is a + * pointer to an AVClass. + * @param[in] name The name of the option to look for. + * @param[in] unit When searching for named constants, name of the unit + * it belongs to. + * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). + * @param search_flags A combination of AV_OPT_SEARCH_*. + * + * @return A pointer to the option found, or NULL if no option + * was found. + * + * @note Options found with AV_OPT_SEARCH_CHILDREN flag may not be settable + * directly with av_set_string3(). Use special calls which take an options + * AVDictionary (e.g. avformat_open_input()) to set options found with this + * flag. + *) +function av_opt_find(obj: pointer; name: {const} PAnsiChar; unit_: {const} PAnsiChar; + opt_flags: cint; search_flags: cint): PAVOption; + cdecl; external av__util; + +(** + * Look for an option in an object. Consider only options which + * have all the specified flags set. + * + * @param[in] obj A pointer to a struct whose first element is a + * pointer to an AVClass. + * Alternatively a double pointer to an AVClass, if + * AV_OPT_SEARCH_FAKE_OBJ search flag is set. + * @param[in] name The name of the option to look for. + * @param[in] unit When searching for named constants, name of the unit + * it belongs to. + * @param opt_flags Find only options with all the specified flags set (AV_OPT_FLAG). + * @param search_flags A combination of AV_OPT_SEARCH_*. + * @param[out] target_obj if non-NULL, an object to which the option belongs will be + * written here. It may be different from obj if AV_OPT_SEARCH_CHILDREN is present + * in search_flags. This parameter is ignored if search_flags contain + * AV_OPT_SEARCH_FAKE_OBJ. + * + * @return A pointer to the option found, or NULL if no option + * was found. + *) +function av_opt_find2(obj: pointer; name: {const} PAnsiChar; unit_: {const} PAnsiChar; + opt_flags: cint; search_flags: cint; out target_obj: pointer): {const} PAVOption; + cdecl; external av__util; + +(** + * Iterate over all AVOptions belonging to obj. + * + * @param obj an AVOptions-enabled struct or a double pointer to an + * AVClass describing it. + * @param prev result of the previous call to av_opt_next() on this object + * or NULL + * @return next AVOption or NULL + *) +function av_opt_next(obj: {const} pointer; prev: {const} PAVOption): {const} PAVOption; + cdecl; external av__util; + +(** + * Iterate over AVOptions-enabled children of obj. + * + * @param prev result of a previous call to this function or NULL + * @return next AVOptions-enabled child or NULL + *) +function av_opt_child_next(obj: pointer; prev: pointer): pointer; + cdecl; external av__util; + +(** + * Iterate over potential AVOptions-enabled children of parent. + * + * @param prev result of a previous call to this function or NULL + * @return AVClass corresponding to next potential child or NULL + *) +function av_opt_child_class_next(parent: {const} PAVClass; prev: {const} PAVClass): {const} PAVClass; + cdecl; external av__util; + +(** + * @defgroup opt_set_funcs Option setting functions + * @ + * Those functions set the field of obj with the given name to value. + * + * @param[in] obj A struct whose first element is a pointer to an AVClass. + * @param[in] name the name of the field to set + * @param[in] val The value to set. In case of av_opt_set() if the field is not + * of a string type, then the given string is parsed. + * SI postfixes and some named scalars are supported. + * If the field is of a numeric type, it has to be a numeric or named + * scalar. Behavior with more than one scalar and +- infix operators + * is undefined. + * If the field is of a flags type, it has to be a sequence of numeric + * scalars or named flags separated by '+' or '-'. Prefixing a flag + * with '+' causes it to be set without affecting the other flags; + * similarly, '-' unsets a flag. + * @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN + * is passed here, then the option may be set on a child of obj. + * + * @return 0 if the value has been set, or an AVERROR code in case of + * error: + * AVERROR_OPTION_NOT_FOUND if no matching option exists + * AVERROR(ERANGE) if the value is out of range + * AVERROR(EINVAL) if the value is not valid + *) +function av_opt_set (obj: pointer; name: {const} PAnsiChar; val: {const} PAnsiChar; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_int (obj: pointer; name: {const} PAnsiChar; val: cint64; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_double (obj: pointer; name: {const} PAnsiChar; val: cdouble; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_q (obj: pointer; name: {const} PAnsiChar; val: TAVRational; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_bin (obj: pointer; name: {const} PAnsiChar; val: {const} cuint8; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_image_size(obj: pointer; name: {const} PAnsiChar; w, h, search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_pixel_fmt (obj: pointer; name: {const} PAnsiChar; fmt: TAVPixelFormat; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_sample_fmt(obj: pointer; name: {const} PAnsiChar; fmt: TAVSampleFormat; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_video_rate(obj: pointer; name: {const} PAnsiChar; val: TAVRational; search_flags: cint): cint; + cdecl; external av__util; +function av_opt_set_channel_layout(obj: pointer; name: {const} PAnsiChar; ch_layout: cint64; search_flags: cint): cint; + cdecl; external av__util; + +(** + * @note Any old dictionary present is discarded and replaced with a copy of the new one. The + * caller still owns val is and responsible for freeing it. + *) +function av_opt_set_dict_val(obj: pointer; name: {const} PAnsiChar; val: {const} PAVDictionary; search_flags: cint): cint; + cdecl; external av__util; + +(** + * Set a binary option to an integer list. + * + * @param obj AVClass object to set options on + * @param name name of the binary option + * @param val pointer to an integer list (must have the correct type with + * regard to the contents of the list) + * @param term list terminator (usually 0 or -1) + * @param flags search flags + *) +{to be translated +#define av_opt_set_int_list(obj, name, val, term, flags) \ + (av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ + AVERROR(EINVAL) : \ + av_opt_set_bin(obj, name, (const uint8_t *)(val), \ + av_int_list_length(val, term) * sizeof(*(val)), flags)) +} +(** + * @ + *) + +(** + * @defgroup opt_get_funcs Option getting functions + * @ + * Those functions get a value of the option with the given name from an object. + * + * @param[in] obj a struct whose first element is a pointer to an AVClass. + * @param[in] name name of the option to get. + * @param[in] search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN + * is passed here, then the option may be found in a child of obj. + * @param[out] out_val value of the option will be written here + * @return >=0 on success, a negative error code otherwise + *) +(** + * @note the returned string will be av_malloc()ed and must be av_free()ed by the caller + * + * @note if AV_OPT_ALLOW_NULL is set in search_flags in av_opt_get, and the option has + * AV_OPT_TYPE_STRING or AV_OPT_TYPE_BINARY and is set to NULL, *out_val will be set + * to NULL instead of an allocated empty string. + *) +function av_opt_get (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out out_val: Pcuint8): cint; + cdecl; external av__util; +function av_opt_get_int (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: Pcint64): cint; + cdecl; external av__util; +function av_opt_get_double (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: Pcdouble): cint; + cdecl; external av__util; +function av_opt_get_q (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: PAVRational): cint; + cdecl; external av__util; +function av_opt_get_image_size(obj: pointer; name: {const} PAnsiChar; search_flags: cint; w_out, h_out: Pcint): cint; + cdecl; external av__util; +function av_opt_get_pixel_fmt (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_fmt: PAVPixelFormat): cint; + cdecl; external av__util; +function av_opt_get_sample_fmt(obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_fmt: PAVPixelFormat): cint; + cdecl; external av__util; +function av_opt_get_video_rate(obj: pointer; name: {const} PAnsiChar; search_flags: cint; out_val: PAVRational): cint; + cdecl; external av__util; +function av_opt_get_channel_layout(obj: pointer; name: {const} PAnsiChar; search_flags: cint; ch_layout: Pcint64): cint; + cdecl; external av__util; +(** + * @param[out] out_val The returned dictionary is a copy of the actual value and must + * be freed with av_dict_free() by the caller + *) +function av_opt_get_dict_val (obj: pointer; name: {const} PAnsiChar; search_flags: cint; out out_val: PAVDictionary): cint; + cdecl; external av__util; +(** + * @ + *) +(** + * Gets a pointer to the requested field in a struct. + * This function allows accessing a struct even when its fields are moved or + * renamed since the application making the access has been compiled, + * + * @returns a pointer to the field, it can be cast to the correct type and read + * or written to. + *) +function av_opt_ptr(avclass: {const} PAVClass; obj: pointer; name: {const} PAnsiChar): pointer; + cdecl; external av__util; + +(** + * Free an AVOptionRanges struct and set it to NULL. + *) +procedure av_opt_freep_ranges(ranges: PPAVOptionRanges); + cdecl; external av__util; + +(** + * Get a list of allowed ranges for the given option. + * + * The returned list may depend on other fields in obj like for example profile. + * + * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored + * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance + * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges + * + * The result must be freed with av_opt_freep_ranges. + * + * @return number of compontents returned on success, a negative errro code otherwise + *) +function av_opt_query_ranges(P: PPAVOptionRanges; obj: pointer; key: {const} PAnsiChar; flags: cint): cint; + cdecl; external av__util; + +function av_opt_copy(dest: pointer;src: {const }pointer): cint; + cdecl; external av__util; + +(** + * Get a default list of allowed ranges for the given option. + * + * This list is constructed without using the AVClass.query_ranges() callback + * and can be used as fallback from within the callback. + * + * @param flags is a bitmask of flags, undefined flags should not be set and should be ignored + * AV_OPT_SEARCH_FAKE_OBJ indicates that the obj is a double pointer to a AVClass instead of a full instance + * AV_OPT_MULTI_COMPONENT_RANGE indicates that function may return more than one component, @see AVOptionRanges + * + * The result must be freed with av_opt_free_ranges. + * + * @return number of compontents returned on success, a negative errro code otherwise + *) +function av_opt_query_ranges_default(P: PPAVOptionRanges; obj: pointer; key: {const} PAnsiChar; flags: cint): cint; + cdecl; external av__util; + +(** + * @ + *) diff --git a/src/lib/ffmpeg-3.2/libavutil/pixfmt.pas b/src/lib/ffmpeg-3.2/libavutil/pixfmt.pas new file mode 100644 index 00000000..e6302523 --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/pixfmt.pas @@ -0,0 +1,552 @@ +(* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * This is a part of the Pascal port of ffmpeg. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/pixfmt.h + * avutil version 54.7.100 + * + *) + +(** + * @file + * Pixel format + *) + +const + AVPALETTE_SIZE = 1024; + AVPALETTE_COUNT = 256; + +type +(** + * Pixel format. Notes: + * + * @note + * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA + * color is put together as: + * (A << 24) | (R << 16) | (G << 8) | B + * This is stored as BGRA on little-endian CPU architectures and ARGB on + * big-endian CPUs. + * + * @par + * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized + * image data is stored in AVFrame.data[0]. The palette is transported in + * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is + * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is + * also endian-specific). Note also that the individual RGB32 palette + * components stored in AVFrame.data[1] should be in the range 0..255. + * This is important as many custom PAL8 video codecs that were designed + * to run on the IBM VGA graphics adapter use 6-bit palette components. + * + * @par + * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like + * for pal8. This palette is filled in automatically by the function + * allocating the picture. + *) + + PAVPixelFormat = ^TAVPixelFormat; + TAVPixelFormat = ( + AV_PIX_FMT_NONE = -1, + AV_PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) + AV_PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr + AV_PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB... + AV_PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR... + AV_PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) + AV_PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples) + AV_PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples) + AV_PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) + AV_PIX_FMT_GRAY8, ///< Y , 8bpp + AV_PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb + AV_PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb + AV_PIX_FMT_PAL8, ///< 8 bits with AV_PIX_FMT_RGB32 palette + AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range + AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range + AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range +{$IFDEF FF_API_XVMC} + AV_PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing + AV_PIX_FMT_XVMC_MPEG2_IDCT, + AV_PIX_FMT_XVMC = AV_PIX_FMT_XVMC_MPEG2_IDCT, +{$ENDIF} + AV_PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 + AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3 + AV_PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb) + AV_PIX_FMT_BGR4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits + AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb) + AV_PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb) + AV_PIX_FMT_RGB4, ///< packed RGB 1:2:1 bitstream, 4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits + AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb) + AV_PIX_FMT_NV12, ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V) + AV_PIX_FMT_NV21, ///< as above, but U and V bytes are swapped + + AV_PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB... + AV_PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA... + AV_PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR... + AV_PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA... + + AV_PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian + AV_PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian + AV_PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples) + AV_PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range + AV_PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples) +{$IFDEF FF_API_VDPAU} + AV_PIX_FMT_VDPAU_H264,///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VDPAU_MPEG1,///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VDPAU_MPEG2,///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VDPAU_WMV3,///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers + AV_PIX_FMT_VDPAU_VC1, ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers +{$ENDIF} + AV_PIX_FMT_RGB48BE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian + AV_PIX_FMT_RGB48LE, ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian + + AV_PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian + AV_PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian + AV_PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian, most significant bit to 0 + AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, most significant bit to 0 + + AV_PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian + AV_PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian + AV_PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian, most significant bit to 1 + AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, most significant bit to 1 +{$IFDEF FF_API_VAAPI} + (** Deprecated pixel formats *) + AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers + AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers + AV_PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID + + AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD, +{$ELSE} + AV_PIX_FMT_VAAPI, +{$ENDIF} + AV_PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian +{$IFDEF FF_API_VDPAU} + AV_PIX_FMT_VDPAU_MPEG4, ///< MPEG-4 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers +{$ENDIF} + AV_PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer + + AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, most significant bits to 0 + AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian, most significant bits to 0 + AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, most significant bits to 1 + AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian, most significant bits to 1 + AV_PIX_FMT_YA8, ///< 8 bits gray, 8 bits alpha +(* see const declaration way down + AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 + AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8 +*) + AV_PIX_FMT_BGR48BE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian + AV_PIX_FMT_BGR48LE, ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian + + (** + * The following 12 formats have the disadvantage of needing 1 format for each bit depth. + * Notice that each 9/10 bits sample is stored in 16 bits with extra padding. + * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better. + *) + AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_VDA_VLD, ///< hardware decoding through VDA + + AV_PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp + AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP + AV_PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big-endian + AV_PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little-endian + AV_PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big-endian + AV_PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little-endian + AV_PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big-endian + AV_PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little-endian + AV_PIX_FMT_YUVA422P, ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples) + AV_PIX_FMT_YUVA444P, ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples) + AV_PIX_FMT_YUVA420P9BE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian + AV_PIX_FMT_YUVA420P9LE, ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian + AV_PIX_FMT_YUVA422P9BE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian + AV_PIX_FMT_YUVA422P9LE, ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian + AV_PIX_FMT_YUVA444P9BE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian + AV_PIX_FMT_YUVA444P9LE, ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian + AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) + AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) + AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian) + AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian) + AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian) + AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian) + AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian) + + AV_PIX_FMT_VDPAU, ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface + + AV_PIX_FMT_XYZ12LE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0 + AV_PIX_FMT_XYZ12BE, ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0 + AV_PIX_FMT_NV16, ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples) + AV_PIX_FMT_NV20LE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_NV20BE, ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + + AV_PIX_FMT_RGBA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + AV_PIX_FMT_RGBA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian + AV_PIX_FMT_BGRA64BE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian + AV_PIX_FMT_BGRA64LE, ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian + + AV_PIX_FMT_YVYU422, ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb + + AV_PIX_FMT_VDA, ///< HW acceleration through VDA, data[3] contains a CVPixelBufferRef + + AV_PIX_FMT_YA16BE, ///< 16 bits gray, 16 bits alpha (big-endian) + AV_PIX_FMT_YA16LE, ///< 16 bits gray, 16 bits alpha (little-endian) + + AV_PIX_FMT_GBRAP, ///< planar GBRA 4:4:4:4 32bpp + AV_PIX_FMT_GBRAP16BE, ///< planar GBRA 4:4:4:4 64bpp, big-endian + AV_PIX_FMT_GBRAP16LE, ///< planar GBRA 4:4:4:4 64bpp, little-endian + (** + * HW acceleration through QSV, data[3] contains a pointer to the + * mfxFrameSurface1 structure. + *) + AV_PIX_FMT_QSV, + (** + * HW acceleration though MMAL, data[3] contains a pointer to the + * MMAL_BUFFER_HEADER_T structure. + *) + AV_PIX_FMT_MMAL, + + AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer + + (** + * HW acceleration through CUDA. data[i] contain CUdeviceptr pointers + * exactly as for system memory frames. + *) + AV_PIX_FMT_CUDA, + + AV_PIX_FMT_0RGB = $123 + 4,///< packed RGB 8:8:8, 32bpp, XRGBXRGB... X=unused/undefined + AV_PIX_FMT_RGB0, ///< packed RGB 8:8:8, 32bpp, RGBXRGBX... X=unused/undefined + AV_PIX_FMT_0BGR, ///< packed BGR 8:8:8, 32bpp, XBGRXBGR... X=unused/undefined + AV_PIX_FMT_BGR0, ///< packed BGR 8:8:8, 32bpp, BGRXBGRX... X=unused/undefined + + AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian + AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian + AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian + AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian + AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian + AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian + AV_PIX_FMT_GBRP12BE, ///< planar GBR 4:4:4 36bpp, big-endian + AV_PIX_FMT_GBRP12LE, ///< planar GBR 4:4:4 36bpp, little-endian + AV_PIX_FMT_GBRP14BE, ///< planar GBR 4:4:4 42bpp, big-endian + AV_PIX_FMT_GBRP14LE, ///< planar GBR 4:4:4 42bpp, little-endian + AV_PIX_FMT_YUVJ411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range + + AV_PIX_FMT_BAYER_BGGR8, ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */ + AV_PIX_FMT_BAYER_RGGB8, ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */ + AV_PIX_FMT_BAYER_GBRG8, ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */ + AV_PIX_FMT_BAYER_GRBG8, ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */ + AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */ + AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */ + AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */ + AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */ + AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */ + AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */ + AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */ + AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */ +{$ifndef FF_API_XVMC} + AV_PIX_FMT_XVMC, ///< XVideo Motion Acceleration via common packet passing +{$endif} + AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian + AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian + AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian + AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian + AV_PIX_FMT_AYUV64LE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian + AV_PIX_FMT_AYUV64BE, ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian + + AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox + + AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian + AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian + + AV_PIX_FMT_GBRAP12BE, ///< planar GBR 4:4:4:4 48bpp, big-endian + AV_PIX_FMT_GBRAP12LE, ///< planar GBR 4:4:4:4 48bpp, little-endian + + AV_PIX_FMT_GBRAP10BE, ///< planar GBR 4:4:4:4 40bpp, big-endian + AV_PIX_FMT_GBRAP10LE, ///< planar GBR 4:4:4:4 40bpp, little-endian + + AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec + + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions + ); + +const + AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8; ///< alias for AV_PIX_FMT_YA8 + AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8; ///< alias for AV_PIX_FMT_YA8 + +{$IFDEF WORDS_BIGENDIAN} + AV_PIX_FMT_RGB32 = AV_PIX_FMT_ARGB; + AV_PIX_FMT_RGB32_1 = AV_PIX_FMT_RGBA; + AV_PIX_FMT_BGR32 = AV_PIX_FMT_ABGR; + AV_PIX_FMT_BGR32_1 = AV_PIX_FMT_BGRA; + AV_PIX_FMT_0RGB32 = AV_PIX_FMT_0RGB; + AV_PIX_FMT_0BGR32 = AV_PIX_FMT_0BGR; + + AV_PIX_FMT_GRAY16 = AV_PIX_FMT_GRAY16BE; + AV_PIX_FMT_YA16 = AV_PIX_FMT_YA16BE; + AV_PIX_FMT_RGB48 = AV_PIX_FMT_RGB48BE; + AV_PIX_FMT_RGB565 = AV_PIX_FMT_RGB565BE; + AV_PIX_FMT_RGB555 = AV_PIX_FMT_RGB555BE; + AV_PIX_FMT_RGB444 = AV_PIX_FMT_RGB444BE; + AV_PIX_FMT_RGBA64 = AV_PIX_FMT_RGBA64BE; + AV_PIX_FMT_BGR48 = AV_PIX_FMT_BGR48BE; + AV_PIX_FMT_BGR565 = AV_PIX_FMT_BGR565BE; + AV_PIX_FMT_BGR555 = AV_PIX_FMT_BGR555BE; + AV_PIX_FMT_BGR444 = AV_PIX_FMT_BGR444BE; + AV_PIX_FMT_BGRA64 = AV_PIX_FMT_BGRA64BE; + + AV_PIX_FMT_YUV420P9 = AV_PIX_FMT_YUV420P9BE; + AV_PIX_FMT_YUV422P9 = AV_PIX_FMT_YUV422P9BE; + AV_PIX_FMT_YUV444P9 = AV_PIX_FMT_YUV444P9BE; + AV_PIX_FMT_YUV420P10 = AV_PIX_FMT_YUV420P10BE; + AV_PIX_FMT_YUV422P10 = AV_PIX_FMT_YUV422P10BE; + AV_PIX_FMT_YUV440P10 = AV_PIX_FMT_YUV440P10BE; + AV_PIX_FMT_YUV444P10 = AV_PIX_FMT_YUV444P10BE; + AV_PIX_FMT_YUV420P12 = AV_PIX_FMT_YUV420P12BE; + AV_PIX_FMT_YUV422P12 = AV_PIX_FMT_YUV422P12BE; + AV_PIX_FMT_YUV440P12 = AV_PIX_FMT_YUV440P12BE; + AV_PIX_FMT_YUV444P12 = AV_PIX_FMT_YUV444P12BE; + AV_PIX_FMT_YUV420P14 = AV_PIX_FMT_YUV420P14BE; + AV_PIX_FMT_YUV422P14 = AV_PIX_FMT_YUV422P14BE; + AV_PIX_FMT_YUV444P14= AV_PIX_FMT_YUV444P14BE; + AV_PIX_FMT_YUV420P16 = AV_PIX_FMT_YUV420P16BE; + AV_PIX_FMT_YUV422P16 = AV_PIX_FMT_YUV422P16BE; + AV_PIX_FMT_YUV444P16 = AV_PIX_FMT_YUV444P16BE; + + AV_PIX_FMT_GBRP9 = AV_PIX_FMT_GBRP9BE; + AV_PIX_FMT_GBRP10 = AV_PIX_FMT_GBRP10BE; + AV_PIX_FMT_GBRP12 = AV_PIX_FMT_GBRP12BE; + AV_PIX_FMT_GBRP14 = AV_PIX_FMT_GBRP14BE; + AV_PIX_FMT_GBRP16 = AV_PIX_FMT_GBRP16BE; + AV_PIX_FMT_GBRAP10 = AV_PIX_FMT_GBRAP10BE; + AV_PIX_FMT_GBRAP12 = AV_PIX_FMT_GBRAP12BE; + AV_PIX_FMT_GBRAP16 = AV_PIX_FMT_GBRAP16BE; + + AV_PIX_FMT_BAYER_BGGR16 = AV_PIX_FMT_BAYER_BGGR16BE; + AV_PIX_FMT_BAYER_RGGB16 = AV_PIX_FMT_BAYER_RGGB16BE; + AV_PIX_FMT_BAYER_GBRG16 = AV_PIX_FMT_BAYER_GBRG16BE; + AV_PIX_FMT_BAYER_GRBG16 = AV_PIX_FMT_BAYER_GRBG16BE; + + AV_PIX_FMT_YUVA420P9 = AV_PIX_FMT_YUVA420P9BE; + AV_PIX_FMT_YUVA422P9 = AV_PIX_FMT_YUVA422P9BE; + AV_PIX_FMT_YUVA444P9 = AV_PIX_FMT_YUVA444P9BE; + AV_PIX_FMT_YUVA420P10 = AV_PIX_FMT_YUVA420P10BE; + AV_PIX_FMT_YUVA422P10 = AV_PIX_FMT_YUVA422P10BE; + AV_PIX_FMT_YUVA444P10 = AV_PIX_FMT_YUVA444P10BE; + AV_PIX_FMT_YUVA420P16 = AV_PIX_FMT_YUVA420P16BE; + AV_PIX_FMT_YUVA422P16 = AV_PIX_FMT_YUVA422P16BE; + AV_PIX_FMT_YUVA444P16 = AV_PIX_FMT_YUVA444P16BE; + + AV_PIX_FMT_XYZ12 = AV_PIX_FMT_XYZ12BE; + AV_PIX_FMT_NV20 = AV_PIX_FMT_NV20BE; + AV_PIX_FMT_AYUV64 = AV_PIX_FMT_AYUV64BE; + +{$ELSE} + AV_PIX_FMT_RGB32 = AV_PIX_FMT_BGRA; + AV_PIX_FMT_RGB32_1 = AV_PIX_FMT_ABGR; + AV_PIX_FMT_BGR32 = AV_PIX_FMT_RGBA; + AV_PIX_FMT_BGR32_1 = AV_PIX_FMT_ARGB; + AV_PIX_FMT_0RGB32 = AV_PIX_FMT_BGR0; + AV_PIX_FMT_0BGR32 = AV_PIX_FMT_RGB0; + + AV_PIX_FMT_GRAY16 = AV_PIX_FMT_GRAY16LE; + AV_PIX_FMT_YA16 = AV_PIX_FMT_YA16LE; + AV_PIX_FMT_RGB48 = AV_PIX_FMT_RGB48LE; + AV_PIX_FMT_RGB565 = AV_PIX_FMT_RGB565LE; + AV_PIX_FMT_RGB555 = AV_PIX_FMT_RGB555LE; + AV_PIX_FMT_RGB444 = AV_PIX_FMT_RGB444LE; + AV_PIX_FMT_RGBA64 = AV_PIX_FMT_RGBA64LE; + AV_PIX_FMT_BGR48 = AV_PIX_FMT_BGR48LE; + AV_PIX_FMT_BGR565 = AV_PIX_FMT_BGR565LE; + AV_PIX_FMT_BGR555 = AV_PIX_FMT_BGR555LE; + AV_PIX_FMT_BGR444 = AV_PIX_FMT_BGR444LE; + AV_PIX_FMT_BGRA64 = AV_PIX_FMT_BGRA64LE; + + AV_PIX_FMT_YUV420P9 = AV_PIX_FMT_YUV420P9LE; + AV_PIX_FMT_YUV422P9 = AV_PIX_FMT_YUV422P9LE; + AV_PIX_FMT_YUV444P9 = AV_PIX_FMT_YUV444P9LE; + AV_PIX_FMT_YUV420P10 = AV_PIX_FMT_YUV420P10LE; + AV_PIX_FMT_YUV422P10 = AV_PIX_FMT_YUV422P10LE; + AV_PIX_FMT_YUV440P10 = AV_PIX_FMT_YUV440P10LE; + AV_PIX_FMT_YUV444P10 = AV_PIX_FMT_YUV444P10LE; + AV_PIX_FMT_YUV420P12 = AV_PIX_FMT_YUV420P12LE; + AV_PIX_FMT_YUV422P12 = AV_PIX_FMT_YUV422P12LE; + AV_PIX_FMT_YUV440P12 = AV_PIX_FMT_YUV440P12LE; + AV_PIX_FMT_YUV444P12 = AV_PIX_FMT_YUV444P12LE; + AV_PIX_FMT_YUV420P14 = AV_PIX_FMT_YUV420P14LE; + AV_PIX_FMT_YUV422P14 = AV_PIX_FMT_YUV422P14LE; + AV_PIX_FMT_YUV444P14= AV_PIX_FMT_YUV444P14LE; + AV_PIX_FMT_YUV420P16 = AV_PIX_FMT_YUV420P16LE; + AV_PIX_FMT_YUV422P16 = AV_PIX_FMT_YUV422P16LE; + AV_PIX_FMT_YUV444P16 = AV_PIX_FMT_YUV444P16LE; + + AV_PIX_FMT_GBRP9 = AV_PIX_FMT_GBRP9LE; + AV_PIX_FMT_GBRP10 = AV_PIX_FMT_GBRP10LE; + AV_PIX_FMT_GBRP12 = AV_PIX_FMT_GBRP12LE; + AV_PIX_FMT_GBRP14 = AV_PIX_FMT_GBRP14LE; + AV_PIX_FMT_GBRP16 = AV_PIX_FMT_GBRP16LE; + AV_PIX_FMT_GBRAP10 = AV_PIX_FMT_GBRAP10LE; + AV_PIX_FMT_GBRAP12 = AV_PIX_FMT_GBRAP12LE; + AV_PIX_FMT_GBRAP16 = AV_PIX_FMT_GBRAP16LE; + + AV_PIX_FMT_BAYER_BGGR16 = AV_PIX_FMT_BAYER_BGGR16LE; + AV_PIX_FMT_BAYER_RGGB16 = AV_PIX_FMT_BAYER_RGGB16LE; + AV_PIX_FMT_BAYER_GBRG16 = AV_PIX_FMT_BAYER_GBRG16LE; + AV_PIX_FMT_BAYER_GRBG16 = AV_PIX_FMT_BAYER_GRBG16LE; + + AV_PIX_FMT_YUVA420P9 = AV_PIX_FMT_YUVA420P9LE; + AV_PIX_FMT_YUVA422P9 = AV_PIX_FMT_YUVA422P9LE; + AV_PIX_FMT_YUVA444P9 = AV_PIX_FMT_YUVA444P9LE; + AV_PIX_FMT_YUVA420P10 = AV_PIX_FMT_YUVA420P10LE; + AV_PIX_FMT_YUVA422P10 = AV_PIX_FMT_YUVA422P10LE; + AV_PIX_FMT_YUVA444P10 = AV_PIX_FMT_YUVA444P10LE; + AV_PIX_FMT_YUVA420P16 = AV_PIX_FMT_YUVA420P16LE; + AV_PIX_FMT_YUVA422P16 = AV_PIX_FMT_YUVA422P16LE; + AV_PIX_FMT_YUVA444P16 = AV_PIX_FMT_YUVA444P16LE; + + AV_PIX_FMT_XYZ12 = AV_PIX_FMT_XYZ12LE; + AV_PIX_FMT_NV20 = AV_PIX_FMT_NV20LE; + AV_PIX_FMT_AYUV64 = AV_PIX_FMT_AYUV64LE; +{$ENDIF} + +type +(** + * Chromaticity coordinates of the source primaries. + *) + TAVColorPrimaries = ( + AVCOL_PRI_RESERVED0 = 0, + AVCOL_PRI_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B + AVCOL_PRI_UNSPECIFIED = 2, + AVCOL_PRI_RESERVED = 3, + AVCOL_PRI_BT470M = 4, ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20) + AVCOL_PRI_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM + AVCOL_PRI_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above + AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C + AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 + AVCOL_PRI_SMPTEST428_1 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) + AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) + AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 D65 (2010) + AVCOL_PRI_NB ///< Not part of ABI + ); + +(** + * Color Transfer Characteristic. + *) + TAVColorTransferCharacteristic = ( + AVCOL_TRC_RESERVED0 = 0, + AVCOL_TRC_BT709 = 1, ///< also ITU-R BT1361 + AVCOL_TRC_UNSPECIFIED = 2, + AVCOL_TRC_RESERVED = 3, + AVCOL_TRC_GAMMA22 = 4, ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM + AVCOL_TRC_GAMMA28 = 5, ///< also ITU-R BT470BG + AVCOL_TRC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC + AVCOL_TRC_SMPTE240M = 7, + AVCOL_TRC_LINEAR = 8, ///< "Linear transfer characteristics" + AVCOL_TRC_LOG = 9, ///< "Logarithmic transfer characteristic (100:1 range)" + AVCOL_TRC_LOG_SQRT = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)" + AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4 + AVCOL_TRC_BT1361_ECG = 12, ///< ITU-R BT1361 Extended Colour Gamut + AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) + AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system + AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system + AVCOL_TRC_SMPTEST2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems + AVCOL_TRC_SMPTEST428_1 = 17, ///< SMPTE ST 428-1 + AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" + AVCOL_TRC_NB ///< Not part of ABI + ); + +(** + * YUV colorspace type. + *) + TAVColorSpace = ( + AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) + AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B + AVCOL_SPC_UNSPECIFIED = 2, + AVCOL_SPC_RESERVED = 3, + AVCOL_SPC_FCC = 4, ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20) + AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 + AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC + AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above + AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system + AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system + AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x + AVCOL_SPC_NB ///< Not part of ABI + ); + +const + AVCOL_SPC_YCGCO = AVCOL_SPC_YCOCG; + +type +(** + * MPEG vs JPEG YUV range. + *) + TAVColorRange = ( + AVCOL_RANGE_UNSPECIFIED = 0, + AVCOL_RANGE_MPEG = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges + AVCOL_RANGE_JPEG = 2, ///< the normal 2^n-1 "JPEG" YUV ranges + AVCOL_RANGE_NB ///< Not part of ABI + ); + +(** + * Location of chroma samples. + * + * Illustration showing the location of the first (top left) chroma sample of the + * image, the left shows only luma, the right + * shows the location of the chroma sample, the 2 could be imagined to overlay + * each other but are drawn separately due to limitations of ASCII + * + * 1st 2nd 1st 2nd horizontal luma sample positions + * v v v v + * ______ ______ + *1st luma line > |X X ... |3 4 X ... X are luma samples, + * | |1 2 1-6 are possible chroma positions + *2nd luma line > |X X ... |5 6 X ... 0 is undefined/unknown position + *) + TAVChromaLocation = ( + AVCHROMA_LOC_UNSPECIFIED = 0, + AVCHROMA_LOC_LEFT = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0 + AVCHROMA_LOC_CENTER = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0 + AVCHROMA_LOC_TOPLEFT = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2 + AVCHROMA_LOC_TOP = 4, + AVCHROMA_LOC_BOTTOMLEFT = 5, + AVCHROMA_LOC_BOTTOM = 6, + AVCHROMA_LOC_NB ///< Not part of ABI + ); diff --git a/src/lib/ffmpeg-3.2/libavutil/samplefmt.pas b/src/lib/ffmpeg-3.2/libavutil/samplefmt.pas new file mode 100644 index 00000000..85b11305 --- /dev/null +++ b/src/lib/ffmpeg-3.2/libavutil/samplefmt.pas @@ -0,0 +1,287 @@ +(* + * SampleFormat + * copyright (c) 2011 Karl-Michael Schindler <karl-michael.schindler@web.de> + * + * 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 + * + * This is a part of the Pascal port of ffmpeg. + * + * Conversion of libavutil/samplefmt.h + * avutil version 54.7.100 + * + *) + +type +(** + * @addtogroup lavu_audio + * @ + * + * @defgroup lavu_sampfmts Audio sample formats + * + * Audio sample format enumeration and related convenience functions. + * @ + *) + +(** + * Audio sample formats + * + * - The data described by the sample format is always in native-endian order. + * Sample values can be expressed by native C types, hence the lack of a signed + * 24-bit sample format even though it is a common raw audio data format. + * + * - The floating-point formats are based on full volume being in the range + * [-1.0, 1.0]. Any values outside this range are beyond full volume level. + * + * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg + * (such as AVFrame in libavcodec) is as follows: + * + * @par + * For planar sample formats, each audio channel is in a separate data plane, + * and linesize is the buffer size, in bytes, for a single plane. All data + * planes must be the same size. For packed sample formats, only the first data + * plane is used, and samples for each channel are interleaved. In this case, + * linesize is the buffer size, in bytes, for the 1 plane. + * + *) + TAVSampleFormat = ( + AV_SAMPLE_FMT_NONE = -1, + AV_SAMPLE_FMT_U8, ///< unsigned 8 bits + AV_SAMPLE_FMT_S16, ///< signed 16 bits + AV_SAMPLE_FMT_S32, ///< signed 32 bits + AV_SAMPLE_FMT_FLT, ///< float + AV_SAMPLE_FMT_DBL, ///< double + + AV_SAMPLE_FMT_U8P, ///< unsigned 8 bits, planar + AV_SAMPLE_FMT_S16P, ///< signed 16 bits, planar + AV_SAMPLE_FMT_S32P, ///< signed 32 bits, planar + AV_SAMPLE_FMT_FLTP, ///< float, planar + AV_SAMPLE_FMT_DBLP, ///< double, planar + AV_SAMPLE_FMT_S64, ///< signed 64 bits + AV_SAMPLE_FMT_S64P, ///< signed 64 bits, planar + + AV_SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if linking dynamically + ); + TAVSampleFormatArray = array [0 .. MaxInt div SizeOf(TAVSampleFormat) - 1] of TAVSampleFormat; + PAVSampleFormatArray = ^TAVSampleFormatArray; + +(** + * Return the name of sample_fmt, or NULL if sample_fmt is not + * recognized. + *) +function av_get_sample_fmt_name(sample_fmt: TAVSampleFormat): {const} PAnsiChar; + cdecl; external av__util; + +(** + * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE + * on error. + *) +function av_get_sample_fmt(name: {const} PAnsiChar): TAVSampleFormat; + cdecl; external av__util; + +(** + * Return the planar<->packed alternative form of the given sample format, or + * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the + * requested planar/packed format, the format returned is the same as the + * input. + *) +function av_get_alt_sample_fmt(sample_fmt: TAVSampleFormat; planar: cint): TAVSampleFormat; + cdecl; external av__util; + +(** + * Get the packed alternative form of the given sample format. + * + * If the passed sample_fmt is already in packed format, the format returned is + * the same as the input. + * + * @return the packed alternative form of the given sample format or + AV_SAMPLE_FMT_NONE on error. + *) +function av_get_packed_sample_fmt(sample_fmt: TAVSampleFormat): TAVSampleFormat; + cdecl; external av__util; + +(** + * Get the planar alternative form of the given sample format. + * + * If the passed sample_fmt is already in planar format, the format returned is + * the same as the input. + * + * @return the planar alternative form of the given sample format or + AV_SAMPLE_FMT_NONE on error. + *) +function av_get_planar_sample_fmt(sample_fmt: TAVSampleFormat): TAVSampleFormat; + cdecl; external av__util; + +(** + * Generate a string corresponding to the sample format with + * sample_fmt, or a header if sample_fmt is negative. + * + * @param buf the buffer where to write the string + * @param buf_size the size of buf + * @param sample_fmt the number of the sample format to print the + * corresponding info string, or a negative value to print the + * corresponding header. + * @return the pointer to the filled buffer or NULL if sample_fmt is + * unknown or in case of other errors + *) +function av_get_sample_fmt_string(buf: PAnsiChar; buf_size: cint; sample_fmt: TAVSampleFormat): PAnsiChar; + cdecl; external av__util; + +(** + * Return number of bytes per sample. + * + * @param sample_fmt the sample format + * @return number of bytes per sample or zero if unknown for the given + * sample format + *) +function av_get_bytes_per_sample(sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; + +type + OctArrayOfPcuint8 = array[0..7] of Pcuint8; + OctArrayOfcint = array[0..7] of cint; + +(** + * Check if the sample format is planar. + * + * @param sample_fmt the sample format to inspect + * @return 1 if the sample format is planar, 0 if it is interleaved + *) +function av_sample_fmt_is_planar(sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; + +(** + * Get the required buffer size for the given audio parameters. + * + * @param[out] linesize calculated linesize, may be NULL + * @param nb_channels the number of channels + * @param nb_samples the number of samples in a single channel + * @param sample_fmt the sample format + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return required buffer size, or negative error code on failure + *) +function av_samples_get_buffer_size(linesize: Pcint; nb_channels: cint; nb_samples: cint; + sample_fmt: TAVSampleFormat; align: cint): cint; + cdecl; external av__util; + +(** + * @ + * + * @defgroup lavu_sampmanip Samples manipulation + * + * Functions that manipulate audio samples + * @ + *) + +(** + * Fill plane data pointers and linesize for samples with sample + * format sample_fmt. + * + * The audio_data array is filled with the pointers to the samples data planes: + * for planar, set the start point of each channel's data within the buffer, + * for packed, set the start point of the entire buffer only. + * + * The value pointed to by linesize is set to the aligned size of each + * channel's data buffer for planar layout, or to the aligned size of the + * buffer for all channels for packed layout. + * + * The buffer in buf must be big enough to contain all the samples + * (use av_samples_get_buffer_size() to compute its minimum size), + * otherwise the audio_data pointers will point to invalid data. + * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. + * + * @param[out] audio_data array to be filled with the pointer for each channel + * @param[out] linesize calculated linesize, may be NULL + * @param buf the pointer to a buffer containing the samples + * @param nb_channels the number of channels + * @param nb_samples the number of samples in a single channel + * @param sample_fmt the sample format + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return >=0 on success or a negative error code on failure + * @todo return minimum size in bytes required for the buffer in case + * of success at the next bump + *) +function av_samples_fill_arrays(var audio_data: Pcuint8; linesize: Pcint; + buf: Pcuint8; + nb_channels: cint; nb_samples: cint; + sample_fmt: TAVSampleFormat; align: cint): cint; + cdecl; external av__util; + +(** + * Allocate a samples buffer for nb_samples samples, and fill data pointers and + * linesize accordingly. + * The allocated samples buffer can be freed by using av_freep(&audio_data[0]) + * + * @see enum AVSampleFormat + * The documentation for AVSampleFormat describes the data layout. + * + * @param[out] audio_data array to be filled with the pointer for each channel + * @param[out] linesize aligned size for audio buffer(s), may be NULL + * @param nb_channels number of audio channels + * @param nb_samples number of samples per channel + * @param align buffer size alignment (0 = default, 1 = no alignment) + * @return >=0 on success or a negative error code on failure + * @todo return the size of the allocated buffer in case of success at the next bump + * @see av_samples_fill_arrays() + * @see av_samples_alloc_array_and_samples() + *) +function av_samples_alloc(var audio_data: Pcuint8; linesize: Pcint; + nb_channels: cint; nb_samples: cint; + sample_fmt: TAVSampleFormat; align: cint): cint; + cdecl; external av__util; + +(** + * Allocate a data pointers array, samples buffer for nb_samples + * samples, and fill data pointers and linesize accordingly. + * + * This is the same as av_samples_alloc(), but also allocates the data + * pointers array. + * + * @see av_samples_alloc() + *) +function av_samples_alloc_array_and_samples(var audio_data: Pcuint8; linesize: Pcint; + nb_channels: cint; nb_samples: cint; + sample_fmt: TAVSampleFormat; align: cint): cint; + cdecl; external av__util; + +(** + * Copy samples from src to dst. + * + * @param dst destination array of pointers to data planes + * @param src source array of pointers to data planes + * @param dst_offset offset in samples at which the data will be written to dst + * @param src_offset offset in samples at which the data will be read from src + * @param nb_samples number of samples to be copied + * @param nb_channels number of audio channels + * @param sample_fmt audio sample format + *) +function av_samples_copy(var dst: Pcuint8; src: {const} Pcuint8; dst_offset: cint; + src_offset: cint; nb_samples: cint; nb_channels: cint; + sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; + +(** + * Fill an audio buffer with silence. + * + * @param audio_data array of pointers to data planes + * @param offset offset in samples at which to start filling + * @param nb_samples number of samples to fill + * @param nb_channels number of audio channels + * @param sample_fmt audio sample format + *) +function av_samples_set_silence(var audio_data: Pcuint8; offset: cint; nb_samples: cint; + nb_channels: cint; sample_fmt: TAVSampleFormat): cint; + cdecl; external av__util; diff --git a/src/lib/ffmpeg-3.2/rational.pas b/src/lib/ffmpeg-3.2/rational.pas new file mode 100644 index 00000000..d7fcb5b2 --- /dev/null +++ b/src/lib/ffmpeg-3.2/rational.pas @@ -0,0 +1,270 @@ +(* + * rational numbers + * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of libavutil/rational.h + * avutil version 54.7.100 + * + *) + +unit rational; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} + +interface + +uses + ctypes, + UConfig; + +(** + * @addtogroup lavu_math + * @{ + *) + +type +(** + * Rational number (pair of numerator and denominator). + *) + PAVRational = ^TAVRational; + TAVRational = record + num: cint; ///< Numerator + den: cint; ///< Denominator + end; + + TAVRationalArray = array[0 .. (MaxInt div SizeOf(TAVRational))-1] of TAVRational; + PAVRationalArray = ^TAVRationalArray; + +(** + * Create an AVRational. + * + * Useful for compilers that do not support compound literals. + * + * @note The return value is not reduced. + * @see av_reduce() + */ +static inline AVRational av_make_q(int num, int den) +{ + AVRational r = { num, den }; + return r; +} + +/**) + +(** + * Create an AVRational. + * + * Useful for compilers that do not support compound literals. + * + * @note The return value is not reduced. + * @see av_reduce() + *) +function av_make_q(num, den: cint): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Compare two rationals. + * + * @param a First rational + * @param b Second rational + * + * @return One of the following values: + * - 0 if `a == b` + * - 1 if `a > b` + * - -1 if `a < b` + * - `INT_MIN` if one of the values is of the form `0 / 0` + *) +function av_cmp_q(a: TAVRational; b: TAVRational): cint; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Convert an AVRational to a `double`. + * @param a AVRational to convert + * @return `a` in floating-point form + * @see av_d2q() + *) +function av_q2d(a: TAVRational): cdouble; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Reduce a fraction. + * + * This is useful for framerate calculations. + * + * @param[out] dst_num Destination numerator + * @param[out] dst_den Destination denominator + * @param[in] num Source numerator + * @param[in] den Source denominator + * @param[in] max Maximum allowed values for `dst_num` & `dst_den` + * @return 1 if the operation is exact, 0 otherwise + *) +function av_reduce(dst_num: PCint; dst_den: PCint; num: cint64; den: cint64; max: cint64): cint; + cdecl; external av__util; + +(** + * Multiply two rationals. + * @param b First rational + * @param c Second rational + * @return b*c + *) +function av_mul_q(b: TAVRational; c: TAVRational): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Divide one rational by another. + * @param b First rational + * @param c Second rational + * @return b/c + *) +function av_div_q(b: TAVRational; c: TAVRational): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Add two rationals. + * @param b First rational + * @param c Second rational + * @return b+c + *) +function av_add_q(b: TAVRational; c: TAVRational): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Subtract one rational from another. + * @param b First rational + * @param c Second rational + * @return b-c + *) +function av_sub_q(b: TAVRational; c: TAVRational): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Invert a rational. + * @param q value + * @return 1 / q + *) +function av_inv_q(q: TAVRational): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} + +(** + * Convert a double precision floating point number to a rational. + * + * In case of infinity, the returned value is expressed as `{1, 0}` or + * `{-1, 0}` depending on the sign. + * + * @param d `double` to convert + * @param max Maximum allowed numerator and denominator + * @return `d` in AVRational form + * @see av_q2d() + *) +function av_d2q(d: cdouble; max: cint): TAVRational; + cdecl; external av__util; {av_const} + +(** + * Find which of the two rationals is closer to another rational. + * + * @param q Rational to be compared against + * @param q1,q2 Rationals to be tested + * @return One of the following values: + * - 1 if `q1` is nearer to `q` than `q2` + * - -1 if `q2` is nearer to `q` than `q1` + * - 0 if they have the same distance + *) +function av_nearer_q(q, q1, q2: TAVRational): cint; + cdecl; external av__util; + +(** + * Find the value in a list of rationals nearest a given reference rational. + * + * @param q Reference rational + * @param q_list Array of rationals terminated by `{0, 0}` + * @return Index of the nearest value found in the array + *) +function av_find_nearest_q_idx(q: TAVRational; q_list: {const} PAVRationalArray): cint; + cdecl; external av__util; + +(** + * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point + * format. + * + * @param q Rational to be converted + * @return Equivalent floating-point value, expressed as an unsigned 32-bit + * integer. + * @note The returned value is platform-indepedant. + *) +function av_q2intfloat(q: TAVRational): cuint32; + cdecl; external av__util; + +implementation + +function av_cmp_q (a: TAVRational; b: TAVRational): cint; {$IFDEF HasInline}inline;{$ENDIF} +var + tmp: cint64; +begin + tmp := a.num * cint64(b.den) - b.num * cint64(a.den); + +{ old version + if (tmp <> 0) then + Result := (tmp shr 63) or 1 + else + Result := 0; +} +{ C original: + if(tmp) return ((tmp ^ a.den ^ b.den)>>63)|1; + else if(b.den && a.den) return 0; + else if(a.num && b.num) return (a.num>>31) - (b.num>>31); + else return INT_MIN; +} + + if tmp <> 0 then + Result := ((tmp xor a.den xor b.den) shr 63) or 1 + else if (b.den and a.den) <> 0 then + Result := 0 + else if (a.num and b.num) <> 0 then + Result := (a.num shr 31) - (b.num shr 31) + else + Result := low(cint); + +end; + +function av_q2d(a: TAVRational): cdouble; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result := a.num / a.den; +end; + +function av_inv_q(q: TAVRational): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result.num := q.den; + Result.den := q.num; +end; + +function av_make_q(num, den: cint): TAVRational; {$IFDEF HasInline}inline;{$ENDIF} +begin + Result.num := num; + Result.den := den; +end; + +end. diff --git a/src/lib/ffmpeg-3.2/swresample.pas b/src/lib/ffmpeg-3.2/swresample.pas new file mode 100644 index 00000000..dd45b9fb --- /dev/null +++ b/src/lib/ffmpeg-3.2/swresample.pas @@ -0,0 +1,467 @@ +(* + * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> + * + * 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 + * + * This is a part of Pascal porting of ffmpeg. + * - Originally by Victor Zinetz for Delphi and Free Pascal on Windows. + * - For Mac OS X, some modifications were made by The Creative CAT, denoted as CAT + * in the source codes. + * - Changes and updates by the UltraStar Deluxe Team + * + * Conversion of + * + * libswresample/swresample.h: + * version: 0.18.100 + * + *) + + +unit swresample; + +{$IFDEF FPC} + {$MODE DELPHI} + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$IFDEF DARWIN} + {$linklib swresample} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + rational, + {$IFDEF UNIX} + BaseUnix, + {$ENDIF} + UConfig; + +const + (* + * IMPORTANT: The official FFmpeg C headers change very quickly. Often some + * of the data structures are changed so that they become incompatible with + * older header files. The Pascal headers have to be adjusted to those changes, + * otherwise the application might crash randomly or strange bugs (not + * necessarily related to video or audio due to buffer overflows etc.) might + * occur. + * + * In the past users reported problems with USDX that took hours to fix and + * the problem was an unsupported version of FFmpeg. So we decided to disable + * support for future versions of FFmpeg until the headers are revised by us + * for that version as they otherwise most probably will break USDX. + * + * If the headers do not yet support your FFmpeg version you may want to + * adjust the max. version numbers manually but please note: it may work but + * in many cases it does not. The USDX team does NOT PROVIDE ANY SUPPORT + * for the game if the MAX. VERSION WAS CHANGED. + * + * The only safe way to support new versions of FFmpeg is to add the changes + * of the FFmpeg git repository C headers to the Pascal headers. + * You can accelerate this process by posting a patch with the git changes + * translated to Pascal to our bug tracker (please join our IRC chat before + * you start working on it). Simply adjusting the max. versions is NOT a valid + * fix. + *) + + (* Supported version by this header *) + LIBSWRESAMPLE_MAX_VERSION_MAJOR = 2; + LIBSWRESAMPLE_MAX_VERSION_MINOR = 3; + LIBSWRESAMPLE_MAX_VERSION_RELEASE = 100; + LIBSWRESAMPLE_MAX_VERSION = (LIBSWRESAMPLE_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBSWRESAMPLE_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBSWRESAMPLE_MAX_VERSION_RELEASE * VERSION_RELEASE); + + (* Min. supported version by this header *) + LIBSWRESAMPLE_MIN_VERSION_MAJOR = 2; + LIBSWRESAMPLE_MIN_VERSION_MINOR = 3; + LIBSWRESAMPLE_MIN_VERSION_RELEASE = 100; + LIBSWRESAMPLE_MIN_VERSION = (LIBSWRESAMPLE_MIN_VERSION_MAJOR * VERSION_MAJOR) + + (LIBSWRESAMPLE_MIN_VERSION_MINOR * VERSION_MINOR) + + (LIBSWRESAMPLE_MIN_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBSWRESAMPLE_VERSION < LIBSWRESAMPLE_MIN_VERSION)} + {$MESSAGE Error 'Linked version of libswresample is too old!'} +{$IFEND} + +(* Check if linked version is supported *) +{$IF (LIBSWRESAMPLE_VERSION > LIBSWRESAMPLE_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libswresample is not yet supported!'} +{$IFEND} + +{$IF LIBSWRESAMPLE_VERSION_MAJOR < 1} + SWR_CH_MAX = 32; (* < Maximum number of channels *) +{$ENDIF} + SWR_FLAG_RESAMPLE = 1; (* < Force resampling even if equal sample rate *) + +type +(** Dithering algorithms *) + TSwrDitherType = ( + SWR_DITHER_NONE = 0, + SWR_DITHER_RECTANGULAR, + SWR_DITHER_TRIANGULAR, + SWR_DITHER_TRIANGULAR_HIGHPASS, + + SWR_DITHER_NS = 64, (* < not part of API/ABI *) + SWR_DITHER_NS_LIPSHITZ, + SWR_DITHER_NS_F_WEIGHTED, + SWR_DITHER_NS_MODIFIED_E_WEIGHTED, + SWR_DITHER_NS_IMPROVED_E_WEIGHTED, + SWR_DITHER_NS_SHIBATA, + SWR_DITHER_NS_LOW_SHIBATA, + SWR_DITHER_NS_HIGH_SHIBATA, + SWR_DITHER_NB (* < not part of API/ABI *) + ); + +(** Resampling Engines *) + TSwrEngine = ( + SWR_ENGINE_SWR, (* < SW Resampler *) + SWR_ENGINE_SOXR, (* < SoX Resampler *) + SWR_ENGINE_NB (* < not part of API/ABI *) + ); + +(** Resampling Filter Types *) + TSwrFilterType = ( + SWR_FILTER_TYPE_CUBIC, (* < Cubic *) + SWR_FILTER_TYPE_BLACKMAN_NUTTALL, (* < Blackman Nuttall windowed sinc *) + SWR_FILTER_TYPE_KAISER (* < Kaiser windowed sinc *) + ); + +(** + * The libswresample context. Unlike libavcodec and libavformat, this structure + * is opaque. This means that if you would like to set options, you must use + * the @ref avoptions API and cannot directly set values to members of the + * structure. + *) + PPSwrContext= ^PSwrContext; + PSwrContext = ^TSwrContext; + TSwrContext = record + end; + +{$INCLUDE libavcodec/audioconvert.pas} + +(** + * Get the AVClass for swrContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function swr_get_class(): PAVClass; + cdecl; external sw__resample; + +(** + * Allocate SwrContext. + * + * If you use this function you will need to set the parameters (manually or + * with swr_alloc_set_opts()) before calling swr_init(). + * + * @see swr_alloc_set_opts(), swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc(): PSwrContext; + cdecl; external sw__resample; + +(** + * Initialize context after user parameters have been set. + * + * @see av_opt_set_int() + * @see av_opt_set_dict() + * + * @param[in,out] s Swr context to initialize + * @return AVERROR error code in case of failure. + *) +function swr_init(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Check whether an swr context has been initialized or not. + * + * @param[in] s Swr context to check + * @see swr_init() + * @return positive if it has been initialized, 0 if not initialized + *) +function swr_is_initialized(s: PSwrContext): cint; + cdecl; external sw__resample; + +(** + * Allocate SwrContext if needed and set/reset common parameters. + * + * This function does not require s to be allocated with swr_alloc(). On the + * other hand, swr_alloc() can use swr_alloc_set_opts() to set the parameters + * on the allocated context. + * + * @param s existing Swr context if available, or NULL if not + * @param out_ch_layout output channel layout (AV_CH_LAYOUT_* ) + * @param out_sample_fmt output sample format (AV_SAMPLE_FMT_* ). + * @param out_sample_rate output sample rate (frequency in Hz) + * @param in_ch_layout input channel layout (AV_CH_LAYOUT_* ) + * @param in_sample_fmt input sample format (AV_SAMPLE_FMT_* ). + * @param in_sample_rate input sample rate (frequency in Hz) + * @param log_offset logging level offset + * @param log_ctx parent logging context, can be NULL + * + * @see swr_init(), swr_free() + * @return NULL on error, allocated context otherwise + *) +function swr_alloc_set_opts(s: PSwrContext; + out_ch_layout: cint64; out_sample_fmt: TAVSampleFormat; out_sample_rate: cint; + in_ch_layout: cint64; in_sample_fmt: TAVSampleFormat; in_sample_rate: cint; + log_offset: cint; log_ctx: pointer): PSwrContext; + cdecl; external sw__resample; + +(** + * Free the given SwrContext and set the pointer to NULL. + * + * @param[in] s a pointer to a pointer to Swr context + *) +procedure swr_free(s: PPSwrContext); + cdecl; external sw__resample; + +(** + * Closes the context so that swr_is_initialized() returns 0. + * + * The context can be brought back to life by running swr_init(), + * swr_init() can also be used without swr_close(). + * This function is mainly provided for simplifying the usecase + * where one tries to support libavresample and libswresample. + * + * @param[in,out] s Swr context to be closed + *) +procedure swr_close(s: PSwrContext); + cdecl; external sw__resample; + +(** + * Convert audio. + * + * in and in_count can be set to 0 to flush the last few samples out at the + * end. + * + * If more input is provided than output space, then the input will be buffered. + * You can avoid this buffering by using swr_get_out_samples() to retrieve an + * upper bound on the required number of output samples for the given number of + * input samples. Conversion will run directly without copying whenever possible. + * + * @param s allocated Swr context, with parameters set + * @param out output buffers, only the first one need be set in case of packed audio + * @param out_count amount of space available for output in samples per channel + * @param in input buffers, only the first one need to be set in case of packed audio + * @param in_count number of input samples available in one channel + * + * @return number of samples output per channel, negative value on error + *) +function swr_convert(s: PSwrContext; var out_: PByte; out_count: cint; + var in_: {const} PByte; in_count: cint): cint; + cdecl; external sw__resample; + +(** + * Convert the next timestamp from input to output + * timestamps are in 1/(in_sample_rate * out_sample_rate) units. + * + * @note There are 2 slightly differently behaving modes. + * First is when automatic timestamp compensation is not used, (min_compensation >= FLT_MAX) + * in this case timestamps will be passed through with delays compensated + * Second is when automatic timestamp compensation is used, (min_compensation < FLT_MAX) + * in this case the output timestamps will match output sample numbers + * + * @param pts timestamp for the next input sample, INT64_MIN if unknown + * @return the output timestamp for the next output sample + *) +function swr_next_pts(s: PSwrContext; pts: cint64): cint64; + cdecl; external sw__resample; + +(** + * Activate resampling compensation ("soft" compensation). This function is + * internally called when needed in swr_next_pts(). + * + * @param[in,out] s allocated Swr context. If it is not initialized, + * or SWR_FLAG_RESAMPLE is not set, swr_init() is + * called with the flag set. + * @param[in] sample_delta delta in PTS per sample + * @param[in] compensation_distance number of samples to compensate for + * @return >= 0 on success, AVERROR error codes if: + * @li @c s is NULL, + * @li @c compensation_distance is less than 0, + * @li @c compensation_distance is 0 but sample_delta is not, + * @li compensation unsupported by resampler, or + * @li swr_init() fails when called. + *) +function swr_set_compensation(s: PSwrContext; sample_delta: cint; compensation_distance: cint): cint; + cdecl; external sw__resample; + +(** + * Set a customized input channel mapping. + * + * @param[in,out] s allocated Swr context, not yet initialized + * @param[in] channel_map customized input channel mapping (array of channel + * indexes, -1 for a muted channel) + * @return >= 0 on success, or AVERROR error code in case of failure. + *) +function swr_set_channel_mapping(s: PSwrContext; {const} channel_map: pcint): cint; + cdecl; external sw__resample; + +(** + * Generate a channel mixing matrix. + * + * This function is the one used internally by libswresample for building the + * default mixing matrix. It is made public just as a utility function for + * building custom matrices. + * + * @param in_layout input channel layout + * @param out_layout output channel layout + * @param center_mix_level mix level for the center channel + * @param surround_mix_level mix level for the surround channel(s) + * @param lfe_mix_level mix level for the low-frequency effects channel + * @param rematrix_maxval if 1.0, coefficients will be normalized to prevent + * overflow. if INT_MAX, coefficients will not be + * normalized. + * @param[out] matrix mixing coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o. + * @param stride distance between adjacent input channels in the + * matrix array + * @param matrix_encoding matrixed stereo downmix mode (e.g. dplii) + * @param log_ctx parent logging context, can be NULL + * @return 0 on success, negative AVERROR code on failure + *) +function swr_build_matrix(in_layout: Pcuint64; out_layout: Pcuint64; + center_mix_level: cdouble; surround_mix_level: cdouble; + lfe_mix_level: cdouble; rematrix_maxval: cdouble; + rematrix_volume: cdouble; matrix: Pcdouble; + stride: cint; matrix_encoding: TAVMatrixEncoding; + log_ctx: pointer): cint; + cdecl; external sw__resample; + +(** + * Set a customized remix matrix. + * + * @param s allocated Swr context, not yet initialized + * @param matrix remix coefficients; matrix[i + stride * o] is + * the weight of input channel i in output channel o + * @param stride offset between lines of the matrix + * @return >= 0 on success, or AVERROR error code in case of failure. + *) +function swr_set_matrix(s: PSwrContext; {const} matrix: pcdouble; stride: cint): cint; + cdecl; external sw__resample; + +(** + * Drops the specified number of output samples. + * + * This function, along with swr_inject_silence(), is called by swr_next_pts() + * if needed for "hard" compensation. + * + * @param s allocated Swr context + * @param count number of samples to be dropped + * + * @return >= 0 on success, or a negative AVERROR code on failure + *) +function swr_drop_output(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Injects the specified number of silence samples. + * + * This function, along with swr_drop_output(), is called by swr_next_pts() + * if needed for "hard" compensation. + * + * @param s allocated Swr context + * @param count number of samples to be dropped + * + * @return >= 0 on success, or a negative AVERROR code on failure + *) +function swr_inject_silence(s: PSwrContext; count: cint): cint; + cdecl; external sw__resample; + +(** + * Gets the delay the next input sample will experience relative to the next output sample. + * + * Swresample can buffer data if more input has been provided than available + * output space, also converting between sample rates needs a delay. + * This function returns the sum of all such delays. + * The exact delay is not necessarily an integer value in either input or + * output sample rate. Especially when downsampling by a large value, the + * output sample rate may be a poor choice to represent the delay, similarly + * for upsampling and the input sample rate. + * + * @param s swr context + * @param base timebase in which the returned delay will be: + * @li if it's set to 1 the returned delay is in seconds + * @li if it's set to 1000 the returned delay is in milliseconds + * @li if it's set to the input sample rate then the returned + * delay is in input samples + * @li if it's set to the output sample rate then the returned + * delay is in output samples + * @li if it's the least common multiple of in_sample_rate and + * out_sample_rate then an exact rounding-free delay will be + * returned + * @returns the delay in 1 / @c base units. + *) +function swr_get_delay(s: PSwrContext; base: cint64): cint64; + cdecl; external sw__resample; + +(** + * Find an upper bound on the number of samples that the next swr_convert + * call will output, if called with in_samples of input samples. This + * depends on the internal state, and anything changing the internal state + * (like further swr_convert() calls) will may change the number of samples + * swr_get_out_samples() returns for the same number of input samples. + * + * @param in_samples number of input samples. + * @note any call to swr_inject_silence(), swr_convert(), swr_next_pts() + * or swr_set_compensation() invalidates this limit + * @note it is recommended to pass the correct available buffer size + * to all functions like swr_convert() even if swr_get_out_samples() + * indicates that less would be used. + * @returns an upper bound on the number of samples that the next swr_convert + * will output or a negative value to indicate an error + *) +function swr_get_out_samples(s: PSwrContext; in_samples: cint): cint; + cdecl; external sw__resample; + +(** + * Return the @ref LIBSWRESAMPLE_VERSION_INT constant. + * + * This is useful to check if the build-time libswresample has the same version + * as the run-time one. + * + * @returns the unsigned int-typed version + *) +function swresample_version(): cuint; + cdecl; external sw__resample; + +(** + * Return the swr build-time configuration. + * + * @returns the build-time @c ./configure flags + *) +function swresample_configuration(): PAnsiChar; + cdecl; external sw__resample; + +(** + * Return the swr license. + * + * @returns the license of libswresample, determined at build-time + *) +function swresample_license(): PAnsiChar; + cdecl; external sw__resample; + +implementation + +end. + diff --git a/src/lib/ffmpeg-3.2/swscale.pas b/src/lib/ffmpeg-3.2/swscale.pas new file mode 100644 index 00000000..184ecc49 --- /dev/null +++ b/src/lib/ffmpeg-3.2/swscale.pas @@ -0,0 +1,439 @@ +(* + * Copyright (C) 2001-2011 Michael Niedermayer <michaelni@gmx.at> + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * FFmpeg Pascal port + * - Ported by the UltraStar Deluxe Team + * + * Conversion of libswscale/swscale.h + * version: 3.0.100 + *) + +unit swscale; + +{$IFDEF FPC} + {$MODE DELPHI } + {$PACKENUM 4} (* use 4-byte enums *) + {$PACKRECORDS C} (* C/C++-compatible record packing *) + {$MACRO ON} (* Turn macro support on *) +{$ELSE} + {$MINENUMSIZE 4} (* use 4-byte enums *) +{$ENDIF} + +{$I switches.inc} (* for ffmpeg defines *) +{$I ff_api-defines.inc} (* FF_API_* defines *) + +{$IFDEF DARWIN} + {$linklib libswscale} +{$ENDIF} + +interface + +uses + ctypes, + avutil, + avcodec, + UConfig; + +const +(* + * IMPORTANT: The official FFmpeg C headers change very quickly. Often some + * of the data structures are changed so that they become incompatible with + * older header files. The Pascal headers have to be adjusted to those changes, + * otherwise the application might crash randomly or strange bugs (not + * necessarily related to video or audio due to buffer overflows etc.) might + * occur. + * + * In the past users reported problems with USDX that took hours to fix and + * the problem was an unsupported version of FFmpeg. So we decided to disable + * support for future versions of FFmpeg until the headers are revised by us + * for that version as they otherwise most probably will break USDX. + * + * If the headers do not yet support your FFmpeg version you may want to + * adjust the max. version numbers manually but please note: it may work but + * in many cases it does not. The USDX team does NOT PROVIDE ANY SUPPORT + * for the game if the MAX. VERSION WAS CHANGED. + * + * The only safe way to support new versions of FFmpeg is to add the changes + * of the FFmpeg git repository C headers to the Pascal headers. + * You can accelerate this process by posting a patch with the git changes + * translated to Pascal to our bug tracker (please join our IRC chat before + * you start working on it). Simply adjusting the max. versions is NOT a valid + * fix. + *) + + (* Max. supported version by this header *) + LIBSWSCALE_MAX_VERSION_MAJOR = 4; + LIBSWSCALE_MAX_VERSION_MINOR = 2; + LIBSWSCALE_MAX_VERSION_RELEASE = 100; + LIBSWSCALE_MAX_VERSION = (LIBSWSCALE_MAX_VERSION_MAJOR * VERSION_MAJOR) + + (LIBSWSCALE_MAX_VERSION_MINOR * VERSION_MINOR) + + (LIBSWSCALE_MAX_VERSION_RELEASE * VERSION_RELEASE); + +(* Check if linked versions are supported *) +{$IF (LIBSWSCALE_VERSION > LIBSWSCALE_MAX_VERSION)} + {$MESSAGE Error 'Linked version of libswscale is not yet supported!'} +{$IFEND} + +type + TQuadCintArray = array[0..3] of cint; + PQuadCintArray = ^TQuadCintArray; + TCintArray = array[0..0] of cint; + PCintArray = ^TCintArray; + TPCuint8Array = array[0..0] of PCuint8; + PPCuint8Array = ^TPCuint8Array; + +(** + * Return the LIBSWSCALE_VERSION_INT constant. + *) +function swscale_version(): cuint; + cdecl; external sw__scale; + +(** + * Return the libswscale build-time configuration. + *) +function swscale_configuration(): PAnsiChar; + cdecl; external sw__scale; + +(** + * Return the libswscale license. + *) +function swscale_license(): PAnsiChar; + cdecl; external sw__scale; + +const + (* values for the flags, the stuff on the command line is different *) + SWS_FAST_BILINEAR = 1; + SWS_BILINEAR = 2; + SWS_BICUBIC = 4; + SWS_X = 8; + SWS_POINT = $10; + SWS_AREA = $20; + SWS_BICUBLIN = $40; + SWS_GAUSS = $80; + SWS_SINC = $100; + SWS_LANCZOS = $200; + SWS_SPLINE = $400; + + SWS_SRC_V_CHR_DROP_MASK = $30000; + SWS_SRC_V_CHR_DROP_SHIFT = 16; + + SWS_PARAM_DEFAULT = 123456; + + SWS_PRINT_INFO = $1000; + + // the following 3 flags are not completely implemented + // internal chrominance subsampling info + SWS_FULL_CHR_H_INT = $2000; + // input subsampling info + SWS_FULL_CHR_H_INP = $4000; + SWS_DIRECT_BGR = $8000; + SWS_ACCURATE_RND = $40000; + SWS_BITEXACT = $80000; + + SWS_MAX_REDUCE_CUTOFF = 0.002; + + SWS_CS_ITU709 = 1; + SWS_CS_FCC = 4; + SWS_CS_ITU601 = 5; + SWS_CS_ITU624 = 5; + SWS_CS_SMPTE170M = 5; + SWS_CS_SMPTE240M = 7; + SWS_CS_DEFAULT = 5; + SWS_CS_BT2020 = 9; + +(** + * Return a pointer to yuv<->rgb coefficients for the given colorspace + * suitable for sws_setColorspaceDetails(). + * + * @param colorspace One of the SWS_CS_* macros. If invalid, + * SWS_CS_DEFAULT is used. + *) +function sws_getCoefficients(colorspace: cint): Pcint; + cdecl; external sw__scale; + +type + + // when used for filters they must have an odd number of elements + // coeffs cannot be shared between vectors + PSwsVector = ^TSwsVector; + TSwsVector = record + coeff: PCdouble; // pointer to the list of coefficients + length: cint; // number of coefficients in the vector + end; + + // vectors can be shared + PSwsFilter = ^TSwsFilter; + TSwsFilter = record + lumH: PSwsVector; + lumV: PSwsVector; + chrH: PSwsVector; + chrV: PSwsVector; + end; + + PSwsContext = ^TSwsContext; + TSwsContext = record + {internal structure} + end; + +(** + * Return a positive value if pix_fmt is a supported input format, 0 + * otherwise. + *) +function sws_isSupportedInput(pix_fmt: TAVPixelFormat): cint; + cdecl; external sw__scale; + +(** + * Return a positive value if pix_fmt is a supported output format, 0 + * otherwise. + *) +function sws_isSupportedOutput(pix_fmt: TAVPixelFormat): cint; + cdecl; external sw__scale; + +(** + * @param[in] pix_fmt the pixel format + * @return a positive value if an endianness conversion for pix_fmt is + * supported, 0 otherwise. + *) +function sws_isSupportedEndiannessConversion(pix_fmt: TAVPixelFormat): cint; + cdecl; external sw__scale; + +(** + * Allocate an empty SwsContext. This must be filled and passed to + * sws_init_context(). For filling see AVOptions, options.c and + * sws_setColorspaceDetails(). + *) +function sws_alloc_context(): PSwsContext; + cdecl; external sw__scale; + +(** + * Initialize the swscaler context sws_context. + * + * @return zero or positive value on success, a negative value on + * error + *) +function sws_init_context(sws_context: PSwsContext; srcFilter: PSwsFilter; dstFilter: PSwsFilter): cint; + cdecl; external sw__scale; + +(** + * Free the swscaler context swsContext. + * If swsContext is NULL, then does nothing. + *) +procedure sws_freeContext(swsContext: PSwsContext); + cdecl; external sw__scale; + +(** + * Allocate and return a SwsContext. You need it to perform + * scaling/conversion operations using sws_scale(). + * + * @param srcW the width of the source image + * @param srcH the height of the source image + * @param srcFormat the source image format + * @param dstW the width of the destination image + * @param dstH the height of the destination image + * @param dstFormat the destination image format + * @param flags specify which algorithm and options to use for rescaling + * @param param extra parameters to tune the used scaler + * For SWS_BICUBIC param[0] and [1] tune the shape of the basis + * function, param[0] tunes f(1) and param[1] f??(1) + * For SWS_GAUSS param[0] tunes the exponent and thus cutoff + * frequency + * For SWS_LANCZOS param[0] tunes the width of the window function + * @return a pointer to an allocated context, or NULL in case of error + * @note this function is to be removed after a saner alternative is + * written + *) +function sws_getContext(srcW: cint; srcH: cint; srcFormat: TAVPixelFormat; + dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; + flags: cint; srcFilter: PSwsFilter; + dstFilter: PSwsFilter; param: {const} PCdouble): PSwsContext; + cdecl; external sw__scale; + +(** + * Scale the image slice in srcSlice and put the resulting scaled + * slice in the image in dst. A slice is a sequence of consecutive + * rows in an image. + * + * Slices have to be provided in sequential order, either in + * top-bottom or bottom-top order. If slices are provided in + * non-sequential order the behavior of the function is undefined. + * + * @param c the scaling context previously created with + * sws_getContext() + * @param srcSlice the array containing the pointers to the planes of + * the source slice + * @param srcStride the array containing the strides for each plane of + * the source image + * @param srcSliceY the position in the source image of the slice to + * process, that is the number (counted starting from + * zero) in the image of the first row of the slice + * @param srcSliceH the height of the source slice, that is the number + * of rows in the slice + * @param dst the array containing the pointers to the planes of + * the destination image + * @param dstStride the array containing the strides for each plane of + * the destination image + * @return the height of the output slice + *) +function sws_scale(c: PSwsContext; {const} srcSlice: PPCuint8Array; + {const} srcStride: PCintArray; srcSliceY: cint; srcSliceH: cint; + {const} dst: PPCuint8Array; {const} dstStride: PCintArray): cint; + cdecl; external sw__scale; + +(** + * @param dstRange flag indicating the while-black range of the output (1=jpeg / 0=mpeg) + * @param srcRange flag indicating the while-black range of the input (1=jpeg / 0=mpeg) + * @param table the yuv2rgb coefficients describing the output yuv space, normally ff_yuv2rgb_coeffs[x] + * @param inv_table the yuv2rgb coefficients describing the input yuv space, normally ff_yuv2rgb_coeffs[x] + * @param brightness 16.16 fixed point brightness correction + * @param contrast 16.16 fixed point contrast correction + * @param saturation 16.16 fixed point saturation correction + * @return -1 if not supported + *) +function sws_setColorspaceDetails(c: PSwsContext; inv_table: PQuadCintArray; + srcRange: cint; table: PQuadCintArray; dstRange: cint; + brightness: cint; contrast: cint; saturation: cint): cint; + cdecl; external sw__scale; + +(** + * @return -1 if not supported + *) +function sws_getColorspaceDetails(c: PSwsContext; var inv_table: PQuadCintArray; + var srcRange: cint; var table: PQuadCintArray; var dstRange: cint; + var brightness: cint; var contrast: cint; var saturation: cint): cint; + cdecl; external sw__scale; + +(** + * Allocate and return an uninitialized vector with length coefficients. + *) +function sws_allocVec(length: cint): PSwsVector; + cdecl; external sw__scale; + +(** + * Return a normalized Gaussian curve used to filter stuff + * quality = 3 is high quality, lower is lower quality. + *) +function sws_getGaussianVec(variance: cdouble; quality: cdouble): PSwsVector; + cdecl; external sw__scale; + +(** + * Scale all the coefficients of a by the scalar value. + *) +procedure sws_scaleVec(a: PSwsVector; scalar: cdouble); + cdecl; external sw__scale; + +(** + * Scale all the coefficients of a so that their sum equals height. + *) +procedure sws_normalizeVec(a: PSwsVector; height: cdouble); + cdecl; external sw__scale; + +{$IFDEF FF_API_SWS_VECTOR} +function sws_getConstVec(c: cdouble; length: cint): PSwsVector; + cdecl; external sw__scale; deprecated; +function sws_getIdentityVec: PSwsVector; + cdecl; external sw__scale; deprecated; +procedure sws_convVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; deprecated; +procedure sws_addVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; deprecated; +procedure sws_subVec(a: PSwsVector; b: PSwsVector); + cdecl; external sw__scale; deprecated; +procedure sws_shiftVec(a: PSwsVector; shift: cint); + cdecl; external sw__scale; deprecated; +function sws_cloneVec(a: PSwsVector): PSwsVector; + cdecl; external sw__scale; deprecated; +procedure sws_printVec2(a: PSwsVector; + log_ctx: PAVClass; // PAVClass is declared in avcodec.pas + log_level: cint); + cdecl; external sw__scale; deprecated; +{$ENDIF} + +procedure sws_freeVec(a: PSwsVector); + cdecl; external sw__scale; + +function sws_getDefaultFilter(lumaGBlur: cfloat; chromaGBlur: cfloat; + lumaSharpen: cfloat; chromaSharpen: cfloat; + chromaHShift: cfloat; chromaVShift: cfloat; + verbose: cint): PSwsFilter; + cdecl; external sw__scale; + +procedure sws_freeFilter(filter: PSwsFilter); + cdecl; external sw__scale; + +(** + * Check if context can be reused, otherwise reallocates a new one. + * + * If context is NULL, just calls sws_getContext() to get a new + * context. Otherwise, checks if the parameters are the ones already + * saved in context. If that is the case, returns the current + * context. Otherwise, frees context and gets a new context with + * the new parameters. + * + * Be warned that srcFilter and dstFilter are not checked, they + * are assumed to remain the same. + *) +function sws_getCachedContext(context: PSwsContext; + srcW: cint; srcH: cint; srcFormat: TAVPixelFormat; + dstW: cint; dstH: cint; dstFormat: TAVPixelFormat; + flags: cint; srcFilter: PSwsFilter; + dstFilter: PSwsFilter; param: PCdouble): PSwsContext; + cdecl; external sw__scale; + +(** + * Convert an 8bit paletted frame into a frame with a color depth of 32-bits. + * + * The output frame will have the same packed format as the palette. + * + * @param src source frame buffer + * @param dst destination frame buffer + * @param num_pixels number of pixels to convert + * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src + *) +procedure sws_convertPalette8ToPacked32({const} src: PPCuint8Array; + dst: PPCuint8Array; + num_pixels: cint; + {const} palette: PPCuint8Array); + cdecl; external sw__scale; + +(** + * Convert an 8bit paletted frame into a frame with a color depth of 24 bits. + * + * With the palette format "ABCD", the destination frame ends up with the format "ABC". + * + * @param src source frame buffer + * @param dst destination frame buffer + * @param num_pixels number of pixels to convert + * @param palette array with [256] entries, which must match color arrangement (RGB or BGR) of src + *) +procedure sws_convertPalette8ToPacked24({const} src: PPCuint8Array; + dst: PPCuint8Array; + num_pixels: cint; + {const} palette: PPCuint8Array); + cdecl; external sw__scale; + +(** + * Get the AVClass for swsContext. It can be used in combination with + * AV_OPT_SEARCH_FAKE_OBJ for examining options. + * + * @see av_opt_find(). + *) +function sws_get_class(): {const} PAVClass; + cdecl; external sw__scale; + +implementation + +end. diff --git a/src/lib/other/DirWatch.pas b/src/lib/other/DirWatch.pas deleted file mode 100644 index 1e00ec5d..00000000 --- a/src/lib/other/DirWatch.pas +++ /dev/null @@ -1,345 +0,0 @@ -unit DirWatch; - -// ----------------------------------------------------------------------------- -// Component Name: TDirectoryWatch . -// Module: DirWatch . -// Description: Implements watching for file changes in a designated . -// directory (or directories). . -// Version: 1.4 . -// Date: 10-MAR-2003 . -// Target: Win32, Delphi 3 - Delphi 7 . -// Author: Angus Johnson, angusj-AT-myrealbox-DOT-com . -// A portion of code has been copied from the Drag & Drop . -// Component Suite which I co-authored with Anders Melander. . -// Copyright: 2003 Angus Johnson . -// . -// Usage: 1. Add a TDirectoryWatch component to your form. . -// 2. Set its Directory property . -// 3. If you wish to watch its subdirectories too then set . -// the WatchSubDir property to true . -// 4. Assign the OnChange event . -// 5. Set Active to true . -// ----------------------------------------------------------------------------- - -interface - -{$IFDEF FPC} - {$MODE Delphi} - {$H+} // use long strings -{$ENDIF} - -uses - Windows, - Messages, - Classes, - {$IFDEF FPC} - WinAllocation, - {$ENDIF} - SysUtils; - -type - TNotifyFilters = set of (nfFilename, nfDirname, nfAttrib, - nfSize, nfLastWrite, nfSecurity); - - TWatchThread = class; //forward declaration - - TDirectoryWatch = class(TComponent) - private - fWindowHandle: THandle; - fWatchThread: TWatchThread; - fWatchSubDirs: boolean; - fDirectory: string; - fActive: boolean; - fNotifyFilters: TNotifyFilters; //see FindFirstChangeNotification in winAPI - fOnChangeEvent: TNotifyEvent; - procedure SetActive(aActive: boolean); - procedure SetDirectory(aDir: string); - procedure SetWatchSubDirs(aWatchSubDirs: boolean); - procedure SetNotifyFilters(aNotifyFilters: TNotifyFilters); - procedure WndProc(var aMsg: TMessage); - public - constructor Create(aOwner: TComponent); override; - destructor Destroy; override; - published - property Directory: string read fDirectory write SetDirectory; - property NotifyFilters: TNotifyFilters - read fNotifyFilters write SetNotifyFilters; - property WatchSubDirs: boolean read fWatchSubDirs write SetWatchSubDirs; - property Active: boolean read fActive write SetActive; - property OnChange: TNotifyEvent read fOnChangeEvent write fOnChangeEvent; - end; - - TWatchThread = class(TThread) - private - fOwnerHdl: Thandle; - fChangeNotify : THandle; //Signals whenever Windows detects a change in . - //the watched directory . - fBreakEvent: THandle; //Signals when either the Directory property . - //changes or when the thread terminates . - fDirectory: string; - fWatchSubDirs: longbool; - fNotifyFilters: dword; - fFinished: boolean; - protected - procedure SetDirectory(const Value: string); - procedure ProcessFilenameChanges; - procedure Execute; override; - public - constructor Create( OwnerHdl: THandle; - const InitialDir: string; WatchSubDirs: boolean; NotifyFilters: dword); - destructor Destroy; override; - procedure Terminate; - property Directory: string write SetDirectory; - end; - -procedure Register; - -implementation - -const - NOTIFYCHANGE_MESSAGE = WM_USER + 1; - -resourcestring - sInvalidDir = 'Invalid Directory: '; - -//---------------------------------------------------------------------------- -// Miscellaneous functions ... -//---------------------------------------------------------------------------- - -procedure Register; -begin - RegisterComponents('Samples', [TDirectoryWatch]); -end; -//---------------------------------------------------------------------------- - -function DirectoryExists(const Name: string): Boolean; -var - Code: Integer; -begin - Code := GetFileAttributes(PChar(Name)); - Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code <> 0); -end; - -//---------------------------------------------------------------------------- -// TDirectoryWatch methods ... -//---------------------------------------------------------------------------- - -constructor TDirectoryWatch.Create(aOwner: TComponent); -begin - inherited Create(aOwner); - //default Notify values - notify if either a file name or a directory name - //changes or if a file is modified ... - fNotifyFilters := [nfFilename, nfDirname, nfLastWrite]; - fDirectory := 'C:\'; - //this non-visual control needs to handle messages, so ... - if not (csDesigning in ComponentState) then - fWindowHandle := AllocateHWnd(WndProc); -end; -//---------------------------------------------------------------------------- - -destructor TDirectoryWatch.Destroy; -begin - Active := false; - if not (csDesigning in ComponentState) then - DeallocateHWnd(fWindowHandle); - inherited Destroy; -end; -//---------------------------------------------------------------------------- - -procedure TDirectoryWatch.WndProc(var aMsg: TMessage); -begin - with aMsg do - if Msg = NOTIFYCHANGE_MESSAGE then - begin - if assigned(OnChange) then OnChange(self); - end else - Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam); -end; -//------------------------------------------------------------------------------ - -procedure TDirectoryWatch.SetNotifyFilters(aNotifyFilters: TNotifyFilters); -begin - if aNotifyFilters = fNotifyFilters then exit; - fNotifyFilters := aNotifyFilters; - if assigned(fWatchThread) then - begin - Active := false; - Active := true; - end; -end; -//------------------------------------------------------------------------------ - -procedure TDirectoryWatch.SetWatchSubDirs(aWatchSubDirs: boolean); -begin - if aWatchSubDirs = fWatchSubDirs then exit; - fWatchSubDirs := aWatchSubDirs; - if assigned(fWatchThread) then - begin - Active := false; - Active := true; - end; -end; -//------------------------------------------------------------------------------ - -procedure TDirectoryWatch.SetDirectory(aDir: string); -begin - if aDir = '' then - begin - Active := false; - fDirectory := ''; - exit; - end; - if (aDir[length(aDir)] <> '\') then aDir := aDir + '\'; - if aDir = fDirectory then exit; - if not (csDesigning in ComponentState) and not DirectoryExists(aDir) then - raise Exception.Create( sInvalidDir + aDir); - fDirectory := aDir; - if assigned(fWatchThread) then - fWatchThread.Directory := fDirectory; -end; -//------------------------------------------------------------------------------ - -procedure TDirectoryWatch.SetActive(aActive: boolean); -var - nf: dword; -begin - if aActive = fActive then exit; - fActive := aActive; - if csDesigning in ComponentState then exit; - if fActive then - begin - if not DirectoryExists(fDirectory) then - begin - fActive := false; - raise Exception.Create(sInvalidDir + fDirectory); - end; - nf := 0; - if nfFilename in fNotifyFilters then - nf := nf or FILE_NOTIFY_CHANGE_FILE_NAME; - if nfDirname in fNotifyFilters then - nf := nf or FILE_NOTIFY_CHANGE_DIR_NAME; - if nfAttrib in fNotifyFilters then - nf := nf or FILE_NOTIFY_CHANGE_ATTRIBUTES; - if nfSize in fNotifyFilters then - nf := nf or FILE_NOTIFY_CHANGE_SIZE; - if nfLastWrite in fNotifyFilters then - nf := nf or FILE_NOTIFY_CHANGE_LAST_WRITE; - if nfSecurity in fNotifyFilters then - nf := nf or FILE_NOTIFY_CHANGE_SECURITY; - fWatchThread := TWatchThread.Create( - fWindowHandle, fDirectory, fWatchSubDirs, nf); - end else - begin - fWatchThread.Terminate; - fWatchThread := nil; - end; -end; - -//---------------------------------------------------------------------------- -// TWatchThread methods ... -//---------------------------------------------------------------------------- - -constructor TWatchThread.Create(OwnerHdl: THandle; - const InitialDir: string; WatchSubDirs: boolean; NotifyFilters: dword); -begin - inherited Create(True); - fOwnerHdl := OwnerHdl; - if WatchSubDirs then - cardinal(fWatchSubDirs) := 1 //workaround a Win9x OS issue - else - fWatchSubDirs := false; - FreeOnTerminate := true; - Priority := tpLowest; - fDirectory := InitialDir; - fNotifyFilters := NotifyFilters; - fBreakEvent := windows.CreateEvent(nil, False, False, nil); - Resume; -end; -//------------------------------------------------------------------------------ - -destructor TWatchThread.Destroy; -begin - CloseHandle(fBreakEvent); - inherited Destroy; -end; -//------------------------------------------------------------------------------ - -procedure TWatchThread.SetDirectory(const Value: string); -begin - if (Value = FDirectory) then exit; - FDirectory := Value; - SetEvent(fBreakEvent); -end; -//------------------------------------------------------------------------------ - -procedure TWatchThread.Terminate; -begin - inherited Terminate; - SetEvent(fBreakEvent); - while not fFinished do sleep(10); //avoids a reported resource leak - //if called while closing the application. -end; -//------------------------------------------------------------------------------ - -procedure TWatchThread.Execute; -begin - //OUTER LOOP - manages Directory property reassignments - while (not Terminated) do - begin - fChangeNotify := FindFirstChangeNotification(pchar(fDirectory), - fWatchSubDirs, fNotifyFilters); - if (fChangeNotify = INVALID_HANDLE_VALUE) then - //Can't monitor the specified directory so we'll just wait for - //a new Directory assignment or the thread terminating ... - WaitForSingleObject(fBreakEvent, INFINITE) - else - try - //Now do the INNER loop... - ProcessFilenameChanges; - finally - FindCloseChangeNotification(fChangeNotify); - end; - end; - fFinished := true; -end; -//------------------------------------------------------------------------------ - -procedure TWatchThread.ProcessFilenameChanges; -var - WaitResult : DWORD; - HandleArray : array[0..1] of THandle; -const - TEN_MSECS = 10; - HUNDRED_MSECS = 100; -begin - HandleArray[0] := fBreakEvent; - HandleArray[1] := fChangeNotify; - //INNER LOOP - exits only when fBreakEvent signaled - while (not Terminated) do - begin - //waits for either fChangeNotify or fBreakEvent ... - WaitResult := WaitForMultipleObjects(2, @HandleArray, False, INFINITE); - if (WaitResult = WAIT_OBJECT_0 + 1) then //fChangeNotify - begin - repeat //ie: if a number of files are changing in a block - //just post the one notification message ... - FindNextChangeNotification(fChangeNotify); - until Terminated or - (WaitForSingleObject(fChangeNotify, TEN_MSECS) <> WAIT_OBJECT_0); - if Terminated then break; - //OK, now notify the main thread (before restarting inner loop)... - PostMessage(fOwnerHdl, NOTIFYCHANGE_MESSAGE, 0, 0); - end else //fBreakEvent ... - begin - //If the Directory property is undergoing multiple rapid reassignments - //wait 'til this stops before restarting monitoring of a new directory ... - while (not Terminated) and - (WaitForSingleObject(fBreakEvent, HUNDRED_MSECS) = WAIT_OBJECT_0) do; - break; //EXIT LOOP HERE - end; - end; -end; -//------------------------------------------------------------------------------ -//------------------------------------------------------------------------------ - -end. \ No newline at end of file diff --git a/src/lib/pcre/pcre.pas b/src/lib/pcre/pcre.pas index ab04a9d0..1ba56e26 100644 --- a/src/lib/pcre/pcre.pas +++ b/src/lib/pcre/pcre.pas @@ -536,7 +536,7 @@ implementation libpcremodulename = 'pcre3.dll'; {$ENDIF MSWINDOWS} {$IFDEF LINUX} - libpcremodulename = 'libpcre.so.0'; + libpcremodulename = 'libpcre.so'; {$ENDIF LINUX} {$IFDEF DARWIN} libpcremodulename = 'libpcre.dylib'; // this is a symlink for example to libpcre.0.0.1.dylib diff --git a/src/lib/requirements.txt b/src/lib/requirements.txt index d3955585..48f1d02d 100644 --- a/src/lib/requirements.txt +++ b/src/lib/requirements.txt @@ -9,7 +9,9 @@ pngImage http://pngdelphi.sourceforge.net/ BASS.pas - http://www.un4seen.com/download.php?bass23 + http://www.un4seen.com/download.php?bass24 +BASS_FX.pas + www.un4seen.com/download.php?z/0/bass_fx24 ffmpeg http://www.iversenit.dk/dev/ffmpeg-headers/ diff --git a/src/lua/UHookableEvent.pas b/src/lua/UHookableEvent.pas index 7193654a..a4f7c9c5 100644 --- a/src/lua/UHookableEvent.pas +++ b/src/lua/UHookableEvent.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UHookableEvent; diff --git a/src/lua/ULuaCore.pas b/src/lua/ULuaCore.pas index cc5d1713..ef70998b 100644 --- a/src/lua/ULuaCore.pas +++ b/src/lua/ULuaCore.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaCore; diff --git a/src/lua/ULuaGl.pas b/src/lua/ULuaGl.pas index 13478a77..deeed5a8 100644 --- a/src/lua/ULuaGl.pas +++ b/src/lua/ULuaGl.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaGl; diff --git a/src/lua/ULuaLog.pas b/src/lua/ULuaLog.pas index 95efaa19..9c4bba15 100644 --- a/src/lua/ULuaLog.pas +++ b/src/lua/ULuaLog.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaLog; diff --git a/src/lua/ULuaParty.pas b/src/lua/ULuaParty.pas index 5ee35513..2e58265d 100644 --- a/src/lua/ULuaParty.pas +++ b/src/lua/ULuaParty.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaParty; diff --git a/src/lua/ULuaScreenSing.pas b/src/lua/ULuaScreenSing.pas index 89397cbd..2e3ad3ab 100644 --- a/src/lua/ULuaScreenSing.pas +++ b/src/lua/ULuaScreenSing.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/branches/experimental/Lua/src/lua/ULuaTexture.pas $ - * $Id: ULuaTexture.pas 1551 2009-01-04 14:08:33Z Hawkear $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaScreenSing; @@ -34,6 +31,7 @@ interface {$I switches.inc} uses + UIni, ULua; { returns a table with following structure: @@ -98,7 +96,7 @@ function ULuaScreenSing_SetSettings(L: Plua_State): Integer; cdecl; function ULuaScreenSing_GetSongLines(L: Plua_State): Integer; cdecl; const - ULuaScreenSing_Lib_f: array [0..11] of lual_reg = ( + ULuaScreenSing_Lib_f: array [0..UIni.IMaxPlayerCount-1] of lual_reg = ( (name:'GetScores';func:ULuaScreenSing_GetScores), (name:'GetRating';func:ULuaScreenSing_GetRating), (name:'GetBPM';func:ULuaScreenSing_GetBPM), @@ -114,7 +112,14 @@ function ULuaScreenSing_GetSongLines(L: Plua_State): Integer; cdecl; ); implementation -uses UScreenSing, UNote, UDisplay, UGraphic, UMusic, ULuaUtils, SysUtils; +uses + UScreenSingController, + UNote, + UDisplay, + UGraphic, + UMusic, + ULuaUtils, + SysUtils; { returns a table with following structure: t[1..playercount] = score of player i } @@ -490,4 +495,4 @@ function ULuaScreenSing_GetSongLines(L: Plua_State): Integer; cdecl; end; end; -end. \ No newline at end of file +end. diff --git a/src/lua/ULuaTextGL.pas b/src/lua/ULuaTextGL.pas index 2e70a2c1..b0ed147b 100644 --- a/src/lua/ULuaTextGL.pas +++ b/src/lua/ULuaTextGL.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaTextGL; diff --git a/src/lua/ULuaTexture.pas b/src/lua/ULuaTexture.pas index 931c0405..2b130adb 100644 --- a/src/lua/ULuaTexture.pas +++ b/src/lua/ULuaTexture.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaTexture; diff --git a/src/lua/ULuaUsdx.pas b/src/lua/ULuaUsdx.pas index 8f8b56bc..d8a6d70b 100644 --- a/src/lua/ULuaUsdx.pas +++ b/src/lua/ULuaUsdx.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaUsdx; diff --git a/src/lua/ULuaUtils.pas b/src/lua/ULuaUtils.pas index 92122152..10852458 100644 --- a/src/lua/ULuaUtils.pas +++ b/src/lua/ULuaUtils.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit ULuaUtils; diff --git a/src/macosx/PseudoThread.pas b/src/macosx/PseudoThread.pas index 2258561a..32c80bfb 100644 --- a/src/macosx/PseudoThread.pas +++ b/src/macosx/PseudoThread.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/macosx/PseudoThread.pas $ - * $Id: PseudoThread.pas 1577 2009-01-26 23:27:06Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit PseudoThread; diff --git a/src/media/UAudioConverter.pas b/src/media/UAudioConverter.pas index bbafa453..9d2d6b03 100644 --- a/src/media/UAudioConverter.pas +++ b/src/media/UAudioConverter.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioConverter.pas $ - * $Id: UAudioConverter.pas 3031 2013-12-15 21:08:54Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioConverter; @@ -43,6 +40,7 @@ interface {$IFDEF UseFFmpegResample} avcodec, avutil, + UMediaCore_FFmpeg, {$ENDIF} UMediaCore_SDL, sdl2, @@ -205,11 +203,15 @@ function TAudioConverter_SDL.Convert(InputBuffer: PByteArray; OutputBuffer: PByt function TAudioConverter_FFmpeg.Init(SrcFormatInfo: TAudioFormatInfo; DstFormatInfo: TAudioFormatInfo): boolean; +var + SrcFormat: TAVSampleFormat; + DstFormat: TAVSampleFormat; begin inherited Init(SrcFormatInfo, DstFormatInfo); Result := false; + {$IF LIBAVCODEC_VERSION < 52015000} // 52.15.0 // Note: ffmpeg does not support resampling for more than 2 input channels if srcFormatInfo.Format <> asfS16 then @@ -229,15 +231,30 @@ function TAudioConverter_FFmpeg.Init(SrcFormatInfo: TAudioFormatInfo; Exit; end; - {$IF LIBAVCODEC_VERSION < 52122000} // 52.122.0 ResampleContext := audio_resample_init( dstFormatInfo.Channels, srcFormatInfo.Channels, Round(dstFormatInfo.SampleRate), Round(srcFormatInfo.SampleRate)); {$ELSE} + if not TMediaCore_FFmpeg.ConvertAudioFormatToFFmpeg(srcFormatInfo.Format, SrcFormat) then + begin + Log.LogError('Unsupported format', 'TAudioConverter_FFmpeg.Init'); + Log.LogError('srcFormatInfo.Format: ' + intToStr(integer(srcFormatInfo.Format)), + 'TAudioConverter_FFmpeg.Init'); + Exit; + end; + + if not TMediaCore_FFmpeg.ConvertAudioFormatToFFmpeg(DstFormatInfo.Format, DstFormat) then + begin + Log.LogError('Unsupported format', 'TAudioConverter_FFmpeg.Init'); + Log.LogError('dstFormatInfo.Format: ' + intToStr(integer(dstFormatInfo.Format)), + 'TAudioConverter_FFmpeg.Init'); + Exit; + end; + ResampleContext := av_audio_resample_init( dstFormatInfo.Channels, srcFormatInfo.Channels, Round(dstFormatInfo.SampleRate), Round(srcFormatInfo.SampleRate), - AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16, + DstFormat, SrcFormat, 16, 10, 0, 0.8); {$IFEND} if ResampleContext = nil then diff --git a/src/media/UAudioCore_Bass.pas b/src/media/UAudioCore_Bass.pas index 261034d8..3220fb54 100644 --- a/src/media/UAudioCore_Bass.pas +++ b/src/media/UAudioCore_Bass.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioCore_Bass.pas $ - * $Id: UAudioCore_Bass.pas 2475 2010-06-10 18:27:53Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioCore_Bass; @@ -37,7 +34,8 @@ interface Classes, SysUtils, UMusic, - bass; // (Note: DWORD is defined here) + BASS, // (Note: DWORD is defined here) + BASS_FX; type TAudioCore_Bass = class @@ -63,6 +61,7 @@ implementation // BASS 2.4.2 is not ABI compatible with older versions // as (BASS_RECORDINFO.driver was removed) BASS_MIN_REQUIRED_VERSION = $02040201; + BASS_FX_MIN_REQUIRED_VERSION = $02040201; var Instance: TAudioCore_Bass; @@ -87,7 +86,7 @@ function TAudioCore_Bass.DecodeVersion(VersionHex: integer): string; Version[1] := (VersionHex shr 16) and $FF; Version[2] := (VersionHex shr 8) and $FF; Version[3] := (VersionHex shr 0) and $FF; - Result := Format('%x.%x.%x.%x', [Version[0], Version[1], Version[2], Version[3]]); + Result := Format('%d.%d.%d.%d', [Version[0], Version[1], Version[2], Version[3]]); end; function TAudioCore_Bass.CheckVersion(): boolean; @@ -98,6 +97,13 @@ function TAudioCore_Bass.CheckVersion(): boolean; Log.LogWarn('Could not init BASS audio library. ''bass.dll'' version is ' + DecodeVersion(BASS_GetVersion()) + ' but ' + DecodeVersion(BASS_MIN_REQUIRED_VERSION) + ' or higher is required.', 'TAudioCore_Bass.CheckVersion'); end; + + Result := BASS_FX_GetVersion() >= BASS_FX_MIN_REQUIRED_VERSION; + if (not Result) then + begin + Log.LogWarn('Could not init BASS_FX audio library. ''bass_fx.dll'' version is ' + DecodeVersion(BASS_FX_GetVersion()) + ' but ' + DecodeVersion(BASS_FX_MIN_REQUIRED_VERSION) + ' or higher is required.', + 'TAudioCore_Bass.CheckVersion'); + end; end; function TAudioCore_Bass.ErrorGetString(): string; diff --git a/src/media/UAudioCore_Portaudio.pas b/src/media/UAudioCore_Portaudio.pas index a71fdf9e..b9ad68bc 100644 --- a/src/media/UAudioCore_Portaudio.pas +++ b/src/media/UAudioCore_Portaudio.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioCore_Portaudio.pas $ - * $Id: UAudioCore_Portaudio.pas 2475 2010-06-10 18:27:53Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioCore_Portaudio; @@ -314,8 +311,8 @@ function TAudioCore_Portaudio.TestDevice(inParams, outParams: PPaStreamParameter end; cbWorks := false; - // check if the callback was called (poll for max. 200ms) - for cbPolls := 1 to 20 do + // check if the callback was called (poll for max. 1500ms) + for cbPolls := 1 to 150 do begin // if the test-callback was called it should be aborted now if (Pa_IsStreamActive(stream) = 0) then diff --git a/src/media/UAudioDecoder_Bass.pas b/src/media/UAudioDecoder_Bass.pas index cddcb98e..160656ca 100644 --- a/src/media/UAudioDecoder_Bass.pas +++ b/src/media/UAudioDecoder_Bass.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioDecoder_Bass.pas $ - * $Id: UAudioDecoder_Bass.pas 2475 2010-06-10 18:27:53Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioDecoder_Bass; diff --git a/src/media/UAudioDecoder_FFmpeg.pas b/src/media/UAudioDecoder_FFmpeg.pas index 98e09e71..62bb5ffa 100644 --- a/src/media/UAudioDecoder_FFmpeg.pas +++ b/src/media/UAudioDecoder_FFmpeg.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioDecoder_FFmpeg.pas $ - * $Id: UAudioDecoder_FFmpeg.pas 3107 2014-11-23 00:02:56Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioDecoder_FFmpeg; @@ -66,6 +63,9 @@ implementation avio, ctypes, rational, +{$IFDEF UseSWResample} + swresample, +{$ENDIF} UMusic, UIni, UMain, @@ -75,6 +75,17 @@ implementation UConfig, UPath; +{$IFDEF UseSWResample} + {$IF LIBAVCODEC_VERSION >= 54041100} + {$DEFINE UseFrameDecoderAPI} + {$DEFINE ConvertPlanar} + {$ENDIF} +{$ELSE} + {$IF LIBAVCODEC_VERSION >= 57000000} + {$DEFINE UseFrameDecoderAPI} + {$ENDIF} +{$ENDIF} + const MAX_AUDIOQ_SIZE = (5 * 16 * 1024); @@ -116,6 +127,12 @@ TFFmpegDecodeStream = class(TAudioDecodeStream) fPacketQueue: TPacketQueue; fFormatInfo: TAudioFormatInfo; + {$IFDEF UseFrameDecoderAPI} + fBytesPerSample: integer; + {$IFEND} + {$IFDEF ConvertPlanar} + fSwrContext: PSwrContext; + {$IFEND} // FFmpeg specific data fFormatCtx: PAVFormatContext; @@ -142,6 +159,9 @@ TFFmpegDecodeStream = class(TAudioDecodeStream) fAudioBufferPos: integer; fAudioBufferSize: integer; fAudioBuffer: PByteArray; + {$IFDEF UseFrameDecoderAPI} + fAudioBufferFrame: PAVFrame; + {$IFEND} fFilename: IPath; @@ -158,7 +178,7 @@ TFFmpegDecodeStream = class(TAudioDecodeStream) procedure PauseParser(); procedure ResumeParser(); - function DecodeFrame(Buffer: PByteArray; BufferSize: integer): integer; + function DecodeFrame(): integer; procedure FlushCodecBuffers(); procedure PauseDecoder(); procedure ResumeDecoder(); @@ -211,6 +231,13 @@ constructor TFFmpegDecodeStream.Create(); fDecoderUnlockedCond := SDL_CreateCond(); fDecoderResumeCond := SDL_CreateCond(); + {$IFDEF UseFrameDecoderAPI} + {$IF LIBAVUTIL_VERSION >= 52019101} + fAudioBufferFrame := av_frame_alloc(); + {$ELSE} + fAudioBufferFrame := avcodec_alloc_frame(); + {$IFEND} + {$ELSE} // according to the documentation of avcodec_decode_audio(2), sample-data // should be aligned on a 16 byte boundary. Otherwise internal calls // (e.g. to SSE or Altivec operations) might fail or lack performance on some @@ -227,6 +254,7 @@ constructor TFFmpegDecodeStream.Create(); // was not applicable as Delphi in contrast to FPC provides at most 8 byte // alignment ({$ALIGN 16} is not supported) by this directive. fAudioBuffer := GetAlignedMem(AUDIO_BUFFER_SIZE, 16); + {$IFEND} Reset(); end; @@ -262,7 +290,6 @@ destructor TFFmpegDecodeStream.Destroy(); begin Close(); - SDL_UnlockMutex(fStateLock); SDL_DestroyMutex(fStateLock); fStateLock:=nil; SDL_DestroyCond(fParserUnlockedCond); @@ -272,7 +299,15 @@ destructor TFFmpegDecodeStream.Destroy(); SDL_DestroyCond(fDecoderUnlockedCond); SDL_DestroyCond(fDecoderResumeCond); + {$IFDEF UseFrameDecoderAPI} + {$IF LIBAVUTIL_VERSION >= 52019101} + av_frame_free(@fAudioBufferFrame); + {$ELSE} + avcodec_free_frame(@fAudioBufferFrame); + {$IFEND} + {$ELSE} FreeAlignedMem(fAudioBuffer); + {$IFEND} inherited; end; @@ -280,6 +315,7 @@ destructor TFFmpegDecodeStream.Destroy(); function TFFmpegDecodeStream.Open(const Filename: IPath): boolean; var SampleFormat: TAudioSampleFormat; + PackedSampleFormat: TAVSampleFormat; TestFrame: TAVPacket; AVResult: integer; begin @@ -357,7 +393,9 @@ function TFFmpegDecodeStream.Open(const Filename: IPath): boolean; // TODO: should we use this or not? Should we allow 5.1 channel audio? - {$IF LIBAVCODEC_VERSION >= 51042000} + {$IF LIBAVCODEC_VERSION >= 56042000} + fCodecCtx^.request_channel_layout := ($20000000 or $40000000); //avcodec.c AV_CH_LAYOUT_STEREO_DOWNMIX; + {$ELSEIF LIBAVCODEC_VERSION >= 51042000} if (fCodecCtx^.channels > 0) then fCodecCtx^.request_channels := Min(2, fCodecCtx^.channels) else @@ -412,8 +450,35 @@ function TFFmpegDecodeStream.Open(const Filename: IPath): boolean; end; // now initialize the audio-format + {$IFDEF ConvertPlanar} + PackedSampleFormat := av_get_packed_sample_fmt(fCodecCtx^.sample_fmt); + if (PackedSampleFormat <> fCodecCtx^.sample_fmt) then + begin + // There is no point in leaving PackedSampleFormat as is. + // av_audio_resample_init as used by TAudioConverter_FFmpeg will internally + // convert to AV_SAMPLE_FMT_S16 anyway and most architectures have assembly + // optimized conversion routines from AV_SAMPLE_FMT_FLTP to AV_SAMPLE_FMT_S16. + PackedSampleFormat := AV_SAMPLE_FMT_S16; + fSwrContext := swr_alloc_set_opts(nil, fCodecCtx^.channel_layout, PackedSampleFormat, fCodecCtx^.sample_rate, + fCodecCtx^.channel_layout, fCodecCtx^.sample_fmt, fCodecCtx^.sample_rate, 0, nil); + if (fSwrContext = nil) then + Log.LogStatus('Error: Failed to create SwrContext', 'TFFmpegDecodeStream.Open') + else + begin + av_opt_set_int(fSwrContext, 'ich', fCodecCtx^.channels, 0); + av_opt_set_int(fSwrContext, 'och', fCodecCtx^.channels, 0); + if (swr_init(fSwrContext) < 0) then + begin + swr_free(@fSwrContext); + Log.LogStatus('Error: Failed to initialize SwrContext', 'TFFmpegDecodeStream.Open'); + end; + end; + end; + {$ELSE} + PackedSampleFormat := fCodecCtx^.sample_fmt; + {$IFEND} - if (not FFmpegCore.ConvertFFmpegToAudioFormat(fCodecCtx^.sample_fmt, SampleFormat)) then + if (not FFmpegCore.ConvertFFmpegToAudioFormat(PackedSampleFormat, SampleFormat)) then begin // try standard format SampleFormat := asfS16; @@ -425,6 +490,9 @@ function TFFmpegDecodeStream.Open(const Filename: IPath): boolean; fCodecCtx^.sample_rate, SampleFormat ); + {$IFDEF UseFrameDecoderAPI} + fBytesPerSample := av_get_bytes_per_sample(PackedSampleFormat) * fCodecCtx^.channels; + {$IFEND} fPacketQueue := TPacketQueue.Create(); @@ -458,6 +526,12 @@ procedure TFFmpegDecodeStream.Close(); fParseThread := nil; end; + {$IFDEF ConvertPlanar} + // Free the swresample context + if (fSwrContext <> nil) then + swr_free(@fSwrContext); + {$IFEND} + // Close the codec if (fCodecCtx <> nil) then begin @@ -546,9 +620,7 @@ function TFFmpegDecodeStream.IsSeeking(): boolean; function TFFmpegDecodeStream.IsQuit(): boolean; begin - SDL_LockMutex(fStateLock); Result := fQuitRequest; - SDL_UnlockMutex(fStateLock); end; function TFFmpegDecodeStream.GetPosition(): real; @@ -697,11 +769,18 @@ procedure TFFmpegDecodeStream.Parse(); // reuse thread as long as the stream is not terminated while (ParseLoop()) do begin + if(fQuitRequest = false) then + begin // wait for reuse or destruction of stream SDL_LockMutex(fStateLock); while (not (fSeekRequest or fQuitRequest)) do SDL_CondWait(fParserIdleCond, fStateLock); SDL_UnlockMutex(fStateLock); + end + else + begin + Break; + end; end; end; @@ -738,15 +817,17 @@ function TFFmpegDecodeStream.ParseLoop(): boolean; // instead and give priority to the threads requesting the parser to pause. procedure LockParser(); begin + if fQuitRequest then Exit; SDL_LockMutex(fStateLock); while (fParserPauseRequestCount > 0) do SDL_CondWait(fParserResumeCond, fStateLock); fParserLocked := true; - SDL_UnlockMutex(fStateLock); + SDL_UnlockMutex(fStateLock); end; procedure UnlockParser(); begin + if fQuitRequest then Exit; SDL_LockMutex(fStateLock); fParserLocked := false; SDL_CondBroadcast(fParserUnlockedCond); @@ -968,14 +1049,16 @@ procedure TFFmpegDecodeStream.FlushCodecBuffers(); end; end; -function TFFmpegDecodeStream.DecodeFrame(Buffer: PByteArray; BufferSize: integer): integer; +function TFFmpegDecodeStream.DecodeFrame(): integer; var PaketDecodedSize: integer; // size of packet data used for decoding DataSize: integer; // size of output data decoded by FFmpeg BlockQueue: boolean; SilenceDuration: double; - {$IF LIBAVCODEC_VERSION >= 57000000} - AVFrame: PAVFrame; + {$IF (LIBAVCODEC_VERSION >= 52122000) and (LIBAVCODEC_VERSION < 57037100)} + AVPacket: TAVPacket; + {$IFEND} + {$IFDEF UseFrameDecoderAPI} got_frame_ptr: integer; {$IFEND} {$IFDEF DebugFFmpegDecode} @@ -989,12 +1072,16 @@ function TFFmpegDecodeStream.DecodeFrame(Buffer: PByteArray; BufferSize: integer while(true) do begin + {$IF (LIBAVCODEC_VERSION >= 52122000) and (LIBAVCODEC_VERSION < 57037100)} + AVPacket := fAudioPaket; + {$IFEND} + // for titles with start_time > 0 we have to generate silence // until we reach the pts of the first data packet. if (fAudioPaketSilence > 0) then begin - DataSize := Min(fAudioPaketSilence, BufferSize); - FillChar(Buffer[0], DataSize, 0); + DataSize := Min(fAudioPaketSilence, AUDIO_BUFFER_SIZE); + FillChar(fAudioBuffer[0], DataSize, 0); Dec(fAudioPaketSilence, DataSize); fAudioStreamPos := fAudioStreamPos + DataSize / fFormatInfo.BytesPerSec; Result := DataSize; @@ -1004,23 +1091,42 @@ function TFFmpegDecodeStream.DecodeFrame(Buffer: PByteArray; BufferSize: integer // read packet data while (fAudioPaketSize > 0) do begin - DataSize := BufferSize; - - {$IF LIBAVCODEC_VERSION >= 57000000} - AVFrame := av_frame_alloc(); - PaketDecodedSize := avcodec_decode_audio4(fCodecCtx, AVFrame, - @got_frame_ptr, @fAudioPaket); - DataSize := AVFrame.nb_samples; - Buffer := PByteArray(AVFrame.data[0]); - {$ELSEIF LIBAVCODEC_VERSION >= 52122000} // 52.122.0 - PaketDecodedSize := avcodec_decode_audio3(fCodecCtx, PSmallint(Buffer), - DataSize, @fAudioPaket); - {$ELSEIF LIBAVCODEC_VERSION >= 51030000} // 51.30.0 - PaketDecodedSize := avcodec_decode_audio2(fCodecCtx, PSmallint(Buffer), - DataSize, fAudioPaketData, fAudioPaketSize); + DataSize := AUDIO_BUFFER_SIZE; + {$IF (LIBAVCODEC_VERSION >= 52122000) and (LIBAVCODEC_VERSION < 57037100)} + AVPacket.data := fAudioPaketData; + AVPacket.size := fAudioPaketSize; + {$IFEND} + + {$IFDEF UseFrameDecoderAPI} + {$IF LIBAVCODEC_VERSION >= 57037100} + got_frame_ptr := avcodec_receive_frame(fCodecCtx, fAudioBufferFrame); + if (got_frame_ptr = AVERROR(EAGAIN)) then + PaketDecodedSize := fAudioPaketSize + else + PaketDecodedSize := 0; + got_frame_ptr := ord(got_frame_ptr = 0); + {$ELSE} + PaketDecodedSize := avcodec_decode_audio4(fCodecCtx, fAudioBufferFrame, + @got_frame_ptr, @AVPacket); + {$IFEND} + if(got_frame_ptr <> 0) then + begin + DataSize := fAudioBufferFrame.nb_samples * fBytesPerSample; + fAudioBuffer := PByteArray(fAudioBufferFrame.data[0]); + end + else + DataSize := 0; {$ELSE} - PaketDecodedSize := avcodec_decode_audio(fCodecCtx, PSmallint(Buffer), + {$IF LIBAVCODEC_VERSION >= 52122000} // 52.122.0 + PaketDecodedSize := avcodec_decode_audio3(fCodecCtx, PSmallint(fAudioBuffer), + DataSize, @AVPacket); + {$ELSEIF LIBAVCODEC_VERSION >= 51030000} // 51.30.0 + PaketDecodedSize := avcodec_decode_audio2(fCodecCtx, PSmallint(fAudioBuffer), DataSize, fAudioPaketData, fAudioPaketSize); + {$ELSE} + PaketDecodedSize := avcodec_decode_audio(fCodecCtx, PSmallint(fAudioBuffer), + DataSize, fAudioPaketData, fAudioPaketSize); + {$IFEND} {$IFEND} if(PaketDecodedSize < 0) then @@ -1108,6 +1214,10 @@ function TFFmpegDecodeStream.DecodeFrame(Buffer: PByteArray; BufferSize: integer fAudioPaketData := fAudioPaket.data; fAudioPaketSize := fAudioPaket.size; + {$IF LIBAVCODEC_VERSION >= 57037100} + avcodec_send_packet(fCodecCtx, @fAudioPaket); + {$IFEND} + // if available, update the stream position to the presentation time of this package if(fAudioPaket.pts <> AV_NOPTS_VALUE) then begin @@ -1129,6 +1239,7 @@ function TFFmpegDecodeStream.ReadData(Buffer: PByteArray; BufferSize: integer): CopyByteCount: integer; // number of bytes to copy RemainByteCount: integer; // number of bytes left (remain) to read BufferPos: integer; + BufferPtr: PByte; // prioritize pause requests procedure LockDecoder(); @@ -1154,22 +1265,44 @@ function TFFmpegDecodeStream.ReadData(Buffer: PByteArray; BufferSize: integer): // set number of bytes to copy to the output buffer BufferPos := 0; + {$IFDEF ConvertPlanar} + if (fSwrContext <> nil) then + begin + RemainByteCount := BufferSize mod fBytesPerSample; + BufferSize := BufferSize - RemainByteCount; + end; + {$IFEND} + LockDecoder(); try // leave if end-of-file is reached if (EOF) then Exit; + BufferPtr := nil; + {$IFDEF ConvertPlanar} + if ((fSwrContext <> nil) and (fAudioBufferSize > 0)) then + begin + BufferPtr := @Buffer[0]; + BufferPos := swr_convert(fSwrContext, BufferPtr, BufferSize div fBytesPerSample, + fAudioBufferFrame.extended_data^, 0); + if (BufferPos < 0) then // might happen if out of memory + Exit; + BufferPos := BufferPos * fBytesPerSample; + Inc(fAudioBufferPos, BufferPos); + end; + {$IFEND} + // copy data to output buffer while (BufferPos < BufferSize) do begin // check if we need more data - if (fAudioBufferPos >= fAudioBufferSize) then + if ((fAudioBufferPos >= fAudioBufferSize) or (BufferPtr <> nil)) then begin fAudioBufferPos := 0; // we have already sent all our data; get more - fAudioBufferSize := DecodeFrame(fAudioBuffer, AUDIO_BUFFER_SIZE); + fAudioBufferSize := DecodeFrame(); // check for errors or EOF if(fAudioBufferSize < 0) then @@ -1179,10 +1312,27 @@ function TFFmpegDecodeStream.ReadData(Buffer: PByteArray; BufferSize: integer): end; end; + RemainByteCount := BufferSize - BufferPos; + + {$IFDEF ConvertPlanar} + if (fSwrContext <> nil) then + begin + BufferPtr := @Buffer[BufferPos]; + CopyByteCount := swr_convert(fSwrContext, BufferPtr, RemainByteCount div fBytesPerSample, + fAudioBufferFrame.extended_data^, fAudioBufferFrame.nb_samples); + if (CopyByteCount < 0) then + Exit; + CopyByteCount := CopyByteCount * fBytesPerSample; + + Inc(BufferPos, CopyByteCount); + Inc(fAudioBufferPos, CopyByteCount); + continue; + end; + {$IFEND} + // calc number of new bytes in the decode-buffer CopyByteCount := fAudioBufferSize - fAudioBufferPos; // resize copy-count if more bytes available than needed (remaining bytes are used the next time) - RemainByteCount := BufferSize - BufferPos; if (CopyByteCount > RemainByteCount) then CopyByteCount := RemainByteCount; diff --git a/src/media/UAudioInput_Bass.pas b/src/media/UAudioInput_Bass.pas index c4348910..e82517b5 100644 --- a/src/media/UAudioInput_Bass.pas +++ b/src/media/UAudioInput_Bass.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioInput_Bass.pas $ - * $Id: UAudioInput_Bass.pas 2475 2010-06-10 18:27:53Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioInput_Bass; @@ -119,7 +116,7 @@ function TBassInputDevice.GetInputSource(): integer; for i := 0 to SourceCnt-1 do begin // get input settings - flags := BASS_RecordGetInput(i, PSingle(nil)^); + flags := BASS_RecordGetInput(i, nil); if (flags = DWORD(-1)) then begin Log.LogError('BASS_RecordGetInput: ' + BassCore.ErrorGetString(), 'TBassInputDevice.GetInputSource'); @@ -166,7 +163,7 @@ function TBassInputDevice.SetInputSource(SourceIndex: integer): boolean; if (i = SourceIndex) then continue; // get input settings - flags := BASS_RecordGetInput(i, PSingle(nil)^); + flags := BASS_RecordGetInput(i, nil); if (flags = DWORD(-1)) then begin Log.LogError('BASS_RecordGetInput: ' + BassCore.ErrorGetString(), 'TBassInputDevice.GetInputSource'); @@ -310,7 +307,7 @@ function TBassInputDevice.GetVolume(): single; Exit; end; - if (BASS_RecordGetInput(SourceIndex, lVolume) = DWORD(-1)) then + if (BASS_RecordGetInput(SourceIndex, PSingle(lVolume)) = DWORD(-1)) then begin Log.LogError('BASS_RecordGetInput: ' + BassCore.ErrorGetString() , 'TBassInputDevice.GetVolume'); Exit; @@ -394,7 +391,7 @@ function TAudioInput_Bass.EnumDevices(): boolean; // BASS device names seem to be encoded with local encoding // TODO: works for windows, check Linux + Mac OS X - Descr := DecodeStringUTF8(DeviceInfo.name, encLocale); + Descr := DecodeStringUTF8(DeviceInfo.name, encAuto); BassDevice.Name := UnifyDeviceName(Descr, DeviceIndex); @@ -465,10 +462,12 @@ function TAudioInput_Bass.EnumDevices(): boolean; SetLength(BassDevice.Source, Length(BassDevice.Source)+1); // BASS source names seem to be encoded with local encoding // TODO: works for windows, check Linux + Mac OS X - BassDevice.Source[SourceIndex].Name := DecodeStringUTF8(SourceName, encLocale); + BassDevice.Source[SourceIndex].Name := DecodeStringUTF8(SourceName, encAuto); // get input-source info - Flags := BASS_RecordGetInput(SourceIndex, PSingle(nil)^); + {$push} {$R-} + Flags := BASS_RecordGetInput(SourceIndex, nil); + {$POP} if (Flags <> -1) then begin // chech if current source is a mic (and none was set before) diff --git a/src/media/UAudioInput_Portaudio.pas b/src/media/UAudioInput_Portaudio.pas index c05cf1bf..82a4507f 100644 --- a/src/media/UAudioInput_Portaudio.pas +++ b/src/media/UAudioInput_Portaudio.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioInput_Portaudio.pas $ - * $Id: UAudioInput_Portaudio.pas 2665 2010-10-14 08:00:23Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioInput_Portaudio; diff --git a/src/media/UAudioPlaybackBase.pas b/src/media/UAudioPlaybackBase.pas index 8f57a375..1d7102a1 100644 --- a/src/media/UAudioPlaybackBase.pas +++ b/src/media/UAudioPlaybackBase.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioPlaybackBase.pas $ - * $Id: UAudioPlaybackBase.pas 2945 2013-02-22 22:33:33Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioPlaybackBase; @@ -41,10 +38,16 @@ interface SysUtils; type + FReplayGain = class of TReplayGain; + TAudioPlaybackBase = class(TInterfacedObject, IAudioPlayback) protected + OutputDeviceList: TAudioOutputDeviceList; MusicStream: TAudioPlaybackStream; + + IReplayGain: FReplayGain; + function CreatePlaybackStream(): TAudioPlaybackStream; virtual; abstract; procedure ClearOutputDeviceList(); function GetLatency(): double; virtual; abstract; @@ -54,6 +57,7 @@ TAudioPlaybackBase = class(TInterfacedObject, IAudioPlayback) function OpenStreamBuffer(Buffer: TStream; Format: TAudioFormatInfo): TAudioPlaybackStream; function OpenDecodeStream(const Filename: IPath): TAudioDecodeStream; public + constructor Create(); virtual; function GetName: string; virtual; abstract; function Open(const Filename: IPath): boolean; // true if succeed @@ -119,11 +123,25 @@ TAudioBufferSourceStream = class(TAudioSourceStream) procedure Close(); override; end; +procedure ToggleVoiceRemoval(); + implementation uses ULog; +var doVoiceRemoval: boolean; + +constructor TAudioPlaybackBase.Create(); +begin + inherited; +end; + +procedure ToggleVoiceRemoval(); +begin + doVoiceRemoval:=not(doVoiceRemoval); +end; + { TAudioPlaybackBase } function TAudioPlaybackBase.FinalizePlayback: boolean; @@ -145,7 +163,8 @@ function TAudioPlaybackBase.Open(const Filename: IPath): boolean; Exit; end; - //MusicStream.AddSoundEffect(TVoiceRemoval.Create()); + if doVoiceRemoval then MusicStream.AddSoundEffect(TVoiceRemoval.Create()); + if assigned(IReplayGain) and IReplayGain.CanEnable then MusicStream.AddSoundFX(IReplayGain.Create()); Result := true; end; diff --git a/src/media/UAudioPlayback_Bass.pas b/src/media/UAudioPlayback_Bass.pas index 7d765d5b..6c11642e 100644 --- a/src/media/UAudioPlayback_Bass.pas +++ b/src/media/UAudioPlayback_Bass.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioPlayback_Bass.pas $ - * $Id: UAudioPlayback_Bass.pas 3141 2015-10-11 22:15:05Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioPlayback_Bass; @@ -45,11 +42,13 @@ implementation UAudioCore_Bass, ULog, sdl2, - bass, + BASS, + BASS_FX, SysUtils; type PHDSP = ^HDSP; + PHFX = ^HFX; type TBassPlaybackStream = class(TAudioPlaybackStream) @@ -86,6 +85,9 @@ TBassPlaybackStream = class(TAudioPlaybackStream) procedure AddSoundEffect(Effect: TSoundEffect); override; procedure RemoveSoundEffect(Effect: TSoundEffect); override; + procedure AddSoundFX(FX: TSoundFX); override; + procedure RemoveSoundFX(FX: TSoundFX); override; + procedure GetFFTData(var Data: TFFTData); override; function GetPCMData(var Data: TPCMData): Cardinal; override; @@ -121,6 +123,8 @@ TAudioPlayback_Bass = class(TAudioPlaybackBase) function GetLatency(): double; override; function CreatePlaybackStream(): TAudioPlaybackStream; override; public + constructor Create(); override; + function GetName: String; override; function InitializePlayback(): boolean; override; function FinalizePlayback: boolean; override; @@ -133,9 +137,26 @@ TBassOutputDevice = class(TAudioOutputDevice) BassDeviceID: DWORD; // DeviceID used by BASS end; + TReplayGain_Bass = class(TReplayGain) + private + procedure Init(); override; + public + class function CanEnable(): boolean; override; static; + + function GetType: DWORD; override; + function GetPriority: LongInt; override; + function GetName: string; override; + end; + var BassCore: TAudioCore_Bass; +constructor TAudioPlayback_Bass.Create(); +begin + inherited; + + IReplayGain := TReplayGain_Bass; +end; { TBassPlaybackStream } @@ -532,6 +553,49 @@ procedure TBassPlaybackStream.RemoveSoundEffect(Effect: TSoundEffect); Effect.EngineData := nil; end; +procedure TBassPlaybackStream.AddSoundFX(FX: TSoundFX); +var + FXHandle: HFX; +begin + if assigned(FX.engineData) then + begin + Log.LogError(Concat(FX.GetName, ': ', 'TSoundFX.engineData already set'), 'TBassPlaybackStream.AddSoundFX'); + Exit; + end; + + FXHandle := BASS_ChannelSetFX(Handle, FX.GetType(), FX.GetPriority()); + if (FXHandle = 0) then + begin + Log.LogError(Concat(FX.GetName, ': ', BassCore.ErrorGetString()), 'TBassPlaybackStream.AddSoundFX'); + Exit; + end; + + GetMem(FX.EngineData, SizeOf(HFX)); + PHFX(FX.EngineData)^ := FXHandle; + + FX.Init(); +end; + +procedure TBassPlaybackStream.RemoveSoundFX(FX: TSoundFX); +begin + if not assigned(FX.EngineData) then + begin + Log.LogError(Concat(FX.GetName, ': ', 'TSoundFX.engineData invalid'), 'TBassPlaybackStream.RemoveSoundFX'); + Exit; + end; + + if not BASS_ChannelRemoveFX(Handle, PHFX(FX.EngineData)^) then + begin + Log.LogError(Concat(FX.GetName, ': ', BassCore.ErrorGetString()), 'TBassPlaybackStream.RemoveSoundFX'); + Exit; + end; + + FX.Removed(); + + FreeMem(FX.EngineData); + FX.EngineData := nil; +end; + procedure TBassPlaybackStream.GetFFTData(var Data: TFFTData); begin // get FFT channel data (Mono, FFT512 -> 256 values) @@ -716,6 +780,11 @@ function TAudioPlayback_Bass.InitializePlayback(): boolean; //BASS_SetConfig(BASS_CONFIG_UPDATEPERIOD, 10); //BASS_SetConfig(BASS_CONFIG_BUFFER, 100); + // Using floating-point DSP config converts the passed data to 32bit sample data + // some used effects doesn't expect this kind of data, therefore they are bugging + // (see Voice removal; UMusic TVoiceRemoval.Callback) + //BASS_SetConfig(BASS_CONFIG_FLOATDSP, 1); // enable floating-point DSP + Result := true; end; @@ -764,6 +833,69 @@ function TAudioPlayback_Bass.GetLatency(): double; Result := 0; end; +{ TReplayGain } + +class function TReplayGain_Bass.CanEnable(): boolean; +begin + Result := (Ini.MusicAutoGain > 0); +end; + +procedure TReplayGain_Bass.Init(); + var + FxGain: BASS_BFX_DAMP; + I: integer; +begin + + if Ini.MusicAutoGain < 0 then Exit; + I := IMusicAutoGainVals[Ini.MusicAutoGain]; + case I of + 0: // soft preset + begin + FxGain.fTarget := 0.92; // target volume level [0<......1] linear + FxGain.fQuiet := 0.02; // quiet volume level [0.......1] linear + FxGain.fRate := 0.01; // amp adjustment rate [0.......1] linear + FxGain.fGain := 1.0; // amplification level [0...1...n] linear + FxGain.fDelay := 0.5; // delay in seconds before increasing level + FxGain.lChannel := BASS_BFX_CHANALL; + end; + 1: // medium preset + begin + FxGain.fTarget := 0.94; // target volume level [0<......1] linear + FxGain.fQuiet := 0.03; // quiet volume level [0.......1] linear + FxGain.fRate := 0.01; // amp adjustment rate [0.......1] linear + FxGain.fGain := 1.0; // amplification level [0...1...n] linear + FxGain.fDelay := 0.35; // delay in seconds before increasing level + FxGain.lChannel := BASS_BFX_CHANALL; + end; + 2: // hard preset + begin + FxGain.fTarget := 0.98; // target volume level [0<......1] linear + FxGain.fQuiet := 0.04; // quiet volume level [0.......1] linear + FxGain.fRate := 0.02; // amp adjustment rate [0.......1] linear + FxGain.fGain := 2.0; // amplification level [0...1...n] linear + FxGain.fDelay := 0.2; // delay in seconds before increasing level + FxGain.lChannel := BASS_BFX_CHANALL; + end; + end; + + BASS_FXSetParameters(DWORD(EngineData), @FxGain); +end; + +function TReplayGain_Bass.GetName: String; +begin + result := 'BASS_FX Dynamic Amplification'; +end; + +function TReplayGain_Bass.GetType(): DWORD; +begin + Result := BASS_FX_BFX_DAMP; +end; + +function TReplayGain_Bass.GetPriority(): LongInt; +begin + Result := 3; +end; + initialization MediaManager.Add(TAudioPlayback_Bass.Create); diff --git a/src/media/UAudioPlayback_Portaudio.pas b/src/media/UAudioPlayback_Portaudio.pas index 8a51e0fb..ad307a54 100644 --- a/src/media/UAudioPlayback_Portaudio.pas +++ b/src/media/UAudioPlayback_Portaudio.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioPlayback_Portaudio.pas $ - * $Id: UAudioPlayback_Portaudio.pas 2475 2010-06-10 18:27:53Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioPlayback_Portaudio; diff --git a/src/media/UAudioPlayback_SDL.pas b/src/media/UAudioPlayback_SDL.pas index a4454a71..ba842677 100644 --- a/src/media/UAudioPlayback_SDL.pas +++ b/src/media/UAudioPlayback_SDL.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioPlayback_SDL.pas $ - * $Id: UAudioPlayback_SDL.pas 2475 2010-06-10 18:27:53Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioPlayback_SDL; diff --git a/src/media/UAudioPlayback_SoftMixer.pas b/src/media/UAudioPlayback_SoftMixer.pas index 96d8306a..65fa495a 100644 --- a/src/media/UAudioPlayback_SoftMixer.pas +++ b/src/media/UAudioPlayback_SoftMixer.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UAudioPlayback_SoftMixer.pas $ - * $Id: UAudioPlayback_SoftMixer.pas 2945 2013-02-22 22:33:33Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UAudioPlayback_SoftMixer; @@ -219,7 +216,6 @@ destructor TAudioMixerStream.Destroy(); if assigned(MixerBuffer) then Freemem(MixerBuffer); ActiveStreams.Free; - SDL_UnlockMutex(InternalLock); SDL_DestroyMutex(InternalLock); InternalLock:=nil; inherited; @@ -355,7 +351,6 @@ constructor TGenericPlaybackStream.Create(Engine: TAudioPlayback_SoftMixer); destructor TGenericPlaybackStream.Destroy(); begin Close(); - SDL_UnlockMutex(InternalLock); if (Assigned(InternalLock)) and (InternalLock <> nil) then begin SDL_DestroyMutex(InternalLock); @@ -1051,7 +1046,6 @@ procedure TGenericVoiceStream.Close(); // free data FreeAndNil(VoiceBuffer); if (BufferLock <> nil) then - SDL_UnlockMutex(BufferLock); SDL_DestroyMutex(BufferLock); BufferLock:=nil; inherited Close(); @@ -1060,15 +1054,13 @@ procedure TGenericVoiceStream.Close(); procedure TGenericVoiceStream.WriteData(Buffer: PByteArray; BufferSize: integer); begin // lock access to buffer - BufferLock := SDL_CreateMutex(); + SDL_LockMutex(BufferLock); try if (VoiceBuffer = nil) then Exit; VoiceBuffer.Write(Buffer, BufferSize); finally SDL_UnlockMutex(BufferLock); - SDL_DestroyMutex(BufferLock); - BufferLock:=nil; end; end; @@ -1077,25 +1069,21 @@ function TGenericVoiceStream.ReadData(Buffer: PByteArray; BufferSize: integer): Result := -1; // lock access to buffer - BufferLock := SDL_CreateMutex(); + SDL_LockMutex(BufferLock); try if (VoiceBuffer = nil) then Exit; Result := VoiceBuffer.Read(Buffer, BufferSize); finally SDL_UnlockMutex(BufferLock); - SDL_DestroyMutex(BufferLock); - BufferLock:=nil; end; end; function TGenericVoiceStream.IsEOF(): boolean; begin - BufferLock := SDL_CreateMutex(); + SDL_LockMutex(BufferLock); Result := (VoiceBuffer = nil); SDL_UnlockMutex(BufferLock); - SDL_DestroyMutex(BufferLock); - BufferLock:=nil; end; function TGenericVoiceStream.IsError(): boolean; diff --git a/src/media/UMediaCore_FFmpeg.pas b/src/media/UMediaCore_FFmpeg.pas index ffab5a3d..511dce58 100644 --- a/src/media/UMediaCore_FFmpeg.pas +++ b/src/media/UMediaCore_FFmpeg.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UMediaCore_FFmpeg.pas $ - * $Id: UMediaCore_FFmpeg.pas 3103 2014-11-22 23:21:19Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMediaCore_FFmpeg; @@ -93,6 +90,7 @@ TMediaCore_FFmpeg = class function FindStreamIDs(FormatCtx: PAVFormatContext; out FirstVideoStream, FirstAudioStream: integer ): boolean; function FindAudioStreamIndex(FormatCtx: PAVFormatContext): integer; function ConvertFFmpegToAudioFormat(FFmpegFormat: TAVSampleFormat; out Format: TAudioSampleFormat): boolean; + class function ConvertAudioFormatToFFmpeg(Format: TAudioSampleFormat; out FFmpegFormat: TAVSampleFormat): boolean; procedure LockAVCodec(); procedure UnlockAVCodec(); function AVFormatOpenInput(ps: PPAVFormatContext; filename: {const} PAnsiChar): Integer; @@ -223,7 +221,6 @@ constructor TMediaCore_FFmpeg.Create(); destructor TMediaCore_FFmpeg.Destroy(); begin - SDL_UnlockMutex(AVCodecLock); SDL_DestroyMutex(AVCodecLock); AVCodecLock:=nil; inherited; @@ -364,6 +361,19 @@ function TMediaCore_FFmpeg.ConvertFFmpegToAudioFormat(FFmpegFormat: TAVSampleFor end; end; +class function TMediaCore_FFmpeg.ConvertAudioFormatToFFmpeg(Format: TAudioSampleFormat; out FFmpegFormat: TAVSampleFormat): boolean; +begin + Result := true; + case Format of + asfU8: FFmpegFormat := AV_SAMPLE_FMT_U8; + asfS16: FFmpegFormat := AV_SAMPLE_FMT_S16; + asfS32: FFmpegFormat := AV_SAMPLE_FMT_S32; + asfFloat: FFmpegFormat := AV_SAMPLE_FMT_FLT; + asfDouble: FFmpegFormat := AV_SAMPLE_FMT_DBL; + else Result := false; + end; +end; + {** * UTF-8 Filename wrapper based on: @@ -557,7 +567,6 @@ constructor TPacketQueue.Create(); destructor TPacketQueue.Destroy(); begin Flush(); - SDL_UnlockMutex(Mutex); SDL_DestroyMutex(Mutex); Mutex:=nil; SDL_DestroyCond(Condition); diff --git a/src/media/UMediaCore_SDL.pas b/src/media/UMediaCore_SDL.pas index c2c9f0fa..f764f378 100644 --- a/src/media/UMediaCore_SDL.pas +++ b/src/media/UMediaCore_SDL.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UMediaCore_SDL.pas $ - * $Id: UMediaCore_SDL.pas 2475 2010-06-10 18:27:53Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMediaCore_SDL; diff --git a/src/media/UMedia_dummy.pas b/src/media/UMedia_dummy.pas index a4cb2271..06c8c330 100644 --- a/src/media/UMedia_dummy.pas +++ b/src/media/UMedia_dummy.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UMedia_dummy.pas $ - * $Id: UMedia_dummy.pas 2945 2013-02-22 22:33:33Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMedia_dummy; diff --git a/src/media/UVideo.pas b/src/media/UVideo.pas index 02ddf5c0..68dcdce0 100644 --- a/src/media/UVideo.pas +++ b/src/media/UVideo.pas @@ -1,28 +1,24 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UVideo.pas $ - * $Id: UVideo.pas 3150 2015-10-20 00:07:57Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} - unit UVideo; {* @@ -238,6 +234,7 @@ TVideoPlayback_FFmpeg = class( TInterfacedObject, IVideoPlayback ) SupportsNPOT: Boolean; +{$IF LIBAVCODEC_VERSION < 51068000} // These are called whenever we allocate a frame buffer. // We use this to store the global_pts in a frame at the time it is allocated. function PtsGetBuffer(CodecCtx: PAVCodecContext; Frame: PAVFrame): integer; cdecl; @@ -245,11 +242,7 @@ function PtsGetBuffer(CodecCtx: PAVCodecContext; Frame: PAVFrame): integer; cdec pts: Pint64; VideoPktPts: Pint64; begin - {$IF LIBAVCODEC_VERSION >= 56000000} - Result := avcodec_default_get_buffer2(CodecCtx, Frame, 0); - {$ELSE} Result := avcodec_default_get_buffer(CodecCtx, Frame); - {$ENDIF} VideoPktPts := CodecCtx^.opaque; if (VideoPktPts <> nil) then begin @@ -265,12 +258,9 @@ procedure PtsReleaseBuffer(CodecCtx: PAVCodecContext; Frame: PAVFrame); cdecl; begin if (Frame <> nil) then av_freep(@Frame^.opaque); - {$IF LIBAVCODEC_VERSION >= 57000000} - av_frame_unref(Frame); - {$ELSE} avcodec_default_release_buffer(CodecCtx, Frame); - {$ENDIF} end; +{$ENDIF} {*------------------------------------------------------------------------------ @@ -402,8 +392,6 @@ function TVideo_FFmpeg.Open(const FileName : IPath): boolean; // allow non spec compliant speedup tricks. //fCodecContext^.flags2 := CODEC_FLAG2_FAST; - if (FileName.GetExtension().ToUTF8() = '.mp4') or (FileName.GetExtension().ToUTF8() = '.mkv') then - fCodecContext^.flags := CODEC_FLAG_LOW_DELAY; //ffmpeg has a bug here when playing certain avi files // Note: avcodec_open() and avcodec_close() are not thread-safe and will // fail if called concurrently by different threads. @@ -425,8 +413,10 @@ function TVideo_FFmpeg.Open(const FileName : IPath): boolean; end; // register custom callbacks for pts-determination - fCodecContext^.get_buffer := PtsGetBuffer; - fCodecContext^.release_buffer := PtsReleaseBuffer; + {$IF LIBAVCODEC_VERSION < 51068000} + fCodecContext^.get_buffer := PtsGetBuffer; + fCodecContext^.release_buffer := PtsReleaseBuffer; + {$IFEND} {$ifdef DebugDisplay} DebugWriteln('Found a matching Codec: '+ fCodecContext^.Codec.Name + sLineBreak + @@ -667,7 +657,9 @@ procedure TVideo_FFmpeg.SynchronizeTime(Frame: PAVFrame; var pts: double); function TVideo_FFmpeg.DecodeFrame(): boolean; var FrameFinished: Integer; + {$IF LIBAVCODEC_VERSION < 51068000} VideoPktPts: int64; + {$ENDIF} {$IF FFMPEG_VERSION_INT < 1001000} pbIOCtx: PByteIOContext; {$ELSE} @@ -748,9 +740,13 @@ function TVideo_FFmpeg.DecodeFrame(): boolean; // if we got a packet from the video stream, then decode it if (AVPacket.stream_index = fStreamIndex) then begin + {$IF LIBAVCODEC_VERSION < 51068000} // save pts to be stored in pFrame in first call of PtsGetBuffer() VideoPktPts := AVPacket.pts; fCodecContext^.opaque := @VideoPktPts; + {$ELSEIF LIBAVCODEC_VERSION < 51105000} + fCodecContext^.reordered_opaque := AVPacket.pts; + {$IFEND} // decode packet {$IF LIBAVFORMAT_VERSION < 52012200)} @@ -762,18 +758,32 @@ function TVideo_FFmpeg.DecodeFrame(): boolean; {$IFEND} // reset opaque data + {$IF LIBAVCODEC_VERSION < 51068000} fCodecContext^.opaque := nil; + {$ELSEIF LIBAVCODEC_VERSION < 51105000} + fCodecContext^.reordered_opaque := AV_NOPTS_VALUE; + {$IFEND} // update pts + {$IF LIBAVCODEC_VERSION < 51068000} + if ((fAVFrame^.opaque <> nil) and + (Pint64(fAVFrame^.opaque)^ <> AV_NOPTS_VALUE)) then + pts := Pint64(fAVFrame^.opaque)^ + {$ELSEIF LIBAVCODEC_VERSION < 51105000} + if (fAVFrame^.reordered_opaque <> AV_NOPTS_VALUE) then + pts := fAVFrame^.reordered_opaque + {$ELSE} + if (fAVFrame^.pkt_pts <> AV_NOPTS_VALUE) then + pts := fAVFrame^.pkt_pts + {$IFEND} + else + {$IF LIBAVCODEC_VERSION < 51106000} if (AVPacket.dts <> AV_NOPTS_VALUE) then - begin - pts := AVPacket.dts; - end - else if ((fAVFrame^.opaque <> nil) and - (Pint64(fAVFrame^.opaque)^ <> AV_NOPTS_VALUE)) then - begin - pts := Pint64(fAVFrame^.opaque)^; - end + pts := AVPacket.dts + {$ELSE} + if (fAVFrame^.pkt_dts <> AV_NOPTS_VALUE) then + pts := fAVFrame^.pkt_dts + {$IFEND} else begin pts := 0; diff --git a/src/media/UVisualizer.pas b/src/media/UVisualizer.pas index ea0e390d..b9778955 100644 --- a/src/media/UVisualizer.pas +++ b/src/media/UVisualizer.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/media/UVisualizer.pas $ - * $Id: UVisualizer.pas 2665 2010-10-14 08:00:23Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UVisualizer; @@ -666,8 +663,8 @@ function TVideo_ProjectM.GetRandomPCMData(var Data: TPCMData): Cardinal; begin for i := 0 to 511 do begin - Data[i][0] := Random(High(Word)+1); - Data[i][1] := Random(High(Word)+1); + Data[i][0] := Random(High(Word)) - High(Smallint); + Data[i][1] := Random(High(Word)) - High(Smallint); end; end; Inc(fRndPCMcount); diff --git a/src/menu/UDisplay.pas b/src/menu/UDisplay.pas index 5f8aae03..a00110dc 100644 --- a/src/menu/UDisplay.pas +++ b/src/menu/UDisplay.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UDisplay.pas $ - * $Id: UDisplay.pas 3150 2015-10-20 00:07:57Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UDisplay; @@ -76,10 +73,21 @@ TDisplay = class Cursor_LastMove: cardinal; Cursor_Fade: boolean; + Cursor_Update: boolean; + + Console_Draw: boolean; + Console_ScrollOffset: integer; procedure DrawDebugInformation; + procedure DrawDebugConsole; + + { Handles parsing of inputs when console is opened. Called from ParseInput } + function ConsoleParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean): boolean; + { Handles parsing of inputs when console is opened. Called from ParseMouse } + function ConsoleParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; { called by MoveCursor and OnMouseButton to update last move and start fade in } procedure UpdateCursorFade; + public Cursor_HiddenByScreen: boolean; // hides software cursor and deactivate auto fade in, must be public for access in UMenuButton @@ -97,14 +105,23 @@ TDisplay = class destructor Destroy; override; procedure InitFadeTextures(); + + procedure ToggleConsole; procedure SaveScreenShot; function Draw: boolean; + // TODO rewrite ParseInput to include handling/suppressing input as return, use KeepGoing as by-reference + { checks if display is handling the passed key in ParseInput. calls HandleInput of cur or next Screen if assigned } + function ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean; out SuppressKey: boolean): boolean; + { calls ParseInput of cur or next Screen if assigned } function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean): boolean; + { calls ParseMouse of cur or next Screen if assigned } + function ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; + { sets SDL_ShowCursor depending on options set in Ini } procedure SetCursor; @@ -121,6 +138,16 @@ TDisplay = class { draws software cursor } procedure DrawCursor; + + { forces to update cursor (position and set visibility) } + procedure UpdateCursor; + + { returns whether this display is requesting an cursor update } + function NeedsCursorUpdate(): boolean; + + { called when the window has been resized } + procedure OnWindowResized(); virtual; + end; var @@ -189,6 +216,7 @@ constructor TDisplay.Create; Cursor_Y := -1; Cursor_Fade := false; Cursor_HiddenByScreen := true; + Cursor_Update := false; end; destructor TDisplay.Destroy; @@ -414,6 +442,7 @@ function TDisplay.Draw: boolean; begin CurrentScreen.OnShowFinish; CurrentScreen.ShowFinish := true; + Cursor_Update := true; end else begin @@ -425,7 +454,15 @@ function TDisplay.Draw: boolean; // Draw OSD only on first Screen if Debug Mode is enabled if ((Ini.Debug = 1) or (Params.Debug)) and (S = 1) then + begin DrawDebugInformation; + if Console_Draw then DrawDebugConsole; + end else if Console_Draw then + begin + // clear flag to prevent drawing console when toggling debug + // TODO: considers using event in ScreenOptions for clearing debug + Console_Draw := false; + end; if not BlackScreen then DrawCursor; @@ -605,8 +642,27 @@ procedure TDisplay.DrawCursor; end; end; +function TDisplay.ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean; out SuppressKey: boolean): boolean; +begin + if Console_Draw then + begin + Result := true; + SuppressKey := true; + Exit; + end; + + if (assigned(NextScreen)) then + Result := NextScreen^.ShouldHandleInput(PressedKey, CharCode, PressedDown, SuppressKey) + else if (assigned(CurrentScreen)) then + Result := CurrentScreen^.ShouldHandleInput(PressedKey, CharCode, PressedDown, SuppressKey) + else + Result := True; +end; + function TDisplay.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean): boolean; begin + if Console_Draw and ConsoleParseInput(PressedKey, CharCode, PressedDown) then Exit; + if (assigned(NextScreen)) then Result := NextScreen^.ParseInput(PressedKey, CharCode, PressedDown) else if (assigned(CurrentScreen)) then @@ -615,6 +671,19 @@ function TDisplay.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDo Result := True; end; +function TDisplay.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; +begin + if Console_Draw and ConsoleParseMouse(MouseButton, BtnDown, X, Y) then Exit; + + if (assigned(NextScreen)) then + Result := NextScreen^.ParseMouse(MouseButton, BtnDown, X, Y) + else + if (assigned(CurrentScreen)) then + Result := CurrentScreen^.ParseMouse(MouseButton, BtnDown, X, Y) + else + Result := True; +end; + { abort fading to the next screen, may be used in OnShow, or during fade process } procedure TDisplay.AbortScreenChange; var @@ -654,6 +723,28 @@ function TDisplay.FadeTo(Screen: PMenu; const aSound: TAudioPlaybackStream = nil end; end; +procedure TDisplay.UpdateCursor; +begin + UpdateCursorFade; + Cursor_Update := true; +end; + +function TDisplay.NeedsCursorUpdate: boolean; +begin + Result := Cursor_Update and Cursor_Visible and not Cursor_Fade; + Cursor_Update := false; +end; + +procedure TDisplay.OnWindowResized(); +begin + // update cursor position once the window has been resized, otherwise the cursor jumps + Cursor_Update := true; + + if (assigned(NextScreen)) then NextScreen^.OnWindowResized() + else if (assigned(CurrentScreen)) then CurrentScreen^.OnWindowResized() + +end; + procedure TDisplay.SaveScreenShot; var Num: integer; @@ -717,10 +808,10 @@ procedure TDisplay.DrawDebugInformation; glDisable(GL_TEXTURE_2D); glColor4f(1, 1, 1, 0.5); glBegin(GL_QUADS); - glVertex2f(690, 35); - glVertex2f(690, 0); + glVertex2f(710, 20); + glVertex2f(700, 0); glVertex2f(800, 0); - glVertex2f(800, 35); + glVertex2f(790, 20); glEnd; glDisable(GL_BLEND); @@ -744,14 +835,146 @@ procedure TDisplay.DrawDebugInformation; // draw text // fps - SetFontPos(695, 0); + SetFontPos(720, 0); glPrint ('FPS: ' + InttoStr(LastFPS)); - // muffins - SetFontPos(695, 13); - glColor4f(0.8, 0.5, 0.2, 1); - glPrint ('Muffins!'); + glColor4f(1, 1, 1, 1); +end; + +procedure TDisplay.ToggleConsole; +begin + Console_Draw := not Console_Draw; + Console_ScrollOffset := 0; +end; + +function TDisplay.ConsoleParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean): boolean; +var + SDL_ModState: word; +begin + Result := false; + + if (PressedDown) then + begin // Key Down + Result := true; + SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); + + case PressedKey of + SDLK_PAGEUP: Console_ScrollOffset := Min(Console_ScrollOffset+3, Log.ConsoleCount-1); + SDLK_PAGEDOWN: Console_ScrollOffset := Max(Console_ScrollOffset-3, 0); + SDLK_HOME: Console_ScrollOffset := Log.ConsoleCount-1; + SDLK_END: Console_ScrollOffset := 0; + SDLK_DELETE: if SDL_ModState and KMOD_CTRL <> 0 then Log.ClearConsoleLog; + otherwise Result := false; + end; + end; +end; + +function TDisplay.ConsoleParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; +begin + Result := false; + + if (BtnDown) then + begin // button Down + Result := true; + case MouseButton of + SDL_BUTTON_WHEELUP: Console_ScrollOffset := Min(Console_ScrollOffset+3, Log.ConsoleCount-1); + SDL_BUTTON_WHEELDOWN: Console_ScrollOffset := Max(Console_ScrollOffset-3, 0); + otherwise Result := false; + end; + end; +end; + +//------------ +// DrawDebugInformation - procedure draw fps and some other informations on screen +//------------ +procedure TDisplay.DrawDebugConsole; +var + I, LineCount: integer; + YOffset, ScaleF, FontSize: real; + PosX, PosY: real; + W, H: real; + ScrollPad, ScrollW: real; + OldStretch: real; +begin + FontSize := 16.0; + W := 800.0; + H := 400.0; + ScrollPad := 5.0; + ScrollW := 10.0; + + // Some black background + glEnable(GL_BLEND); + glDisable(GL_TEXTURE_2D); + glColor4f(0, 0, 0, 0.85); + glBegin(GL_QUADS); + glVertex2f(0, 0); + glVertex2f(0, H); + glVertex2f(W, H); + glVertex2f(W, 0); + glEnd; + glDisable(GL_BLEND); + + // scale sizes to DPI/aspect + ScaleF := (1.0*ScreenH)/(1.0*ScreenW); + FontSize := FontSize * 600.0/(1.0*ScreenH); + ScrollW := ScrollW * 800.0/(1.0*ScreenW); + ScrollPad := ScrollPad * ScaleF; + + // set font specs + SetFontStyle(ftNormal); + SetFontSize(FontSize); + SetFontItalic(false); + SetFontReflection(false, 0); + glColor4f(1, 1, 1, 1); + + OldStretch := Fonts[ActFont].Font.Stretch; + Fonts[ActFont].Font.Stretch := 1.4*ScaleF * Min(1.3, Max(0.8, power((1.0*ScreenW)/800.0, 1.2))); + + // don't draw anything else if nothing's logged + if Log.ConsoleCount < 1 then Exit; + + + // draw log buffer + YOffset := H; // start at bottom + LineCount := 0; + I := Log.ConsoleCount-1 - Console_ScrollOffset; + while (I >= 0) and (YOffset > 0) do + begin + YOffset := YOffset - FontSize; + SetFontPos(5, YOffset); + glPrint(Log.GetConsole(i)); + + Dec(i); + Inc(LineCount); + end; + + // draw scoll bar + glEnable(GL_BLEND); + glDisable(GL_TEXTURE_2D); + glColor4f(0.33, 0.33, 0.33, 1); + glBegin(GL_QUADS); + glVertex2f(W-ScrollPad-ScrollW, ScrollPad); // top left + glVertex2f(W-ScrollPad, ScrollPad); // top right + glVertex2f(W-ScrollPad, H-ScrollPad); // bottom right + glVertex2f(W-ScrollPad-ScrollW, H-ScrollPad); // bottom left + glEnd; + + // visible height bar + offset + YOffset := H * ((1.0*LineCount)/(1.0*Log.ConsoleCount)); + PosY := 0; + if I > 0 then PosY := (H-2.0*ScrollPad) * Max(0.0, I)/(1.0*Log.ConsoleCount); + + glColor4f(1, 1, 1, 1); + glBegin(GL_QUADS); + glVertex2f(W-ScrollPad-ScrollW, ScrollPad + PosY); // top left + glVertex2f(W-ScrollPad, ScrollPad + PosY); // top right + glVertex2f(W-ScrollPad, ScrollPad + PosY + YOffset); // bottom right + glVertex2f(W-ScrollPad-ScrollW, ScrollPad + PosY + YOffset); // bottom left + glEnd; + glDisable(GL_BLEND); + Fonts[ActFont].Font.Stretch := OldStretch; glColor4f(1, 1, 1, 1); end; diff --git a/src/menu/UDrawTexture.pas b/src/menu/UDrawTexture.pas index ccbc8ce0..2e19ec88 100644 --- a/src/menu/UDrawTexture.pas +++ b/src/menu/UDrawTexture.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UDrawTexture.pas $ - * $Id: UDrawTexture.pas 1498 2008-11-03 14:53:17Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UDrawTexture; diff --git a/src/menu/UMenu.pas b/src/menu/UMenu.pas index 26e70779..056894da 100644 --- a/src/menu/UMenu.pas +++ b/src/menu/UMenu.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UMenu.pas $ - * $Id: UMenu.pas 3103 2014-11-22 23:21:19Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenu; @@ -56,7 +53,6 @@ interface PMenu = ^TMenu; TMenu = class protected - Background: TMenuBackground; Interactions: array of TInteract; SelInteraction: integer; @@ -67,6 +63,7 @@ TMenu = class SelectsS: array of TSelectSlide; ButtonCollection: array of TButtonCollection; public + Background: TMenuBackground; Text: array of TText; Statics: array of TStatic; StaticsList: array of TStatic; @@ -149,6 +146,7 @@ TMenu = class function DrawBG: boolean; virtual; function DrawFG: boolean; virtual; function Draw: boolean; virtual; + function ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean; out SuppressKey: boolean): boolean; virtual; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown : boolean): boolean; virtual; function ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; virtual; function InRegion(X, Y: real; A: TMouseOverRect): boolean; @@ -160,6 +158,8 @@ TMenu = class procedure OnShowFinish; virtual; procedure OnHide; virtual; + procedure OnWindowResized(); virtual; + procedure SetAnimationProgress(Progress: real); virtual; function IsSelectable(Int: cardinal): boolean; @@ -302,29 +302,36 @@ procedure TMenu.SetInteraction(Num: integer); NewNum, NewTyp: integer; begin // set inactive + if(Interaction > -1) then + begin OldNum := Interactions[Interaction].Num; OldTyp := Interactions[Interaction].Typ; - - NewNum := Interactions[Num].Num; - NewTyp := Interactions[Num].Typ; - - case OldTyp of - iButton: Button[OldNum].Selected := false; - iText: Text[OldNum].Selected := false; - iSelectS: SelectsS[OldNum].Selected := false; - //Button Collection Mod - iBCollectionChild: - begin - Button[OldNum].Selected := false; - - // deselect collection if next button is not from collection - if (NewTyp <> iButton) or (Button[NewNum].Parent <> Button[OldNum].Parent) then - ButtonCollection[Button[OldNum].Parent-1].Selected := false; - end; end; + if(Num > -1) then + begin + NewNum := Interactions[Num].Num; + NewTyp := Interactions[Num].Typ; + end; + if(Interaction > -1) then + begin + case OldTyp of + iButton: Button[OldNum].Selected := false; + iText: Text[OldNum].Selected := false; + iSelectS: SelectsS[OldNum].Selected := false; + //Button Collection Mod + iBCollectionChild: + begin + Button[OldNum].Selected := false; - // set active + // deselect collection if next button is not from collection + if (NewTyp <> iButton) or (Button[NewNum].Parent <> Button[OldNum].Parent) then + ButtonCollection[Button[OldNum].Parent-1].Selected := false; + end; + end; + end; SelInteraction := Num; + if(Num = -1) then exit; + // set active case NewTyp of iButton: Button[NewNum].Selected := true; iText: Text[NewNum].Selected := true; @@ -1714,6 +1721,17 @@ procedure TMenu.OnHide; Background.OnFinish; end; +procedure TMenu.OnWindowResized; +begin + // nothing +end; + +function TMenu.ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean; out SuppressKey: boolean): boolean; +begin + // nothing + Result := true; +end; + function TMenu.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; begin // nothing @@ -1769,7 +1787,7 @@ function TMenu.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer) else Action := maReturn; end - {else if (MouseButton = SDL_BUTTON_WHEELDOWN) then + else if (MouseButton = SDL_BUTTON_WHEELDOWN) then begin //forward on select slide with mousewheel if (Interactions[nBut].Typ = iSelectS) then Action := maRight; @@ -1778,7 +1796,7 @@ function TMenu.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer) begin //backward on select slide with mousewheel if (Interactions[nBut].Typ = iSelectS) then Action := maLeft; - end}; + end; end; // do the action we have to do ;) diff --git a/src/menu/UMenuBackground.pas b/src/menu/UMenuBackground.pas index 0e2e63a6..e9249783 100644 --- a/src/menu/UMenuBackground.pas +++ b/src/menu/UMenuBackground.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuBackground; diff --git a/src/menu/UMenuBackgroundColor.pas b/src/menu/UMenuBackgroundColor.pas index 25d5ac23..1d64829a 100644 --- a/src/menu/UMenuBackgroundColor.pas +++ b/src/menu/UMenuBackgroundColor.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuBackgroundColor; diff --git a/src/menu/UMenuBackgroundFade.pas b/src/menu/UMenuBackgroundFade.pas index ff44be5b..103ba2fe 100644 --- a/src/menu/UMenuBackgroundFade.pas +++ b/src/menu/UMenuBackgroundFade.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuBackgroundFade; diff --git a/src/menu/UMenuBackgroundNone.pas b/src/menu/UMenuBackgroundNone.pas index 4c9fcb05..aae16f9d 100644 --- a/src/menu/UMenuBackgroundNone.pas +++ b/src/menu/UMenuBackgroundNone.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuBackgroundNone; diff --git a/src/menu/UMenuBackgroundTexture.pas b/src/menu/UMenuBackgroundTexture.pas index 5d12e473..08607778 100644 --- a/src/menu/UMenuBackgroundTexture.pas +++ b/src/menu/UMenuBackgroundTexture.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuBackgroundTexture; diff --git a/src/menu/UMenuBackgroundVideo.pas b/src/menu/UMenuBackgroundVideo.pas index 0287fd66..6f381cd2 100644 --- a/src/menu/UMenuBackgroundVideo.pas +++ b/src/menu/UMenuBackgroundVideo.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id$ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuBackgroundVideo; diff --git a/src/menu/UMenuButton.pas b/src/menu/UMenuButton.pas index 1fc672a7..08824464 100644 --- a/src/menu/UMenuButton.pas +++ b/src/menu/UMenuButton.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UMenuButton.pas $ - * $Id: UMenuButton.pas 3123 2015-08-23 03:15:31Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuButton; diff --git a/src/menu/UMenuButtonCollection.pas b/src/menu/UMenuButtonCollection.pas index 9e4a360f..3f79194f 100644 --- a/src/menu/UMenuButtonCollection.pas +++ b/src/menu/UMenuButtonCollection.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UMenuButtonCollection.pas $ - * $Id: UMenuButtonCollection.pas 1692 2009-04-24 18:43:12Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuButtonCollection; diff --git a/src/menu/UMenuEqualizer.pas b/src/menu/UMenuEqualizer.pas index 39b2ec6a..c31921af 100644 --- a/src/menu/UMenuEqualizer.pas +++ b/src/menu/UMenuEqualizer.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UMenuEqualizer.pas $ - * $Id: UMenuEqualizer.pas 1692 2009-04-24 18:43:12Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuEqualizer; diff --git a/src/menu/UMenuInteract.pas b/src/menu/UMenuInteract.pas index 4f521f52..fcff19fd 100644 --- a/src/menu/UMenuInteract.pas +++ b/src/menu/UMenuInteract.pas @@ -1,28 +1,25 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UMenuInteract.pas $ - * $Id: UMenuInteract.pas 1950 2009-11-18 14:42:34Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} - + unit UMenuInteract; interface diff --git a/src/menu/UMenuSelectSlide.pas b/src/menu/UMenuSelectSlide.pas index e732f588..da106aa1 100644 --- a/src/menu/UMenuSelectSlide.pas +++ b/src/menu/UMenuSelectSlide.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UMenuSelectSlide.pas $ - * $Id: UMenuSelectSlide.pas 2293 2010-04-23 22:39:26Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuSelectSlide; diff --git a/src/menu/UMenuStatic.pas b/src/menu/UMenuStatic.pas index 498820d2..b4d40bcc 100644 --- a/src/menu/UMenuStatic.pas +++ b/src/menu/UMenuStatic.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UMenuStatic.pas $ - * $Id: UMenuStatic.pas 1692 2009-04-24 18:43:12Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuStatic; diff --git a/src/menu/UMenuStaticList.pas b/src/menu/UMenuStaticList.pas index 5e4e1ba1..960e505e 100644 --- a/src/menu/UMenuStaticList.pas +++ b/src/menu/UMenuStaticList.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuStaticList; diff --git a/src/menu/UMenuText.pas b/src/menu/UMenuText.pas index 1635721c..47cc8685 100644 --- a/src/menu/UMenuText.pas +++ b/src/menu/UMenuText.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/menu/UMenuText.pas $ - * $Id: UMenuText.pas 2293 2010-04-23 22:39:26Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UMenuText; diff --git a/src/screens/UScreenAbout.pas b/src/screens/UScreenAbout.pas index b995dff8..1823f3ef 100644 --- a/src/screens/UScreenAbout.pas +++ b/src/screens/UScreenAbout.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenAbout; interface @@ -91,7 +89,13 @@ function TScreenAbout.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Press FadeTo(@ScreenMain); end; SDLK_RETURN: - begin + begin + //Developers Button + if Interaction = 2 then + begin + AudioPlayback.PlaySound(SoundLib.Back); + FadeTo(@ScreenDevelopers); + end; //Exit Button Pressed if Interaction = 1 then begin @@ -136,6 +140,7 @@ constructor TScreenAbout.Create; AddButton(Theme.AboutMain.ButtonCredits); AddButton(Theme.AboutMain.ButtonExit); + AddButton(Theme.AboutMain.ButtonDevelopers); Interaction := 0; end; diff --git a/src/screens/UScreenCredits.pas b/src/screens/UScreenCredits.pas index 2dbc4f09..3e66fea6 100644 --- a/src/screens/UScreenCredits.pas +++ b/src/screens/UScreenCredits.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenCredits.pas $ - * $Id: UScreenCredits.pas 2582 2010-07-18 11:11:57Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenCredits; interface @@ -268,7 +266,7 @@ function TScreenCredits.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre SDLK_BACKSPACE, SDLK_RETURN : begin - FadeTo(@ScreenMain); + FadeTo(@ScreenAbout); AudioPlayback.PlaySound(SoundLib.Back); end; { diff --git a/src/screens/UScreenDevelopers.pas b/src/screens/UScreenDevelopers.pas new file mode 100644 index 00000000..c8c44491 --- /dev/null +++ b/src/screens/UScreenDevelopers.pas @@ -0,0 +1,153 @@ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} + + +unit UScreenDevelopers; + +interface + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{$I switches.inc} + +uses + UMenu, + sdl2, + SysUtils, + UMusic, + UIni, + UThemes; + +type + TScreenDevelopers = class(TMenu) + public + TextOverview: integer; + constructor Create; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + procedure OnShow; override; + procedure SetAnimationProgress(Progress: real); override; + + procedure SetOverview; + end; + +implementation + +uses + UGraphic, + ULanguage, + UCommon, + UUnicodeUtils; + +function TScreenDevelopers.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; +begin + Result := true; + if (PressedDown) then + begin // Key Down + // check normal keys + case UCS4UpperCase(CharCode) of + Ord('Q'): + begin + Result := false; + Exit; + end; + end; + + // check special keys + case PressedKey of + SDLK_ESCAPE, + SDLK_BACKSPACE : + begin + Ini.Save; + AudioPlayback.PlaySound(SoundLib.Back); + FadeTo(@ScreenAbout); + end; + SDLK_RETURN: + begin + //Exit Button Pressed + if Interaction = 0 then + begin + AudioPlayback.PlaySound(SoundLib.Back); + FadeTo(@ScreenAbout); + end; + + end; + SDLK_LEFT: + begin + InteractPrev; + end; + SDLK_RIGHT: + begin + InteractNext; + end; + SDLK_UP: + begin + InteractPrev; + end; + SDLK_DOWN: + begin + InteractNext; + end; + end; + end; +end; + +constructor TScreenDevelopers.Create; +begin + inherited Create; + + TextOverview := AddText(Theme.Developers.TextOverview); + + LoadFromTheme(Theme.Developers); + + AddButton(Theme.Developers.ButtonExit); + + Interaction := 0; +end; + +procedure TScreenDevelopers.OnShow; +begin + inherited; + + //Set Overview Text: + SetOverview; +end; + +procedure TScreenDevelopers.SetOverview; +var + Overview: UTF8String; +begin + // Format overview + Overview := Language.Translate('DEVELOPERS_OVERVIEW'); + Text[0].Text := Overview; +end; + +procedure TScreenDevelopers.SetAnimationProgress(Progress: real); +var + I: integer; +begin + for I := 0 to high(Button) do + Button[I].Texture.ScaleW := Progress; +end; + +end. diff --git a/src/screens/UScreenEdit.pas b/src/screens/UScreenEdit.pas deleted file mode 100644 index 8b9068e5..00000000 --- a/src/screens/UScreenEdit.pas +++ /dev/null @@ -1,164 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenEdit.pas $ - * $Id: UScreenEdit.pas 2246 2010-04-18 13:43:36Z tobigun $ - *} - -unit UScreenEdit; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - UMenu, - sdl2, - UThemes; - -type - TScreenEdit = class(TMenu) - public - TextDescription: integer; - TextDescriptionLong: integer; - - constructor Create; override; - function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; - procedure InteractNext; override; - procedure InteractPrev; override; - procedure InteractInc; override; - procedure InteractDec; override; - procedure SetAnimationProgress(Progress: real); override; - end; - -implementation - -uses - UGraphic, - UMusic, - USkins, - UUnicodeUtils, - SysUtils; - -function TScreenEdit.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; -var - SDL_ModState: word; -begin - Result := true; - - SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + - KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); - - if (PressedDown) then - begin // Key Down - // check normal keys - case UCS4UpperCase(CharCode) of - Ord('Q'): - begin - Result := false; - Exit; - end; - end; - - // check special keys - case PressedKey of - SDLK_ESCAPE, - SDLK_BACKSPACE : - begin - AudioPlayback.PlaySound(SoundLib.Back); - FadeTo(@ScreenMain); - end; - SDLK_RETURN: - begin - if Interaction = 0 then - begin - AudioPlayback.PlaySound(SoundLib.Start); - FadeTo(@ScreenEditConvert); - end; - - if Interaction = 1 then - begin - AudioPlayback.PlaySound(SoundLib.Back); - FadeTo(@ScreenMain); - end; - end; - - SDLK_DOWN: InteractInc; - SDLK_UP: InteractDec; - SDLK_RIGHT: InteractNext; - SDLK_LEFT: InteractPrev; - end; - end; -end; - -constructor TScreenEdit.Create; -begin - inherited Create; - - TextDescription := AddText(Theme.Edit.TextDescription); - - LoadFromTheme(Theme.Edit); - - AddButton(Theme.Edit.ButtonConvert); -{ Some ideas for more: - AddButton(Theme.Edit.ButtonEditHeaders); - AddButton(Theme.Edit.ButtonAdjustGap); -} - AddButton(Theme.Edit.ButtonExit); - - Interaction := 0; -end; - -procedure TScreenEdit.InteractNext; -begin - inherited InteractNext; - Text[TextDescription].Text := Theme.Edit.Description[Interaction]; -end; - -procedure TScreenEdit.InteractPrev; -begin - inherited InteractPrev; - Text[TextDescription].Text := Theme.Edit.Description[Interaction]; -end; - -procedure TScreenEdit.InteractDec; -begin - inherited InteractDec; - Text[TextDescription].Text := Theme.Edit.Description[Interaction]; -end; - -procedure TScreenEdit.InteractInc; -begin - inherited InteractInc; - Text[TextDescription].Text := Theme.Edit.Description[Interaction]; -end; - -procedure TScreenEdit.SetAnimationProgress(Progress: real); -begin - Statics[0].Texture.ScaleW := Progress; - Statics[0].Texture.ScaleH := Progress; -end; - -end. diff --git a/src/screens/UScreenEditConvert.pas b/src/screens/UScreenEditConvert.pas deleted file mode 100644 index 62d77fbb..00000000 --- a/src/screens/UScreenEditConvert.pas +++ /dev/null @@ -1,826 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn+ssh://svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenEditConvert.pas $ - * $Id: UScreenEditConvert.pas 2146 2010-02-22 18:27:15Z k-m_schindler $ - *} - -unit UScreenEditConvert; - -{* - * See - * MIDI Recommended Practice (RP-017): SMF Lyric Meta Event Definition - * http://www.midi.org/techspecs/rp17.php - * MIDI Recommended Practice (RP-026): SMF Language and Display Extensions - * http://www.midi.org/techspecs/rp26.php - * MIDI File Format - * http://www.sonicspot.com/guide/midifiles.html - * KMIDI File Format - * http://gnese.free.fr/Projects/KaraokeTime/Fichiers/karfaq.html - * http://journals.rpungin.fotki.com/karaoke/category/midi - * - * There are two widely spread karaoke formats: - * - KMIDI (.kar), an inofficial midi extension by Tune 1000 - * - Standard Midi files with lyric meta-tags (SMF with lyrics, .mid). - * - * KMIDI uses two tracks, the first just contains a header (mostly track 2) and - * the second the lyrics (track 3). It uses text meta tags for the lyrics. - * SMF uses just one track (normally track 1) and uses lyric meta tags for storage. - * - * Most files are in the KMIDI format. Some Midi files contain both lyric types. - *} - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - math, - UMenu, - SDL2, - {$IFDEF UseMIDIPort} - MidiFile, - MidiOut, - {$ENDIF} - ULog, - USongs, - USong, - UMusic, - UThemes, - UPath; - -type - TMidiNote = record - Event: integer; - EventType: integer; - Channel: integer; - Start: real; - Len: real; - Data1: integer; - Data2: integer; - Str: UTF8String; // normally ASCII - end; - - TLyricType = (ltKMIDI, ltSMFLyric); - - TTrack = record - Note: array of TMidiNote; - Name: UTF8String; // normally ASCII - Status: set of (tsNotes, tsLyrics); //< track contains notes, lyrics or both - LyricType: set of TLyricType; - NoteType: (ntNone, ntAvail); - end; - - TNote = record - Start: integer; - Len: integer; - Tone: integer; - Lyric: UTF8String; - NewSentence: boolean; - end; - - TArrayTrack = array of TTrack; - - TScreenEditConvert = class(TMenu) - private - Tracks: TArrayTrack; // current track - ColR: array[0..100] of real; - ColG: array[0..100] of real; - ColB: array[0..100] of real; - Len: real; - SelTrack: integer; // index of selected track - fFileName: IPath; - - {$IFDEF UseMIDIPort} - MidiFile: TMidiFile; - MidiOut: TMidiOutput; - {$ENDIF} - - BPM: real; - Ticks: real; - Note: array of TNote; - - procedure AddLyric(Start: integer; LyricType: TLyricType; Text: UTF8String); - procedure Extract(out Song: TSong; out Lines: TLines); - - {$IFDEF UseMIDIPort} - procedure MidiFile1MidiEvent(event: PMidiEvent); - {$ENDIF} - - function CountSelectedTracks: integer; - - public - constructor Create; override; - procedure OnShow; override; - function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; - function Draw: boolean; override; - procedure OnHide; override; - end; - -implementation - -uses - SysUtils, - TextGL, - dglOpenGL, - UDrawTexture, - UFiles, - UGraphic, - UIni, - UMain, - UPathUtils, - USkins, - ULanguage, - UTextEncoding, - UUnicodeUtils; - -const - // MIDI/KAR lyrics are specified to be ASCII only. - // Assume backward compatible CP1252 encoding. - DEFAULT_ENCODING = encCP1252; - -const - MIDI_EVENTTYPE_NOTEOFF = $8; - MIDI_EVENTTYPE_NOTEON = $9; - MIDI_EVENTTYPE_META_SYSEX = $F; - - MIDI_EVENT_META = $FF; - MIDI_META_TEXT = $1; - MIDI_META_LYRICS = $5; - -function TScreenEditConvert.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; -{$IFDEF UseMIDIPort} -var - SResult: TSaveSongResult; - Playing: boolean; - MidiTrack: TMidiTrack; - Song: TSong; - Lines: TLines; -{$ENDIF} -begin - Result := true; - if (PressedDown) then - begin // Key Down - // check normal keys - case UCS4UpperCase(CharCode) of - Ord('Q'): - begin - Result := false; - Exit; - end; - end; - - // check special keys - case PressedKey of - SDLK_ESCAPE, - SDLK_BACKSPACE : - begin - {$IFDEF UseMIDIPort} - if (MidiFile <> nil) then - MidiFile.StopPlaying; - {$ENDIF} - AudioPlayback.PlaySound(SoundLib.Back); - FadeTo(@ScreenEdit); - end; - - SDLK_RETURN: - begin - if Interaction = 0 then - begin - AudioPlayback.PlaySound(SoundLib.Start); - ScreenOpen.Filename := GamePath.Append('file.mid'); - ScreenOpen.BackScreen := @ScreenEditConvert; - FadeTo(@ScreenOpen); - end - else if Interaction = 1 then - begin - {$IFDEF UseMIDIPort} - if (MidiFile <> nil) then - begin - MidiFile.OnMidiEvent := MidiFile1MidiEvent; - //MidiFile.GoToTime(MidiFile.GetTrackLength div 2); - MidiFile.StartPlaying; - end; - {$ENDIF} - end - else if Interaction = 2 then - begin - {$IFDEF UseMIDIPort} - if (MidiFile <> nil) then - begin - MidiFile.OnMidiEvent := nil; - MidiFile.StartPlaying; - end; - {$ENDIF} - end - else if Interaction = 3 then - begin - {$IFDEF UseMIDIPort} - if CountSelectedTracks > 0 then - begin - Extract(Song, Lines); - SResult := SaveSong(Song, Lines, fFileName.SetExtension('.txt'), - false); - FreeAndNil(Song); - if (SResult = ssrOK) then - ScreenPopupInfo.ShowPopup(Language.Translate('INFO_FILE_SAVED')) - else - ScreenPopupError.ShowPopup(Language.Translate('ERROR_SAVE_FILE_FAILED')); - end - else - begin - ScreenPopupError.ShowPopup(Language.Translate('EDITOR_ERROR_NO_TRACK_SELECTED')); - end; - {$ENDIF} - end; - - end; - - SDLK_SPACE: - begin - {$IFDEF UseMIDIPort} - if (MidiFile <> nil) then - begin - if (Tracks[SelTrack].NoteType = ntAvail) and - (Tracks[SelTrack].LyricType <> []) then - begin - if (Tracks[SelTrack].Status = []) then - Tracks[SelTrack].Status := [tsNotes] - else if (Tracks[SelTrack].Status = [tsNotes]) then - Tracks[SelTrack].Status := [tsLyrics] - else if (Tracks[SelTrack].Status = [tsLyrics]) then - Tracks[SelTrack].Status := [tsNotes, tsLyrics] - else if (Tracks[SelTrack].Status = [tsNotes, tsLyrics]) then - Tracks[SelTrack].Status := []; - end - else if (Tracks[SelTrack].NoteType = ntAvail) then - begin - if (Tracks[SelTrack].Status = []) then - Tracks[SelTrack].Status := [tsNotes] - else - Tracks[SelTrack].Status := []; - end - else if (Tracks[SelTrack].LyricType <> []) then - begin - if (Tracks[SelTrack].Status = []) then - Tracks[SelTrack].Status := [tsLyrics] - else - Tracks[SelTrack].Status := []; - end; - - Playing := (MidiFile.GetCurrentTime > 0); - MidiFile.StopPlaying(); - MidiTrack := MidiFile.GetTrack(SelTrack); - if tsNotes in Tracks[SelTrack].Status then - MidiTrack.OnMidiEvent := MidiFile1MidiEvent - else - MidiTrack.OnMidiEvent := nil; - if (Playing) then - MidiFile.ContinuePlaying(); - end; - {$ENDIF} - end; - - SDLK_RIGHT: - begin - InteractNext; - end; - - SDLK_LEFT: - begin - InteractPrev; - end; - - SDLK_DOWN: - begin - Inc(SelTrack); - if SelTrack > High(Tracks) then - SelTrack := 0; - end; - SDLK_UP: - begin - Dec(SelTrack); - if SelTrack < 0 then - SelTrack := High(Tracks); - end; - end; - end; -end; - -procedure TScreenEditConvert.AddLyric(Start: integer; LyricType: TLyricType; Text: UTF8String); -var - N: integer; -begin - // find corresponding note - N := 0; - while (N <= High(Note)) do - begin - if Note[N].Start = Start then - Break; - Inc(N); - end; - - // check if note was found - if (N > High(Note)) then - Exit; - - // set text - if (LyricType = ltKMIDI) then - begin - // end of paragraph - if Copy(Text, 1, 1) = '\' then - begin - Delete(Text, 1, 1); - end - // end of line - else if Copy(Text, 1, 1) = '/' then - begin - Delete(Text, 1, 1); - Note[N].NewSentence := true; - end; - end - else // SMFLyric - begin - // Line Feed -> end of paragraph - if Copy(Text, 1, 1) = #$0A then - begin - Delete(Text, 1, 1); - end - // Carriage Return -> end of line - else if Copy(Text, 1, 1) = #$0D then - begin - Delete(Text, 1, 1); - Note[N].NewSentence := true; - end; - end; - - // overwrite lyric or append - if Note[N].Lyric = '-' then - Note[N].Lyric := Text - else - Note[N].Lyric := Note[N].Lyric + Text; -end; - -procedure TScreenEditConvert.Extract(out Song: TSong; out Lines: TLines); - -var - T: integer; - C: integer; - N: integer; - Nu: integer; - NoteTemp: TNote; - Move: integer; - Max, Min: integer; - LyricType: TLyricType; - Text: UTF8String; -begin - // song info - Song := TSong.Create(); - Song.Clear(); - Song.Resolution := 4; - SetLength(Song.BPM, 1); - Song.BPM[0].BPM := BPM*4; - SetLength(Note, 0); - - // extract notes - for T := 0 to High(Tracks) do - begin - if tsNotes in Tracks[T].Status then - begin - for N := 0 to High(Tracks[T].Note) do - begin - if (Tracks[T].Note[N].EventType = MIDI_EVENTTYPE_NOTEON) and - (Tracks[T].Note[N].Data2 > 0) then - begin - Nu := Length(Note); - SetLength(Note, Nu + 1); - Note[Nu].Start := Round(Tracks[T].Note[N].Start / Ticks); - Note[Nu].Len := Round(Tracks[T].Note[N].Len / Ticks); - Note[Nu].Tone := Tracks[T].Note[N].Data1 - 12*5; - Note[Nu].Lyric := '-'; - end; - end; - end; - end; - - // extract lyrics (and artist + title info) - for T := 0 to High(Tracks) do - begin - if not (tsLyrics in Tracks[T].Status) then - Continue; - - for N := 0 to High(Tracks[T].Note) do - begin - if (Tracks[T].Note[N].Event = MIDI_EVENT_META) then - begin - // determine and validate lyric meta tag - if (ltKMIDI in Tracks[T].LyricType) and - (Tracks[T].Note[N].Data1 = MIDI_META_TEXT) then - begin - Text := Tracks[T].Note[N].Str; - - // check for meta info - if (Length(Text) > 2) and (Text[1] = '@') then - begin - case Text[2] of - 'L': Song.Language := Copy(Text, 3, Length(Text)); // language - 'T': begin // title info - if (Song.Artist = '') then - Song.Artist := Copy(Text, 3, Length(Text)) - else if (Song.Title = '') then - Song.Title := Copy(Text, 3, Length(Text)); - end; - end; - Continue; - end; - - LyricType := ltKMIDI; - end - else if (ltSMFLyric in Tracks[T].LyricType) and - (Tracks[T].Note[N].Data1 = MIDI_META_LYRICS) then - begin - LyricType := ltSMFLyric; - end - else - begin - // unknown meta event - Continue; - end; - - AddLyric(Round(Tracks[T].Note[N].Start / Ticks), LyricType, Tracks[T].Note[N].Str); - end; - end; - end; - - // sort notes - for N := 0 to High(Note) do - for Nu := 0 to High(Note)-1 do - if Note[Nu].Start > Note[Nu+1].Start then - begin - NoteTemp := Note[Nu]; - Note[Nu] := Note[Nu+1]; - Note[Nu+1] := NoteTemp; - end; - - // move to 0 at beginning - Move := Note[0].Start; - for N := 0 to High(Note) do - Note[N].Start := Note[N].Start - Move; - - // copy notes - SetLength(Lines.Line, 1); - Lines.Number := 1; - Lines.High := 0; - Lines.Current := 0; - Lines.Resolution := 0; - Lines.NotesGAP := 0; - Lines.ScoreValue := 0; - - C := 0; - N := 0; - Lines.Line[C].HighNote := -1; - - for Nu := 0 to High(Note) do - begin - if Note[Nu].NewSentence then // new line - begin - SetLength(Lines.Line, Length(Lines.Line)+1); - Lines.Number := Lines.Number + 1; - Lines.High := Lines.High + 1; - C := C + 1; - N := 0; - SetLength(Lines.Line[C].Note, 0); - Lines.Line[C].HighNote := -1; - - //Calculate Start of the Last Sentence - if (C > 0) and (Nu > 0) then - begin - Max := Note[Nu].Start; - Min := Note[Nu-1].Start + Note[Nu-1].Len; - - case (Max - Min) of - 0: Lines.Line[C].Start := Max; - 1: Lines.Line[C].Start := Max; - 2: Lines.Line[C].Start := Max - 1; - 3: Lines.Line[C].Start := Max - 2; - else - if ((Max - Min) > 4) then - Lines.Line[C].Start := Min + 2 - else - Lines.Line[C].Start := Max; - - end; // case - - end; - end; - - // create space for new note - SetLength(Lines.Line[C].Note, Length(Lines.Line[C].Note)+1); - Inc(Lines.Line[C].HighNote); - - // initialize note - Lines.Line[C].Note[N].Start := Note[Nu].Start; - Lines.Line[C].Note[N].Length := Note[Nu].Len; - Lines.Line[C].Note[N].Tone := Note[Nu].Tone; - Lines.Line[C].Note[N].Text := DecodeStringUTF8(Note[Nu].Lyric, DEFAULT_ENCODING); - Lines.Line[C].Note[N].NoteType := ntNormal; - Inc(N); - end; -end; - -function TScreenEditConvert.CountSelectedTracks: integer; -var - T: integer; // track -begin - Result := 0; - for T := 0 to High(Tracks) do - if tsNotes in Tracks[T].Status then - Inc(Result); -end; - -{$IFDEF UseMIDIPort} -procedure TScreenEditConvert.MidiFile1MidiEvent(event: PMidiEvent); -begin - //Log.LogStatus(IntToStr(event.event), 'MIDI'); - try - MidiOut.PutShort(event.event, event.data1, event.data2); - except - MidiFile.StopPlaying(); - end; -end; -{$ENDIF} - -constructor TScreenEditConvert.Create; -var - P: integer; -begin - inherited Create; - AddButton(40, 20, 100, 40, Skin.GetTextureFileName('ButtonF')); - AddButtonText(15, 5, 0, 0, 0, 'Open'); - //Button[High(Button)].Text[0].Size := 11; - - AddButton(160, 20, 100, 40, Skin.GetTextureFileName('ButtonF')); - AddButtonText(25, 5, 0, 0, 0, 'Play'); - - AddButton(280, 20, 200, 40, Skin.GetTextureFileName('ButtonF')); - AddButtonText(25, 5, 0, 0, 0, 'Play Selected'); - - AddButton(500, 20, 100, 40, Skin.GetTextureFileName('ButtonF')); - AddButtonText(20, 5, 0, 0, 0, 'Save'); - - fFileName := PATH_NONE; - - for P := 0 to 100 do - begin - ColR[P] := Random(10)/10; - ColG[P] := Random(10)/10; - ColB[P] := Random(10)/10; - end; - -end; - -procedure TScreenEditConvert.OnShow; -{$IFDEF UseMIDIPort} -var - T: integer; // track - N: integer; // note - MidiTrack: TMidiTrack; - MidiEvent: PMidiEvent; - FileOpened: boolean; - KMIDITrackIndex, SMFTrackIndex: integer; -{$ENDIF} -begin - inherited; - - Interaction := 0; - -{$IFDEF UseMIDIPort} - MidiOut := TMidiOutput.Create(nil); - Log.LogInfo(MidiOut.ProductName, 'MIDI'); - MidiOut.Open; - MidiFile := nil; - SetLength(Tracks, 0); - - // Filename is only <> PATH_NONE if we called the OpenScreen before - fFilename := ScreenOpen.Filename; - if (fFilename = PATH_NONE) then - Exit; - ScreenOpen.Filename := PATH_NONE; - - FileOpened := false; - if fFileName.Exists then - begin - MidiFile := TMidiFile.Create(nil); - MidiFile.Filename := fFileName; - try - MidiFile.ReadFile; - FileOpened := true; - except - MidiFile.Free; - end; - end; - - if (not FileOpened) then - begin - ScreenPopupError.ShowPopup(Language.Translate('ERROR_FILE_NOT_FOUND')); - Exit; - end; - - Len := 0; - SelTrack := 0; - BPM := MidiFile.Bpm; - Ticks := MidiFile.TicksPerQuarter / 4; - - KMIDITrackIndex := -1; - SMFTrackIndex := -1; - - SetLength(Tracks, MidiFile.NumberOfTracks); - for T := 0 to MidiFile.NumberOfTracks-1 do - Tracks[T].LyricType := []; - - for T := 0 to MidiFile.NumberOfTracks-1 do - begin - MidiTrack := MidiFile.GetTrack(T); - MidiTrack.OnMidiEvent := nil; - Tracks[T].Name := DecodeStringUTF8(MidiTrack.getName, DEFAULT_ENCODING); - Tracks[T].NoteType := ntNone; - Tracks[T].Status := []; - - SetLength(Tracks[T].Note, MidiTrack.getEventCount()); - for N := 0 to MidiTrack.getEventCount-1 do - begin - MidiEvent := MidiTrack.GetEvent(N); - - Tracks[T].Note[N].Start := MidiEvent.time; - Tracks[T].Note[N].Len := MidiEvent.len; - Tracks[T].Note[N].Event := MidiEvent.event; - Tracks[T].Note[N].EventType := MidiEvent.event shr 4; - Tracks[T].Note[N].Channel := MidiEvent.event and $0F; - Tracks[T].Note[N].Data1 := MidiEvent.data1; - Tracks[T].Note[N].Data2 := MidiEvent.data2; - Tracks[T].Note[N].Str := DecodeStringUTF8(MidiEvent.str, DEFAULT_ENCODING); - - if (Tracks[T].Note[N].Event = MIDI_EVENT_META) then - begin - case (Tracks[T].Note[N].Data1) of - MIDI_META_TEXT: begin - // KMIDI lyrics (uses MIDI_META_TEXT events) - if (StrLComp(PAnsiChar(Tracks[T].Note[N].Str), '@KMIDI KARAOKE FILE', 19) = 0) and - (High(Tracks) >= T+1) then - begin - // The '@KMIDI ...' mark is in the first track (mostly named 'Soft Karaoke') - // but the lyrics are in the second track (named 'Words') - Tracks[T+1].LyricType := Tracks[T+1].LyricType + [ltKMIDI]; - KMIDITrackIndex := T+1; - end; - end; - MIDI_META_LYRICS: begin - // lyrics in Standard Midi File format found (uses MIDI_META_LYRICS events) - Tracks[T].LyricType := Tracks[T].LyricType + [ltSMFLyric]; - SMFTrackIndex := T; - end; - end; - end - else if (Tracks[T].Note[N].EventType = MIDI_EVENTTYPE_NOTEON) then - begin - // notes available - Tracks[T].NoteType := ntAvail; - end; - - if Tracks[T].Note[N].Start + Tracks[T].Note[N].Len > Len then - Len := Tracks[T].Note[N].Start + Tracks[T].Note[N].Len; - end; - end; - - // set default lyric track. Prefer KMIDI. - if (KMIDITrackIndex > -1) then - Tracks[KMIDITrackIndex].Status := Tracks[KMIDITrackIndex].Status + [tsLyrics] - else if (SMFTrackIndex > -1) then - Tracks[SMFTrackIndex].Status := Tracks[SMFTrackIndex].Status + [tsLyrics]; -{$ENDIF} -end; - -function TScreenEditConvert.Draw: boolean; -var - Count: integer; - Count2: integer; - Bottom: real; - X: real; - Y: real; - Height: real; - YSkip: real; -begin - // draw static menu - inherited Draw; - - Y := 100; - - Height := min(480, 40 * Length(Tracks)); - Bottom := Y + Height; - - YSkip := Height / Length(Tracks); - - // highlight selected track - DrawQuad(10, Y+SelTrack*YSkip, 780, YSkip, 0.8, 0.8, 0.8); - - // track-selection info - for Count := 0 to High(Tracks) do - if Tracks[Count].Status <> [] then - DrawQuad(10, Y + Count*YSkip, 50, YSkip, 0.8, 0.3, 0.3); - glColor3f(0, 0, 0); - for Count := 0 to High(Tracks) do - begin - if Tracks[Count].NoteType = ntAvail then - begin - if tsNotes in Tracks[Count].Status then - glColor3f(0, 0, 0) - else - glColor3f(0.7, 0.7, 0.7); - SetFontPos(25, Y + Count*YSkip + 10); - SetFontSize(15); - glPrint('N'); - end; - if Tracks[Count].LyricType <> [] then - begin - if tsLyrics in Tracks[Count].Status then - glColor3f(0, 0, 0) - else - glColor3f(0.7, 0.7, 0.7); - SetFontPos(40, Y + Count*YSkip + 10); - SetFontSize(15); - glPrint('L'); - end; - end; - - DrawLine( 10, Y, 10, Bottom, 0, 0, 0); - DrawLine( 60, Y, 60, Bottom, 0, 0, 0); - DrawLine(790, Y, 790, Bottom, 0, 0, 0); - - for Count := 0 to Length(Tracks) do - DrawLine(10, Y + Count*YSkip, 790, Y + Count*YSkip, 0, 0, 0); - - for Count := 0 to High(Tracks) do - begin - SetFontPos(65, Y + Count*YSkip); - SetFontSize(15); - glPrint(Tracks[Count].Name); - end; - - for Count := 0 to High(Tracks) do - begin - for Count2 := 0 to High(Tracks[Count].Note) do - begin - if Tracks[Count].Note[Count2].EventType = MIDI_EVENTTYPE_NOTEON then - DrawQuad(60 + Tracks[Count].Note[Count2].Start/Len * 725, - Y + (Count+1)*YSkip - Tracks[Count].Note[Count2].Data1*35/127, - 3, 3, - ColR[Count], ColG[Count], ColB[Count]); - if Tracks[Count].Note[Count2].EventType = 15 then - DrawLine(60 + Tracks[Count].Note[Count2].Start/Len * 725, Y + 0.75 * YSkip + Count*YSkip, - 60 + Tracks[Count].Note[Count2].Start/Len * 725, Y + YSkip + Count*YSkip, - ColR[Count], ColG[Count], ColB[Count]); - end; - end; - - // playing line - {$IFDEF UseMIDIPort} - if (MidiFile <> nil) then - X := 60 + MidiFile.GetCurrentTime/MidiFile.GetTrackLength*730; - {$ENDIF} - DrawLine(X, Y, X, Bottom, 0.3, 0.3, 0.3); - - Result := true; -end; - -procedure TScreenEditConvert.OnHide; -begin -{$IFDEF UseMIDIPort} - FreeAndNil(MidiFile); - MidiOut.Close; - FreeAndNil(MidiOut); -{$ENDIF} -end; - -end. diff --git a/src/screens/UScreenEditHeader.pas b/src/screens/UScreenEditHeader.pas index e610e927..2b7b2abf 100644 --- a/src/screens/UScreenEditHeader.pas +++ b/src/screens/UScreenEditHeader.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenEditHeader.pas $ - * $Id: UScreenEditHeader.pas 2246 2010-04-18 13:43:36Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenEditHeader; interface diff --git a/src/screens/UScreenEditSub.pas b/src/screens/UScreenEditSub.pas index 0445fb45..c5764625 100644 --- a/src/screens/UScreenEditSub.pas +++ b/src/screens/UScreenEditSub.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenEditSub.pas $ - * $Id: UScreenEditSub.pas 3103 2014-11-22 23:21:19Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenEditSub; interface @@ -38,6 +36,7 @@ interface UMusic, sdl2, SysUtils, + strutils, UFiles, UGraphicClasses, UTime, @@ -67,6 +66,7 @@ TMedleyNotes = record Preview: TPos; isStart: boolean; //start beat is declared isEnd: boolean; //end beat is declared + isCustom: boolean; end; TVisibleHeaders = record @@ -284,12 +284,14 @@ TScreenEditSub = class(TMenu) //video view procedure StartVideoPreview(); procedure StopVideoPreview(); + procedure UpdateVideoPosition(NewPosition: real); //Note Name Mod function GetNoteName(Note: integer): string; // show transparent background note for intaractions procedure ShowInteractiveBackground; - function GetMedleyLength: real; //returns if availible the length of the medley in seconds, else 0 + procedure UpdateMedleyInfo; + function GetMedleyLength: real; //if available returns the length of the medley in seconds, otherwise 0 public Tex_PrevBackground: TTexture; @@ -429,6 +431,7 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre end else } if (MedleyNotes.isStart and MedleyNotes.isEnd) and + MedleyNotes.isCustom and (MedleyNotes.start.line < MedleyNotes.end_.line) and (Length(Lines[0].Line)> MedleyNotes.end_.line) and (Length(Lines[0].Line[MedleyNotes.end_.line].Note)>MedleyNotes.end_.note) and @@ -440,7 +443,7 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre Lines[0].Line[MedleyNotes.end_.line].Note[MedleyNotes.end_.note].Length; CurrentSong.Medley.FadeIn_time := DEFAULT_FADE_IN_TIME; CurrentSong.Medley.FadeOut_time := DEFAULT_FADE_OUT_TIME; - end else + end else if MedleyNotes.isCustom then begin CurrentSong.Medley.Source := msNone; CurrentSong.Medley.StartBeat:=0; @@ -485,6 +488,63 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre Exit; end; + // set PreviewStart tag + SDLK_I: + begin + if SDL_ModState and KMOD_SHIFT <> 0 then + begin + // set preview start + R := GetTimeFromBeat(Lines[0].Line[Lines[0].Current].Note[CurrentNote].End_); + CurrentSong.PreviewStart := ifthen(CurrentSong.PreviewStart <> R, R, -1); + CurrentSong.HasPreview := CurrentSong.PreviewStart >= 0.0; + Text[TextDebug].Text := ifthen(CurrentSong.HasPreview, Format('Preview start set at %0.2fs', [CurrentSong.PreviewStart]), 'Preview start cleared'); + end + else if InRange(CurrentSong.PreviewStart, 0.0, AudioPlayback.Length) then + begin + if SDL_ModState = KMOD_LALT then + begin // jump and play + // simulate sentence switch to clear props + PreviousSentence; + + Lines[0].Current := 0; // update lyric + + PlayStopTime := AudioPlayback.Length; + PlaySentence := true; + Click := false; + AudioPlayback.Position := CurrentSong.PreviewStart; + AudioPlayback.Play; + + // play video in sync if visible + if (fCurrentVideo <> nil) then UpdateVideoPosition(AudioPlayback.Position); + end + else if SDL_ModState = 0 then + begin // jump to preview start + // simulate sentence switch to clear props + PreviousSentence; + + AktBeat := Floor(GetMidBeat(CurrentSong.PreviewStart - (CurrentSong.GAP) / 1000)); + i := 0; while (i <= Lines[0].High) and (AktBeat > Lines[0].Line[i].End_) do Inc(i); + if i <= High(Lines[0].Line) then + begin + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; + Lines[0].Current := i; + + // finding the right note + CurrentNote := 0; + while (CurrentNote <= Lines[0].Line[i].HighNote) and (AktBeat > Lines[0].Line[i].Note[CurrentNote].End_) do Inc(CurrentNote); + + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 2; + Lyric.AddLine(Lines[0].Current); + Lyric.Selected := 0; + + Text[TextDebug].Text := Format('Preview starts at %0.2fs', [CurrentSong.PreviewStart]); + end; + end; + end + else Text[TextDebug].Text := 'No preview start'; + Exit; + end; + // set Medley tags SDLK_A: begin @@ -502,6 +562,7 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre end; } + MedleyNotes.isCustom := true; if SDL_ModState = KMOD_LSHIFT then //Medley End Note begin if MedleyNotes.isEnd then @@ -552,8 +613,7 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre end; end; - //show length of medley - Text[TextDebug].Text := FormatFloat('MedleyLength: #0.00s', GetMedleyLength); + UpdateMedleyInfo; Exit; end; @@ -573,56 +633,50 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre Exit; end; } + + if not MedleyNotes.IsEnd and not MedleyNotes.IsStart then + begin + // TODO: localize popup message for medley without start/end beat + ScreenPopupError.ShowPopup('No Medley section set. Check your txt file or set it with A and Shift+A.'); + Exit; + end; + if (SDL_ModState = KMOD_LSHIFT) and MedleyNotes.IsEnd then //Medley End Note begin - {$IFDEF UseMIDIPort} MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); - PlaySentenceMidi := false; - PlayOneMidi := false; {$ENDIF} - AudioPlayback.Stop; - PlaySentence := false; - PlayOne := false; + // simulate sentence switch to clear props + PreviousSentence; - if (Length(Lines[0].Line)> MedleyNotes.end_.line) and - (Length(Lines[0].Line[MedleyNotes.end_.line].Note)>MedleyNotes.end_.note) then + if (Length(Lines[0].Line) > MedleyNotes.end_.line) and + (Length(Lines[0].Line[MedleyNotes.end_.line].Note) > MedleyNotes.end_.note) then begin - Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 0; Lines[0].Current := MedleyNotes.end_.line; CurrentNote := MedleyNotes.end_.note; Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 2; - //EditorLyric[0].AddCzesc(0, Lines[0].Current); - //EditorLyric[0].Selected := AktNuta[0]; + Lyric.AddLine(Lines[0].Current); + Lyric.Selected := 0; end; end else if MedleyNotes.IsStart then begin - {$IFDEF UseMIDIPort} MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); - PlaySentenceMidi := false; - PlayOneMidi := false; {$ENDIF} - AudioPlayback.Stop; - PlaySentence := false; - PlayOne := false; + // simulate sentence switch to clear props + PreviousSentence; if (Length(Lines[0].Line)> MedleyNotes.start.line) and - (Length(Lines[0].Line[MedleyNotes.start.line].Note)>MedleyNotes.start.note) then + (Length(Lines[0].Line[MedleyNotes.start.line].Note) > MedleyNotes.start.note) then begin - Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 0; Lines[0].Current := MedleyNotes.start.line; CurrentNote := MedleyNotes.start.note; Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 2; - //EditorLyric[0].AddCzesc(0, Lines[0].Akt); - //EditorLyric[0].Selected := AktNuta[0]; + Lyric.AddLine(Lines[0].Current); + Lyric.Selected := 0; end; end; if (SDL_ModState = KMOD_LALT) then begin - PlaySentenceMidi := false; - PlayOneMidi := false; - PlayOne := false; - AudioPlayback.Stop; - //LineChanged[0]:=false; - //LineChanged[1]:=false; + // simulate sentence switch to clear props + PreviousSentence; if (MedleyNotes.isStart and MedleyNotes.isEnd) and (MedleyNotes.start.line < MedleyNotes.end_.line) and @@ -631,26 +685,23 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre (Length(Lines[0].Line[MedleyNotes.start.line].Note)>MedleyNotes.start.note) then begin R := GetTimeFromBeat(Lines[0].Line[MedleyNotes.start.line].Note[MedleyNotes.start.note].Start); - if R <= AudioPlayback.Length then + if InRange(R, 0.0, AudioPlayback.Length) then begin AudioPlayback.Position:= R; - - //noteStart := AktNuta[0]; - //lineStart := Lines[0].Akt; - //cpStart := 0; - PlayStopTime := GetTimeFromBeat( Lines[0].Line[MedleyNotes.end_.line].Note[MedleyNotes.end_.note].Start + Lines[0].Line[MedleyNotes.end_.line].Note[MedleyNotes.end_.note].Length); PlaySentence := true; + Click := false; AudioPlayback.Play; - LastClick := Lines[0].Line[MedleyNotes.start.line].Note[MedleyNotes.start.note].Start-1; + + // play video in sync if visible + if (fCurrentVideo <> nil) then UpdateVideoPosition(AudioPlayback.Position); end; end; end; - //show length of medley - Text[TextDebug].Text := FormatFloat('MedleyLength: #0.00s', GetMedleyLength); + UpdateMedleyInfo; Exit; end; @@ -719,19 +770,35 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre end; SDLK_V: begin - if SDL_ModState = 0 then + if (SDL_ModState = 0) or (SDL_ModState = KMOD_LALT) then begin - AudioPlayback.Stop; - Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; + StopVideoPreview; + AudioPlayback.Stop; + PlayVideo := true; + PlaySentenceMidi := false; + StopVideoPreview(); + Click := true; + with Lines[0].Line[Lines[0].Current] do + begin + Note[CurrentNote].Color := 1; CurrentNote := 0; - AudioPlayback.Position := GetTimeFromBeat(Lines[0].Line[Lines[0].Current].Note[0].Start); - PlayStopTime := GetTimeFromBeat(Lines[0].Line[Lines[0].High].End_); - PlaySentence := true; - AudioPlayback.Play; - LastClick := -100; - PlayVideo := true; - StartVideoPreview(); - Text[TextDebug].Text := Language.Translate('INFO_PLAY_SONG'); + AudioPlayback.Position := GetTimeFromBeat(Note[0].Start); + PlayStopTime := ifthen(SDL_ModState = KMOD_LALT, + GetTimeFromBeat(Lines[0].Line[Lines[0].High].End_), + GetTimeFromBeat(Note[High(Note)].End_)); + end; + if (SDL_ModState = KMOD_LALT) then + begin + PlaySentenceMidi := true; + {$IFDEF UseMIDIPort} MidiTime := USTime.GetTime; + MidiStart := AudioPlayback.Position; + MidiStop := PlayStopTime; {$ENDIF} + end; + PlaySentence := true; + AudioPlayback.Play; + LastClick := -100; + StartVideoPreview(); + Text[TextDebug].Text := Language.Translate('INFO_PLAY_SONG'); end; // Paste text if SDL_ModState = KMOD_LCTRL then @@ -1012,7 +1079,7 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre ShowInteractiveBackground; end; - SDLK_SLASH: + SDLK_SLASH, SDLK_HASH: begin CopyToUndo; if SDL_ModState = 0 then @@ -1079,10 +1146,16 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre begin // Play Midi PlaySentenceMidi := false; + PlayVideo := false; midinotefound := false; PlayOne := true; PlayOneMidi := true; - //basisbit ToDo add midi tone playback support here + StopVideoPreview(); + {$IFDEF UseMIDIPort} MidiTime := USTime.GetTime; + MidiStart := GetTimeFromBeat(Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start); + MidiStop := GetTimeFromBeat( + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Start + + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Length); {$ENDIF} LastClick := -100; end; end; @@ -1314,8 +1387,8 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre PlayOne := false; PlayVideo := false; {$IFDEF UseMIDIPort} - MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); - MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); + //MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); + //MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); PlaySentenceMidi := false; {$endif} Lines[0].Line[Lines[0].Current].Note[CurrentNote].Color := 1; @@ -1383,8 +1456,8 @@ function TScreenEditSub.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre PlayOne := false; PlayVideo := false; {$IFDEF UseMIDIPort} - MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); - MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); + //MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); + //MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); PlaySentenceMidi := false; {$endif} @@ -1569,13 +1642,16 @@ function TScreenEditSub.ParseInputEditText(PressedKey: cardinal; CharCode: UCS4C end; SDLK_BACKSPACE: begin - UTF8Delete(CurrentEditText, TextPosition, 1); - dec(TextPosition); - if TextEditMode then + if (TextPosition > 0) then begin - Lines[0].Line[Lines[0].Current].Note[CurrentNote].Text := UTF8Copy(CurrentEditText, 1, TextPosition) + UTF8Copy(CurrentEditText, TextPosition+1, LengthUTF8(CurrentEditText)-TextPosition); - Lyric.AddLine(Lines[0].Current); - Lyric.Selected := CurrentNote; + UTF8Delete(CurrentEditText, TextPosition, 1); + dec(TextPosition); + if TextEditMode then + begin + Lines[0].Line[Lines[0].Current].Note[CurrentNote].Text := UTF8Copy(CurrentEditText, 1, TextPosition) + UTF8Copy(CurrentEditText, TextPosition+1, LengthUTF8(CurrentEditText)-TextPosition); + Lyric.AddLine(Lines[0].Current); + Lyric.Selected := CurrentNote; + end; end; end; SDLK_DELETE: @@ -1662,6 +1738,8 @@ function TScreenEditSub.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: Xmouse := 0; end; + if (nBut > -1) then + begin if (BtnDown) then begin @@ -1809,83 +1887,94 @@ function TScreenEditSub.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: Xmouse := CurrentX - LastX; // log.LogError('beside notes'); end; - - end; - // changed cover - if ((CoverSlideId = Interactions[nBut].Num) and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then - begin - CopyToUndo; - SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption -1; - CurrentSong.Cover := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); - end; - - if ((CoverSlideId = Interactions[nBut].Num) and (Action = maRight) and (SelectsS[Interactions[nBut].Num].SelectedOption < Length(SelectsS[Interactions[nBut].Num].TextOptT)-1)) then - begin - CopyToUndo; - SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption +1; - CurrentSong.Cover := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); - end; - - if ((BackgroundSlideId = Interactions[nBut].Num) and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then - begin - CopyToUndo; - SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption -1; - CurrentSong.Background := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); - // change background picture - Tex_PrevBackground := Texture.LoadTexture(CurrentSong.Path.Append(CurrentSong.Background)); - Texture.AddTexture(Tex_PrevBackground, TEXTURE_TYPE_PLAIN, false); - Statics[BackgroundImageId].Texture := Tex_PrevBackground; - Statics[BackgroundImageId].Texture.X := theme.EditSub.BackgroundImage.X; - Statics[BackgroundImageId].Texture.Y := theme.EditSub.BackgroundImage.Y; - Statics[BackgroundImageId].Texture.W := theme.EditSub.BackgroundImage.W; - Statics[BackgroundImageId].Texture.H := theme.EditSub.BackgroundImage.H; end; + // changed cover + if ((CoverSlideId = Interactions[nBut].Num) and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then + begin + CopyToUndo; + SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption -1; + CurrentSong.Cover := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); + end; - if ((BackgroundSlideId = Interactions[nBut].Num) and (Action = maRight) and (SelectsS[Interactions[nBut].Num].SelectedOption < Length(SelectsS[Interactions[nBut].Num].TextOptT)-1)) then - begin - CopyToUndo; - SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption +1; - CurrentSong.Background := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); - // change background picture - Tex_PrevBackground := Texture.LoadTexture(CurrentSong.Path.Append(CurrentSong.Background)); - Texture.AddTexture(Tex_PrevBackground, TEXTURE_TYPE_PLAIN, false); - Statics[BackgroundImageId].Texture := Tex_PrevBackground; - Statics[BackgroundImageId].Texture.X := theme.EditSub.BackgroundImage.X; - Statics[BackgroundImageId].Texture.Y := theme.EditSub.BackgroundImage.Y; - Statics[BackgroundImageId].Texture.W := theme.EditSub.BackgroundImage.W; - Statics[BackgroundImageId].Texture.H := theme.EditSub.BackgroundImage.H; + if ((CoverSlideId = Interactions[nBut].Num) and (Action = maRight) and (SelectsS[Interactions[nBut].Num].SelectedOption < Length(SelectsS[Interactions[nBut].Num].TextOptT)-1)) then + begin + CopyToUndo; + SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption +1; + CurrentSong.Cover := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); end; - if ((Mp3SlideId = Interactions[nBut].Num) and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then + if ((BackgroundSlideId = Interactions[nBut].Num) and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then begin CopyToUndo; SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption -1; - CurrentSong.Mp3 := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); - AudioPlayback.Close; - AudioPlayback.Open(CurrentSong.Path.Append(CurrentSong.Mp3)); + CurrentSong.Background := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); + // change background picture + Tex_PrevBackground := Texture.LoadTexture(CurrentSong.Path.Append(CurrentSong.Background)); + Texture.AddTexture(Tex_PrevBackground, TEXTURE_TYPE_PLAIN, false); + Statics[BackgroundImageId].Texture := Tex_PrevBackground; + Statics[BackgroundImageId].Texture.X := theme.EditSub.BackgroundImage.X; + Statics[BackgroundImageId].Texture.Y := theme.EditSub.BackgroundImage.Y; + Statics[BackgroundImageId].Texture.W := theme.EditSub.BackgroundImage.W; + Statics[BackgroundImageId].Texture.H := theme.EditSub.BackgroundImage.H; end; - if ((Mp3SlideId = Interactions[nBut].Num) and (Action = maRight) and (SelectsS[Interactions[nBut].Num].SelectedOption < Length(SelectsS[Interactions[nBut].Num].TextOptT)-1)) then + if ((BackgroundSlideId = Interactions[nBut].Num) and (Action = maRight) and (SelectsS[Interactions[nBut].Num].SelectedOption < Length(SelectsS[Interactions[nBut].Num].TextOptT)-1)) then begin CopyToUndo; SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption +1; - CurrentSong.Mp3 := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); - AudioPlayback.Close(); - AudioPlayback.Open(CurrentSong.Path.Append(CurrentSong.Mp3)); + CurrentSong.Background := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); + // change background picture + Tex_PrevBackground := Texture.LoadTexture(CurrentSong.Path.Append(CurrentSong.Background)); + Texture.AddTexture(Tex_PrevBackground, TEXTURE_TYPE_PLAIN, false); + Statics[BackgroundImageId].Texture := Tex_PrevBackground; + Statics[BackgroundImageId].Texture.X := theme.EditSub.BackgroundImage.X; + Statics[BackgroundImageId].Texture.Y := theme.EditSub.BackgroundImage.Y; + Statics[BackgroundImageId].Texture.W := theme.EditSub.BackgroundImage.W; + Statics[BackgroundImageId].Texture.H := theme.EditSub.BackgroundImage.H; + end; + + if ((Mp3SlideId = Interactions[nBut].Num) and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then + begin + CopyToUndo; + SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption -1; + CurrentSong.Mp3 := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); + AudioPlayback.Close; + AudioPlayback.Open(CurrentSong.Path.Append(CurrentSong.Mp3)); + end; + + if ((Mp3SlideId = Interactions[nBut].Num) and (Action = maRight) and (SelectsS[Interactions[nBut].Num].SelectedOption < Length(SelectsS[Interactions[nBut].Num].TextOptT)-1)) then + begin + CopyToUndo; + SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption +1; + CurrentSong.Mp3 := Path(SelectsS[Interactions[nBut].Num].TextOptT[SelectsS[Interactions[nBut].Num].SelectedOption]); + AudioPlayback.Close(); + AudioPlayback.Open(CurrentSong.Path.Append(CurrentSong.Mp3)); + end; + + if (((VolumeAudioSlideId = Interactions[nBut].Num) or (VolumeMidiSlideId = Interactions[nBut].Num) or (VolumeClickSlideId = Interactions[nBut].Num)) + and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then + begin + SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption -1; end; - if (((VolumeAudioSlideId = Interactions[nBut].Num) or (VolumeMidiSlideId = Interactions[nBut].Num) or (VolumeClickSlideId = Interactions[nBut].Num)) - and (Action = maLeft) and (SelectsS[Interactions[nBut].Num].SelectedOption > 0)) then - begin - SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption -1; - end; + if (((VolumeAudioSlideId = Interactions[nBut].Num) or (VolumeMidiSlideId = Interactions[nBut].Num) or (VolumeClickSlideId = Interactions[nBut].Num)) + and (Action = maRight) and (SelectsS[Interactions[nBut].Num].SelectedOption < Length(SelectsS[Interactions[nBut].Num].TextOptT)-1)) then + begin + SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption +1; + end; - if (((VolumeAudioSlideId = Interactions[nBut].Num) or (VolumeMidiSlideId = Interactions[nBut].Num) or (VolumeClickSlideId = Interactions[nBut].Num)) - and (Action = maRight) and (SelectsS[Interactions[nBut].Num].SelectedOption < Length(SelectsS[Interactions[nBut].Num].TextOptT)-1)) then + end + else if (MouseButton = SDL_BUTTON_RIGHT) then begin - SelectsS[Interactions[nBut].Num].SelectedOption := SelectsS[Interactions[nBut].Num].SelectedOption +1; + if length(UndoLines) > 0 then + begin + ScreenPopupcheck.ShowPopup(Language.Translate('INFO_EXIT'), OnExit, 0, false); + end + else + begin + FadeTo(@ScreenSong); + end; end; - case Action of maReturn: Result := ParseInput(SDLK_RETURN, 0, true); // maLeft: Result := ParseInput(SDLK_LEFT, 0, true); @@ -2150,8 +2239,8 @@ procedure TScreenEditSub.JoinSentence; procedure TScreenEditSub.NextSentence; begin {$IFDEF UseMIDIPort} - MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); - MidiOut.PutShort(MIDI_NOTEOFF or 1, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); + //MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); + //MidiOut.PutShort(MIDI_NOTEOFF or 1, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); PlaySentenceMidi := false; PlayOne := false; {$ENDIF} @@ -2177,8 +2266,8 @@ procedure TScreenEditSub.PreviousSentence; PlaySentence := false; PlayOne := false; {$IFDEF UseMIDIPort} - MidiOut.PutShort(MIDI_NOTEOFF or 1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); - MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); + //MidiOut.PutShort(MIDI_NOTEOFF or 1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); + //MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[MidiLastNote].Tone + 60, 127); PlaySentenceMidi := false; {$endif} @@ -2887,6 +2976,7 @@ procedure TScreenEditSub.DrawText(Left, Top, Right: real; NrLines: integer; Spac TempR: real; PlayerNumber: integer; + OrgFontStyle: integer; GoldenStarPos: real; begin @@ -2898,13 +2988,18 @@ procedure TScreenEditSub.DrawText(Left, Top, Right: real; NrLines: integer; Spac glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - if (Lines[NrLines].Line[Lines[NrLines].Current].TotalNotes > 0) and ( Right-Left > 0 ) and ( (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) > 0 ) then - TempR := (Right-Left) / (Lines[NrLines].Line[Lines[NrLines].Current].End_ - Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) - else - TempR := 0; + if not Lines[NrLines].Line[Lines[NrLines].Current].HasLength(TempR) then TempR := 0 + else TempR := (Right-Left) / TempR; with Lines[NrLines].Line[Lines[NrLines].Current] do begin + + OrgFontStyle := ActFont; + glColor4f(0, 0, 0, 1); + SetFontStyle(1); + SetFontItalic(False); + SetFontSize(14); + for Count := 0 to HighNote do begin with Note[Count] do @@ -2918,16 +3013,15 @@ procedure TScreenEditSub.DrawText(Left, Top, Right: real; NrLines: integer; Spac // middle part Rec.Left := (Start-Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) * TempR + Left + 0.5 + 10*ScreenX + NotesW[0]; Rec.Right := (Start+Length-Lines[NrLines].Line[Lines[NrLines].Current].Note[0].Start) * TempR + Left - NotesW[0] - 0.5 + 10*ScreenX; - glColor4f(0, 0, 0, 1); - SetFontStyle (1); - SetFontItalic(False); - SetFontSize(14); SetFontPos (Rec.Left, Rec.Top); glPrint(Text); end; // with end; // for end; // with + // revert the font to prevent conflicts within drawing the editor lyric line + SetFontStyle(OrgFontStyle); + glDisable(GL_BLEND); glDisable(GL_TEXTURE_2D); end; @@ -3002,6 +3096,15 @@ procedure TScreenEditSub.StopVideoPreview; end; end; +procedure TScreenEditSub.UpdateVideoPosition(NewPosition: real); +begin + if (fCurrentVideo <> nil) then + begin + fCurrentVideo.Position := CurrentSong.VideoGAP + NewPosition; + fCurrentVideo.Play; + end; +end; + constructor TScreenEditSub.Create; var i: integer; @@ -3164,6 +3267,69 @@ procedure TScreenEditSub.OnShow; FileExt: IPath; Files: TPathDynArray; i: integer; + + function IsBeatMatchingNote(beat: integer; Note: TLineFragment): boolean; + begin + Result := InRange(beat, Note.Start, Note.Start+Note.Length); + end; + + // borrowed from TScreenSing.LoadNextSong + function FindNote(beat: integer): TPos; + var + line: integer; + note: integer; + diff, mindiff: integer; + + begin + for line := 0 to length(Lines[0].Line) - 1 do + begin + for note := 0 to length(Lines[0].Line[line].Note) - 1 do + begin + if IsBeatMatchingNote(beat, Lines[0].Line[line].Note[note]) then + begin + Result.cp := 0; + Result.line := line; + Result.note := note; + Exit; + end; + + diff := abs(Lines[0].Line[line].Note[note].Start - beat); + if diff < mindiff then + begin + mindiff := diff; + Result.line := line; + Result.note := note; + end; + end; + end; + + //second try (approximating) + mindiff := high(integer); + for line := 0 to length(Lines[0].Line) - 1 do + begin + for note := 0 to length(Lines[0].Line[line].Note) - 1 do + begin + diff := abs(Lines[0].Line[line].Note[note].Start - beat); + if diff < mindiff then + begin + mindiff := diff; + Result.line := line; + Result.note := note; + end; + end; + end; + + // return approximated note + if diff > 0 then + begin + Result.cp := 0; + Exit; + end; + + Result.cp := 0; + Result.line := -1; + Result.note := -1; + end; begin inherited; // reset video playback engine @@ -3193,8 +3359,10 @@ procedure TScreenEditSub.OnShow; begin // reread header with custom tags Error := not CurrentSong.Analyse(true, false); - if not Error then - Error := not CurrentSong.LoadSong(false); + + // with the duet/medley code, TSong.Analyse is already loading the song + //if not Error then + // Error := not CurrentSong.LoadSong(false); end; except Error := true; @@ -3367,6 +3535,17 @@ procedure TScreenEditSub.OnShow; //Set Down Music Volume for Better hearability of Midi Sounds //Music.SetVolume(0.4); + // finding the note for the Medley section + MedleyNotes := Default(TMedleyNotes); + if (CurrentSong.Medley.Source = msTag) then + begin + if (CurrentSong.Medley.EndBeat > 0) then MedleyNotes.end_ := FindNote(CurrentSong.Medley.EndBeat); + if (CurrentSong.Medley.EndBeat > CurrentSong.Medley.StartBeat) then MedleyNotes.start := FindNote(CurrentSong.Medley.StartBeat); + + MedleyNotes.isEnd := (MedleyNotes.end_.line > 0) or (MedleyNotes.end_.note >= 0); + MedleyNotes.isStart:= (MedleyNotes.start.line > 0) or (MedleyNotes.start.note >= 0); + end; + Lyric.Clear; Lyric.X := 400; Lyric.Y := 500; @@ -3477,11 +3656,12 @@ function TScreenEditSub.Draw: boolean; if (PlaySentence or PlayVideo) then AktBeat := Floor(GetMidBeat(AudioPlayback.Position - (CurrentSong.GAP) / 1000)); + // store current line, find next line to given beat lastline := Lines[0].Current; - repeat //find current line - if Lines[0].Line[Lines[0].Current].End_ < AktBeat then + while (Lines[0].Current < High(Lines[0].Line)) and (Lines[0].Line[Lines[0].Current].End_ < AktBeat) do inc(Lines[0].Current); - until ((Length(Lines[0].Line) = Lines[0].Current) or (Lines[0].Line[Lines[0].Current].End_ >= AktBeat)); + + // only update lyric if line changes if Lines[0].Current <> lastline then begin Lines[0].Line[lastline].Note[CurrentNote].Color := 1; @@ -3565,7 +3745,7 @@ function TScreenEditSub.Draw: boolean; midinotefound := true; MidiOut.PutShort($B1, $7, floor(1.27*SelectsS[VolumeMidiSlideId].SelectedOption)); // if i > 0 then - MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[currentnote-1].Tone + 60, 127); + MidiOut.PutShort($81, Lines[0].Line[Lines[0].Current].Note[currentnote].Tone + 60, 127); MidiOut.PutShort($91, Lines[0].Line[Lines[0].Current].Note[currentnote].Tone + 60, 127); MidiLastNote := i; @@ -3757,4 +3937,17 @@ function TScreenEditSub.GetMedleyLength: real; Result := 0; end; +procedure TScreenEditSub.UpdateMedleyInfo; +begin + if not MedleyNotes.IsStart and not MedleyNotes.IsEnd then + Text[TextDebug].Text := '' + else if not MedleyNotes.IsStart then + Text[TextDebug].Text := Format('No Medley start beat.%s', [ifthen(MedleyNotes.IsEnd, Format(' End beat is at %d', [Lines[0].Line[MedleyNotes.end_.line].Note[MedleyNotes.end_.note].Start]))]) + else if not MedleyNotes.IsEnd then + Text[TextDebug].Text := Format('No Medley end beat.%s', [ifthen(MedleyNotes.IsStart, Format(' Start beat is at %d', [Lines[0].Line[MedleyNotes.start.line].Note[MedleyNotes.start.note].Start]))]) + else + Text[TextDebug].Text := Format('MedleyLength: %0.2fs %s', [GetMedleyLength, ifthen(MedleyNotes.isCustom, '(custom)', '(txt)')]); + +end; + end. diff --git a/src/screens/UScreenJukebox.pas b/src/screens/UScreenJukebox.pas index a67c59e0..76de7e0b 100644 --- a/src/screens/UScreenJukebox.pas +++ b/src/screens/UScreenJukebox.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenJukebox; interface @@ -825,173 +823,173 @@ function TScreenJukebox.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: else begin //song scrolling with mousewheel - {if (MouseButton = SDL_BUTTON_WHEELDOWN) then - Result := ParseInput(SDLK_PAGEDOWN, 0, true); + if (MouseButton = SDL_BUTTON_WHEELDOWN) then + Result := ParseInput(SDLK_PAGEDOWN, 0, true) - if (MouseButton = SDL_BUTTON_WHEELUP) then - Result := ParseInput(SDLK_PAGEUP, 0, true) + else if (MouseButton = SDL_BUTTON_WHEELUP) then + Result := ParseInput(SDLK_PAGEUP, 0, true) - else - begin} - // up/down songlist - if InRegion(X, Y, Button[JukeboxSongListUp].GetMouseOverArea) then + else begin - PageUp(10); - end; + // up/down songlist + if InRegion(X, Y, Button[JukeboxSongListUp].GetMouseOverArea) then + begin + PageUp(10); + end; - if InRegion(X, Y, Button[JukeboxSongListDown].GetMouseOverArea) then - begin - PageDown(10); - end; + if InRegion(X, Y, Button[JukeboxSongListDown].GetMouseOverArea) then + begin + PageDown(10); + end; - // change time - if InRegion(X, Y, Text[JukeboxTextTimeText].GetMouseOverArea) then - begin - if (fTimebarMode = High(TTimebarMode)) then - fTimebarMode := Low(TTimebarMode) - else - Inc(fTimebarMode); + // change time + if InRegion(X, Y, Text[JukeboxTextTimeText].GetMouseOverArea) then + begin + if (fTimebarMode = High(TTimebarMode)) then + fTimebarMode := Low(TTimebarMode) + else + Inc(fTimebarMode); - Ini.JukeboxTimebarMode := Ord(fTimebarMode); - Ini.SaveJukeboxTimebarMode(); - end; + Ini.JukeboxTimebarMode := Ord(fTimebarMode); + Ini.SaveJukeboxTimebarMode(); + end; - // play or move song - for I := 0 to Max do - begin - if InRegion(X, Y, Button[SongDescription[I]].GetMouseOverArea) then + // play or move song + for I := 0 to Max do begin - - // start move song - if not InRegion(X, Y, Button[SongDescription[Interaction]].GetMouseOverArea) then - begin - Button[SongDescriptionClone].X := X; - Button[SongDescriptionClone].Y := Y; - Button[SongDescriptionClone].Text[0].X := X + Button[SongDescription[I]].Text[0].X - Button[SongDescription[I]].X; - Button[SongDescriptionClone].Text[0].Y := Y + Button[SongDescription[I]].Text[0].Y - Button[SongDescription[I]].Y; - Button[SongDescriptionClone].Text[0].Text := CatSongs.Song[JukeboxVisibleSongs[Interaction + ListMin]].Artist + ' - ' + CatSongs.Song[JukeboxVisibleSongs[Interaction + ListMin]].Title; - - MoveX := Button[SongDescription[I]].Texture.X; - MoveY := Button[SongDescription[I]].Texture.Y; - MoveInicial := ListMin + Interaction; - - Button[SongDescriptionClone].Visible := true; - Button[SongDescription[Interaction]].SetSelect(false); - end - else + if InRegion(X, Y, Button[SongDescription[I]].GetMouseOverArea) then begin - if (MouseButton = SDL_BUTTON_LEFT) then + // start move song + if not InRegion(X, Y, Button[SongDescription[Interaction]].GetMouseOverArea) then + begin + Button[SongDescriptionClone].X := X; + Button[SongDescriptionClone].Y := Y; + Button[SongDescriptionClone].Text[0].X := X + Button[SongDescription[I]].Text[0].X - Button[SongDescription[I]].X; + Button[SongDescriptionClone].Text[0].Y := Y + Button[SongDescription[I]].Text[0].Y - Button[SongDescription[I]].Y; + Button[SongDescriptionClone].Text[0].Text := CatSongs.Song[JukeboxVisibleSongs[Interaction + ListMin]].Artist + ' - ' + CatSongs.Song[JukeboxVisibleSongs[Interaction + ListMin]].Title; + + MoveX := Button[SongDescription[I]].Texture.X; + MoveY := Button[SongDescription[I]].Texture.Y; + MoveInicial := ListMin + Interaction; + + Button[SongDescriptionClone].Visible := true; + Button[SongDescription[Interaction]].SetSelect(false); + end + else begin - if (SDL_GetTicks() - DoubleClickTime <= 500) then - Result := ParseInput(SDLK_RETURN, 0, true); - DoubleClickTime := SDL_GetTicks(); - end; + if (MouseButton = SDL_BUTTON_LEFT) then + begin + if (SDL_GetTicks() - DoubleClickTime <= 500) then + Result := ParseInput(SDLK_RETURN, 0, true); + DoubleClickTime := SDL_GetTicks(); + end; + + end; end; end; - end; - - // close songlist - if InRegion(X, Y, Button[JukeboxSongListClose].GetMouseOverArea)then - begin - Result := ParseInput(SDLK_ESCAPE, 0, true); - CloseClickTime := SDL_GetTicks(); - Button[JukeboxSongListClose].SetSelect(false); - end; - - // fix songlist - if InRegion(X, Y, Button[JukeboxSongListFixPin].GetMouseOverArea)then - begin - SongListVisibleFix := not SongListVisibleFix; - - if (SongListVisibleFix) then - Ini.JukeboxSongMenu := 0 - else - Ini.JukeboxSongMenu := 1; - - Ini.SaveJukeboxSongMenu; - Button[JukeboxSongListFixPin].SetSelect(SongListVisibleFix); - end; - - if InRegion(X, Y, Statics[JukeboxStaticTimeProgress].GetMouseOverArea) then - begin - Time := ((X - Statics[JukeboxStaticTimeProgress].Texture.X) * LyricsState.TotalTime)/(Statics[JukeboxStaticTimeProgress].Texture.W); + // close songlist + if InRegion(X, Y, Button[JukeboxSongListClose].GetMouseOverArea)then + begin + Result := ParseInput(SDLK_ESCAPE, 0, true); + CloseClickTime := SDL_GetTicks(); + Button[JukeboxSongListClose].SetSelect(false); + end; - ChangeTime(Time); - end; + // fix songlist + if InRegion(X, Y, Button[JukeboxSongListFixPin].GetMouseOverArea)then + begin + SongListVisibleFix := not SongListVisibleFix; - if InRegion(X, Y, Button[JukeboxRepeatSongList].GetMouseOverArea) then - begin - RepeatSongList := not RepeatSongList; - Button[JukeboxRepeatSongList].SetSelect(RepeatSongList); - end; + if (SongListVisibleFix) then + Ini.JukeboxSongMenu := 0 + else + Ini.JukeboxSongMenu := 1; - if InRegion(X, Y, Button[JukeboxSongListOrder].GetMouseOverArea) then - begin - ChangeOrderList(); - end; + Ini.SaveJukeboxSongMenu; - if InRegion(X, Y, Button[JukeboxRandomSongList].GetMouseOverArea) then - begin - RandomList(); - end; + Button[JukeboxSongListFixPin].SetSelect(SongListVisibleFix); + end; - if InRegion(X, Y, Button[JukeboxLyric].GetMouseOverArea) then - begin - ShowLyrics := not ShowLyrics; - Button[JukeboxLyric].SetSelect(ShowLyrics); - end; + if InRegion(X, Y, Statics[JukeboxStaticTimeProgress].GetMouseOverArea) then + begin + Time := ((X - Statics[JukeboxStaticTimeProgress].Texture.X) * LyricsState.TotalTime)/(Statics[JukeboxStaticTimeProgress].Texture.W); - if InRegion(X, Y, Button[JukeboxPlayPause].GetMouseOverArea) then - begin - Pause; - Button[JukeboxPlayPause].SetSelect(Paused); - end; + ChangeTime(Time); + end; - if InRegion(X, Y, Button[JukeboxFindSong].GetMouseOverArea) then - begin - FindSongList := not FindSongList; + if InRegion(X, Y, Button[JukeboxRepeatSongList].GetMouseOverArea) then + begin + RepeatSongList := not RepeatSongList; + Button[JukeboxRepeatSongList].SetSelect(RepeatSongList); + end; - if (Filter = '') then + if InRegion(X, Y, Button[JukeboxSongListOrder].GetMouseOverArea) then begin - if (FindSongList) then - Button[JukeboxFindSong].Text[0].Text := '' + ChangeOrderList(); end; - Button[JukeboxFindSong].SetSelect(FindSongList); + if InRegion(X, Y, Button[JukeboxRandomSongList].GetMouseOverArea) then + begin + RandomList(); + end; - if not (FindSongList) and (Length(JukeboxSongsList) <> Length(JukeboxVisibleSongs)) then + if InRegion(X, Y, Button[JukeboxLyric].GetMouseOverArea) then begin - FilterSongList(''); - end - else + ShowLyrics := not ShowLyrics; + Button[JukeboxLyric].SetSelect(ShowLyrics); + end; + + if InRegion(X, Y, Button[JukeboxPlayPause].GetMouseOverArea) then begin - if (Filter <> '') then - FilterSongList(Filter); + Pause; + Button[JukeboxPlayPause].SetSelect(Paused); end; - if (FindSongList) then - Button[JukeboxFindSong].Text[0].Selected := true - else - Button[JukeboxFindSong].Text[0].Selected := false; + if InRegion(X, Y, Button[JukeboxFindSong].GetMouseOverArea) then + begin + FindSongList := not FindSongList; - end; + if (Filter = '') then + begin + if (FindSongList) then + Button[JukeboxFindSong].Text[0].Text := '' + end; - if InRegion(X, Y, Button[JukeboxOptions].GetMouseOverArea) then - begin - SongMenuVisible := false; - SongListVisible := false; + Button[JukeboxFindSong].SetSelect(FindSongList); - Button[JukeboxOptions].SetSelect(false); - ScreenJukeboxOptions.Visible := true; + if not (FindSongList) and (Length(JukeboxSongsList) <> Length(JukeboxVisibleSongs)) then + begin + FilterSongList(''); + end + else + begin + if (Filter <> '') then + FilterSongList(Filter); + end; - LastSongOptionsTick := SDL_GetTicks(); - end; + if (FindSongList) then + Button[JukeboxFindSong].Text[0].Selected := true + else + Button[JukeboxFindSong].Text[0].Selected := false; + + end; + + if InRegion(X, Y, Button[JukeboxOptions].GetMouseOverArea) then + begin + SongMenuVisible := false; + SongListVisible := false; + + Button[JukeboxOptions].SetSelect(false); + ScreenJukeboxOptions.Visible := true; + + LastSongOptionsTick := SDL_GetTicks(); + end; - {end;} + end; end; end else @@ -1194,8 +1192,13 @@ function TScreenJukebox.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: SongMenuVisible := true; LastSongMenuTick := SDL_GetTicks(); end; + if (MouseButton = SDL_BUTTON_RIGHT) then + begin + ScreenPopupCheck.ShowPopup('MSG_END_JUKEBOX', OnEscapeJukebox, nil, false) + end; end; + end; procedure TScreenJukebox.RandomList(); diff --git a/src/screens/UScreenJukeboxOptions.pas b/src/screens/UScreenJukeboxOptions.pas index 537a5c6d..a44efafd 100644 --- a/src/screens/UScreenJukeboxOptions.pas +++ b/src/screens/UScreenJukeboxOptions.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenJukeboxOptions; interface diff --git a/src/screens/UScreenJukeboxPlaylist.pas b/src/screens/UScreenJukeboxPlaylist.pas index 022c5d8e..20805e95 100644 --- a/src/screens/UScreenJukeboxPlaylist.pas +++ b/src/screens/UScreenJukeboxPlaylist.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenJukeboxPlaylist; interface @@ -288,6 +286,8 @@ procedure TScreenJukeboxPlaylist.InitJukebox; if Playlist = 2 then begin + if(High(PlaylistMan.PlayLists[Playlist2].Items)>0) then + begin for I := 0 to High(PlaylistMan.PlayLists[Playlist2].Items) do begin ScreenJukebox.AddSongToJukeboxList(PlaylistMan.PlayLists[Playlist2].Items[I].SongID); @@ -296,6 +296,11 @@ procedure TScreenJukeboxPlaylist.InitJukebox; ScreenJukebox.CurrentSongID := ScreenJukebox.JukeboxVisibleSongs[0]; FadeTo(@ScreenJukebox); + end + else + begin + Log.LogWarn('Can not play selected playlist in JukeBox because playlist is empty or no song found.', 'ScreenJukeboxPlaylist.InitJukeBox'); + end; end; if PlayList = 3 then diff --git a/src/screens/UScreenLevel.pas b/src/screens/UScreenLevel.pas deleted file mode 100644 index a968c079..00000000 --- a/src/screens/UScreenLevel.pas +++ /dev/null @@ -1,139 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenLevel.pas $ - * $Id: UScreenLevel.pas 1975 2009-12-06 14:40:10Z s_alexander $ - *} - -unit UScreenLevel; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - UMenu, - sdl2, - UDisplay, - UMusic, - UFiles, - SysUtils, - UThemes; - -type - TScreenLevel = class(TMenu) - public - constructor Create; override; - function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; - procedure OnShow; override; - procedure SetAnimationProgress(Progress: real); override; - end; - -implementation - -uses - UGraphic, - UMain, - UIni, - USong, - UTexture, - UUnicodeUtils; - -function TScreenLevel.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; -begin - Result := true; - if (PressedDown) then - begin // Key Down - // check normal keys - case UCS4UpperCase(CharCode) of - Ord('Q'): - begin - Result := false; - Exit; - end; - end; - - // check special keys - case PressedKey of - SDLK_ESCAPE, - SDLK_BACKSPACE : - begin - AudioPlayback.PlaySound(SoundLib.Back); - - if Ini.OnSongClick = sSelectPlayer then - FadeTo(@ScreenMain) - else - FadeTo(@ScreenName); - end; - - SDLK_RETURN: - begin - Ini.Difficulty := Interaction; - Ini.SaveLevel; - AudioPlayback.PlaySound(SoundLib.Start); - //Set Standard Mode - ScreenSong.Mode := smNormal; - FadeTo(@ScreenSong); - end; - - // Up and Down could be done at the same time, - // but I don't want to declare variables inside - // functions like this one, called so many times - SDLK_DOWN: InteractNext; - SDLK_UP: InteractPrev; - SDLK_RIGHT: InteractNext; - SDLK_LEFT: InteractPrev; - end; - end; -end; - -constructor TScreenLevel.Create; -begin - inherited Create; - - LoadFromTheme(Theme.Level); - - AddButton(Theme.Level.ButtonEasy); - AddButton(Theme.Level.ButtonMedium); - AddButton(Theme.Level.ButtonHard); - - Interaction := 0; -end; - -procedure TScreenLevel.OnShow; -begin - inherited; - - Interaction := Ini.Difficulty; -end; - -procedure TScreenLevel.SetAnimationProgress(Progress: real); -begin - Button[0].Texture.ScaleW := Progress; - Button[1].Texture.ScaleW := Progress; - Button[2].Texture.ScaleW := Progress; -end; - -end. diff --git a/src/screens/UScreenLoading.pas b/src/screens/UScreenLoading.pas index e8099b9f..98250b19 100644 --- a/src/screens/UScreenLoading.pas +++ b/src/screens/UScreenLoading.pas @@ -1,26 +1,23 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenLoading.pas $ - * $Id: UScreenLoading.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} unit UScreenLoading; diff --git a/src/screens/UScreenMain.pas b/src/screens/UScreenMain.pas index 39166819..5389e29e 100644 --- a/src/screens/UScreenMain.pas +++ b/src/screens/UScreenMain.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenMain.pas $ - * $Id: UScreenMain.pas 3128 2015-08-28 01:45:23Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenMain; interface @@ -49,28 +47,24 @@ interface type TScreenMain = class(TMenu) - private - { ticks when the user interacted, used to start credits - after a period of time w/o user interaction } - UserInteractionTicks: cardinal; public TextDescription: integer; TextDescriptionLong: integer; constructor Create; override; - function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; - PressedDown: boolean): boolean; override; - function ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; override; - procedure OnShow; override; - procedure SetInteraction(Num: integer); override; + function ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + procedure OnShow; override; + procedure SetInteraction(Num: integer); override; procedure SetAnimationProgress(Progress: real); override; - function Draw: boolean; override; - end; +// procedure UpdateTextDescriptionFor(IID: integer); virtual; + + // private + // ButtonSoloIID, ButtonMultiIID, ButtonJukeboxIID, ButtonStatIID, ButtonOptionsIID, ButtonExitIID, ButtonAboutIID, -const - { start credits after 60 seconds w/o interaction } - TicksUntilCredits = 5 * 60 * 1000; + // MapIIDtoDescID: array of integer; + + end; implementation @@ -82,7 +76,6 @@ implementation USongs, ULanguage, UParty, - UScreenCredits, USkins, UUnicodeUtils; @@ -93,9 +86,6 @@ function TScreenMain.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; begin Result := true; - { reset user interaction timer } - UserInteractionTicks := SDL_GetTicks; - SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); @@ -107,30 +97,8 @@ function TScreenMain.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; Result := false; Exit; end; - Ord('C'): begin - FadeTo(@ScreenCredits, SoundLib.Start); - Exit; - end; - Ord('M'): begin - if (Ini.Players >= 1) and (Party.ModesAvailable) then - begin - FadeTo(@ScreenPartyOptions, SoundLib.Start); - Exit; - end; - end; - - Ord('S'): begin - FadeTo(@ScreenStatMain, SoundLib.Start); - Exit; - end; - - Ord('E'): begin - FadeTo(@ScreenEdit, SoundLib.Start); - Exit; - end; - end; - - // check special keys + end; + // check special keys case PressedKey of SDLK_ESCAPE, SDLK_BACKSPACE: @@ -195,61 +163,32 @@ function TScreenMain.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; FadeTo(@ScreenStatMain, SoundLib.Start); end; - //Editor + //Options if Interaction = 4 then begin - {$IFDEF UseMIDIPort} - FadeTo(@ScreenEdit, SoundLib.Start); - {$ELSE} - ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_EDITOR')); - {$ENDIF} + FadeTo(@ScreenOptions, SoundLib.Start); end; - //Options + //Exit if Interaction = 5 then begin - FadeTo(@ScreenOptions, SoundLib.Start); - end; - + Result := false; + end; + //About if Interaction = 6 then begin FadeTo(@ScreenAbout, SoundLib.Start); - end; - - //Exit - if Interaction = 7 then - begin - Result := false; - end; + end; end; - {** - * Up and Down could be done at the same time, - * but I don't want to declare variables inside - * functions like this one, called so many times - *} - SDLK_DOWN: InteractInc; - SDLK_UP: InteractDec; + SDLK_DOWN: InteractNextRow; + SDLK_UP: InteractPrevRow; SDLK_RIGHT: InteractNext; SDLK_LEFT: InteractPrev; end; end - else // Key Up - case PressedKey of - SDLK_RETURN: - begin - end; - end; end; -function TScreenMain.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; -begin - // default mouse behaviour - Result := inherited ParseMouse(MouseButton, BtnDown, X, Y); - - { reset user interaction timer } - UserInteractionTicks := SDL_GetTicks; -end; constructor TScreenMain.Create; begin @@ -270,12 +209,13 @@ constructor TScreenMain.Create; AddButton(Theme.Main.ButtonSolo); AddButton(Theme.Main.ButtonMulti); AddButton(Theme.Main.ButtonJukebox); + AddButton(Theme.Main.ButtonStat); - AddButton(Theme.Main.ButtonEditor); AddButton(Theme.Main.ButtonOptions); - AddButton(Theme.Main.ButtonAbout); AddButton(Theme.Main.ButtonExit); - + + AddButton(Theme.Main.ButtonAbout); + Interaction := 0; end; @@ -293,19 +233,6 @@ procedure TScreenMain.OnShow; *} Party.Clear; - { reset user interaction timer } - UserInteractionTicks := SDL_GetTicks; -end; - -function TScreenMain.Draw: boolean; -begin - Result := inherited Draw; - - { start credits after a period w/o user interaction } - if (UserInteractionTicks + TicksUntilCredits < SDL_GetTicks) then - begin - FadeTo(@ScreenCredits, SoundLib.Start); - end; end; procedure TScreenMain.SetInteraction(Num: integer); diff --git a/src/screens/UScreenName.pas b/src/screens/UScreenName.pas index 992a9986..390b8319 100644 --- a/src/screens/UScreenName.pas +++ b/src/screens/UScreenName.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenName.pas $ - * $Id: UScreenName.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenName; interface @@ -42,10 +40,11 @@ interface UFiles, md5, UMenu, + UIni, UMusic, UNote, UScreenScore, - UScreenSing, + UScreenSingController, UScreenTop5, ULog, UTexture, @@ -66,6 +65,8 @@ TScreenName = class(TMenu) ColorIndex: integer; LevelIndex: integer; + PlayerAvatarIID: integer; // interaction ID + AvatarCurrent: real; AvatarTarget: integer; @@ -74,13 +75,13 @@ TScreenName = class(TMenu) isScrolling: boolean; // true if avatar flow is about to move - PlayerCurrent: array [0..5] of integer; - PlayerCurrentText: array [0..5] of integer; - PlayerCurrentAvatar: array [0..5] of integer; + PlayerCurrent: array [0..UIni.IMaxPlayerCount-1] of integer; + PlayerCurrentText: array [0..UIni.IMaxPlayerCount-1] of integer; + PlayerCurrentAvatar: array [0..UIni.IMaxPlayerCount-1] of integer; - PlayerNames: array [0..5] of UTF8String; - PlayerAvatars: array [0..5] of integer; - PlayerLevel: array [0..5] of integer; + PlayerNames: array [0..UIni.IMaxPlayerCount-1] of UTF8String; + PlayerAvatars: array [0..UIni.IMaxPlayerCount-1] of integer; + PlayerLevel: array [0..UIni.IMaxPlayerCount-1] of integer; APlayerColor: array of integer; @@ -90,6 +91,7 @@ TScreenName = class(TMenu) Goto_SingScreen: boolean; //If true then next Screen in SingScreen constructor Create; override; + function ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean; out SuppressKey: boolean): boolean; override; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; function ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: integer): boolean; override; @@ -114,7 +116,7 @@ TScreenName = class(TMenu) end; var - Num: array[0..5]of integer; + Num: array[0..UIni.IMaxPlayerCount-1]of integer; implementation @@ -122,7 +124,6 @@ implementation Math, UCommon, UGraphic, - UIni, ULanguage, UMenuButton, UPath, @@ -152,13 +153,19 @@ function TScreenName.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: in if RightMbESC and (MouseButton = SDL_BUTTON_RIGHT) then Result:=ParseInput(SDLK_ESCAPE, 0, true); - {//scrolling avatars with mousewheel + //scrolling avatars with mousewheel if (MouseButton = SDL_BUTTON_WHEELDOWN) then - ParseInput(SDLK_RIGHT, 0, true) + begin + if (Interaction = PlayerAvatarIID) then + ParseInput(SDLK_RIGHT, 0, true); + end else if (MouseButton = SDL_BUTTON_WHEELUP) then - ParseInput(SDLK_LEFT, 0, true)} - {else - begin} + begin + if (Interaction = PlayerAvatarIID) then + ParseInput(SDLK_LEFT, 0, true); + end + else + begin // click avatars // 1st left Btn := AvatarTarget - 2; @@ -223,17 +230,52 @@ function TScreenName.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: in AvatarTarget := PlayerAvatars[PlayerIndex]; end; end; - {end;} + end; end; - end; +function TScreenName.ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean; out SuppressKey: boolean): boolean; +begin + Result := inherited; + // only suppress special keys for now + case PressedKey of + // Templates for Names Mod + SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5, SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_F11, SDLK_F12: + if (Button[PlayerName].Selected) then + begin + SuppressKey := true; + end + else + begin + Result := false; + end; + end; +end; function TScreenName.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; -var - I: integer; - SDL_ModState: word; - Col: TRGB; + var + I: integer; + SDL_ModState: word; + Col: TRGB; + + procedure HandleNameTemplate(const index: integer); + var + isAlternate: boolean; + begin + isAlternate := (SDL_ModState = KMOD_LSHIFT) or (SDL_ModState = KMOD_RSHIFT); + isAlternate := isAlternate or (SDL_ModState = KMOD_LALT); // legacy key combination + + if isAlternate then + begin + Ini.NameTemplate[index] := Button[PlayerName].Text[0].Text; + end + else + begin + Button[PlayerName].Text[0].Text := Ini.NameTemplate[index]; + PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; + end; + end; + begin Result := true; if (PressedDown) then @@ -242,9 +284,20 @@ function TScreenName.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); - // check normal keys - if (Interaction = 3) and (IsPrintableChar(CharCode)) then + if (not Button[PlayerName].Selected) then begin + // check normal keys + case UCS4UpperCase(CharCode) of + Ord('Q'): + begin + Result := false; + Exit; + end; + end; + end + else if (Interaction = 3) and (IsPrintableChar(CharCode)) then + begin + // pass printable chars to button Button[PlayerName].Text[0].Text := Button[PlayerName].Text[0].Text + UCS4ToUTF8String(CharCode); @@ -254,127 +307,20 @@ function TScreenName.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse // check special keys case PressedKey of + // Templates for Names Mod - SDLK_F1: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[0] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[0]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F2: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[1] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[1]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F3: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[2] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[2]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F4: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[3] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[3]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F5: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[4] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[4]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F6: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[5] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[5]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F7: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[6] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[6]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F8: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[7] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[7]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F9: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[8] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[8]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F10: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[9] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[9]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F11: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[10] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[10]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; - SDLK_F12: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[11] := Button[PlayerName].Text[0].Text; - end - else - begin - Button[PlayerName].Text[0].Text := Ini.NameTemplate[11]; - PlayerNames[PlayerIndex] := Button[PlayerName].Text[0].Text; - end; + SDLK_F1: HandleNameTemplate(0); + SDLK_F2: HandleNameTemplate(1); + SDLK_F3: HandleNameTemplate(2); + SDLK_F4: HandleNameTemplate(3); + SDLK_F5: HandleNameTemplate(4); + SDLK_F6: HandleNameTemplate(5); + SDLK_F7: HandleNameTemplate(6); + SDLK_F8: HandleNameTemplate(7); + SDLK_F9: HandleNameTemplate(8); + SDLK_F10: HandleNameTemplate(9); + SDLK_F11: HandleNameTemplate(10); + SDLK_F12: HandleNameTemplate(11); SDLK_BACKSPACE: begin @@ -400,8 +346,7 @@ function TScreenName.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse SDLK_RETURN: begin Ini.Players := CountIndex; - if (Ini.Players >= 0) and (Ini.Players <= 3) then PlayersPlay := Ini.Players + 1; - if (Ini.Players = 4) then PlayersPlay := 6; + PlayersPlay:= UIni.IPlayersVals[CountIndex]; for I := 1 to PlayersPlay do begin @@ -445,7 +390,7 @@ function TScreenName.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse //ScreenSing.Free; ScreenScore := TScreenScore.Create; - ScreenSing := TScreenSing.Create; + ScreenSing := TScreenSingController.Create; // AudioPlayback.PlaySound(SoundLib.Start); @@ -486,8 +431,8 @@ function TScreenName.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse RefreshPlayers(); if (Interaction = 1) then - begin - if ((PlayerIndex < CountIndex) or ((CountIndex = 4) and (PlayerIndex <= CountIndex))) then + begin //TODO: adapt this to new playersize + if (PlayerIndex < UIni.IPlayersVals[CountIndex]-1) then begin PlayerIndex := PlayerIndex + 1; @@ -578,8 +523,10 @@ procedure TScreenName.GenerateAvatars(); SetLength(PlayerAvatarButtonMD5, Length(AvatarsList) + 1); // 1st no-avatar dummy - for I := 1 to 6 do + for I := 1 to UIni.IMaxPlayerCount do + begin NoAvatarTexture[I] := Texture.GetTexture(Skin.GetTextureFileName('NoAvatar_P' + IntToStr(I)), TEXTURE_TYPE_TRANSPARENT, $FFFFFF); + end; // create no-avatar PlayerAvatarButton[0] := AddButton(Theme.Name.PlayerAvatar); @@ -630,16 +577,13 @@ procedure TScreenName.RefreshPlayers(); Col, DesCol: TRGB; begin - Count := CountIndex; + Count := UIni.IPlayersVals[CountIndex]; - if (CountIndex = 4) then - Count := 5; - - while (PlayerIndex > CountIndex) do + while (PlayerIndex > Count-1) do PlayerIndex := PlayerIndex - 1; // Player Colors - for I := Count downto 0 do + for I := Count-1 downto 0 do begin if (Ini.PlayerColor[I] > 0) then Num[I] := NoRepeatColors(Ini.PlayerColor[I], I, 1) @@ -653,24 +597,15 @@ procedure TScreenName.RefreshPlayers(); Statics[PlayerCurrent[I]].Texture.ColB := DesCol.B; end; - for I := 0 to 5 do + for I := 0 to UIni.IMaxPlayerCount-1 do begin - if (Count = 5) then - begin - Statics[PlayerCurrent[I]].Visible := true; - Text[PlayerCurrentText[I]].Visible := true; - Statics[PlayerCurrentAvatar[I]].Visible := true; - end - else - begin - Statics[PlayerCurrent[I]].Visible := I <= CountIndex; - Text[PlayerCurrentText[I]].Visible := I <= CountIndex; - Statics[PlayerCurrentAvatar[I]].Visible := I <= CountIndex; - end; + Statics[PlayerCurrent[I]].Visible := I < Count; + Text[PlayerCurrentText[I]].Visible := I < Count; + Statics[PlayerCurrentAvatar[I]].Visible := I < Count; end; // list players - for I := 0 to Count do + for I := 0 to Count -1 do begin Text[PlayerCurrentText[I]].Text := PlayerNames[I]; SetPlayerAvatar(I); @@ -696,29 +631,26 @@ procedure TScreenName.RefreshProfile(); SelectsS[PlayerSelectLevel].SetSelectOpt(PlayerLevel[PlayerIndex]); - Count := CountIndex; - - if (CountIndex = 4) then - Count := 5; + Count := UIni.IPlayersVals[CountIndex]; ChangeSelectPlayerPosition(PlayerIndex); PlayerColorButton(Num[PlayerIndex]); - Max := Length(IPlayerColorTranslated) - Count; + Max := Length(IPlayerColorTranslated) - Count + 1; SetLength(ITmp, Max); APlayerColor := nil; SetLength(APlayerColor, Max); Index := 0; - for I := 0 to High(IPlayerColorTranslated) do + for I := 0 to High(IPlayerColorTranslated) do //for every color begin Used := false; - for J := 0 to Count do + for J := 0 to Count -1 do //for every active player begin - if (Num[J] - 1 = I) and (J <> PlayerIndex) then + if (Num[J] - 1 = I) and (J <> PlayerIndex) then //check if color is already used for not current player begin Used := true; break; @@ -757,10 +689,7 @@ function TScreenName.NoRepeatColors(ColorP:integer; Interaction:integer; Pos:int var Z, Count:integer; begin - Count := CountIndex; - - if (CountIndex = 4) then - Count := 5; + Count := UIni.IPlayersVals[CountIndex]; if (ColorP > Length(IPlayerColorTranslated)) then ColorP := NoRepeatColors(1, Interaction, Pos); @@ -768,7 +697,7 @@ function TScreenName.NoRepeatColors(ColorP:integer; Interaction:integer; Pos:int if (ColorP <= 0) then ColorP := NoRepeatColors(High(IPlayerColorTranslated), Interaction, Pos); - for Z := Count downto 0 do + for Z := Count -1 downto 0 do begin if (Num[Z] = ColorP) and (Z <> Interaction) then ColorP := NoRepeatColors(ColorP + Pos, Interaction, Pos) @@ -855,7 +784,7 @@ constructor TScreenName.Create; Theme.Name.SelectPlayersCount.showArrows := true; PlayersCount := AddSelectSlide(Theme.Name.SelectPlayersCount, CountIndex, IPlayers); - for I := 0 to 5 do + for I := 0 to UIni.IMaxPlayerCount -1 do begin PlayerCurrentAvatar[I] := AddStatic(Theme.Name.PlayerSelectAvatar[I]); PlayerCurrent[I] := AddStatic(Theme.Name.PlayerSelect[I]); @@ -865,6 +794,7 @@ constructor TScreenName.Create; PlayerSelect := AddButton(Theme.Name.PlayerSelectCurrent); PlayerAvatar := AddButton(Theme.Name.PlayerButtonAvatar); + PlayerAvatarIID := High(Interactions); PlayerName := AddButton(Theme.Name.PlayerButtonName); Button[PlayerName].Text[0].Writable := true; @@ -924,7 +854,7 @@ procedure TScreenName.OnShow; CountIndex := Ini.Players; - for I := 0 to 5 do + for I := 0 to UIni.IMaxPlayerCount-1 do begin PlayerNames[I] := Ini.Name[I]; PlayerLevel[I] := Ini.PlayerLevel[I]; diff --git a/src/screens/UScreenOpen.pas b/src/screens/UScreenOpen.pas index 85b31cd6..9d88ef34 100644 --- a/src/screens/UScreenOpen.pas +++ b/src/screens/UScreenOpen.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenOpen.pas $ - * $Id: UScreenOpen.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOpen; interface diff --git a/src/screens/UScreenOptions.pas b/src/screens/UScreenOptions.pas index 494ea597..454e0456 100644 --- a/src/screens/UScreenOptions.pas +++ b/src/screens/UScreenOptions.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenOptions.pas $ - * $Id: UScreenOptions.pas 2649 2010-10-10 10:34:20Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptions; interface @@ -46,15 +44,30 @@ interface type TScreenOptions = class(TMenu) + private + ButtonGameIID, + ButtonGraphicsIID, + ButtonSoundIID, + ButtonInputIID, + ButtonLyricsIID, + ButtonThemesIID, + ButtonRecordIID, + ButtonAdvancedIID, + ButtonNetworkIID, + ButtonWebcamIID, + ButtonJukeboxIID, + ButtonExitIID: cardinal; + + MapIIDtoDescID: array of integer; + + procedure UpdateTextDescriptionFor(IID: integer); virtual; + public TextDescription: integer; constructor Create; override; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure OnShow; override; - procedure InteractNext; override; - procedure InteractPrev; override; - procedure InteractNextRow; override; - procedure InteractPrevRow; override; + procedure SetInteraction(Num: integer); override; procedure SetAnimationProgress(Progress: real); override; end; @@ -92,49 +105,49 @@ function TScreenOptions.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre end; SDLK_RETURN: begin - if SelInteraction = 0 then + if Interaction = ButtonGameIID then begin AudioPlayback.PlaySound(SoundLib.Start); FadeTo(@ScreenOptionsGame); end; - if SelInteraction = 1 then + if Interaction = ButtonGraphicsIID then begin AudioPlayback.PlaySound(SoundLib.Start); FadeTo(@ScreenOptionsGraphics); end; - if SelInteraction = 2 then + if Interaction = ButtonSoundIID then begin AudioPlayback.PlaySound(SoundLib.Start); FadeTo(@ScreenOptionsSound); end; - if SelInteraction = 3 then + if Interaction = ButtonLyricsIID then begin AudioPlayback.PlaySound(SoundLib.Start); FadeTo(@ScreenOptionsLyrics); end; - if SelInteraction = 4 then + if Interaction = ButtonThemesIID then begin AudioPlayback.PlaySound(SoundLib.Start); FadeTo(@ScreenOptionsThemes); end; - if SelInteraction = 5 then + if Interaction = ButtonRecordIID then begin AudioPlayback.PlaySound(SoundLib.Start); FadeTo(@ScreenOptionsRecord); end; - if SelInteraction = 6 then + if Interaction = ButtonAdvancedIID then begin AudioPlayback.PlaySound(SoundLib.Start); FadeTo(@ScreenOptionsAdvanced); end; - if SelInteraction = 7 then + if Interaction = ButtonNetworkIID then begin if (High(DataBase.NetworkUser) = -1) then ScreenPopupError.ShowPopup(Language.Translate('SING_OPTIONS_NETWORK_NO_DLL')) @@ -145,13 +158,13 @@ function TScreenOptions.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre end; end; - if SelInteraction = 8 then + if Interaction = ButtonWebcamIID then begin AudioPlayback.PlaySound(SoundLib.Back); FadeTo(@ScreenOptionsWebcam); end; - if SelInteraction = 9 then + if Interaction = ButtonJukeboxIID then begin if (Songs.SongList.Count >= 1) then begin @@ -162,7 +175,7 @@ function TScreenOptions.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre ScreenPopupError.ShowPopup(Language.Translate('ERROR_NO_SONGS')); end; - if SelInteraction = 10 then + if Interaction = ButtonExitIID then begin Ini.Save; AudioPlayback.PlaySound(SoundLib.Back); @@ -178,6 +191,26 @@ function TScreenOptions.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Pre end; constructor TScreenOptions.Create; + + // TODO: Generalize method and implement it into base code (to be used by every screen/menu) + function AddButtonChecked(Btn: TThemeButton; DescIndex: byte; out IIDvar: cardinal; AddX: real = 14; AddY: real = 20): cardinal; + var OldPos: integer; + begin + OldPos := Length(Button); + Result := AddButton(Btn); + if Length(Button) <> OldPos then // check if button was succesfully added + begin + IIDvar := High(Interactions); + + // update mapping, IID to Desc index + SetLength(MapIIDtoDescID, IIDvar+1); + MapIIDtoDescID[IIDvar] := DescIndex; + + if (Length(Button[Result].Text) = 0) then // update text if not already set + AddButtonText(AddX, AddY, Theme.Options.Description[DescIndex]); + end; + + end; begin inherited Create; @@ -185,49 +218,21 @@ constructor TScreenOptions.Create; LoadFromTheme(Theme.Options); - AddButton(Theme.Options.ButtonGame); - if (Length(Button[0].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[0]); - - AddButton(Theme.Options.ButtonGraphics); - if (Length(Button[1].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[1]); - - AddButton(Theme.Options.ButtonSound); - if (Length(Button[2].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[2]); - - AddButton(Theme.Options.ButtonLyrics); - if (Length(Button[3].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[3]); - - AddButton(Theme.Options.ButtonThemes); - if (Length(Button[4].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[4]); + // Order is irrelevant to the represenatation, however InteractNext/Prev is not working with a different order + AddButtonChecked(Theme.Options.ButtonGame, OPTIONS_DESC_INDEX_GAME, ButtonGameIID); + AddButtonChecked(Theme.Options.ButtonGraphics, OPTIONS_DESC_INDEX_GRAPHICS, ButtonGraphicsIID); + AddButtonChecked(Theme.Options.ButtonSound, OPTIONS_DESC_INDEX_SOUND, ButtonSoundIID); - AddButton(Theme.Options.ButtonRecord); - if (Length(Button[5].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[5]); + AddButtonChecked(Theme.Options.ButtonLyrics, OPTIONS_DESC_INDEX_LYRICS, ButtonLyricsIID); + AddButtonChecked(Theme.Options.ButtonThemes, OPTIONS_DESC_INDEX_THEMES, ButtonThemesIID); + AddButtonChecked(Theme.Options.ButtonRecord, OPTIONS_DESC_INDEX_RECORD, ButtonRecordIID); + AddButtonChecked(Theme.Options.ButtonAdvanced, OPTIONS_DESC_INDEX_ADVANCED, ButtonAdvancedIID); + AddButtonChecked(Theme.Options.ButtonNetwork, OPTIONS_DESC_INDEX_NETWORK, ButtonNetworkIID); - AddButton(Theme.Options.ButtonAdvanced); - if (Length(Button[6].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[6]); + AddButtonChecked(Theme.Options.ButtonWebcam, OPTIONS_DESC_INDEX_WEBCAM, ButtonWebcamIID); + AddButtonChecked(Theme.Options.ButtonJukebox, OPTIONS_DESC_INDEX_JUKEBOX, ButtonJukeboxIID); - AddButton(Theme.Options.ButtonNetwork); - if (Length(Button[7].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[7]); - - AddButton(Theme.Options.ButtonWebcam); - if (Length(Button[8].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[8]); - - AddButton(Theme.Options.ButtonJukebox); - if (Length(Button[9].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[9]); - - AddButton(Theme.Options.ButtonExit); - if (Length(Button[10].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[10]); + AddButtonChecked(Theme.Options.ButtonExit, OPTIONS_DESC_INDEX_BACK, ButtonExitIID); Interaction := 0; end; @@ -239,40 +244,28 @@ procedure TScreenOptions.OnShow; SoundLib.StartBgMusic; end; -procedure TScreenOptions.InteractNext; -begin - inherited InteractNext; - Text[TextDescription].Text := Theme.Options.Description[Interaction]; -end; - -procedure TScreenOptions.InteractPrev; +procedure TScreenOptions.SetInteraction(Num: integer); begin - inherited InteractPrev; - Text[TextDescription].Text := Theme.Options.Description[Interaction]; + inherited SetInteraction(Num); + UpdateTextDescriptionFor(Interaction); end; -procedure TScreenOptions.InteractNextRow; +procedure TScreenOptions.SetAnimationProgress(Progress: real); +var i: integer; begin - inherited InteractNextRow; - Text[TextDescription].Text := Theme.Options.Description[Interaction]; + // update all buttons + for i := 0 to High(Button) do + Button[i].Texture.ScaleW := Progress; end; -procedure TScreenOptions.InteractPrevRow; +procedure TScreenOptions.UpdateTextDescriptionFor(IID: integer); +var index: integer; begin - inherited InteractPrevRow; - Text[TextDescription].Text := Theme.Options.Description[Interaction]; -end; + // Sanity check + if (IID < 0 ) or (IID >= Length(MapIIDtoDescID)) then + Exit; -procedure TScreenOptions.SetAnimationProgress(Progress: real); -begin - Button[0].Texture.ScaleW := Progress; - Button[1].Texture.ScaleW := Progress; - Button[2].Texture.ScaleW := Progress; - Button[3].Texture.ScaleW := Progress; - Button[4].Texture.ScaleW := Progress; - Button[5].Texture.ScaleW := Progress; - Button[6].Texture.ScaleW := Progress; - Button[7].Texture.ScaleW := Progress; + Text[TextDescription].Text := Theme.Options.Description[MapIIDtoDescID[IID]]; end; end. diff --git a/src/screens/UScreenOptionsAdvanced.pas b/src/screens/UScreenOptionsAdvanced.pas index c0e620e5..be2c1b6a 100644 --- a/src/screens/UScreenOptionsAdvanced.pas +++ b/src/screens/UScreenOptionsAdvanced.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenOptionsAdvanced.pas $ - * $Id: UScreenOptionsAdvanced.pas 2338 2010-05-03 21:58:30Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsAdvanced; interface @@ -34,6 +32,7 @@ interface {$I switches.inc} uses + UCommon, sdl2, UMenu, UDisplay, @@ -41,9 +40,16 @@ interface UFiles, UIni, UThemes; - + type + TScreenOptionsAdvanced = class(TMenu) + protected + // interaction IDs + ButtonExitIID: integer; + SelectJoyPad: integer; + + public constructor Create; override; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; @@ -70,7 +76,7 @@ function TScreenOptionsAdvanced.ParseInput(PressedKey: cardinal; CharCode: UCS4C Exit; end; end; - + // check special keys case PressedKey of SDLK_ESCAPE, @@ -116,7 +122,7 @@ function TScreenOptionsAdvanced.ParseInput(PressedKey: cardinal; CharCode: UCS4C constructor TScreenOptionsAdvanced.Create; begin inherited Create; - + LoadFromTheme(Theme.OptionsAdvanced); //SelectLoadAnimation Hidden because it is useless atm @@ -129,9 +135,10 @@ constructor TScreenOptionsAdvanced.Create; Theme.OptionsAdvanced.SelectEffectSing.oneItemOnly := true; AddSelectSlide(Theme.OptionsAdvanced.SelectEffectSing, Ini.EffectSing, IEffectSingTranslated); - Theme.OptionsAdvanced.SelectLineBonus.showArrows := true; - Theme.OptionsAdvanced.SelectLineBonus.oneItemOnly := true; - AddSelectSlide(Theme.OptionsAdvanced.SelectLineBonus, Ini.LineBonus, ILineBonusTranslated); + Theme.OptionsAdvanced.SelectJoypad.showArrows := true; + Theme.OptionsAdvanced.SelectJoypad.oneItemOnly := true; + SelectJoyPad := AddSelectSlide(Theme.OptionsAdvanced.SelectJoypad, Ini.Joypad, IJoypad); + Theme.OptionsAdvanced.SelectOnSongClick.showArrows := true; Theme.OptionsAdvanced.SelectOnSongClick.oneItemOnly := true; @@ -155,7 +162,7 @@ constructor TScreenOptionsAdvanced.Create; AddButton(Theme.OptionsAdvanced.ButtonExit); if (Length(Button[0].Text)=0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); Interaction := 0; end; diff --git a/src/screens/UScreenOptionsGame.pas b/src/screens/UScreenOptionsGame.pas index f6f5f508..a3ad7d04 100644 --- a/src/screens/UScreenOptionsGame.pas +++ b/src/screens/UScreenOptionsGame.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenOptionsGame.pas $ - * $Id: UScreenOptionsGame.pas 2203 2010-03-16 19:25:13Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsGame; interface @@ -163,7 +161,7 @@ constructor TScreenOptionsGame.Create; AddButton(Theme.OptionsGame.ButtonExit); if (Length(Button[0].Text) = 0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); end; diff --git a/src/screens/UScreenOptionsGraphics.pas b/src/screens/UScreenOptionsGraphics.pas index 94f8f20a..fbcce726 100644 --- a/src/screens/UScreenOptionsGraphics.pas +++ b/src/screens/UScreenOptionsGraphics.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenOptionsGraphics.pas $ - * $Id: UScreenOptionsGraphics.pas 2338 2010-05-03 21:58:30Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsGraphics; interface @@ -44,10 +42,24 @@ interface type TScreenOptionsGraphics = class(TMenu) + private + SelectWindowMode: cardinal; + SelectResolution: cardinal; + + IResolutionEmpty: array of UTF8String; + ResolutionEmpty: integer; // not used, only to prevent changing original by-ref passed variable + + OldWindowMode: integer; + + procedure UpdateWindowMode; + procedure UpdateResolution; + public constructor Create; override; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure OnShow; override; + procedure OnHide; override; + procedure OnWindowResized; override; end; implementation @@ -86,12 +98,10 @@ function TScreenOptionsGraphics.ParseInput(PressedKey: cardinal; CharCode: UCS4C begin Ini.Save; AudioPlayback.PlaySound(SoundLib.Back); - // FIXME: changing the video mode does not work this way in windows - // and MacOSX as all textures will be invalidated through this. - // See the ALT+TAB code too. - {$IF Defined(Linux) or Defined(FreeBSD)} - Reinitialize3D(); - {$IFEND} + + if OldWindowMode <> Ini.FullScreen then UGraphic.UpdateVideoMode() + else UGraphic.UpdateResolution(); + FadeTo(@ScreenOptions); end; end; @@ -106,6 +116,12 @@ function TScreenOptionsGraphics.ParseInput(PressedKey: cardinal; CharCode: UCS4C AudioPlayback.PlaySound(SoundLib.Option); InteractInc; end; + + if (Interaction = SelectWindowMode) then + begin + UpdateResolution; + end; + end; SDLK_LEFT: begin @@ -114,6 +130,11 @@ function TScreenOptionsGraphics.ParseInput(PressedKey: cardinal; CharCode: UCS4C AudioPlayback.PlaySound(SoundLib.Option); InteractDec; end; + + if (Interaction = SelectWindowMode) then + begin + UpdateResolution; + end; end; end; end; @@ -124,13 +145,17 @@ constructor TScreenOptionsGraphics.Create; inherited Create; LoadFromTheme(Theme.OptionsGraphics); - Theme.OptionsGraphics.SelectResolution.showArrows := true; - Theme.OptionsGraphics.SelectResolution.oneItemOnly := true; - AddSelectSlide(Theme.OptionsGraphics.SelectResolution, Ini.Resolution, IResolution); + ResolutionEmpty := 0; + SetLength(IResolutionEmpty, 1); + IResolutionEmpty[0] := '---'; Theme.OptionsGraphics.SelectFullscreen.showArrows := true; Theme.OptionsGraphics.SelectFullscreen.oneItemOnly := true; - AddSelectSlide(Theme.OptionsGraphics.SelectFullscreen, Ini.Fullscreen, IFullScreenTranslated); + SelectWindowMode := AddSelectSlide(Theme.OptionsGraphics.SelectFullscreen, Ini.Fullscreen, IFullScreenTranslated); + + Theme.OptionsGraphics.SelectResolution.showArrows := true; + Theme.OptionsGraphics.SelectResolution.oneItemOnly := true; + SelectResolution := AddSelectSlide(Theme.OptionsGraphics.SelectResolution, Ini.Resolution, IResolution); Theme.OptionsGraphics.SelectDepth.showArrows := true; Theme.OptionsGraphics.SelectDepth.oneItemOnly := true; @@ -148,17 +173,61 @@ constructor TScreenOptionsGraphics.Create; Theme.OptionsGraphics.SelectMovieSize.oneItemOnly := true; AddSelectSlide(Theme.OptionsGraphics.SelectMovieSize, Ini.MovieSize, IMovieSizeTranslated); + // TODO: Add apply button AddButton(Theme.OptionsGraphics.ButtonExit); if (Length(Button[0].Text)=0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); end; procedure TScreenOptionsGraphics.OnShow; +var + i: integer; begin inherited; + if CurrentWindowMode = Mode_Windowed then Ini.SetResolution(ScreenW, ScreenH); + + UpdateWindowMode(); + UpdateResolution(); + Interaction := 0; end; +procedure TScreenOptionsGraphics.OnHide; +begin + inherited; + Ini.ClearCustomResolutions(); +end; + +procedure TScreenOptionsGraphics.OnWindowResized; +begin + inherited; + + UpdateWindowMode; + + if CurrentWindowMode = Mode_Windowed then Ini.SetResolution(ScreenW, ScreenH); + UpdateResolution; + +end; + +procedure TScreenOptionsGraphics.UpdateWindowMode; +begin + + UpdateSelectSlideOptions(Theme.OptionsGraphics.SelectFullscreen, SelectWindowMode, IFullScreenTranslated, Ini.FullScreen); + OldWindowMode := integer(Ini.FullScreen); +end; + +procedure TScreenOptionsGraphics.UpdateResolution; +begin + + if Ini.Fullscreen = 2 then + UpdateSelectSlideOptions(Theme.OptionsGraphics.SelectResolution, SelectResolution, IResolutionEmpty, ResolutionEmpty) + else if Ini.Fullscreen = 1 then + UpdateSelectSlideOptions(Theme.OptionsGraphics.SelectResolution, SelectResolution, IResolutionFullScreen, Ini.ResolutionFullscreen) + else + UpdateSelectSlideOptions(Theme.OptionsGraphics.SelectResolution, SelectResolution, IResolution, Ini.Resolution); + +end; + end. diff --git a/src/screens/UScreenOptionsInput.pas b/src/screens/UScreenOptionsInput.pas new file mode 100644 index 00000000..e786fed6 --- /dev/null +++ b/src/screens/UScreenOptionsInput.pas @@ -0,0 +1,211 @@ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} + + +unit UScreenOptionsInput; + +interface + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{$I switches.inc} + +uses + UCommon, + UMenu, + sdl2, + UMusic, + UIni, + UThemes, + UJoystick; + +type + + TByteSet = set of byte; + + TScreenOptionsInput = class(TMenu) + protected + // interaction IDs + ButtonExitIID: integer; + SelectMouse: integer; + SelectJoyPad: integer; + + // values + ActualMouse: integer; + + SoundInteractions: TByteSet; + + WasJoy: boolean; + WasMouse: boolean; + + protected + procedure CheckOption; + + public + constructor Create; override; + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; + + procedure OnShow; override; + procedure OnHide; override; + + end; + +implementation + +uses + UGraphic, + UDisplay, + UUnicodeUtils, + SysUtils; + +function TScreenOptionsInput.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; +begin + Result := true; + if (PressedDown) then + begin // Key Down + // check normal keys + case UCS4UpperCase(CharCode) of + Ord('Q'): + begin + Result := false; + Exit; + end; + end; + + // check special keys + case PressedKey of + SDLK_ESCAPE, + SDLK_BACKSPACE : + begin + Ini.Save; + AudioPlayback.PlaySound(SoundLib.Back); + FadeTo(@ScreenOptions); + end; + SDLK_RETURN: + begin + if Interaction = ButtonExitIID then + begin + Ini.Save; + AudioPlayback.PlaySound(SoundLib.Back); + FadeTo(@ScreenOptions); + end; + end; + SDLK_DOWN: + InteractNext; + SDLK_UP : + InteractPrev; + SDLK_RIGHT: + begin + if (Interaction in SoundInteractions) then + begin + AudioPlayback.PlaySound(SoundLib.Option); + InteractInc; + end; + CheckOption; + end; + SDLK_LEFT: + begin + if (Interaction in SoundInteractions) then + begin + AudioPlayback.PlaySound(SoundLib.Option); + InteractDec; + end; + CheckOption; + end; + end; + end; +end; + +constructor TScreenOptionsInput.Create; +begin + inherited Create; + SoundInteractions := []; + + LoadFromTheme(Theme.OptionsInput); + + Theme.OptionsInput.SelectMouse.showArrows := true; + Theme.OptionsInput.SelectMouse.oneItemOnly := true; + SelectMouse := AddSelectSlide(Theme.OptionsInput.SelectMouse, ActualMouse, IMouseTranslated); + Include(SoundInteractions, SelectMouse); + + Theme.OptionsInput.SelectJoypad.showArrows := true; + Theme.OptionsInput.SelectJoypad.oneItemOnly := true; + SelectJoyPad := AddSelectSlide(Theme.OptionsInput.SelectJoypad, Ini.Joypad, IJoypad); + Include(SoundInteractions, SelectJoyPad); + + + AddButton(Theme.OptionsInput.ButtonExit); + ButtonExitIID := High(Interactions); + if (Length(Button[0].Text)=0) then + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); + +end; + +procedure TScreenOptionsInput.OnShow; +begin + inherited; + + ActualMouse := Ini.Mouse; + UpdateSelectSlideOptions(Theme.OptionsInput.SelectMouse, SelectMouse, IMouseTranslated, ActualMouse); + + WasMouse := Ini.Mouse > 0; + WasJoy := HasJoyStick; + Interaction := 0; +end; + +procedure TScreenOptionsInput.OnHide; +begin + inherited; + + // TODO: query confirm whether to disable mouse + // TODO: RattleSN4K3: query confirm whether to disable Joypad (requires interaction mode, Controller/Mouse/Keyboard) + + // update actual Mouse configuration + Ini.Mouse := ActualMouse; + Display.SetCursor; + + // re-initialize or remove joypad support + if WasJoy and (Ini.Joypad = 0) then begin + FinalizeJoyStick; + end else if not WasJoy and (Ini.Joypad = 1) then + InitializeJoystick; + +end; + +procedure TScreenOptionsInput.CheckOption; +begin + inherited; + + if (Interaction = SelectMouse) then + begin + if ActualMouse > 0 then Ini.Mouse := ActualMouse + else Ini.Mouse := 1; + Display.SetCursor; + Display.UpdateCursor; + end; + +end; + + +end. diff --git a/src/screens/UScreenOptionsJukebox.pas b/src/screens/UScreenOptionsJukebox.pas index 01380a91..f3fff9de 100644 --- a/src/screens/UScreenOptionsJukebox.pas +++ b/src/screens/UScreenOptionsJukebox.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsJukebox; interface @@ -534,7 +532,7 @@ constructor TScreenOptionsJukebox.Create; AddButton(Theme.OptionsJukebox.ButtonExit); if (Length(Button[0].Text)=0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); // lyric sample Lyrics := TLyricEngine.Create( diff --git a/src/screens/UScreenOptionsLyrics.pas b/src/screens/UScreenOptionsLyrics.pas index 0e2daa78..aca708d6 100644 --- a/src/screens/UScreenOptionsLyrics.pas +++ b/src/screens/UScreenOptionsLyrics.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenOptionsLyrics.pas $ - * $Id: UScreenOptionsLyrics.pas 2337 2010-05-03 21:55:18Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsLyrics; interface @@ -133,7 +131,7 @@ constructor TScreenOptionsLyrics.Create; AddButton(Theme.OptionsLyrics.ButtonExit); if (Length(Button[0].Text)=0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); end; diff --git a/src/screens/UScreenOptionsNetwork.pas b/src/screens/UScreenOptionsNetwork.pas index 526be5d4..116a68b2 100644 --- a/src/screens/UScreenOptionsNetwork.pas +++ b/src/screens/UScreenOptionsNetwork.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsNetwork; interface @@ -488,7 +486,7 @@ constructor TScreenOptionsNetwork.Create; AddButton(Theme.OptionsNetwork.ButtonExit); if (Length(Button[0].Text)=0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); InsertButton := AddButton(Theme.OptionsNetwork.ButtonInsert); diff --git a/src/screens/UScreenOptionsRecord.pas b/src/screens/UScreenOptionsRecord.pas index 43016065..bc53fc45 100644 --- a/src/screens/UScreenOptionsRecord.pas +++ b/src/screens/UScreenOptionsRecord.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenOptionsRecord.pas $ - * $Id: UScreenOptionsRecord.pas 3068 2014-01-01 19:17:11Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsRecord; interface @@ -70,6 +68,7 @@ TScreenOptionsRecord = class(TMenu) // indices for widget-updates SelectInputSourceID: integer; SelectSlideChannelID: array of integer; + SelectThresholdID: integer; // interaction IDs ExitButtonIID: integer; @@ -161,6 +160,7 @@ function TScreenOptionsRecord.ParseInput(PressedKey: cardinal; CharCode: UCS4Cha Ini.ThresholdIndex := (Ini.ThresholdIndex + Length(IThresholdVals) - 1) mod Length(IThresholdVals) else Ini.ThresholdIndex := (Ini.ThresholdIndex + 1) mod Length(IThresholdVals); + UpdateSelectSlideOptions(Theme.OptionsRecord.SelectThreshold, SelectThresholdID, IThreshold, Ini.ThresholdIndex); end; end; @@ -341,7 +341,7 @@ constructor TScreenOptionsRecord.Create; Theme.OptionsRecord.SelectThreshold.showArrows := true; //basisbit TODO Theme.OptionsRecord.SelectThreshold.oneItemOnly := true; - AddSelectSlide(Theme.OptionsRecord.SelectThreshold, Ini.ThresholdIndex, IThreshold); + SelectThresholdID := AddSelectSlide(Theme.OptionsRecord.SelectThreshold, Ini.ThresholdIndex, IThreshold); Theme.OptionsRecord.SelectMicBoost.showArrows := true; Theme.OptionsRecord.SelectMicBoost.oneItemOnly := true; @@ -352,7 +352,7 @@ constructor TScreenOptionsRecord.Create; // add Exit-button AddButton(Theme.OptionsRecord.ButtonExit); if (Length(Button[0].Text) = 0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); // store InteractionID if (Length(AudioInputProcessor.DeviceList) > 0) then ExitButtonIID := MaxChannelCount + 4 diff --git a/src/screens/UScreenOptionsSound.pas b/src/screens/UScreenOptionsSound.pas index 0de27c07..912c7016 100644 --- a/src/screens/UScreenOptionsSound.pas +++ b/src/screens/UScreenOptionsSound.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenOptionsSound.pas $ - * $Id: UScreenOptionsSound.pas 3124 2015-08-23 03:31:49Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsSound; interface @@ -84,7 +82,7 @@ function TScreenOptionsSound.ParseInput(PressedKey: cardinal; end; SDLK_RETURN: begin - if SelInteraction = 6 then + if SelInteraction = 7 then begin Ini.Save; AudioPlayback.PlaySound(SoundLib.Back); @@ -153,6 +151,10 @@ constructor TScreenOptionsSound.Create; Theme.OptionsSound.SelectBeatClick.oneItemOnly := true; AddSelectSlide(Theme.OptionsSound.SelectBeatClick, Ini.BeatClick, IBeatClickTranslated); + Theme.OptionsSound.SelectSlideMusicAutoGain.showArrows := true; + Theme.OptionsSound.SelectSlideMusicAutoGain.oneItemOnly := true; + AddSelectSlide(Theme.OptionsSound.SelectSlideMusicAutoGain, Ini.MusicAutoGain, IMusicAutoGainTranslated); + Theme.OptionsSound.SelectSlidePreviewVolume.showArrows := true; Theme.OptionsSound.SelectSlidePreviewVolume.oneItemOnly := true; AddSelectSlide(Theme.OptionsSound.SelectSlidePreviewVolume, Ini.PreviewVolume, IPreviewVolumeTranslated); @@ -163,7 +165,7 @@ constructor TScreenOptionsSound.Create; AddButton(Theme.OptionsSound.ButtonExit); if (Length(Button[0].Text) = 0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); Interaction := 0; end; diff --git a/src/screens/UScreenOptionsThemes.pas b/src/screens/UScreenOptionsThemes.pas index d204dd29..bc940277 100644 --- a/src/screens/UScreenOptionsThemes.pas +++ b/src/screens/UScreenOptionsThemes.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenOptionsThemes.pas $ - * $Id: UScreenOptionsThemes.pas 3133 2015-09-07 17:10:36Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsThemes; interface @@ -209,7 +207,7 @@ constructor TScreenOptionsThemes.Create; AddButton(Theme.OptionsThemes.ButtonExit); if (Length(Button[0].Text)=0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); end; diff --git a/src/screens/UScreenOptionsWebcam.pas b/src/screens/UScreenOptionsWebcam.pas index 4840a42c..2eecfad6 100644 --- a/src/screens/UScreenOptionsWebcam.pas +++ b/src/screens/UScreenOptionsWebcam.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenOptionsWebcam; interface @@ -227,7 +225,7 @@ constructor TScreenOptionsWebcam.Create; AddButton(Theme.OptionsWebcam.ButtonExit); if (Length(Button[1].Text)=0) then - AddButtonText(20, 5, Theme.Options.Description[10]); + AddButtonText(20, 5, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); Interaction := 0; diff --git a/src/screens/UScreenPartyNewRound.pas b/src/screens/UScreenPartyNewRound.pas index 6623840e..34e71efe 100644 --- a/src/screens/UScreenPartyNewRound.pas +++ b/src/screens/UScreenPartyNewRound.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenPartyNewRound.pas $ - * $Id: UScreenPartyNewRound.pas 2246 2010-04-18 13:43:36Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyNewRound; interface diff --git a/src/screens/UScreenPartyOptions.pas b/src/screens/UScreenPartyOptions.pas index 6caed02d..bd56f798 100644 --- a/src/screens/UScreenPartyOptions.pas +++ b/src/screens/UScreenPartyOptions.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenPartyOptions.pas $ - * $Id: UScreenPartyOptions.pas 2146 2010-02-22 18:27:15Z k-m_schindler $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyOptions; interface diff --git a/src/screens/UScreenPartyPlayer.pas b/src/screens/UScreenPartyPlayer.pas index fb29a5c2..ef599be6 100644 --- a/src/screens/UScreenPartyPlayer.pas +++ b/src/screens/UScreenPartyPlayer.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenPartyPlayer.pas $ - * $Id: UScreenPartyPlayer.pas 2201 2010-03-15 21:14:51Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyPlayer; interface @@ -43,7 +41,7 @@ interface UNote, UFiles, SysUtils, - UScreenSing, + UScreenSingController, UScreenPartyNewRound, UScreenPartyWin, UScreenPartyScore, @@ -79,6 +77,7 @@ TScreenPartyPlayer = class(TMenu) Player12Name: cardinal; constructor Create; override; + function ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean; out SuppressKey: boolean): boolean; override; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure OnShow; override; @@ -196,7 +195,7 @@ procedure TScreenPartyPlayer.UpdateParty; Party.bPartyGame := true; PlayersPlay := Length(Party.Teams); - ScreenSing := TScreenSing.Create; + ScreenSing := TScreenSingController.Create; ScreenPartyNewRound := TScreenPartyNewRound.Create; ScreenPartyWin := TScreenPartyWin.Create; ScreenPartyScore := TScreenPartyScore.Create; @@ -213,11 +212,29 @@ procedure TScreenPartyPlayer.UpdateParty; end; end; +function TScreenPartyPlayer.ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean; out SuppressKey: boolean): boolean; +begin + Result := inherited; + // only suppress special keys for now + case PressedKey of + // Templates for Names Mod + SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5, SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_F11, SDLK_F12: + if (Button[Interactions[Interaction].Num].Selected) then + begin + SuppressKey := true; + end + else + begin + Result := false; + end; + end; +end; + function TScreenPartyPlayer.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; -var - SDL_ModState: word; - Team: integer; - I: integer; + var + SDL_ModState: word; + Team: integer; + I: integer; procedure IntNext; begin repeat @@ -234,6 +251,16 @@ function TScreenPartyPlayer.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; SelectsS[Interactions[Interaction].Num].Visible) or (Button[Interactions[Interaction].Num].Visible); end; + procedure HandleNameTemplate(const index: integer); + var + isAlternate: boolean; + begin + isAlternate := (SDL_ModState = KMOD_LSHIFT) or (SDL_ModState = KMOD_RSHIFT); + isAlternate := isAlternate or (SDL_ModState = KMOD_LALT); // legacy key combination + + if isAlternate then Ini.NameTemplate[index] := Button[Interactions[Interaction].Num].Text[0].Text + else Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[index]; + end; begin Result := true; @@ -259,120 +286,35 @@ function TScreenPartyPlayer.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; // check special keys case PressedKey of // Templates for Names Mod - SDLK_F1: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[0] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[0]; - end; - SDLK_F2: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[1] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[1]; - end; - SDLK_F3: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[2] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[2]; - end; - SDLK_F4: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[3] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[3]; - end; - SDLK_F5: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[4] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[4]; - end; - SDLK_F6: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[5] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[5]; - end; - SDLK_F7: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[6] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[6]; - end; - SDLK_F8: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[7] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[7]; - end; - SDLK_F9: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[8] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[8]; - end; - SDLK_F10: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[9] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[9]; - end; - SDLK_F11: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[10] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[10]; - end; - SDLK_F12: - if (SDL_ModState = KMOD_LALT) then - begin - Ini.NameTemplate[11] := Button[Interactions[Interaction].Num].Text[0].Text; - end - else - begin - Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[11]; - end; + SDLK_F1: HandleNameTemplate(0); + SDLK_F2: HandleNameTemplate(1); + SDLK_F3: HandleNameTemplate(2); + SDLK_F4: HandleNameTemplate(3); + SDLK_F5: HandleNameTemplate(4); + SDLK_F6: HandleNameTemplate(5); + SDLK_F7: HandleNameTemplate(6); + SDLK_F8: HandleNameTemplate(7); + SDLK_F9: HandleNameTemplate(8); + SDLK_F10: HandleNameTemplate(9); + SDLK_F11: HandleNameTemplate(10); + SDLK_F12: HandleNameTemplate(11); SDLK_BACKSPACE: begin Button[Interactions[Interaction].Num].Text[0].DeleteLastLetter; end; end; + end + else + begin + // check normal keys + case UCS4UpperCase(CharCode) of + Ord('Q'): + begin + Result := false; + Exit; + end; + end; end; case PressedKey of diff --git a/src/screens/UScreenPartyRounds.pas b/src/screens/UScreenPartyRounds.pas index 0c39bc6e..cdfc7eca 100644 --- a/src/screens/UScreenPartyRounds.pas +++ b/src/screens/UScreenPartyRounds.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/branches/experimental/Lua/src/screens/UScreenPartyOptions.pas $ - * $Id: UScreenPartyOptions.pas 2036 2009-12-14 20:59:44Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyRounds; interface diff --git a/src/screens/UScreenPartyScore.pas b/src/screens/UScreenPartyScore.pas index 0aaa2a60..ba728f35 100644 --- a/src/screens/UScreenPartyScore.pas +++ b/src/screens/UScreenPartyScore.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenPartyScore.pas $ - * $Id: UScreenPartyScore.pas 2654 2010-10-10 11:46:53Z b_krueger $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyScore; interface @@ -38,6 +36,7 @@ interface SysUtils, UMenu, UDisplay, + UIni, UMusic, UThemes; @@ -61,8 +60,8 @@ TScreenPartyScore = class(TMenu) StaticTeam3Deco: cardinal; TextWinner: cardinal; - DecoTex: array[0..5] of integer; - DecoColor: array[0..5] of Record + DecoTex: array[0..UIni.IMaxPlayerCount-1] of integer; + DecoColor: array[0..UIni.IMaxPlayerCount-1] of Record R, G, B: real; end; diff --git a/src/screens/UScreenPartyTournamentOptions.pas b/src/screens/UScreenPartyTournamentOptions.pas index cde6cd70..fb2e33d7 100644 --- a/src/screens/UScreenPartyTournamentOptions.pas +++ b/src/screens/UScreenPartyTournamentOptions.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/branches/experimental/Lua/src/screens/UScreenPartyOptions.pas $ - * $Id: UScreenPartyOptions.pas 2036 2009-12-14 20:59:44Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyTournamentOptions; interface diff --git a/src/screens/UScreenPartyTournamentPlayer.pas b/src/screens/UScreenPartyTournamentPlayer.pas index 60898604..6ec9f43f 100644 --- a/src/screens/UScreenPartyTournamentPlayer.pas +++ b/src/screens/UScreenPartyTournamentPlayer.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenPartyTournmentPlayer.pas $ - * $Id: $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyTournamentPlayer; interface @@ -73,6 +71,7 @@ TScreenPartyTournamentPlayer = class(TMenu) Player16Name: cardinal; constructor Create; override; + function ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean; out SuppressKey: boolean): boolean; override; function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; override; procedure OnShow; override; procedure SetAnimationProgress(Progress: real); override; @@ -148,11 +147,29 @@ procedure TScreenPartyTournamentPlayer.UpdatePartyTournament; end; +function TScreenPartyTournamentPlayer.ShouldHandleInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean; out SuppressKey: boolean): boolean; +begin + Result := inherited; + // only suppress special keys for now + case PressedKey of + // Templates for Names Mod + SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5, SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_F11, SDLK_F12: + if (Button[Interactions[Interaction].Num].Selected) then + begin + SuppressKey := true; + end + else + begin + Result := false; + end; + end; +end; function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; PressedDown: boolean): boolean; var SDL_ModState: word; I: integer; + isAlternate: boolean; procedure IntNext; begin repeat @@ -192,10 +209,12 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: end; // check special keys + isAlternate := (SDL_ModState = KMOD_LSHIFT) or (SDL_ModState = KMOD_RSHIFT); + isAlternate := isAlternate or (SDL_ModState = KMOD_LALT); // legacy key combination case PressedKey of // Templates for Names Mod SDLK_F1: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[0] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -204,7 +223,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[0]; end; SDLK_F2: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[1] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -213,7 +232,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[1]; end; SDLK_F3: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[2] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -222,7 +241,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[2]; end; SDLK_F4: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[3] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -231,7 +250,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[3]; end; SDLK_F5: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[4] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -240,7 +259,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[4]; end; SDLK_F6: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[5] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -249,7 +268,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[5]; end; SDLK_F7: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[6] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -258,7 +277,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[6]; end; SDLK_F8: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[7] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -267,7 +286,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[7]; end; SDLK_F9: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[8] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -276,7 +295,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[8]; end; SDLK_F10: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[9] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -285,7 +304,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[9]; end; SDLK_F11: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[10] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -294,7 +313,7 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].Text := Ini.NameTemplate[10]; end; SDLK_F12: - if (SDL_ModState = KMOD_LALT) then + if isAlternate then begin Ini.NameTemplate[11] := Button[Interactions[Interaction].Num].Text[0].Text; end @@ -308,6 +327,17 @@ function TScreenPartyTournamentPlayer.ParseInput(PressedKey: cardinal; CharCode: Button[Interactions[Interaction].Num].Text[0].DeleteLastLetter; end; end; + end + else + begin + // check normal keys + case UCS4UpperCase(CharCode) of + Ord('Q'): + begin + Result := false; + Exit; + end; + end; end; case PressedKey of diff --git a/src/screens/UScreenPartyTournamentRounds.pas b/src/screens/UScreenPartyTournamentRounds.pas index ec2945fa..5ed7be72 100644 --- a/src/screens/UScreenPartyTournamentRounds.pas +++ b/src/screens/UScreenPartyTournamentRounds.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenPartyWin.pas $ - * $Id: UScreenPartyWin.pas 2246 2010-04-18 13:43:36Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyTournamentRounds; interface @@ -44,7 +42,7 @@ interface UDisplay, UMusic, UPartyTournament, - UScreenSing, + UScreenSingController, UScreenPartyTournamentWin, UThemes; @@ -176,7 +174,7 @@ function TScreenPartyTournamentRounds.ParseInput(PressedKey: cardinal; CharCode: LoadPlayersColors; freeandnil(ScreenSing); - ScreenSing := TScreenSing.Create; + ScreenSing := TScreenSingController.Create; AudioPlayback.PlaySound(SoundLib.Start); FadeTo(@ScreenSong); diff --git a/src/screens/UScreenPartyTournamentWin.pas b/src/screens/UScreenPartyTournamentWin.pas index dbfc9c6b..77b7b4b9 100644 --- a/src/screens/UScreenPartyTournamentWin.pas +++ b/src/screens/UScreenPartyTournamentWin.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenPartyWin.pas $ - * $Id: UScreenPartyWin.pas 2246 2010-04-18 13:43:36Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyTournamentWin; interface diff --git a/src/screens/UScreenPartyWin.pas b/src/screens/UScreenPartyWin.pas index 458c640c..04ac558e 100644 --- a/src/screens/UScreenPartyWin.pas +++ b/src/screens/UScreenPartyWin.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenPartyWin.pas $ - * $Id: UScreenPartyWin.pas 2246 2010-04-18 13:43:36Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPartyWin; interface diff --git a/src/screens/UScreenPopup.pas b/src/screens/UScreenPopup.pas index c7dce7fc..30fa25d4 100644 --- a/src/screens/UScreenPopup.pas +++ b/src/screens/UScreenPopup.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenPopup.pas $ - * $Id: UScreenPopup.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenPopup; interface @@ -910,7 +908,7 @@ procedure TScreenPopupScoreDownload.SaveScoreSong(); Text_SongSituation := Language.Translate('SCORE_DOWNLOAD_SONG') + ' ' + IntToStr(Actual_Song) + '/' + IntToStr(Num_Songs); Text_WebSituation := IntToStr(Actual_Web) + '/' + IntToStr(Num_Webs); - for J := 0 to 2 do + for J := 0 to 2 do //for each difficulty level begin if (Position_Receive_List[J] <= Length(Receive_List[J])) then @@ -921,7 +919,14 @@ procedure TScreenPopupScoreDownload.SaveScoreSong(); while (Receive_List[J][Position_Receive_List[J]] <> #10) and (Position_Receive_List[J] <= Length(Receive_List[J])) do begin String_Text := String_Text + Receive_List[J][Position_Receive_List[J]]; - Position_Receive_List[J] := Position_Receive_List[J] + 1; + if((Position_Receive_List[J] < Length(Receive_List[J]))) then + begin + Position_Receive_List[J] := Position_Receive_List[J] + 1; + end + else + begin + Break; + end; end; // E -> Error song no exist in web diff --git a/src/screens/UScreenScore.pas b/src/screens/UScreenScore.pas index 88017ab7..84373484 100644 --- a/src/screens/UScreenScore.pas +++ b/src/screens/UScreenScore.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenScore.pas $ - * $Id: UScreenScore.pas 2246 2010-04-18 13:43:36Z tobigun $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenScore; interface @@ -44,6 +42,7 @@ interface dglOpenGL, math, UTexture, + UIni, UDLLManager, UWebSDK; @@ -104,9 +103,9 @@ TScreenScore = class(TMenu) BarTime: cardinal; FinishScreenDraw: boolean; - aPlayerScoreScreenTextures: array[1..6] of TPlayerScoreScreenTexture; - aPlayerScoreScreenDatas: array[1..6] of TPlayerScoreScreenData; - aPlayerScoreScreenRatings: array[1..6] of TPlayerScoreRatingPics; + aPlayerScoreScreenTextures: array[1..UIni.IMaxPlayerCount] of TPlayerScoreScreenTexture; + aPlayerScoreScreenDatas: array[1..UIni.IMaxPlayerCount] of TPlayerScoreScreenData; + aPlayerScoreScreenRatings: array[1..UIni.IMaxPlayerCount] of TPlayerScoreRatingPics; BarScore_EaseOut_Step: real; BarPhrase_EaseOut_Step: real; @@ -117,20 +116,21 @@ TScreenScore = class(TMenu) TextArtistTitle: integer; - TextName: array[1..6] of integer; - TextScore: array[1..6] of integer; - - TextNotes: array[1..6] of integer; - TextNotesScore: array[1..6] of integer; - TextLineBonus: array[1..6] of integer; - TextLineBonusScore: array[1..6] of integer; - TextGoldenNotes: array[1..6] of integer; - TextGoldenNotesScore: array[1..6] of integer; - TextTotal: array[1..6] of integer; - TextTotalScore: array[1..6] of integer; - - PlayerStatic: array[1..6] of array of integer; - AvatarStatic: array[1..6] of integer; + TextName: array[1..UIni.IMaxPlayerCount] of integer; + TextScore: array[1..UIni.IMaxPlayerCount] of integer; + + TextNotes: array[1..UIni.IMaxPlayerCount] of integer; + TextNotesScore: array[1..UIni.IMaxPlayerCount] of integer; + TextLineBonus: array[1..UIni.IMaxPlayerCount] of integer; + TextLineBonusScore: array[1..UIni.IMaxPlayerCount] of integer; + TextGoldenNotes: array[1..UIni.IMaxPlayerCount] of integer; + TextGoldenNotesScore: array[1..UIni.IMaxPlayerCount] of integer; + TextTotal: array[1..UIni.IMaxPlayerCount] of integer; + TextTotalScore: array[1..UIni.IMaxPlayerCount] of integer; + + PlayerStatic: array[1..UIni.IMaxPlayerCount] of array of integer; + AvatarStatic: array[1..UIni.IMaxPlayerCount] of integer; + AvatarStaticRef: array[1..UIni.IMaxPlayerCount] of Integer; { texture pairs for swapping when screens = 2 first array level: index of player ( actually this is a position 1 - Player 1 if PlayersPlay = 1 <- we don't need swapping here @@ -138,12 +138,12 @@ TScreenScore = class(TMenu) 4..6 - Player 1 - 3 or 4 - 6 if PlayersPlay = 3 or 6 ) second array level: different playerstatics for positions third array level: texture for screen 1 or 2 } - PlayerStaticTextures: array[1..6] of array of array [1..2] of TPlayerStaticTexture; - PlayerTexts: array[1..6] of array of integer; + PlayerStaticTextures: array[1..UIni.IMaxPlayerCount] of array of array [1..2] of TPlayerStaticTexture; + PlayerTexts: array[1..UIni.IMaxPlayerCount] of array of integer; - StaticBoxLightest: array[1..6] of integer; - StaticBoxLight: array[1..6] of integer; - StaticBoxDark: array[1..6] of integer; + StaticBoxLightest: array[1..UIni.IMaxPlayerCount] of integer; + StaticBoxLight: array[1..UIni.IMaxPlayerCount] of integer; + StaticBoxDark: array[1..UIni.IMaxPlayerCount] of integer; { texture pairs for swapping when screens = 2 for boxes first array level: index of player ( actually this is a position @@ -152,21 +152,21 @@ TScreenScore = class(TMenu) 4..6 - Player 1 - 3 or 4 - 6 if PlayersPlay = 3 or 6 ) second array level: different boxes for positions (0: lightest; 1: light; 2: dark) third array level: texture for screen 1 or 2 } - PlayerBoxTextures: array[1..6] of array[0..2] of array [1..2] of TPlayerStaticTexture; + PlayerBoxTextures: array[1..UIni.IMaxPlayerCount] of array[0..2] of array [1..2] of TPlayerStaticTexture; - StaticBackLevel: array[1..6] of integer; - StaticBackLevelRound: array[1..6] of integer; - StaticLevel: array[1..6] of integer; - StaticLevelRound: array[1..6] of integer; + StaticBackLevel: array[1..UIni.IMaxPlayerCount] of integer; + StaticBackLevelRound: array[1..UIni.IMaxPlayerCount] of integer; + StaticLevel: array[1..UIni.IMaxPlayerCount] of integer; + StaticLevelRound: array[1..UIni.IMaxPlayerCount] of integer; Animation: real; Voice: integer; - TextScore_ActualValue: array[1..6] of integer; - TextPhrase_ActualValue: array[1..6] of integer; - TextGolden_ActualValue: array[1..6] of integer; + TextScore_ActualValue: array[1..UIni.IMaxPlayerCount] of integer; + TextPhrase_ActualValue: array[1..UIni.IMaxPlayerCount] of integer; + TextGolden_ActualValue: array[1..UIni.IMaxPlayerCount] of integer; - ButtonSend: array[1..3] of integer; + ButtonSend: array[1..UIni.IMaxPlayerCount] of integer; ActualRound: integer; StaticNavigate: integer; TextNavigate: integer; @@ -220,7 +220,6 @@ implementation UScreenSong, UMenuStatic, UTime, - UIni, USkins, ULog, ULanguage, @@ -338,10 +337,6 @@ procedure OnSendScore(Value: integer; Data: Pointer); SendInfo.Password := UDataBase.DataBase.NetworkUser[ScreenPopupSendScore.SelectValueW].UserList[ScreenPopupSendScore.SelectValueU].Password; end; - SendInfo.Name := ''; - if (ScreenPopUpSendScore.SelectValueU <> High(ScreenPopUpSendScore.IUsername)) and (UDataBase.DataBase.NetworkUser[ScreenPopupSendScore.SelectValueW].UserList[ScreenPopupSendScore.SelectValueU].SendSavePlayer = 1) then - SendInfo.Name := Ini.Name[ScreenPopupSendScore.SelectValueP]; - index := ScreenPopupSendScore.SelectValueP; SendInfo.ScoreInt := player[index].ScoreInt; SendInfo.ScoreLineInt := player[index].ScoreLineInt; @@ -481,10 +476,13 @@ function TScreenScore.ParseMouse(MouseButton: Integer; BtnDown: Boolean; X, Y: i begin Result := True; + //TODO: adapt for players 7 to 12 case PlayersPlay of 1 : button_s := ButtonSend[1]; 2, 4: button_s := ButtonSend[2]; 3, 6: button_s := ButtonSend[3]; + else + button_s := ButtonSend[3]; end; min_x := Button[button_s].X; @@ -551,6 +549,7 @@ procedure TScreenScore.RefreshTexts; ResetScores; end; +//TODO: adapt for players 7 to 12 procedure TScreenScore.LoadSwapTextures; var P, I: integer; @@ -561,7 +560,7 @@ procedure TScreenScore.LoadSwapTextures; ThemeStatic: TThemeStatic; begin { we only need to load swapping textures if in dualscreen mode } - if Screens = 3 then + if Screens = 2 then begin { load swapping textures for custom statics } for P := low(PlayerStatic) to High(PlayerStatic) do @@ -689,6 +688,7 @@ procedure TScreenScore.LoadSwapTextures; end; end; +//TODO: adapt for players 7 to 12 procedure TScreenScore.SwapToScreen(Screen: integer); var P, I, J, Max: integer; @@ -699,6 +699,8 @@ procedure TScreenScore.SwapToScreen(Screen: integer); 1: Max := 1; 2, 4: Max := 2; 3, 6: Max := 3; + 8: Max := 4; + 12: Max := 6; else Max := 0; //this should never happen end; @@ -709,7 +711,7 @@ procedure TScreenScore.SwapToScreen(Screen: integer); Screen := 1; { set correct box textures } - if (Screens = 3) then + if (Screens = 2) then begin for I:= 0 to Max - 1 do @@ -789,6 +791,14 @@ procedure TScreenScore.SwapToScreen(Screen: integer); Text[TextTotalScore[I + 1 + Max]].ColG := Col.G; Text[TextTotalScore[I + 1 + Max]].ColB := Col.B; end; + if((PlayersPlay > Max) and (Screen = 2)) then + begin + Statics[AvatarStaticRef[PlayersPlay-Max+I+1]].Visible:=true; + end + else if((PlayersPlay > Max) and (Screen = 1)) then + begin + Statics[AvatarStaticRef[PlayersPlay-Max+I+1]].Visible:=false; + end; end; { to keep it simple we just swap all statics, not just the shown ones } @@ -828,7 +838,7 @@ constructor TScreenScore.Create; TextArtistTitle := AddText(Theme.Score.TextArtistTitle); - for Player := 1 to 6 do + for Player := 1 to UIni.IMaxPlayerCount do begin SetLength(PlayerStatic[Player], Length(Theme.Score.PlayerStatic[Player])); SetLength(PlayerTexts[Player], Length(Theme.Score.PlayerTexts[Player])); @@ -895,6 +905,7 @@ constructor TScreenScore.Create; aPlayerScoreScreenTextures[Player].Score_NoteBarRound_Lightest := Tex_Score_NoteBarRound_Lightest[Player]; end; + //TODO: adapt for players 7 to 12 // avatars case PlayersPlay of 1: ArrayStartModifier := 0; @@ -918,17 +929,30 @@ constructor TScreenScore.Create; for I := 1 to PlayersPlay do begin - AvatarStatic[I + ArrayStartModifier] := AddStatic(Theme.Score.AvatarStatic[I + ArrayStartModifier]); - Statics[AvatarStatic[I + ArrayStartModifier]].Texture := AvatarPlayerTextures[I]; - - Statics[AvatarStatic[I + ArrayStartModifier]].Texture.X := Theme.Score.AvatarStatic[I + ArrayStartModifier].X; - Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Y := Theme.Score.AvatarStatic[I + ArrayStartModifier].Y; - Statics[AvatarStatic[I + ArrayStartModifier]].Texture.H := Theme.Score.AvatarStatic[I + ArrayStartModifier].H; - Statics[AvatarStatic[I + ArrayStartModifier]].Texture.W := Theme.Score.AvatarStatic[I + ArrayStartModifier].W; - Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Z := Theme.Score.AvatarStatic[I + ArrayStartModifier].Z; - Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Alpha := Theme.Score.AvatarStatic[I + ArrayStartModifier].Alpha; - + if((Screens = 2) and (PlayersPlay > 3) and (I > Trunc(PlayersPlay/2))) then + begin + AvatarStatic[I + ArrayStartModifier] := AddStatic(Theme.Score.AvatarStatic[I-Trunc(PlayersPlay/2) + ArrayStartModifier]); + Statics[AvatarStatic[I + ArrayStartModifier]].Texture := AvatarPlayerTextures[I]; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.X := Theme.Score.AvatarStatic[I-Trunc(PlayersPlay/2) + ArrayStartModifier].X; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Y := Theme.Score.AvatarStatic[I-Trunc(PlayersPlay/2) + ArrayStartModifier].Y; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.H := Theme.Score.AvatarStatic[I-Trunc(PlayersPlay/2) + ArrayStartModifier].H; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.W := Theme.Score.AvatarStatic[I-Trunc(PlayersPlay/2) + ArrayStartModifier].W; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Z := Theme.Score.AvatarStatic[I-Trunc(PlayersPlay/2) + ArrayStartModifier].Z; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Alpha := Theme.Score.AvatarStatic[I-Trunc(PlayersPlay/2) + ArrayStartModifier].Alpha; + end + else + begin + AvatarStatic[I + ArrayStartModifier] := AddStatic(Theme.Score.AvatarStatic[I + ArrayStartModifier]); + Statics[AvatarStatic[I + ArrayStartModifier]].Texture := AvatarPlayerTextures[I]; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.X := Theme.Score.AvatarStatic[I + ArrayStartModifier].X; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Y := Theme.Score.AvatarStatic[I + ArrayStartModifier].Y; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.H := Theme.Score.AvatarStatic[I + ArrayStartModifier].H; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.W := Theme.Score.AvatarStatic[I + ArrayStartModifier].W; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Z := Theme.Score.AvatarStatic[I + ArrayStartModifier].Z; + Statics[AvatarStatic[I + ArrayStartModifier]].Texture.Alpha := Theme.Score.AvatarStatic[I + ArrayStartModifier].Alpha; + end; Statics[AvatarStatic[I + ArrayStartModifier]].Visible := true; + AvatarStaticRef[I]:=AvatarStatic[I + ArrayStartModifier]; end; StaticNavigate := AddStatic(Theme.Score.StaticNavigate); @@ -937,12 +961,14 @@ constructor TScreenScore.Create; if (PlayersPlay <= 3) or (Screens = 2) then LoadSwapTextures; + //TODO: adapt for players 4 to 12 //Send Buttons for I := 1 to 3 do ButtonSend[I] := AddButton(Theme.Score.ButtonSend[I]); end; +//TODO: adapt for players 7 to 12 procedure TScreenScore.MapPlayersToPosition; var ArrayStartModifier: integer; @@ -1034,7 +1060,7 @@ procedure TScreenScore.DrawPlayerBars; begin for I := 0 to PlayersPlay - 1 do begin - if (PlayerPositionMap[I].Position > 0) then //and ((ScreenAct = PlayerPositionMap[I].Screen) or (PlayerPositionMap[I].BothScreens)) then + if (PlayerPositionMap[I].Position > 0) and ((ScreenAct = PlayerPositionMap[I].Screen) or (PlayerPositionMap[I].BothScreens)) then begin if (BarScore_EaseOut_Step >= (EaseOut_MaxSteps * 10)) then begin @@ -1061,7 +1087,7 @@ procedure TScreenScore.OnShow; var P: integer; // player I: integer; - V: array[1..6] of boolean; // visibility array + V: array[1..UIni.IMaxPlayerCount] of boolean; // visibility array ArrayStartModifier: integer; begin @@ -1094,6 +1120,7 @@ procedure TScreenScore.OnShow; Text[TextTitle].Text := CurrentSong.Title; Text[TextArtistTitle].Text := CurrentSong.Artist + ' - ' + CurrentSong.Title; + //TODO: adapt for players 7 to 12 // set visibility case PlayersPlay of 1: begin @@ -1146,7 +1173,7 @@ procedure TScreenScore.OnShow; end; end; - for P := 1 to 6 do + for P := 1 to UIni.IMaxPlayerCount do begin Text[TextName[P]].Visible := V[P]; Text[TextScore[P]].Visible := V[P]; @@ -1236,7 +1263,7 @@ procedure TScreenScore.ResetScores; TextGolden_ActualValue[P] := 0; end; - for P := 1 to 6 do + for P := 1 to UIni.IMaxPlayerCount do begin // We set alpha to 0 , so we can nicely blend them in when we need them Text[TextScore[P]].Alpha := 0; @@ -1315,10 +1342,7 @@ function TScreenScore.Draw: boolean; BarTime := 0; // swap static textures to current screen ones - try - SwapToScreen(ScreenAct); - except - end; + SwapToScreen(ScreenAct); //Draw the Background DrawBG; @@ -1329,8 +1353,7 @@ function TScreenScore.Draw: boolean; if (ShowFinish) then DrawPlayerBars; - //Draw Theme Objects - DrawFG; + (* //todo: i need a clever method to draw statics with their z value @@ -1342,11 +1365,12 @@ function TScreenScore.Draw: boolean; // we have to swap the themeobjects values on every draw // to support dual screen - for PlayerCounter := 1 to PlayersPlay do + for PlayerCounter := 1 to PlayersPlay do //TODO: adapt for players 7 to 12 begin FillPlayerItems(PlayerCounter); end; - + //Draw Theme Objects + DrawFG; Result := true; end; diff --git a/src/screens/UScreenSing.pas b/src/screens/UScreenSing.pas deleted file mode 100644 index d5d29b23..00000000 --- a/src/screens/UScreenSing.pas +++ /dev/null @@ -1,3760 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenSing.pas $ - * $Id: UScreenSing.pas 3150 2015-10-20 00:07:57Z basisbit $ - *} - -unit UScreenSing; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - SysUtils, - sdl2, - dglOpenGL, - TextGL, - UAvatars, - UCommon, - UFiles, - UGraphicClasses, - UHookableEvent, - UIni, - ULog, - ULyrics, - UMenu, - UMusic, - UPath, - USingScores, - USongs, - UTexture, - UThemes, - UTime, - USkins; - -type - TPos = record // Lines[part].Line[line].Note[note] - part: integer; - line: integer; - note: integer; - CP: integer; - end; - - TLyricsSyncSource = class(TSyncSource) - function GetClock(): real; override; - end; - - TMusicSyncSource = class(TSyncSource) - function GetClock(): real; override; - end; - - TTimebarMode = ( - tbmCurrent, // current song position - tbmRemaining, // remaining time - tbmTotal // total time - ); - -type - TScreenSing = class(TMenu) - private - // views - fShowVisualization: boolean; - fShowBackground: boolean; - - fCurrentVideo: IVideo; - fVideoClip: IVideo; - fLyricsSync: TLyricsSyncSource; - fMusicSync: TMusicSyncSource; - fTimebarMode: TTimebarMode; - - PlayMidi: boolean; - - StartNote, EndNote: TPos; - - procedure LoadNextSong(); - procedure UpdateMedleyStats(medley_end: boolean); - procedure DrawMedleyCountdown(); - procedure SongError(); - protected - eSongLoaded: THookableEvent; //< event is called after lyrics of a song are loaded on OnShow - Paused: boolean; //pause Mod - NumEmptySentences: array [0..1] of integer; - public - removeVoice: boolean; - fShowWebcam: boolean; - - Act_Level: integer; - Act_MD5Song: string; - - StaticDuet: array of cardinal; - ColPlayer: array[0..3] of TRGB; - - MedleyStart, MedleyEnd: real; - - // timebar fields - StaticTimeProgress: integer; - TextTimeText: integer; - - StaticP1: array [0..1] of integer; - TextP1: integer; - StaticP1Avatar: array [0..1] of integer; - - // shown when game is in 2/4 player modus - StaticP1TwoP: array [0..1] of integer; - TextP1TwoP: integer; - StaticP1TwoPAvatar: array [0..1] of integer; - - // shown when game is in 3/6 player modus - StaticP1ThreeP: array [0..1] of integer; - TextP1ThreeP: integer; - StaticP1ThreePAvatar: array [0..1] of integer; - - StaticP2R: array [0..1] of integer; - TextP2R: integer; - StaticP2RAvatar: array [0..1] of integer; - - StaticP2M: array [0..1] of integer; - TextP2M: integer; - StaticP2MAvatar: array [0..1] of integer; - - StaticP3R: array [0..1] of integer; - TextP3R: integer; - StaticP3RAvatar: array [0..1] of integer; - - // 4/6 players in one screen - StaticP1FourP: integer; - StaticP2FourP: integer; - StaticP3FourP: integer; - StaticP4FourP: integer; - - StaticP1FourPAvatar: integer; - StaticP2FourPAvatar: integer; - StaticP3FourPAvatar: integer; - StaticP4FourPAvatar: integer; - - TextP1FourP: integer; - TextP2FourP: integer; - TextP3FourP: integer; - TextP4FourP: integer; - - StaticP1SixP: integer; - StaticP2SixP: integer; - StaticP3SixP: integer; - StaticP4SixP: integer; - StaticP5SixP: integer; - StaticP6SixP: integer; - - StaticP1SixPAvatar: integer; - StaticP2SixPAvatar: integer; - StaticP3SixPAvatar: integer; - StaticP4SixPAvatar: integer; - StaticP5SixPAvatar: integer; - StaticP6SixPAvatar: integer; - - TextP1SixP: integer; - TextP2SixP: integer; - TextP3SixP: integer; - TextP4SixP: integer; - TextP5SixP: integer; - TextP6SixP: integer; - - // 3/6 players duet - StaticDuetP1ThreeP: array [0..1] of integer; - TextDuetP1ThreeP: integer; - StaticDuetP1ThreePAvatar: array [0..1] of integer; - - StaticDuetP2M: array [0..1] of integer; - TextDuetP2M: integer; - StaticDuetP2MAvatar: array [0..1] of integer; - - StaticDuetP3R: array [0..1] of integer; - TextDuetP3R: integer; - StaticDuetP3RAvatar: array [0..1] of integer; - - // 4/6 players duet one screen - StaticP1DuetFourP: integer; - StaticP2DuetFourP: integer; - StaticP3DuetFourP: integer; - StaticP4DuetFourP: integer; - - StaticP1DuetFourPAvatar: integer; - StaticP2DuetFourPAvatar: integer; - StaticP3DuetFourPAvatar: integer; - StaticP4DuetFourPAvatar: integer; - - TextP1DuetFourP: integer; - TextP2DuetFourP: integer; - TextP3DuetFourP: integer; - TextP4DuetFourP: integer; - - StaticP1DuetSixP: integer; - StaticP2DuetSixP: integer; - StaticP3DuetSixP: integer; - StaticP4DuetSixP: integer; - StaticP5DuetSixP: integer; - StaticP6DuetSixP: integer; - - StaticP1DuetSixPAvatar: integer; - StaticP2DuetSixPAvatar: integer; - StaticP3DuetSixPAvatar: integer; - StaticP4DuetSixPAvatar: integer; - StaticP5DuetSixPAvatar: integer; - StaticP6DuetSixPAvatar: integer; - - TextP1DuetSixP: integer; - TextP2DuetSixP: integer; - TextP3DuetSixP: integer; - TextP4DuetSixP: integer; - TextP5DuetSixP: integer; - TextP6DuetSixP: integer; - - - StaticPausePopup: integer; - - SongNameStatic: integer; - SongNameText: integer; - - Tex_Background: TTexture; - FadeOut: boolean; - - Lyrics: TLyricEngine; - LyricsDuetP1: TLyricEngine; - LyricsDuetP2: TLyricEngine; - - // score manager: - Scores: TSingScores; - - //the song was sung to the end - SungToEnd: boolean; - - //use pause - SungPaused: boolean; - - // some settings to be set by plugins - Settings: record - Finish: Boolean; //< if true, screen will finish on next draw - - LyricsVisible: Boolean; //< shows or hides lyrics - NotesVisible: Integer; //< if bit[playernum] is set the notes for the specified player are visible. By default all players notes are visible - - PlayerEnabled: Integer; //< defines whether a player can score atm - - SoundEnabled: Boolean; //< mute or unmute sound - end; - - // MIDI - ChannelOff : integer; - - MidiFadeIn: boolean; - MidiFadeOut: boolean; - FadeTime: cardinal; - - InfoMessageBG: cardinal; - InfoMessageText: cardinal; - - MessageTime: cardinal; - MessageTimeFade: cardinal; - - TextMedleyFadeOut: boolean; - TextMedleyFadeTime: cardinal; - - // names - P1Name, P2Name, P3Name, P4Name, P5Name, P6Name: UTF8String; - P1DuetName, P2DuetName, P3DuetName, P4DuetName, P5DuetName, P6DuetName: UTF8String; - - procedure ClearSettings; - procedure ApplySettings; //< applies changes of settings record - procedure EndSong; - - constructor Create; override; - procedure OnShow; override; - procedure OnShowFinish; override; - procedure OnHide; override; - - function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; - PressedDown: boolean): boolean; override; - function Draw: boolean; override; - - function FinishedMusic: boolean; - - procedure AutoSendScore; - procedure AutoSaveScore; - - procedure Finish; virtual; - procedure Pause; // toggle pause - - procedure OnSentenceEnd(CP: integer; SentenceIndex: cardinal); // for linebonus + singbar - procedure OnSentenceChange(CP: integer; SentenceIndex: cardinal); // for golden notes - - procedure SwapToScreen(Screen: integer); - - procedure WriteMessage(msg: UTF8String); - procedure FadeMessage(); - procedure CloseMessage(); - - procedure MedleyTitleFadeOut(); - - function GetLyricColor(Color: integer): TRGB; - - procedure DrawInfoLyricBar(); - end; -var - TotalTime: real; - -implementation - -uses - Classes, - Math, - UDatabase, - UDllManager, - UDraw, - UGraphic, - ULanguage, - UNote, - URecord, - USong, - UDisplay, - UParty, - UPathUtils, - UUnicodeUtils, - UWebcam, - UWebSDK; - -const - MAX_MESSAGE = 3; - -// method for input parsing. if false is returned, getnextwindow -// should be checked to know the next window to load; - -function TScreenSing.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; - PressedDown: boolean): boolean; -var - SDL_ModState: word; -begin - Result := true; - if (PressedDown) then - begin // key down - - SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT - + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); - - - // check normal keys - case UCS4UpperCase(CharCode) of - Ord('Q'): - begin - // when not ask before exit then finish now - if (Ini.AskbeforeDel <> 1) then - Finish - // else just pause and let the popup make the work - else if not Paused then - Pause; - - Result := false; - Exit; - end; - - // show visualization - Ord('V'): - begin - if fShowWebcam then - begin - Webcam.Release; - fShowWebCam:=false; - end; - if ((fShowBackground = true) and (Ini.VideoEnabled = 1) and CurrentSong.Video.IsSet()) - or (fShowVisualization and not CurrentSong.Background.IsSet()) then //switch to video - begin - Log.LogStatus('decided to switch to video', 'UScreenSing.ParseInput'); - fShowBackground := false; - fCurrentVideo := nil; - fShowVisualization := false; - fCurrentVideo := fVideoClip; - if (Assigned(fCurrentVideo)) then - fCurrentVideo.Position := CurrentSong.VideoGAP + CurrentSong.Start + AudioPlayback.Position; - Log.LogStatus('finished switching to video', 'UScreenSing.ParseInput'); - end - else - begin - if fShowVisualization and CurrentSong.Background.IsSet() then - begin //switch to Background only - Log.LogStatus('decided to switch to background', 'UScreenSing.ParseInput'); - fShowBackground := true; - fCurrentVideo := nil; - fShowVisualization := false; - Log.LogStatus('finished switching to background', 'UScreenSing.ParseInput'); - end - else - begin //Video is currently visible, change to visualization - Log.LogStatus('decided to switch to visualization', 'UScreenSing.ParseInput'); - fShowVisualization := true; - fCurrentVideo := Visualization.Open(PATH_NONE); - fCurrentVideo.play; - Log.LogStatus('finished switching to visualization', 'UScreenSing.ParseInput'); - end; - end; - Exit; - end; - - // show Webcam - Ord('W'): - begin - if (fShowWebCam = false) then - begin - fCurrentVideo := nil; - fShowVisualization := false; - fShowBackground := false; - Webcam.Restart; - if (Webcam.Capture = nil) then - begin - fShowWebCam := false; - fShowBackground := true; - ScreenPopupError.ShowPopup(Language.Translate('SING_OPTIONS_WEBCAM_NO_WEBCAM')) - end - else - fShowWebCam := true; - // ChangeEffectLastTick := SDL_GetTicks; - // SelectsS[WebcamParamsSlide].Visible := true; - // LastTickFrame := SDL_GetTicks; - end - else - begin - Webcam.Release; - fShowWebCam:=false; - end; - - Exit; - end; - - // pause - Ord('P'): - begin - Pause; - Exit; - end; - - // toggle time display - Ord('T'): - begin - if (fTimebarMode = High(TTimebarMode)) then - fTimebarMode := Low(TTimebarMode) - else - Inc(fTimebarMode); - - Ini.SingTimebarMode := Ord(fTimebarMode); - Ini.SaveSingTimebarMode; - Exit; - end; - - // skip intro - Ord('S'): - begin - if (AudioPlayback.Position < CurrentSong.gap / 1000 - 6) then - begin - AudioPlayback.SetPosition(CurrentSong.gap / 1000.0 - 5.0); - if (Assigned(fCurrentVideo)) then - fCurrentVideo.Position := CurrentSong.VideoGAP + CurrentSong.Start + (CurrentSong.gap / 1000.0 - 5.0); - end; - Exit; - end; - end; - - // check special keys - case PressedKey of - SDLK_ESCAPE, - SDLK_BACKSPACE: - begin - // record sound hack: - //Sound[0].BufferLong - if ScreenSong.Mode = smMedley then - PlaylistMedley.NumMedleySongs := PlaylistMedley.CurrentMedleySong; - - Finish; - FadeOut := true; - AudioPlayback.PlaySound(SoundLib.Back); - end; - - SDLK_SPACE: - begin - Pause; - end; - - SDLK_TAB: // change visualization preset - begin - if fShowVisualization then - fCurrentVideo.Position := now; // move to a random position - - if (fShowWebcam) then - begin - if (Ini.WebCamEffect < 10) then - Ini.WebCamEffect := Ini.WebCamEffect + 1 - else - Ini.WebCamEffect := 0; - end; - end; - end; - end; -end; - -// pause mod -procedure TScreenSing.Pause; -begin - if (not Paused) then // enable pause - begin - // pause time - Paused := true; - - LyricsState.Pause(); - - // pause music - AudioPlayback.Pause; - - // pause video - if (fCurrentVideo <> nil) then - fCurrentVideo.Pause; - - end - else // disable pause - begin - LyricsState.Start(); - - // play music - AudioPlayback.Play; - - // video - if (fCurrentVideo <> nil) then - fCurrentVideo.Pause; - - Paused := false; - end; -end; -// pause mod end - -//ToDo basisbit: check this again -// Dirty HacK -procedure TScreenSing.SwapToScreen(Screen: integer); -var - P, I: integer; -begin - { if screens = 2 and playerplay <= 3 the 2nd screen shows the - textures of screen 1 } - if (PlayersPlay <= 3) and (Screen = 2) then - Screen := 1; - - Statics[StaticP1[0]].Visible := false; - Statics[StaticP1TwoP[0]].Visible := false; - Statics[StaticP2R[0]].Visible := false; - Statics[StaticP1ThreeP[0]].Visible := false; - Statics[StaticP2M[0]].Visible := false; - Statics[StaticP3R[0]].Visible := false; - Statics[StaticP1[1]].Visible := false; - Statics[StaticP1TwoP[1]].Visible := false; - Statics[StaticP2R[1]].Visible := false; - Statics[StaticP1ThreeP[1]].Visible := false; - Statics[StaticP2M[1]].Visible := false; - Statics[StaticP3R[1]].Visible := false; - - Statics[StaticP1Avatar[0]].Visible := false; - Statics[StaticP1TwoPAvatar[0]].Visible := false; - Statics[StaticP2RAvatar[0]].Visible := false; - Statics[StaticP1ThreePAvatar[0]].Visible := false; - Statics[StaticP2MAvatar[0]].Visible := false; - Statics[StaticP3RAvatar[0]].Visible := false; - Statics[StaticP1Avatar[1]].Visible := false; - Statics[StaticP1TwoPAvatar[1]].Visible := false; - Statics[StaticP2RAvatar[1]].Visible := false; - Statics[StaticP1ThreePAvatar[1]].Visible := false; - Statics[StaticP2MAvatar[1]].Visible := false; - Statics[StaticP3RAvatar[1]].Visible := false; - - Statics[StaticDuetP1ThreeP[0]].Visible := false; - Statics[StaticDuetP1ThreeP[1]].Visible := false; - Statics[StaticDuetP2M[0]].Visible := false; - Statics[StaticDuetP2M[1]].Visible := false; - Statics[StaticDuetP3R[1]].Visible := false; - Statics[StaticDuetP3R[0]].Visible := false; - - Statics[StaticDuetP1ThreePAvatar[0]].Visible := false; - Statics[StaticDuetP1ThreePAvatar[1]].Visible := false; - Statics[StaticDuetP2MAvatar[0]].Visible := false; - Statics[StaticDuetP2MAvatar[1]].Visible := false; - Statics[StaticDuetP3RAvatar[1]].Visible := false; - Statics[StaticDuetP3RAvatar[0]].Visible := false; - - // 4/6 players in one screen - Statics[StaticP1FourP].Visible := false; - Statics[StaticP2FourP].Visible := false; - Statics[StaticP3FourP].Visible := false; - Statics[StaticP4FourP].Visible := false; - - Statics[StaticP1FourPAvatar].Visible := false; - Statics[StaticP2FourPAvatar].Visible := false; - Statics[StaticP3FourPAvatar].Visible := false; - Statics[StaticP4FourPAvatar].Visible := false; - - Statics[StaticP1DuetFourP].Visible := false; - Statics[StaticP2DuetFourP].Visible := false; - Statics[StaticP3DuetFourP].Visible := false; - Statics[StaticP4DuetFourP].Visible := false; - - Statics[StaticP1DuetFourPAvatar].Visible := false; - Statics[StaticP2DuetFourPAvatar].Visible := false; - Statics[StaticP3DuetFourPAvatar].Visible := false; - Statics[StaticP4DuetFourPAvatar].Visible := false; - - Statics[StaticP1SixP].Visible := false; - Statics[StaticP2SixP].Visible := false; - Statics[StaticP3SixP].Visible := false; - Statics[StaticP4SixP].Visible := false; - Statics[StaticP5SixP].Visible := false; - Statics[StaticP6SixP].Visible := false; - - Statics[StaticP1SixPAvatar].Visible := false; - Statics[StaticP2SixPAvatar].Visible := false; - Statics[StaticP3SixPAvatar].Visible := false; - Statics[StaticP4SixPAvatar].Visible := false; - Statics[StaticP5SixPAvatar].Visible := false; - Statics[StaticP6SixPAvatar].Visible := false; - - Statics[StaticP1DuetSixP].Visible := false; - Statics[StaticP2DuetSixP].Visible := false; - Statics[StaticP3DuetSixP].Visible := false; - Statics[StaticP4DuetSixP].Visible := false; - Statics[StaticP5DuetSixP].Visible := false; - Statics[StaticP6DuetSixP].Visible := false; - - Statics[StaticP1DuetSixPAvatar].Visible := false; - Statics[StaticP2DuetSixPAvatar].Visible := false; - Statics[StaticP3DuetSixPAvatar].Visible := false; - Statics[StaticP4DuetSixPAvatar].Visible := false; - Statics[StaticP5DuetSixPAvatar].Visible := false; - Statics[StaticP6DuetSixPAvatar].Visible := false; - - if (PlayersPlay = 1) then - begin - if (Screen = 2) then - begin - Statics[StaticP1[0]].Visible := true; - - Statics[StaticP1Avatar[0]].Visible := true; - end; - - if (Screen = 1) then - begin - Statics[StaticP1[0]].Visible := true; - - Statics[StaticP1Avatar[0]].Visible := true; - end; - end; - - if (PlayersPlay = 2) or ((PlayersPlay = 4) and (Ini.Screens = 1)) then - begin - if (Screen = 2) then - begin - Statics[StaticP1TwoP[1]].Visible := true; - Statics[StaticP2R[1]].Visible := true; - - Statics[StaticP1TwoPAvatar[1]].Visible := true; - Statics[StaticP2RAvatar[1]].Visible := true; - end; - - if (Screen = 1) then - begin - Statics[StaticP1TwoP[0]].Visible := true; - Statics[StaticP2R[0]].Visible := true; - - Statics[StaticP1TwoPAvatar[0]].Visible := true; - Statics[StaticP2RAvatar[0]].Visible := true; - end; - end; - - if (PlayersPlay = 3) or ((PlayersPlay = 6) and (Ini.Screens = 1)) then - begin - if (CurrentSong.isDuet) then - begin - if (Screen = 2) then - begin - Statics[StaticDuetP1ThreeP[1]].Visible := true; - Statics[StaticDuetP2M[1]].Visible := true; - Statics[StaticDuetP3R[1]].Visible := true; - - Statics[StaticDuetP1ThreePAvatar[1]].Visible := true; - Statics[StaticDuetP2MAvatar[1]].Visible := true; - Statics[StaticDuetP3RAvatar[1]].Visible := true; - end; - - if (Screen = 1) then - begin - Statics[StaticDuetP1ThreeP[0]].Visible := true; - Statics[StaticDuetP2M[0]].Visible := true; - Statics[StaticDuetP3R[0]].Visible := true; - - Statics[StaticDuetP1ThreePAvatar[0]].Visible := true; - Statics[StaticDuetP2MAvatar[0]].Visible := true; - Statics[StaticDuetP3RAvatar[0]].Visible := true; - end; - end - else - begin - if (Screen = 2) then - begin - Statics[StaticP1ThreeP[1]].Visible := true; - Statics[StaticP2M[1]].Visible := true; - Statics[StaticP3R[1]].Visible := true; - - Statics[StaticP1ThreePAvatar[1]].Visible := true; - Statics[StaticP2MAvatar[1]].Visible := true; - Statics[StaticP3RAvatar[1]].Visible := true; - end; - - if (Screen = 1) then - begin - Statics[StaticP1ThreeP[0]].Visible := true; - Statics[StaticP2M[0]].Visible := true; - Statics[StaticP3R[0]].Visible := true; - - Statics[StaticP1ThreePAvatar[0]].Visible := true; - Statics[StaticP2MAvatar[0]].Visible := true; - Statics[StaticP3RAvatar[0]].Visible := true; - end; - end; - end; - - // 4 Players in 1 Screen - if (PlayersPlay = 4) and (Ini.Screens = 0) then - begin - if (CurrentSong.isDuet) then - begin - Statics[StaticP1DuetFourP].Visible := true; - Statics[StaticP2DuetFourP].Visible := true; - Statics[StaticP3DuetFourP].Visible := true; - Statics[StaticP4DuetFourP].Visible := true; - - Statics[StaticP1DuetFourPAvatar].Visible := true; - Statics[StaticP2DuetFourPAvatar].Visible := true; - Statics[StaticP3DuetFourPAvatar].Visible := true; - Statics[StaticP4DuetFourPAvatar].Visible := true; - end - else - begin - Statics[StaticP1FourP].Visible := true; - Statics[StaticP2FourP].Visible := true; - Statics[StaticP3FourP].Visible := true; - Statics[StaticP4FourP].Visible := true; - - Statics[StaticP1FourPAvatar].Visible := true; - Statics[StaticP2FourPAvatar].Visible := true; - Statics[StaticP3FourPAvatar].Visible := true; - Statics[StaticP4FourPAvatar].Visible := true; - end; - end; - - // 6 Players in 1 Screen - if (PlayersPlay = 6) and (Ini.Screens = 0) then - begin - if (CurrentSong.isDuet) then - begin - Statics[StaticP1DuetSixP].Visible := true; - Statics[StaticP2DuetSixP].Visible := true; - Statics[StaticP3DuetSixP].Visible := true; - Statics[StaticP4DuetSixP].Visible := true; - Statics[StaticP5DuetSixP].Visible := true; - Statics[StaticP6DuetSixP].Visible := true; - - Statics[StaticP1DuetSixPAvatar].Visible := true; - Statics[StaticP2DuetSixPAvatar].Visible := true; - Statics[StaticP3DuetSixPAvatar].Visible := true; - Statics[StaticP4DuetSixPAvatar].Visible := true; - Statics[StaticP5DuetSixPAvatar].Visible := true; - Statics[StaticP6DuetSixPAvatar].Visible := true; - end - else - begin - Statics[StaticP1SixP].Visible := true; - Statics[StaticP2SixP].Visible := true; - Statics[StaticP3SixP].Visible := true; - Statics[StaticP4SixP].Visible := true; - Statics[StaticP5SixP].Visible := true; - Statics[StaticP6SixP].Visible := true; - - Statics[StaticP1SixPAvatar].Visible := true; - Statics[StaticP2SixPAvatar].Visible := true; - Statics[StaticP3SixPAvatar].Visible := true; - Statics[StaticP4SixPAvatar].Visible := true; - Statics[StaticP5SixPAvatar].Visible := true; - Statics[StaticP6SixPAvatar].Visible := true; - end; - end; - -end; - -constructor TScreenSing.Create; -var - Col: array [1..6] of TRGB; - I: integer; - Color: cardinal; -begin - inherited Create; - - //too dangerous, a mouse button is quickly pressed by accident - RightMbESC := false; - - fShowVisualization := false; - fShowWebcam := false; - fShowBackground := false; - - fCurrentVideo := nil; - - // create score class - Scores := TSingScores.Create; - Scores.LoadfromTheme; - - LoadFromTheme(Theme.Sing); - - SetLength(StaticDuet, Length(Theme.Sing.StaticDuet)); - for i := 0 to High(StaticDuet) do - StaticDuet[i] := AddStatic(Theme.Sing.StaticDuet[i]); - - // timebar - StaticTimeProgress := AddStatic(Theme.Sing.StaticTimeProgress); - TextTimeText := AddText(Theme.Sing.TextTimeText); - - for I := 1 to 6 do - Col[I] := GetPlayerColor(Ini.SingColor[I - 1]); - - // SCREEN 1 - // 1 player | P1 - Theme.Sing.StaticP1.ColR := Col[1].R; - Theme.Sing.StaticP1.ColG := Col[1].G; - Theme.Sing.StaticP1.ColB := Col[1].B; - - // 2 or 4 players | P1 - Theme.Sing.StaticP1TwoP.ColR := Col[1].R; - Theme.Sing.StaticP1TwoP.ColG := Col[1].G; - Theme.Sing.StaticP1TwoP.ColB := Col[1].B; - - // | P2 - Theme.Sing.StaticP2R.ColR := Col[2].R; - Theme.Sing.StaticP2R.ColG := Col[2].G; - Theme.Sing.StaticP2R.ColB := Col[2].B; - - // 3 or 6 players | P1 - Theme.Sing.StaticP1ThreeP.ColR := Col[1].R; - Theme.Sing.StaticP1ThreeP.ColG := Col[1].G; - Theme.Sing.StaticP1ThreeP.ColB := Col[1].B; - - // | P2 - Theme.Sing.StaticP2M.ColR := Col[2].R; - Theme.Sing.StaticP2M.ColG := Col[2].G; - Theme.Sing.StaticP2M.ColB := Col[2].B; - - // | P3 - - Theme.Sing.StaticP3R.ColR := Col[3].R; - Theme.Sing.StaticP3R.ColG := Col[3].G; - Theme.Sing.StaticP3R.ColB := Col[3].B; - - // 3 or 6 players | P1 DUET - Theme.Sing.StaticDuetP1ThreeP.ColR := Col[1].R; - Theme.Sing.StaticDuetP1ThreeP.ColG := Col[1].G; - Theme.Sing.StaticDuetP1ThreeP.ColB := Col[1].B; - - // | P2 DUET - Theme.Sing.StaticDuetP2M.ColR := Col[2].R; - Theme.Sing.StaticDuetP2M.ColG := Col[2].G; - Theme.Sing.StaticDuetP2M.ColB := Col[2].B; - - // | P3 DUET - - Theme.Sing.StaticDuetP3R.ColR := Col[3].R; - Theme.Sing.StaticDuetP3R.ColG := Col[3].G; - Theme.Sing.StaticDuetP3R.ColB := Col[3].B; - - StaticP1[0] := AddStatic(Theme.Sing.StaticP1); - StaticP1TwoP[0] := AddStatic(Theme.Sing.StaticP1TwoP); - StaticP2R[0] := AddStatic(Theme.Sing.StaticP2R); - StaticP1ThreeP[0] := AddStatic(Theme.Sing.StaticP1ThreeP); - StaticP2M[0] := AddStatic(Theme.Sing.StaticP2M); - StaticP3R[0] := AddStatic(Theme.Sing.StaticP3R); - StaticDuetP1ThreeP[0] := AddStatic(Theme.Sing.StaticDuetP1ThreeP); - StaticDuetP2M[0] := AddStatic(Theme.Sing.StaticDuetP2M); - StaticDuetP3R[0] := AddStatic(Theme.Sing.StaticDuetP3R); - - // SCREEN 2 - // 1 player | P1 - Theme.Sing.StaticP1.ColR := Col[1].R; - Theme.Sing.StaticP1.ColG := Col[1].G; - Theme.Sing.StaticP1.ColB := Col[1].B; - - // 2 or 4 players | P1 - Theme.Sing.StaticP1TwoP.ColR := Col[3].R; - Theme.Sing.StaticP1TwoP.ColG := Col[3].G; - Theme.Sing.StaticP1TwoP.ColB := Col[3].B; - - // | P2 - Theme.Sing.StaticP2R.ColR := Col[4].R; - Theme.Sing.StaticP2R.ColG := Col[4].G; - Theme.Sing.StaticP2R.ColB := Col[4].B; - - // 3 or 6 players | P1 - Theme.Sing.StaticP1ThreeP.ColR := Col[4].R; - Theme.Sing.StaticP1ThreeP.ColG := Col[4].G; - Theme.Sing.StaticP1ThreeP.ColB := Col[4].B; - - // | P2 - Theme.Sing.StaticP2M.ColR := Col[5].R; - Theme.Sing.StaticP2M.ColG := Col[5].G; - Theme.Sing.StaticP2M.ColB := Col[5].B; - - // | P3 - Theme.Sing.StaticP3R.ColR := Col[6].R; - Theme.Sing.StaticP3R.ColG := Col[6].G; - Theme.Sing.StaticP3R.ColB := Col[6].B; - - // 3 or 6 players | P1 DUET - Theme.Sing.StaticDuetP1ThreeP.ColR := Col[4].R; - Theme.Sing.StaticDuetP1ThreeP.ColG := Col[4].G; - Theme.Sing.StaticDuetP1ThreeP.ColB := Col[4].B; - - // | P2 DUET - Theme.Sing.StaticDuetP2M.ColR := Col[5].R; - Theme.Sing.StaticDuetP2M.ColG := Col[5].G; - Theme.Sing.StaticDuetP2M.ColB := Col[5].B; - - // | P3 DUET - Theme.Sing.StaticDuetP3R.ColR := Col[6].R; - Theme.Sing.StaticDuetP3R.ColG := Col[6].G; - Theme.Sing.StaticDuetP3R.ColB := Col[6].B; - - StaticP1[1] := AddStatic(Theme.Sing.StaticP1); - StaticP1TwoP[1] := AddStatic(Theme.Sing.StaticP1TwoP); - StaticP2R[1] := AddStatic(Theme.Sing.StaticP2R); - StaticP1ThreeP[1] := AddStatic(Theme.Sing.StaticP1ThreeP); - StaticP2M[1] := AddStatic(Theme.Sing.StaticP2M); - StaticP3R[1] := AddStatic(Theme.Sing.StaticP3R); - StaticDuetP1ThreeP[1] := AddStatic(Theme.Sing.StaticDuetP1ThreeP); - StaticDuetP2M[1] := AddStatic(Theme.Sing.StaticDuetP2M); - StaticDuetP3R[1] := AddStatic(Theme.Sing.StaticDuetP3R); - - TextP1 := AddText(Theme.Sing.TextP1); - TextP1TwoP := AddText(Theme.Sing.TextP1TwoP); - TextP2R := AddText(Theme.Sing.TextP2R); - TextP1ThreeP := AddText(Theme.Sing.TextP1ThreeP); - TextP2M := AddText(Theme.Sing.TextP2M); - TextP3R := AddText(Theme.Sing.TextP3R); - TextDuetP1ThreeP := AddText(Theme.Sing.TextDuetP1ThreeP); - TextDuetP2M := AddText(Theme.Sing.TextDuetP2M); - TextDuetP3R := AddText(Theme.Sing.TextDuetP3R); - - if (PlayersPlay = 1) then - begin - if (Party.bPartyGame) then - begin - if (Text[TextP1].Text = 'PLAYERNAME') then - P1Name := Ini.NameTeam[0] - else - P1Name := 'P1'; - end - else - begin - if (Text[TextP1].Text = 'PLAYERNAME') then - P1Name := Ini.Name[0] - else - P1Name := 'P1'; - end; - end; - - if (PlayersPlay = 2) then - begin - if (Party.bPartyGame) then - begin - if (Text[TextP1TwoP].Text = 'PLAYERNAME') then - P1Name := Ini.NameTeam[0] - else - P1Name := 'P1'; - - if (Text[TextP2R].Text = 'PLAYERNAME') then - P2Name := Ini.NameTeam[1] - else - P2Name := 'P2'; - end - else - begin - if (Text[TextP1TwoP].Text = 'PLAYERNAME') then - P1Name := Ini.Name[0] - else - P1Name := 'P1'; - - if (Text[TextP2R].Text = 'PLAYERNAME') then - P2Name := Ini.Name[1] - else - P2Name := 'P2'; - end; - end; - - if (PlayersPlay = 3) then - begin - if (Party.bPartyGame) then - begin - - if (Text[TextDuetP1ThreeP].Text = 'PLAYERNAME') then - P1DuetName := Ini.NameTeam[0] - else - P1DuetName := 'P1'; - - if (Text[TextDuetP2M].Text = 'PLAYERNAME') then - P2DuetName := Ini.NameTeam[1] - else - P2DuetName := 'P2'; - - if (Text[TextDuetP3R].Text = 'PLAYERNAME') then - P3DuetName := Ini.NameTeam[2] - else - P3DuetName := 'P3'; - - if (Text[TextP1ThreeP].Text = 'PLAYERNAME') then - P1Name := Ini.NameTeam[0] - else - P1Name := 'P1'; - - if (Text[TextP2M].Text = 'PLAYERNAME') then - P2Name := Ini.NameTeam[1] - else - P2Name := 'P2'; - - if (Text[TextP3R].Text = 'PLAYERNAME') then - P3Name := Ini.NameTeam[2] - else - P3Name := 'P3'; - end - else - begin - if (Text[TextDuetP1ThreeP].Text = 'PLAYERNAME') then - P1DuetName := Ini.Name[0] - else - P1DuetName := 'P1'; - - if (Text[TextDuetP2M].Text = 'PLAYERNAME') then - P2DuetName := Ini.Name[1] - else - P2DuetName := 'P2'; - - if (Text[TextDuetP3R].Text = 'PLAYERNAME') then - P3DuetName := Ini.Name[2] - else - P3DuetName := 'P3'; - - if (Text[TextP1ThreeP].Text = 'PLAYERNAME') then - P1Name := Ini.Name[0] - else - P1Name := 'P1'; - - if (Text[TextP2M].Text = 'PLAYERNAME') then - P2Name := Ini.Name[1] - else - P2Name := 'P2'; - - if (Text[TextP3R].Text = 'PLAYERNAME') then - P3Name := Ini.Name[2] - else - P3Name := 'P3'; - end; - end; - - // 4/6 players in 1 screen - // P1 - Theme.Sing.StaticP1FourP.ColR := Col[1].R; - Theme.Sing.StaticP1FourP.ColG := Col[1].G; - Theme.Sing.StaticP1FourP.ColB := Col[1].B; - - // P2 - Theme.Sing.StaticP2FourP.ColR := Col[2].R; - Theme.Sing.StaticP2FourP.ColG := Col[2].G; - Theme.Sing.StaticP2FourP.ColB := Col[2].B; - - // P3 - Theme.Sing.StaticP3FourP.ColR := Col[3].R; - Theme.Sing.StaticP3FourP.ColG := Col[3].G; - Theme.Sing.StaticP3FourP.ColB := Col[3].B; - - // P4 - Theme.Sing.StaticP4FourP.ColR := Col[4].R; - Theme.Sing.StaticP4FourP.ColG := Col[4].G; - Theme.Sing.StaticP4FourP.ColB := Col[4].B; - - StaticP1FourP := AddStatic(Theme.Sing.StaticP1FourP); - StaticP2FourP := AddStatic(Theme.Sing.StaticP2FourP); - StaticP3FourP := AddStatic(Theme.Sing.StaticP3FourP); - StaticP4FourP := AddStatic(Theme.Sing.StaticP4FourP); - - TextP1FourP := AddText(Theme.Sing.TextP1FourP); - TextP2FourP := AddText(Theme.Sing.TextP2FourP); - TextP3FourP := AddText(Theme.Sing.TextP3FourP); - TextP4FourP := AddText(Theme.Sing.TextP4FourP); - - // P1 - Theme.Sing.StaticP1SixP.ColR := Col[1].R; - Theme.Sing.StaticP1SixP.ColG := Col[1].G; - Theme.Sing.StaticP1SixP.ColB := Col[1].B; - - // P2 - Theme.Sing.StaticP2SixP.ColR := Col[2].R; - Theme.Sing.StaticP2SixP.ColG := Col[2].G; - Theme.Sing.StaticP2SixP.ColB := Col[2].B; - - // P3 - Theme.Sing.StaticP3SixP.ColR := Col[3].R; - Theme.Sing.StaticP3SixP.ColG := Col[3].G; - Theme.Sing.StaticP3SixP.ColB := Col[3].B; - - // P4 - Theme.Sing.StaticP4SixP.ColR := Col[4].R; - Theme.Sing.StaticP4SixP.ColG := Col[4].G; - Theme.Sing.StaticP4SixP.ColB := Col[4].B; - - // P5 - Theme.Sing.StaticP5SixP.ColR := Col[5].R; - Theme.Sing.StaticP5SixP.ColG := Col[5].G; - Theme.Sing.StaticP5SixP.ColB := Col[5].B; - - // P6 - Theme.Sing.StaticP6SixP.ColR := Col[6].R; - Theme.Sing.StaticP6SixP.ColG := Col[6].G; - Theme.Sing.StaticP6SixP.ColB := Col[6].B; - - StaticP1SixP := AddStatic(Theme.Sing.StaticP1SixP); - StaticP2SixP := AddStatic(Theme.Sing.StaticP2SixP); - StaticP3SixP := AddStatic(Theme.Sing.StaticP3SixP); - StaticP4SixP := AddStatic(Theme.Sing.StaticP4SixP); - StaticP5SixP := AddStatic(Theme.Sing.StaticP5SixP); - StaticP6SixP := AddStatic(Theme.Sing.StaticP6SixP); - - TextP1SixP := AddText(Theme.Sing.TextP1SixP); - TextP2SixP := AddText(Theme.Sing.TextP2SixP); - TextP3SixP := AddText(Theme.Sing.TextP3SixP); - TextP4SixP := AddText(Theme.Sing.TextP4SixP); - TextP5SixP := AddText(Theme.Sing.TextP5SixP); - TextP6SixP := AddText(Theme.Sing.TextP6SixP); - - - // 4/6 players duet in 1 screen - // P1 - Theme.Sing.StaticP1DuetFourP.ColR := Col[1].R; - Theme.Sing.StaticP1DuetFourP.ColG := Col[1].G; - Theme.Sing.StaticP1DuetFourP.ColB := Col[1].B; - - // P2 - Theme.Sing.StaticP2DuetFourP.ColR := Col[2].R; - Theme.Sing.StaticP2DuetFourP.ColG := Col[2].G; - Theme.Sing.StaticP2DuetFourP.ColB := Col[2].B; - - // P3 - Theme.Sing.StaticP3DuetFourP.ColR := Col[3].R; - Theme.Sing.StaticP3DuetFourP.ColG := Col[3].G; - Theme.Sing.StaticP3DuetFourP.ColB := Col[3].B; - - // P4 - Theme.Sing.StaticP4DuetFourP.ColR := Col[4].R; - Theme.Sing.StaticP4DuetFourP.ColG := Col[4].G; - Theme.Sing.StaticP4DuetFourP.ColB := Col[4].B; - - StaticP1DuetFourP := AddStatic(Theme.Sing.StaticP1DuetFourP); - StaticP2DuetFourP := AddStatic(Theme.Sing.StaticP2DuetFourP); - StaticP3DuetFourP := AddStatic(Theme.Sing.StaticP3DuetFourP); - StaticP4DuetFourP := AddStatic(Theme.Sing.StaticP4DuetFourP); - - TextP1DuetFourP := AddText(Theme.Sing.TextP1DuetFourP); - TextP2DuetFourP := AddText(Theme.Sing.TextP2DuetFourP); - TextP3DuetFourP := AddText(Theme.Sing.TextP3DuetFourP); - TextP4DuetFourP := AddText(Theme.Sing.TextP4DuetFourP); - - // P1 - Theme.Sing.StaticP1DuetSixP.ColR := Col[1].R; - Theme.Sing.StaticP1DuetSixP.ColG := Col[1].G; - Theme.Sing.StaticP1DuetSixP.ColB := Col[1].B; - - // P2 - Theme.Sing.StaticP2DuetSixP.ColR := Col[2].R; - Theme.Sing.StaticP2DuetSixP.ColG := Col[2].G; - Theme.Sing.StaticP2DuetSixP.ColB := Col[2].B; - - // P3 - Theme.Sing.StaticP3DuetSixP.ColR := Col[3].R; - Theme.Sing.StaticP3DuetSixP.ColG := Col[3].G; - Theme.Sing.StaticP3DuetSixP.ColB := Col[3].B; - - // P4 - Theme.Sing.StaticP4DuetSixP.ColR := Col[4].R; - Theme.Sing.StaticP4DuetSixP.ColG := Col[4].G; - Theme.Sing.StaticP4DuetSixP.ColB := Col[4].B; - - // P5 - Theme.Sing.StaticP5DuetSixP.ColR := Col[5].R; - Theme.Sing.StaticP5DuetSixP.ColG := Col[5].G; - Theme.Sing.StaticP5DuetSixP.ColB := Col[5].B; - - // P6 - Theme.Sing.StaticP6DuetSixP.ColR := Col[6].R; - Theme.Sing.StaticP6DuetSixP.ColG := Col[6].G; - Theme.Sing.StaticP6DuetSixP.ColB := Col[6].B; - - StaticP1DuetSixP := AddStatic(Theme.Sing.StaticP1DuetSixP); - StaticP2DuetSixP := AddStatic(Theme.Sing.StaticP2DuetSixP); - StaticP3DuetSixP := AddStatic(Theme.Sing.StaticP3DuetSixP); - StaticP4DuetSixP := AddStatic(Theme.Sing.StaticP4DuetSixP); - StaticP5DuetSixP := AddStatic(Theme.Sing.StaticP5DuetSixP); - StaticP6DuetSixP := AddStatic(Theme.Sing.StaticP6DuetSixP); - - TextP1DuetSixP := AddText(Theme.Sing.TextP1DuetSixP); - TextP2DuetSixP := AddText(Theme.Sing.TextP2DuetSixP); - TextP3DuetSixP := AddText(Theme.Sing.TextP3DuetSixP); - TextP4DuetSixP := AddText(Theme.Sing.TextP4DuetSixP); - TextP5DuetSixP := AddText(Theme.Sing.TextP5DuetSixP); - TextP6DuetSixP := AddText(Theme.Sing.TextP6DuetSixP); - - if (PlayersPlay = 4) then - begin - if (Text[TextP1DuetFourP].Text = 'PLAYERNAME') then - P1DuetName := Ini.Name[0] - else - P1DuetName := 'P1'; - - if (Text[TextP2DuetFourP].Text = 'PLAYERNAME') then - P2DuetName := Ini.Name[1] - else - P2DuetName := 'P2'; - - if (Text[TextP3DuetFourP].Text = 'PLAYERNAME') then - P3DuetName := Ini.Name[2] - else - P3DuetName := 'P3'; - - if (Text[TextP4DuetFourP].Text = 'PLAYERNAME') then - P4DuetName := Ini.Name[3] - else - P4DuetName := 'P4'; - - if (Text[TextP1FourP].Text = 'PLAYERNAME') then - P1Name := Ini.Name[0] - else - P1Name := 'P1'; - - if (Text[TextP2FourP].Text = 'PLAYERNAME') then - P2Name := Ini.Name[1] - else - P2Name := 'P2'; - - if (Text[TextP3FourP].Text = 'PLAYERNAME') then - P3Name := Ini.Name[2] - else - P3Name := 'P3'; - - if (Text[TextP4FourP].Text = 'PLAYERNAME') then - P4Name := Ini.Name[3] - else - P4Name := 'P4'; - end; - - if (PlayersPlay = 6) then - begin - if (Text[TextP1DuetSixP].Text = 'PLAYERNAME') then - P1DuetName := Ini.Name[0] - else - P1DuetName := 'P1'; - - if (Text[TextP2DuetSixP].Text = 'PLAYERNAME') then - P2DuetName := Ini.Name[1] - else - P2DuetName := 'P2'; - - if (Text[TextP3DuetSixP].Text = 'PLAYERNAME') then - P3DuetName := Ini.Name[2] - else - P3DuetName := 'P3'; - - if (Text[TextP4DuetSixP].Text = 'PLAYERNAME') then - P4DuetName := Ini.Name[3] - else - P4DuetName := 'P4'; - - if (Text[TextP5DuetSixP].Text = 'PLAYERNAME') then - P5DuetName := Ini.Name[4] - else - P5DuetName := 'P5'; - - if (Text[TextP6DuetSixP].Text = 'PLAYERNAME') then - P6DuetName := Ini.Name[5] - else - P6DuetName := 'P6'; - - if (Text[TextP1SixP].Text = 'PLAYERNAME') then - P1Name := Ini.Name[0] - else - P1Name := 'P1'; - - if (Text[TextP2SixP].Text = 'PLAYERNAME') then - P2Name := Ini.Name[1] - else - P2Name := 'P2'; - - if (Text[TextP3SixP].Text = 'PLAYERNAME') then - P3Name := Ini.Name[2] - else - P3Name := 'P3'; - - if (Text[TextP4SixP].Text = 'PLAYERNAME') then - P4Name := Ini.Name[3] - else - P4Name := 'P4'; - - if (Text[TextP5SixP].Text = 'PLAYERNAME') then - P5Name := Ini.Name[4] - else - P5Name := 'P5'; - - if (Text[TextP6SixP].Text = 'PLAYERNAME') then - P6Name := Ini.Name[5] - else - P6Name := 'P6'; - end; - - // Sing Bars - // P1-6 - for I := 1 to 6 do - begin - Color := RGBFloatToInt(Col[I].R, Col[I].G, Col[I].B); - - // Color := $002222; //light blue - // Color := $10000 * Round(0.22*255) + $100 * Round(0.39*255) + Round(0.64*255); //dark blue - - Tex_Left[I] := Texture.LoadTexture(Skin.GetTextureFileName('GrayLeft'), TEXTURE_TYPE_COLORIZED, Color); - Tex_Mid[I] := Texture.LoadTexture(Skin.GetTextureFileName('GrayMid'), TEXTURE_TYPE_COLORIZED, Color); - Tex_Right[I] := Texture.LoadTexture(Skin.GetTextureFileName('GrayRight'), TEXTURE_TYPE_COLORIZED, Color); - - Tex_plain_Left[I] := Texture.LoadTexture(Skin.GetTextureFileName('NotePlainLeft'), TEXTURE_TYPE_COLORIZED, Color); - Tex_plain_Mid[I] := Texture.LoadTexture(Skin.GetTextureFileName('NotePlainMid'), TEXTURE_TYPE_COLORIZED, Color); - Tex_plain_Right[I] := Texture.LoadTexture(Skin.GetTextureFileName('NotePlainRight'), TEXTURE_TYPE_COLORIZED, Color); - - Tex_BG_Left[I] := Texture.LoadTexture(Skin.GetTextureFileName('NoteBGLeft'), TEXTURE_TYPE_COLORIZED, Color); - Tex_BG_Mid[I] := Texture.LoadTexture(Skin.GetTextureFileName('NoteBGMid'), TEXTURE_TYPE_COLORIZED, Color); - Tex_BG_Right[I] := Texture.LoadTexture(Skin.GetTextureFileName('NoteBGRight'), TEXTURE_TYPE_COLORIZED, Color); - - //## backgrounds for the scores ## - Tex_ScoreBG[I - 1] := Texture.LoadTexture(Skin.GetTextureFileName('ScoreBG'), TEXTURE_TYPE_COLORIZED, Color); - end; - - StaticPausePopup := AddStatic(Theme.Sing.PausePopUp); - - // <note> pausepopup is not visible at the beginning </note> - Statics[StaticPausePopup].Visible := false; - - Lyrics := TLyricEngine.Create( - Theme.LyricBar.UpperX, Theme.LyricBar.UpperY, Theme.LyricBar.UpperW, Theme.LyricBar.UpperH, - Theme.LyricBar.LowerX, Theme.LyricBar.LowerY, Theme.LyricBar.LowerW, Theme.LyricBar.LowerH); - - LyricsDuetP1 := TLyricEngine.Create( - Theme.LyricBarDuetP1.UpperX, Theme.LyricBarDuetP1.UpperY, Theme.LyricBarDuetP1.UpperW, Theme.LyricBarDuetP1.UpperH, - Theme.LyricBarDuetP1.LowerX, Theme.LyricBarDuetP1.LowerY, Theme.LyricBarDuetP1.LowerW, Theme.LyricBarDuetP1.LowerH); - - LyricsDuetP2 := TLyricEngine.Create( - Theme.LyricBarDuetP2.UpperX, Theme.LyricBarDuetP2.UpperY, Theme.LyricBarDuetP2.UpperW, Theme.LyricBarDuetP2.UpperH, - Theme.LyricBarDuetP2.LowerX, Theme.LyricBarDuetP2.LowerY, Theme.LyricBarDuetP2.LowerW, Theme.LyricBarDuetP2.LowerH); - - fLyricsSync := TLyricsSyncSource.Create(); - fMusicSync := TMusicSyncSource.Create(); - - SongNameStatic := AddStatic(Theme.Sing.StaticSongName);; - SongNameText := AddText(Theme.Sing.TextSongName); - - eSongLoaded := THookableEvent.Create('ScreenSing.SongLoaded'); - - // Info Message - InfoMessageBG := AddStatic(Theme.Sing.InfoMessageBG); - InfoMessageText := AddText(Theme.Sing.InfoMessageText); - - // avatars - StaticP1Avatar[0] := AddStatic(Theme.Sing.StaticP1Avatar); - Statics[StaticP1Avatar[0]].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1Avatar[0]].Texture.X := Theme.Sing.StaticP1Avatar.X; - Statics[StaticP1Avatar[0]].Texture.Y := Theme.Sing.StaticP1Avatar.Y; - Statics[StaticP1Avatar[0]].Texture.H := Theme.Sing.StaticP1Avatar.H; - Statics[StaticP1Avatar[0]].Texture.W := Theme.Sing.StaticP1Avatar.W; - Statics[StaticP1Avatar[0]].Texture.Z := Theme.Sing.StaticP1Avatar.Z; - Statics[StaticP1Avatar[0]].Texture.Alpha := Theme.Sing.StaticP1Avatar.Alpha; - - StaticP1Avatar[1] := AddStatic(Theme.Sing.StaticP1Avatar); - Statics[StaticP1Avatar[1]].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1Avatar[1]].Texture.X := Theme.Sing.StaticP1Avatar.X; - Statics[StaticP1Avatar[1]].Texture.Y := Theme.Sing.StaticP1Avatar.Y; - Statics[StaticP1Avatar[1]].Texture.H := Theme.Sing.StaticP1Avatar.H; - Statics[StaticP1Avatar[1]].Texture.W := Theme.Sing.StaticP1Avatar.W; - Statics[StaticP1Avatar[1]].Texture.Z := Theme.Sing.StaticP1Avatar.Z; - Statics[StaticP1Avatar[1]].Texture.Alpha := Theme.Sing.StaticP1Avatar.Alpha; - - StaticP1TwoPAvatar[0] := AddStatic(Theme.Sing.StaticP1TwoPAvatar); - Statics[StaticP1TwoPAvatar[0]].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1TwoPAvatar[0]].Texture.X := Theme.Sing.StaticP1TwoPAvatar.X; - Statics[StaticP1TwoPAvatar[0]].Texture.Y := Theme.Sing.StaticP1TwoPAvatar.Y; - Statics[StaticP1TwoPAvatar[0]].Texture.H := Theme.Sing.StaticP1TwoPAvatar.H; - Statics[StaticP1TwoPAvatar[0]].Texture.W := Theme.Sing.StaticP1TwoPAvatar.W; - Statics[StaticP1TwoPAvatar[0]].Texture.Z := Theme.Sing.StaticP1TwoPAvatar.Z; - Statics[StaticP1TwoPAvatar[0]].Texture.Alpha := Theme.Sing.StaticP1TwoPAvatar.Alpha; - - StaticP1TwoPAvatar[1] := AddStatic(Theme.Sing.StaticP1TwoPAvatar); - Statics[StaticP1TwoPAvatar[1]].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1TwoPAvatar[1]].Texture.X := Theme.Sing.StaticP1TwoPAvatar.X; - Statics[StaticP1TwoPAvatar[1]].Texture.Y := Theme.Sing.StaticP1TwoPAvatar.Y; - Statics[StaticP1TwoPAvatar[1]].Texture.H := Theme.Sing.StaticP1TwoPAvatar.H; - Statics[StaticP1TwoPAvatar[1]].Texture.W := Theme.Sing.StaticP1TwoPAvatar.W; - Statics[StaticP1TwoPAvatar[1]].Texture.Z := Theme.Sing.StaticP1TwoPAvatar.Z; - Statics[StaticP1TwoPAvatar[1]].Texture.Alpha := Theme.Sing.StaticP1TwoPAvatar.Alpha; - - StaticP2RAvatar[0] := AddStatic(Theme.Sing.StaticP2RAvatar); - Statics[StaticP2RAvatar[0]].Texture := AvatarPlayerTextures[2]; - Statics[StaticP2RAvatar[0]].Texture.X := Theme.Sing.StaticP2RAvatar.X; - Statics[StaticP2RAvatar[0]].Texture.Y := Theme.Sing.StaticP2RAvatar.Y; - Statics[StaticP2RAvatar[0]].Texture.H := Theme.Sing.StaticP2RAvatar.H; - Statics[StaticP2RAvatar[0]].Texture.W := Theme.Sing.StaticP2RAvatar.W; - Statics[StaticP2RAvatar[0]].Texture.Z := Theme.Sing.StaticP2RAvatar.Z; - Statics[StaticP2RAvatar[0]].Texture.Alpha := Theme.Sing.StaticP2RAvatar.Alpha; - - StaticP2RAvatar[1] := AddStatic(Theme.Sing.StaticP2RAvatar); - Statics[StaticP2RAvatar[1]].Texture := AvatarPlayerTextures[2]; - Statics[StaticP2RAvatar[1]].Texture.X := Theme.Sing.StaticP2RAvatar.X; - Statics[StaticP2RAvatar[1]].Texture.Y := Theme.Sing.StaticP2RAvatar.Y; - Statics[StaticP2RAvatar[1]].Texture.H := Theme.Sing.StaticP2RAvatar.H; - Statics[StaticP2RAvatar[1]].Texture.W := Theme.Sing.StaticP2RAvatar.W; - Statics[StaticP2RAvatar[1]].Texture.Z := Theme.Sing.StaticP2RAvatar.Z; - Statics[StaticP2RAvatar[1]].Texture.Alpha := Theme.Sing.StaticP2RAvatar.Alpha; - - StaticP1ThreePAvatar[0] := AddStatic(Theme.Sing.StaticP1ThreePAvatar); - Statics[StaticP1ThreePAvatar[0]].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1ThreePAvatar[0]].Texture.X := Theme.Sing.StaticP1ThreePAvatar.X; - Statics[StaticP1ThreePAvatar[0]].Texture.Y := Theme.Sing.StaticP1ThreePAvatar.Y; - Statics[StaticP1ThreePAvatar[0]].Texture.H := Theme.Sing.StaticP1ThreePAvatar.H; - Statics[StaticP1ThreePAvatar[0]].Texture.W := Theme.Sing.StaticP1ThreePAvatar.W; - Statics[StaticP1ThreePAvatar[0]].Texture.Z := Theme.Sing.StaticP1ThreePAvatar.Z; - Statics[StaticP1ThreePAvatar[0]].Texture.Alpha := Theme.Sing.StaticP1ThreePAvatar.Alpha; - - StaticP1ThreePAvatar[1] := AddStatic(Theme.Sing.StaticP1ThreePAvatar); - Statics[StaticP1ThreePAvatar[1]].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1ThreePAvatar[1]].Texture.X := Theme.Sing.StaticP1ThreePAvatar.X; - Statics[StaticP1ThreePAvatar[1]].Texture.Y := Theme.Sing.StaticP1ThreePAvatar.Y; - Statics[StaticP1ThreePAvatar[1]].Texture.H := Theme.Sing.StaticP1ThreePAvatar.H; - Statics[StaticP1ThreePAvatar[1]].Texture.W := Theme.Sing.StaticP1ThreePAvatar.W; - Statics[StaticP1ThreePAvatar[1]].Texture.Z := Theme.Sing.StaticP1ThreePAvatar.Z; - Statics[StaticP1ThreePAvatar[1]].Texture.Alpha := Theme.Sing.StaticP1ThreePAvatar.Alpha; - - StaticP2MAvatar[0] := AddStatic(Theme.Sing.StaticP2MAvatar); - Statics[StaticP2MAvatar[0]].Texture := AvatarPlayerTextures[2]; - Statics[StaticP2MAvatar[0]].Texture.X := Theme.Sing.StaticP2MAvatar.X; - Statics[StaticP2MAvatar[0]].Texture.Y := Theme.Sing.StaticP2MAvatar.Y; - Statics[StaticP2MAvatar[0]].Texture.H := Theme.Sing.StaticP2MAvatar.H; - Statics[StaticP2MAvatar[0]].Texture.W := Theme.Sing.StaticP2MAvatar.W; - Statics[StaticP2MAvatar[0]].Texture.Z := Theme.Sing.StaticP2MAvatar.Z; - Statics[StaticP2MAvatar[0]].Texture.Alpha := Theme.Sing.StaticP2MAvatar.Alpha; - - StaticP2MAvatar[1] := AddStatic(Theme.Sing.StaticP2MAvatar); - Statics[StaticP2MAvatar[1]].Texture := AvatarPlayerTextures[2]; - Statics[StaticP2MAvatar[1]].Texture.X := Theme.Sing.StaticP2MAvatar.X; - Statics[StaticP2MAvatar[1]].Texture.Y := Theme.Sing.StaticP2MAvatar.Y; - Statics[StaticP2MAvatar[1]].Texture.H := Theme.Sing.StaticP2MAvatar.H; - Statics[StaticP2MAvatar[1]].Texture.W := Theme.Sing.StaticP2MAvatar.W; - Statics[StaticP2MAvatar[1]].Texture.Z := Theme.Sing.StaticP2MAvatar.Z; - Statics[StaticP2MAvatar[1]].Texture.Alpha := Theme.Sing.StaticP2MAvatar.Alpha; - - StaticP3RAvatar[0] := AddStatic(Theme.Sing.StaticP3RAvatar); - Statics[StaticP3RAvatar[0]].Texture := AvatarPlayerTextures[3]; - Statics[StaticP3RAvatar[0]].Texture.X := Theme.Sing.StaticP3RAvatar.X; - Statics[StaticP3RAvatar[0]].Texture.Y := Theme.Sing.StaticP3RAvatar.Y; - Statics[StaticP3RAvatar[0]].Texture.H := Theme.Sing.StaticP3RAvatar.H; - Statics[StaticP3RAvatar[0]].Texture.W := Theme.Sing.StaticP3RAvatar.W; - Statics[StaticP3RAvatar[0]].Texture.Z := Theme.Sing.StaticP3RAvatar.Z; - Statics[StaticP3RAvatar[0]].Texture.Alpha := Theme.Sing.StaticP3RAvatar.Alpha; - - StaticP3RAvatar[1] := AddStatic(Theme.Sing.StaticP3RAvatar); - Statics[StaticP3RAvatar[1]].Texture := AvatarPlayerTextures[3]; - Statics[StaticP3RAvatar[1]].Texture.X := Theme.Sing.StaticP3RAvatar.X; - Statics[StaticP3RAvatar[1]].Texture.Y := Theme.Sing.StaticP3RAvatar.Y; - Statics[StaticP3RAvatar[1]].Texture.H := Theme.Sing.StaticP3RAvatar.H; - Statics[StaticP3RAvatar[1]].Texture.W := Theme.Sing.StaticP3RAvatar.W; - Statics[StaticP3RAvatar[1]].Texture.Z := Theme.Sing.StaticP3RAvatar.Z; - Statics[StaticP3RAvatar[1]].Texture.Alpha := Theme.Sing.StaticP3RAvatar.Alpha; - - StaticDuetP1ThreePAvatar[0] := AddStatic(Theme.Sing.StaticDuetP1ThreePAvatar); - Statics[StaticDuetP1ThreePAvatar[0]].Texture := AvatarPlayerTextures[1]; - Statics[StaticDuetP1ThreePAvatar[0]].Texture.X := Theme.Sing.StaticDuetP1ThreePAvatar.X; - Statics[StaticDuetP1ThreePAvatar[0]].Texture.Y := Theme.Sing.StaticDuetP1ThreePAvatar.Y; - Statics[StaticDuetP1ThreePAvatar[0]].Texture.H := Theme.Sing.StaticDuetP1ThreePAvatar.H; - Statics[StaticDuetP1ThreePAvatar[0]].Texture.W := Theme.Sing.StaticDuetP1ThreePAvatar.W; - Statics[StaticDuetP1ThreePAvatar[0]].Texture.Z := Theme.Sing.StaticDuetP1ThreePAvatar.Z; - Statics[StaticDuetP1ThreePAvatar[0]].Texture.Alpha := Theme.Sing.StaticDuetP1ThreePAvatar.Alpha; - - StaticDuetP1ThreePAvatar[1] := AddStatic(Theme.Sing.StaticDuetP1ThreePAvatar); - Statics[StaticDuetP1ThreePAvatar[1]].Texture := AvatarPlayerTextures[1]; - Statics[StaticDuetP1ThreePAvatar[1]].Texture.X := Theme.Sing.StaticDuetP1ThreePAvatar.X; - Statics[StaticDuetP1ThreePAvatar[1]].Texture.Y := Theme.Sing.StaticDuetP1ThreePAvatar.Y; - Statics[StaticDuetP1ThreePAvatar[1]].Texture.H := Theme.Sing.StaticDuetP1ThreePAvatar.H; - Statics[StaticDuetP1ThreePAvatar[1]].Texture.W := Theme.Sing.StaticDuetP1ThreePAvatar.W; - Statics[StaticDuetP1ThreePAvatar[1]].Texture.Z := Theme.Sing.StaticDuetP1ThreePAvatar.Z; - Statics[StaticDuetP1ThreePAvatar[1]].Texture.Alpha := Theme.Sing.StaticDuetP1ThreePAvatar.Alpha; - - StaticDuetP2MAvatar[0] := AddStatic(Theme.Sing.StaticDuetP2MAvatar); - Statics[StaticDuetP2MAvatar[0]].Texture := AvatarPlayerTextures[2]; - Statics[StaticDuetP2MAvatar[0]].Texture.X := Theme.Sing.StaticDuetP2MAvatar.X; - Statics[StaticDuetP2MAvatar[0]].Texture.Y := Theme.Sing.StaticDuetP2MAvatar.Y; - Statics[StaticDuetP2MAvatar[0]].Texture.H := Theme.Sing.StaticDuetP2MAvatar.H; - Statics[StaticDuetP2MAvatar[0]].Texture.W := Theme.Sing.StaticDuetP2MAvatar.W; - Statics[StaticDuetP2MAvatar[0]].Texture.Z := Theme.Sing.StaticDuetP2MAvatar.Z; - Statics[StaticDuetP2MAvatar[0]].Texture.Alpha := Theme.Sing.StaticDuetP2MAvatar.Alpha; - - StaticDuetP2MAvatar[1] := AddStatic(Theme.Sing.StaticDuetP2MAvatar); - Statics[StaticDuetP2MAvatar[1]].Texture := AvatarPlayerTextures[2]; - Statics[StaticDuetP2MAvatar[1]].Texture.X := Theme.Sing.StaticDuetP2MAvatar.X; - Statics[StaticDuetP2MAvatar[1]].Texture.Y := Theme.Sing.StaticDuetP2MAvatar.Y; - Statics[StaticDuetP2MAvatar[1]].Texture.H := Theme.Sing.StaticDuetP2MAvatar.H; - Statics[StaticDuetP2MAvatar[1]].Texture.W := Theme.Sing.StaticDuetP2MAvatar.W; - Statics[StaticDuetP2MAvatar[1]].Texture.Z := Theme.Sing.StaticDuetP2MAvatar.Z; - Statics[StaticDuetP2MAvatar[1]].Texture.Alpha := Theme.Sing.StaticDuetP2MAvatar.Alpha; - - StaticDuetP3RAvatar[0] := AddStatic(Theme.Sing.StaticDuetP3RAvatar); - Statics[StaticDuetP3RAvatar[0]].Texture := AvatarPlayerTextures[3]; - Statics[StaticDuetP3RAvatar[0]].Texture.X := Theme.Sing.StaticDuetP3RAvatar.X; - Statics[StaticDuetP3RAvatar[0]].Texture.Y := Theme.Sing.StaticDuetP3RAvatar.Y; - Statics[StaticDuetP3RAvatar[0]].Texture.H := Theme.Sing.StaticDuetP3RAvatar.H; - Statics[StaticDuetP3RAvatar[0]].Texture.W := Theme.Sing.StaticDuetP3RAvatar.W; - Statics[StaticDuetP3RAvatar[0]].Texture.Z := Theme.Sing.StaticDuetP3RAvatar.Z; - Statics[StaticDuetP3RAvatar[0]].Texture.Alpha := Theme.Sing.StaticDuetP3RAvatar.Alpha; - - StaticDuetP3RAvatar[1] := AddStatic(Theme.Sing.StaticDuetP3RAvatar); - Statics[StaticDuetP3RAvatar[1]].Texture := AvatarPlayerTextures[3]; - Statics[StaticDuetP3RAvatar[1]].Texture.X := Theme.Sing.StaticDuetP3RAvatar.X; - Statics[StaticDuetP3RAvatar[1]].Texture.Y := Theme.Sing.StaticDuetP3RAvatar.Y; - Statics[StaticDuetP3RAvatar[1]].Texture.H := Theme.Sing.StaticDuetP3RAvatar.H; - Statics[StaticDuetP3RAvatar[1]].Texture.W := Theme.Sing.StaticDuetP3RAvatar.W; - Statics[StaticDuetP3RAvatar[1]].Texture.Z := Theme.Sing.StaticDuetP3RAvatar.Z; - Statics[StaticDuetP3RAvatar[1]].Texture.Alpha := Theme.Sing.StaticDuetP3RAvatar.Alpha; - - StaticP1FourPAvatar := AddStatic(Theme.Sing.StaticP1FourPAvatar); - Statics[StaticP1FourPAvatar].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1FourPAvatar].Texture.X := Theme.Sing.StaticP1FourPAvatar.X; - Statics[StaticP1FourPAvatar].Texture.Y := Theme.Sing.StaticP1FourPAvatar.Y; - Statics[StaticP1FourPAvatar].Texture.H := Theme.Sing.StaticP1FourPAvatar.H; - Statics[StaticP1FourPAvatar].Texture.W := Theme.Sing.StaticP1FourPAvatar.W; - Statics[StaticP1FourPAvatar].Texture.Z := Theme.Sing.StaticP1FourPAvatar.Z; - Statics[StaticP1FourPAvatar].Texture.Alpha := Theme.Sing.StaticP1FourPAvatar.Alpha; - - StaticP2FourPAvatar := AddStatic(Theme.Sing.StaticP2FourPAvatar); - Statics[StaticP2FourPAvatar].Texture := AvatarPlayerTextures[2]; - Statics[StaticP2FourPAvatar].Texture.X := Theme.Sing.StaticP2FourPAvatar.X; - Statics[StaticP2FourPAvatar].Texture.Y := Theme.Sing.StaticP2FourPAvatar.Y; - Statics[StaticP2FourPAvatar].Texture.H := Theme.Sing.StaticP2FourPAvatar.H; - Statics[StaticP2FourPAvatar].Texture.W := Theme.Sing.StaticP2FourPAvatar.W; - Statics[StaticP2FourPAvatar].Texture.Z := Theme.Sing.StaticP2FourPAvatar.Z; - Statics[StaticP2FourPAvatar].Texture.Alpha := Theme.Sing.StaticP2FourPAvatar.Alpha; - - StaticP3FourPAvatar := AddStatic(Theme.Sing.StaticP3FourPAvatar); - Statics[StaticP3FourPAvatar].Texture := AvatarPlayerTextures[3]; - Statics[StaticP3FourPAvatar].Texture.X := Theme.Sing.StaticP3FourPAvatar.X; - Statics[StaticP3FourPAvatar].Texture.Y := Theme.Sing.StaticP3FourPAvatar.Y; - Statics[StaticP3FourPAvatar].Texture.H := Theme.Sing.StaticP3FourPAvatar.H; - Statics[StaticP3FourPAvatar].Texture.W := Theme.Sing.StaticP3FourPAvatar.W; - Statics[StaticP3FourPAvatar].Texture.Z := Theme.Sing.StaticP3FourPAvatar.Z; - Statics[StaticP3FourPAvatar].Texture.Alpha := Theme.Sing.StaticP3FourPAvatar.Alpha; - - StaticP4FourPAvatar := AddStatic(Theme.Sing.StaticP4FourPAvatar); - Statics[StaticP4FourPAvatar].Texture := AvatarPlayerTextures[4]; - Statics[StaticP4FourPAvatar].Texture.X := Theme.Sing.StaticP4FourPAvatar.X; - Statics[StaticP4FourPAvatar].Texture.Y := Theme.Sing.StaticP4FourPAvatar.Y; - Statics[StaticP4FourPAvatar].Texture.H := Theme.Sing.StaticP4FourPAvatar.H; - Statics[StaticP4FourPAvatar].Texture.W := Theme.Sing.StaticP4FourPAvatar.W; - Statics[StaticP4FourPAvatar].Texture.Z := Theme.Sing.StaticP4FourPAvatar.Z; - Statics[StaticP4FourPAvatar].Texture.Alpha := Theme.Sing.StaticP4FourPAvatar.Alpha; - - StaticP1DuetFourPAvatar := AddStatic(Theme.Sing.StaticP1DuetFourPAvatar); - Statics[StaticP1DuetFourPAvatar].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1DuetFourPAvatar].Texture.X := Theme.Sing.StaticP1DuetFourPAvatar.X; - Statics[StaticP1DuetFourPAvatar].Texture.Y := Theme.Sing.StaticP1DuetFourPAvatar.Y; - Statics[StaticP1DuetFourPAvatar].Texture.H := Theme.Sing.StaticP1DuetFourPAvatar.H; - Statics[StaticP1DuetFourPAvatar].Texture.W := Theme.Sing.StaticP1DuetFourPAvatar.W; - Statics[StaticP1DuetFourPAvatar].Texture.Z := Theme.Sing.StaticP1DuetFourPAvatar.Z; - Statics[StaticP1DuetFourPAvatar].Texture.Alpha := Theme.Sing.StaticP1DuetFourPAvatar.Alpha; - - StaticP2DuetFourPAvatar := AddStatic(Theme.Sing.StaticP2DuetFourPAvatar); - Statics[StaticP2DuetFourPAvatar].Texture := AvatarPlayerTextures[2]; - Statics[StaticP2DuetFourPAvatar].Texture.X := Theme.Sing.StaticP2DuetFourPAvatar.X; - Statics[StaticP2DuetFourPAvatar].Texture.Y := Theme.Sing.StaticP2DuetFourPAvatar.Y; - Statics[StaticP2DuetFourPAvatar].Texture.H := Theme.Sing.StaticP2DuetFourPAvatar.H; - Statics[StaticP2DuetFourPAvatar].Texture.W := Theme.Sing.StaticP2DuetFourPAvatar.W; - Statics[StaticP2DuetFourPAvatar].Texture.Z := Theme.Sing.StaticP2DuetFourPAvatar.Z; - Statics[StaticP2DuetFourPAvatar].Texture.Alpha := Theme.Sing.StaticP2DuetFourPAvatar.Alpha; - - StaticP3DuetFourPAvatar := AddStatic(Theme.Sing.StaticP3DuetFourPAvatar); - Statics[StaticP3DuetFourPAvatar].Texture := AvatarPlayerTextures[3]; - Statics[StaticP3DuetFourPAvatar].Texture.X := Theme.Sing.StaticP3DuetFourPAvatar.X; - Statics[StaticP3DuetFourPAvatar].Texture.Y := Theme.Sing.StaticP3DuetFourPAvatar.Y; - Statics[StaticP3DuetFourPAvatar].Texture.H := Theme.Sing.StaticP3DuetFourPAvatar.H; - Statics[StaticP3DuetFourPAvatar].Texture.W := Theme.Sing.StaticP3DuetFourPAvatar.W; - Statics[StaticP3DuetFourPAvatar].Texture.Z := Theme.Sing.StaticP3DuetFourPAvatar.Z; - Statics[StaticP3DuetFourPAvatar].Texture.Alpha := Theme.Sing.StaticP3DuetFourPAvatar.Alpha; - - StaticP4DuetFourPAvatar := AddStatic(Theme.Sing.StaticP4DuetFourPAvatar); - Statics[StaticP4DuetFourPAvatar].Texture := AvatarPlayerTextures[4]; - Statics[StaticP4DuetFourPAvatar].Texture.X := Theme.Sing.StaticP4DuetFourPAvatar.X; - Statics[StaticP4DuetFourPAvatar].Texture.Y := Theme.Sing.StaticP4DuetFourPAvatar.Y; - Statics[StaticP4DuetFourPAvatar].Texture.H := Theme.Sing.StaticP4DuetFourPAvatar.H; - Statics[StaticP4DuetFourPAvatar].Texture.W := Theme.Sing.StaticP4DuetFourPAvatar.W; - Statics[StaticP4DuetFourPAvatar].Texture.Z := Theme.Sing.StaticP4DuetFourPAvatar.Z; - Statics[StaticP4DuetFourPAvatar].Texture.Alpha := Theme.Sing.StaticP4DuetFourPAvatar.Alpha; - - StaticP1SixPAvatar := AddStatic(Theme.Sing.StaticP1SixPAvatar); - Statics[StaticP1SixPAvatar].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1SixPAvatar].Texture.X := Theme.Sing.StaticP1SixPAvatar.X; - Statics[StaticP1SixPAvatar].Texture.Y := Theme.Sing.StaticP1SixPAvatar.Y; - Statics[StaticP1SixPAvatar].Texture.H := Theme.Sing.StaticP1SixPAvatar.H; - Statics[StaticP1SixPAvatar].Texture.W := Theme.Sing.StaticP1SixPAvatar.W; - Statics[StaticP1SixPAvatar].Texture.Z := Theme.Sing.StaticP1SixPAvatar.Z; - Statics[StaticP1SixPAvatar].Texture.Alpha := Theme.Sing.StaticP1SixPAvatar.Alpha; - - StaticP2SixPAvatar := AddStatic(Theme.Sing.StaticP2SixPAvatar); - Statics[StaticP2SixPAvatar].Texture := AvatarPlayerTextures[2]; - Statics[StaticP2SixPAvatar].Texture.X := Theme.Sing.StaticP2SixPAvatar.X; - Statics[StaticP2SixPAvatar].Texture.Y := Theme.Sing.StaticP2SixPAvatar.Y; - Statics[StaticP2SixPAvatar].Texture.H := Theme.Sing.StaticP2SixPAvatar.H; - Statics[StaticP2SixPAvatar].Texture.W := Theme.Sing.StaticP2SixPAvatar.W; - Statics[StaticP2SixPAvatar].Texture.Z := Theme.Sing.StaticP2SixPAvatar.Z; - Statics[StaticP2SixPAvatar].Texture.Alpha := Theme.Sing.StaticP2SixPAvatar.Alpha; - - StaticP3SixPAvatar := AddStatic(Theme.Sing.StaticP3SixPAvatar); - Statics[StaticP3SixPAvatar].Texture := AvatarPlayerTextures[3]; - Statics[StaticP3SixPAvatar].Texture.X := Theme.Sing.StaticP3SixPAvatar.X; - Statics[StaticP3SixPAvatar].Texture.Y := Theme.Sing.StaticP3SixPAvatar.Y; - Statics[StaticP3SixPAvatar].Texture.H := Theme.Sing.StaticP3SixPAvatar.H; - Statics[StaticP3SixPAvatar].Texture.W := Theme.Sing.StaticP3SixPAvatar.W; - Statics[StaticP3SixPAvatar].Texture.Z := Theme.Sing.StaticP3SixPAvatar.Z; - Statics[StaticP3SixPAvatar].Texture.Alpha := Theme.Sing.StaticP3SixPAvatar.Alpha; - - StaticP4SixPAvatar := AddStatic(Theme.Sing.StaticP4SixPAvatar); - Statics[StaticP4SixPAvatar].Texture := AvatarPlayerTextures[4]; - Statics[StaticP4SixPAvatar].Texture.X := Theme.Sing.StaticP4SixPAvatar.X; - Statics[StaticP4SixPAvatar].Texture.Y := Theme.Sing.StaticP4SixPAvatar.Y; - Statics[StaticP4SixPAvatar].Texture.H := Theme.Sing.StaticP4SixPAvatar.H; - Statics[StaticP4SixPAvatar].Texture.W := Theme.Sing.StaticP4SixPAvatar.W; - Statics[StaticP4SixPAvatar].Texture.Z := Theme.Sing.StaticP4SixPAvatar.Z; - Statics[StaticP4SixPAvatar].Texture.Alpha := Theme.Sing.StaticP4SixPAvatar.Alpha; - - StaticP5SixPAvatar := AddStatic(Theme.Sing.StaticP5SixPAvatar); - Statics[StaticP5SixPAvatar].Texture := AvatarPlayerTextures[5]; - Statics[StaticP5SixPAvatar].Texture.X := Theme.Sing.StaticP5SixPAvatar.X; - Statics[StaticP5SixPAvatar].Texture.Y := Theme.Sing.StaticP5SixPAvatar.Y; - Statics[StaticP5SixPAvatar].Texture.H := Theme.Sing.StaticP5SixPAvatar.H; - Statics[StaticP5SixPAvatar].Texture.W := Theme.Sing.StaticP5SixPAvatar.W; - Statics[StaticP5SixPAvatar].Texture.Z := Theme.Sing.StaticP5SixPAvatar.Z; - Statics[StaticP5SixPAvatar].Texture.Alpha := Theme.Sing.StaticP5SixPAvatar.Alpha; - - StaticP6SixPAvatar := AddStatic(Theme.Sing.StaticP6SixPAvatar); - Statics[StaticP6SixPAvatar].Texture := AvatarPlayerTextures[6]; - Statics[StaticP6SixPAvatar].Texture.X := Theme.Sing.StaticP6SixPAvatar.X; - Statics[StaticP6SixPAvatar].Texture.Y := Theme.Sing.StaticP6SixPAvatar.Y; - Statics[StaticP6SixPAvatar].Texture.H := Theme.Sing.StaticP6SixPAvatar.H; - Statics[StaticP6SixPAvatar].Texture.W := Theme.Sing.StaticP6SixPAvatar.W; - Statics[StaticP6SixPAvatar].Texture.Z := Theme.Sing.StaticP6SixPAvatar.Z; - Statics[StaticP6SixPAvatar].Texture.Alpha := Theme.Sing.StaticP6SixPAvatar.Alpha; - - StaticP1DuetSixPAvatar := AddStatic(Theme.Sing.StaticP1DuetSixPAvatar); - Statics[StaticP1DuetSixPAvatar].Texture := AvatarPlayerTextures[1]; - Statics[StaticP1DuetSixPAvatar].Texture.X := Theme.Sing.StaticP1DuetSixPAvatar.X; - Statics[StaticP1DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP1DuetSixPAvatar.Y; - Statics[StaticP1DuetSixPAvatar].Texture.H := Theme.Sing.StaticP1DuetSixPAvatar.H; - Statics[StaticP1DuetSixPAvatar].Texture.W := Theme.Sing.StaticP1DuetSixPAvatar.W; - Statics[StaticP1DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP1DuetSixPAvatar.Z; - Statics[StaticP1DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP1DuetSixPAvatar.Alpha; - - StaticP2DuetSixPAvatar := AddStatic(Theme.Sing.StaticP2DuetSixPAvatar); - Statics[StaticP2DuetSixPAvatar].Texture := AvatarPlayerTextures[2]; - Statics[StaticP2DuetSixPAvatar].Texture.X := Theme.Sing.StaticP2DuetSixPAvatar.X; - Statics[StaticP2DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP2DuetSixPAvatar.Y; - Statics[StaticP2DuetSixPAvatar].Texture.H := Theme.Sing.StaticP2DuetSixPAvatar.H; - Statics[StaticP2DuetSixPAvatar].Texture.W := Theme.Sing.StaticP2DuetSixPAvatar.W; - Statics[StaticP2DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP2DuetSixPAvatar.Z; - Statics[StaticP2DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP2DuetSixPAvatar.Alpha; - - StaticP3DuetSixPAvatar := AddStatic(Theme.Sing.StaticP3DuetSixPAvatar); - Statics[StaticP3DuetSixPAvatar].Texture := AvatarPlayerTextures[3]; - Statics[StaticP3DuetSixPAvatar].Texture.X := Theme.Sing.StaticP3DuetSixPAvatar.X; - Statics[StaticP3DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP3DuetSixPAvatar.Y; - Statics[StaticP3DuetSixPAvatar].Texture.H := Theme.Sing.StaticP3DuetSixPAvatar.H; - Statics[StaticP3DuetSixPAvatar].Texture.W := Theme.Sing.StaticP3DuetSixPAvatar.W; - Statics[StaticP3DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP3DuetSixPAvatar.Z; - Statics[StaticP3DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP3DuetSixPAvatar.Alpha; - - StaticP4DuetSixPAvatar := AddStatic(Theme.Sing.StaticP4DuetSixPAvatar); - Statics[StaticP4DuetSixPAvatar].Texture := AvatarPlayerTextures[4]; - Statics[StaticP4DuetSixPAvatar].Texture.X := Theme.Sing.StaticP4DuetSixPAvatar.X; - Statics[StaticP4DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP4DuetSixPAvatar.Y; - Statics[StaticP4DuetSixPAvatar].Texture.H := Theme.Sing.StaticP4DuetSixPAvatar.H; - Statics[StaticP4DuetSixPAvatar].Texture.W := Theme.Sing.StaticP4DuetSixPAvatar.W; - Statics[StaticP4DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP4DuetSixPAvatar.Z; - Statics[StaticP4DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP4DuetSixPAvatar.Alpha; - - StaticP5DuetSixPAvatar := AddStatic(Theme.Sing.StaticP5DuetSixPAvatar); - Statics[StaticP5DuetSixPAvatar].Texture := AvatarPlayerTextures[5]; - Statics[StaticP5DuetSixPAvatar].Texture.X := Theme.Sing.StaticP5DuetSixPAvatar.X; - Statics[StaticP5DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP5DuetSixPAvatar.Y; - Statics[StaticP5DuetSixPAvatar].Texture.H := Theme.Sing.StaticP5DuetSixPAvatar.H; - Statics[StaticP5DuetSixPAvatar].Texture.W := Theme.Sing.StaticP5DuetSixPAvatar.W; - Statics[StaticP5DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP5DuetSixPAvatar.Z; - Statics[StaticP5DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP5DuetSixPAvatar.Alpha; - - StaticP6DuetSixPAvatar := AddStatic(Theme.Sing.StaticP6DuetSixPAvatar); - Statics[StaticP6DuetSixPAvatar].Texture := AvatarPlayerTextures[6]; - Statics[StaticP6DuetSixPAvatar].Texture.X := Theme.Sing.StaticP6DuetSixPAvatar.X; - Statics[StaticP6DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP6DuetSixPAvatar.Y; - Statics[StaticP6DuetSixPAvatar].Texture.H := Theme.Sing.StaticP6DuetSixPAvatar.H; - Statics[StaticP6DuetSixPAvatar].Texture.W := Theme.Sing.StaticP6DuetSixPAvatar.W; - Statics[StaticP6DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP6DuetSixPAvatar.Z; - Statics[StaticP6DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP6DuetSixPAvatar.Alpha; - - ClearSettings; -end; - -procedure TScreenSing.OnShow; -var - V1: boolean; - V1TwoP: boolean; // position of score box in two player mode - V1ThreeP: boolean; // position of score box in three player mode - V2R: boolean; - V2M: boolean; - V3R: boolean; - VDuet1ThreeP: boolean; - VDuet2M: boolean; - VDuet3R: boolean; - V1FourP: boolean; - V2FourP: boolean; - V3FourP: boolean; - V4FourP: boolean; - V1SixP: boolean; - V2SixP: boolean; - V3SixP: boolean; - V4SixP: boolean; - V5SixP: boolean; - V6SixP: boolean; - V1DuetFourP: boolean; - V2DuetFourP: boolean; - V3DuetFourP: boolean; - V4DuetFourP: boolean; - V1DuetSixP: boolean; - V2DuetSixP: boolean; - V3DuetSixP: boolean; - V4DuetSixP: boolean; - V5DuetSixP: boolean; - V6DuetSixP: boolean; - BadPlayer: integer; - Col, ColP1, ColP2: TRGB; - I: integer; -begin - inherited; - - Log.LogStatus('Begin', 'OnShow'); - - FadeOut := false; - - CloseMessage; - - //the song was sung to the end - SungToEnd := false; - SungPaused := false; - - ClearSettings; - Party.CallBeforeSing; - - // prepare players - SetLength(Player, PlayersPlay); - - //Reset Player Medley stats - if (ScreenSong.Mode = smMedley) then - begin - PlaylistMedley.CurrentMedleySong:=1; - - PlaylistMedley.NumPlayer := PlayersPlay; - SetLength(PlaylistMedley.Stats, 0); - end; - - fTimebarMode := TTimebarMode(Ini.SingTimebarMode); - - if (ScreenSong.Mode = smMedley) then - CatSongs.Selected := PlaylistMedley.Song[PlaylistMedley.CurrentMedleySong-1]; - - CurrentSong := CatSongs.Song[CatSongs.Selected]; - - for I := 0 to High(StaticDuet) do - Statics[StaticDuet[I]].Visible := CurrentSong.isDuet and (PlayersPlay > 1); - - Statics[SongNameStatic].Visible := false; - Text[SongNameText].Visible := false; - - V1 := false; - V1TwoP := false; - V1ThreeP := false; - V2R := false; - V2M := false; - V3R := false; - - VDuet1ThreeP := false; - VDuet2M := false; - VDuet3R := false; - - V1FourP := false; - V2FourP := false; - V3FourP := false; - V4FourP := false; - - V1SixP := false; - V2SixP := false; - V3SixP := false; - V4SixP := false; - V5SixP := false; - V6SixP := false; - - V1DuetFourP := false; - V2DuetFourP := false; - V3DuetFourP := false; - V4DuetFourP := false; - - V1DuetSixP := false; - V2DuetSixP := false; - V3DuetSixP := false; - V4DuetSixP := false; - V5DuetSixP := false; - V6DuetSixP := false; - - case PlayersPlay of - 1: - begin - V1 := true; - end; - 2: - begin - V1TwoP := true; - V2R := true; - end; - 3: - begin - if (CurrentSong.isDuet) then - begin - VDuet1ThreeP := true; - VDuet2M := true; - VDuet3R := true; - end - else - begin - V1ThreeP := true; - V2M := true; - V3R := true; - end; - end; - 4: - begin // double screen - if (Ini.Screens = 1) then - begin - V1TwoP := true; - V2R := true; - end - else - begin - if (CurrentSong.isDuet) then - begin - V1DuetFourP := true; - V2DuetFourP := true; - V3DuetFourP := true; - V4DuetFourP := true; - end - else - begin - V1FourP := true; - V2FourP := true; - V3FourP := true; - V4FourP := true; - end; - end; - end; - 6: - begin // double screen - if (Ini.Screens = 1) then - begin - if (CurrentSong.isDuet) then - begin - VDuet1ThreeP := true; - VDuet2M := true; - VDuet3R := true; - end - else - begin - V1ThreeP := true; - V2M := true; - V3R := true; - end; - end - else - begin - if (CurrentSong.isDuet) then - begin - V1DuetSixP := true; - V2DuetSixP := true; - V3DuetSixP := true; - V4DuetSixP := true; - V5DuetSixP := true; - V6DuetSixP := true; - end - else - begin - V1SixP := true; - V2SixP := true; - V3SixP := true; - V4SixP := true; - V5SixP := true; - V6SixP := true; - end; - end; - end; - end; - - Text[TextP1].Visible := V1; - Text[TextP1TwoP].Visible := V1TwoP; - Text[TextP2R].Visible := V2R; - Text[TextP1ThreeP].Visible := V1ThreeP; - Text[TextP2M].Visible := V2M; - Text[TextP3R].Visible := V3R; - Text[TextDuetP1ThreeP].Visible := VDuet1ThreeP; - Text[TextDuetP2M].Visible := VDuet2M; - Text[TextDuetP3R].Visible := VDuet3R; - Text[TextP1FourP].Visible := V1FourP; - Text[TextP2FourP].Visible := V2FourP; - Text[TextP3FourP].Visible := V3FourP; - Text[TextP4FourP].Visible := V4FourP; - Text[TextP1SixP].Visible := V1SixP; - Text[TextP2SixP].Visible := V2SixP; - Text[TextP3SixP].Visible := V3SixP; - Text[TextP4SixP].Visible := V4SixP; - Text[TextP5SixP].Visible := V5SixP; - Text[TextP6SixP].Visible := V6SixP; - Text[TextP1DuetFourP].Visible := V1DuetFourP; - Text[TextP2DuetFourP].Visible := V2DuetFourP; - Text[TextP3DuetFourP].Visible := V3DuetFourP; - Text[TextP4DuetFourP].Visible := V4DuetFourP; - Text[TextP1DuetSixP].Visible := V1DuetSixP; - Text[TextP2DuetSixP].Visible := V2DuetSixP; - Text[TextP3DuetSixP].Visible := V3DuetSixP; - Text[TextP4DuetSixP].Visible := V4DuetSixP; - Text[TextP5DuetSixP].Visible := V5DuetSixP; - Text[TextP6DuetSixP].Visible := V6DuetSixP; - - BadPlayer := AudioInputProcessor.CheckPlayersConfig(PlayersPlay); - if (BadPlayer <> 0) then - begin - ScreenPopupError.ShowPopup( - Format(Language.Translate('ERROR_PLAYER_NO_DEVICE_ASSIGNMENT'), - [BadPlayer])); - end; - - if (CurrentSong.isDuet) then - begin - Col := GetLyricColor(Ini.SingColor[0]); - -// if (PlayersPlay = 3) or (PlayersPlay = 6) then -// Col := GetLyricColor(1); - - if (PlayersPlay = 4) then - begin - ColPlayer[0] := GetLyricColor(Ini.SingColor[0]); - ColPlayer[1] := GetLyricColor(Ini.SingColor[1]); - ColPlayer[2] := GetLyricColor(Ini.SingColor[2]); - ColPlayer[3] := GetLyricColor(Ini.SingColor[3]); - end; - - end - else - Col := GetLyricColor(1);; - - // set custom options - if (CurrentSong.isDuet) and (PlayersPlay <> 1) then - begin - ColP1 := GetLyricColor(Ini.SingColor[0]); - ColP2 := GetLyricColor(Ini.SingColor[1]); - - //if (PlayersPlay = 6) then - // Col := GetLyricColor(2); - - // set custom options - case Ini.LyricsFont of - 0: // normal fonts - begin - LyricsDuetP1.FontStyle := ftNormal; - LyricsDuetP2.FontStyle := ftNormal; - - LyricsDuetP1.LineColor_en.R := Skin_FontR; - LyricsDuetP1.LineColor_en.G := Skin_FontG; - LyricsDuetP1.LineColor_en.B := Skin_FontB; - LyricsDuetP1.LineColor_en.A := 1; - - LyricsDuetP2.LineColor_en.R := Skin_FontR; - LyricsDuetP2.LineColor_en.G := Skin_FontG; - LyricsDuetP2.LineColor_en.B := Skin_FontB; - LyricsDuetP2.LineColor_en.A := 1; - - LyricsDuetP1.LineColor_dis.R := 0.4; - LyricsDuetP1.LineColor_dis.G := 0.4; - LyricsDuetP1.LineColor_dis.B := 0.4; - LyricsDuetP1.LineColor_dis.A := 1; - - LyricsDuetP2.LineColor_dis.R := 0.4; - LyricsDuetP2.LineColor_dis.G := 0.4; - LyricsDuetP2.LineColor_dis.B := 0.4; - LyricsDuetP2.LineColor_dis.A := 1; - - LyricsDuetP1.LineColor_act.R := ColP1.R; //0.02; - LyricsDuetP1.LineColor_act.G := ColP1.G; //0.6; - LyricsDuetP1.LineColor_act.B := ColP1.B; //0.8; - LyricsDuetP1.LineColor_act.A := 1; - - LyricsDuetP2.LineColor_act.R := ColP2.R; //0.02; - LyricsDuetP2.LineColor_act.G := ColP2.G; //0.6; - LyricsDuetP2.LineColor_act.B := ColP2.B; //0.8; - LyricsDuetP2.LineColor_act.A := 1; - - end; - 1, 2: // outline fonts - begin - if (Ini.LyricsFont = 1) then - begin - LyricsDuetP1.FontStyle := ftOutline1; - LyricsDuetP2.FontStyle := ftOutline1; - end - else - begin - LyricsDuetP1.FontStyle := ftOutline2; - LyricsDuetP2.FontStyle := ftOutline2; - end; - - LyricsDuetP1.LineColor_en.R := 0.7; - LyricsDuetP1.LineColor_en.G := 0.7; - LyricsDuetP1.LineColor_en.B := 0.7; - LyricsDuetP1.LineColor_en.A := 1; - - LyricsDuetP2.LineColor_en.R := 0.7; - LyricsDuetP2.LineColor_en.G := 0.7; - LyricsDuetP2.LineColor_en.B := 0.7; - LyricsDuetP2.LineColor_en.A := 1; - - LyricsDuetP1.LineColor_dis.R := 0.8; - LyricsDuetP1.LineColor_dis.G := 0.8; - LyricsDuetP1.LineColor_dis.B := 0.8; - LyricsDuetP1.LineColor_dis.A := 1; - - LyricsDuetP2.LineColor_dis.R := 0.8; - LyricsDuetP2.LineColor_dis.G := 0.8; - LyricsDuetP2.LineColor_dis.B := 0.8; - LyricsDuetP2.LineColor_dis.A := 1; - - LyricsDuetP1.LineColor_act.R := ColP1.R; //0.5; - LyricsDuetP1.LineColor_act.G := ColP1.G; //0.5; - LyricsDuetP1.LineColor_act.B := ColP1.B; //1; - LyricsDuetP1.LineColor_act.A := 1; - - LyricsDuetP2.LineColor_act.R := ColP2.R; //0.5; - LyricsDuetP2.LineColor_act.G := ColP2.G; //0.5; - LyricsDuetP2.LineColor_act.B := ColP2.B; //1; - LyricsDuetP2.LineColor_act.A := 1; - end; - end; // case - - end - else - begin - - case Ini.LyricsFont of - 0: // normal fonts - begin - Lyrics.FontStyle := ftNormal; - - Lyrics.LineColor_en.R := Skin_FontR; - Lyrics.LineColor_en.G := Skin_FontG; - Lyrics.LineColor_en.B := Skin_FontB; - Lyrics.LineColor_en.A := 1; - - Lyrics.LineColor_dis.R := 0.4; - Lyrics.LineColor_dis.G := 0.4; - Lyrics.LineColor_dis.B := 0.4; - Lyrics.LineColor_dis.A := 1; - - Lyrics.LineColor_act.R := Col.R; //0.02; - Lyrics.LineColor_act.G := Col.G; //0.6; - Lyrics.LineColor_act.B := Col.B; //0.8; - Lyrics.LineColor_act.A := 1; - end; - 1, 2: // outline fonts - begin - if (Ini.LyricsFont = 1) then - Lyrics.FontStyle := ftOutline1 - else - Lyrics.FontStyle := ftOutline2; - - if (CurrentSong.isDuet) then - begin - Lyrics.LineColor_en.R := 0.7; - Lyrics.LineColor_en.G := 0.7; - Lyrics.LineColor_en.B := 0.7; - Lyrics.LineColor_en.A := 1; - end - else - begin - Lyrics.LineColor_en.R := 0.75; - Lyrics.LineColor_en.G := 0.75; - Lyrics.LineColor_en.B := 1; - Lyrics.LineColor_en.A := 1; - end; - - Lyrics.LineColor_dis.R := 0.8; - Lyrics.LineColor_dis.G := 0.8; - Lyrics.LineColor_dis.B := 0.8; - Lyrics.LineColor_dis.A := 1; - - Lyrics.LineColor_act.R := Col.R; //0.5; - Lyrics.LineColor_act.G := Col.G; //0.5; - Lyrics.LineColor_act.B := Col.B; //1; - Lyrics.LineColor_act.A := 1; - end; - end; // case - end; - - // deactivate pause - Paused := false; - - LoadNextSong(); - - Log.LogStatus('End', 'OnShow'); -end; - -procedure TScreenSing.onShowFinish; -var - I, Index: integer; -begin - // hide cursor on singscreen show - Display.SetCursor; - - // clear the scores of all players - for Index := 0 to High(Player) do - with Player[Index] do - begin - Score := 0; - ScoreLine := 0; - ScoreGolden := 0; - - ScoreInt := 0; - ScoreLineInt := 0; - ScoreGoldenInt := 0; - ScoreTotalInt := 0; - - ScoreLast := 0; - - LastSentencePerfect := false; - end; - - // prepare music - // Important: AudioPlayback must not be initialized in onShow() as TScreenSong - // uses stops AudioPlayback in onHide() which interferes with TScreenSings onShow. - PlayMidi := false; - MidiFadeIn := false; - - AudioPlayback.Open(CurrentSong.Path.Append(CurrentSong.Mp3)); - if ScreenSong.Mode = smMedley then - AudioPlayback.SetVolume(0.1) - else - AudioPlayback.SetVolume(1.0); - //AudioPlayback.Position := CurrentSong.Start; - AudioPlayback.Position := LyricsState.GetCurrentTime(); - - - // set time - if (CurrentSong.Finish > 0) then - LyricsState.TotalTime := CurrentSong.Finish / 1000 - else - begin - LyricsState.TotalTime := AudioPlayback.Length; - end; - - LyricsState.UpdateBeats(); - - // synchronize music - if Ini.SyncTo = Ord(stLyrics) then - AudioPlayback.SetSyncSource(fLyricsSync) - else - AudioPlayback.SetSyncSource(nil); - - // synchronize lyrics (do not set this before AudioPlayback is initialized) - if Ini.SyncTo = Ord(stMusic) then - LyricsState.SetSyncSource(fMusicSync) - else - LyricsState.SetSyncSource(nil); - - // start lyrics - LyricsState.Start(true); - - // start music - if ScreenSong.Mode = smMedley then - AudioPlayback.FadeIn(CurrentSong.Medley.FadeIn_time, 1.0) - else - AudioPlayback.Play(); - - // Send Score - Act_MD5Song := CurrentSong.MD5; - Act_Level := Ini.PlayerLevel[0]; - - // start timer - CountSkipTimeSet; - -end; - -procedure TScreenSing.SongError(); -var - I, len: integer; - -begin - if ScreenSong.Mode <> smMedley then - begin - // error loading song -> go back to previous screen and show some error message - Display.AbortScreenChange; - - // select new song in party mode - if ScreenSong.Mode = smPartyClassic then - ScreenSong.SelectRandomSong(); - - if (Length(CurrentSong.LastError) > 0) then - ScreenPopupError.ShowPopup(Format(Language.Translate(CurrentSong.LastError), [CurrentSong.ErrorLineNo])) - else - ScreenPopupError.ShowPopup(Language.Translate('ERROR_CORRUPT_SONG')); - // FIXME: do we need this? - CurrentSong.Path := CatSongs.Song[CatSongs.Selected].Path; - Exit; - end - else - begin - if (PlaylistMedley.CurrentMedleySong<PlaylistMedley.NumMedleySongs) then - begin - //Error Loading Song in Medley Mode -> skip actual Medley Song an go on if possible - len := Length(PlaylistMedley.Song); - for I := PlaylistMedley.CurrentMedleySong-1 to len - 1 do - PlaylistMedley.Song[I] := PlaylistMedley.Song[I+1]; - - SetLength(PlaylistMedley.Song, Len-1); - Dec(PlaylistMedley.NumMedleySongs); - LoadNextSong; - Exit; - end - else - begin - if (PlaylistMedley.NumMedleySongs=1) then - begin - //Error Loading Song in Medley Mode -> Go back to Song Screen and Show some Error Message - Display.AbortScreenChange; - - // select new song in party mode - if ScreenSong.Mode = smPartyClassic then - ScreenSong.SelectRandomSong(); - - if (Length(CurrentSong.LastError) > 0) then - ScreenPopupError.ShowPopup(Format(Language.Translate(CurrentSong.LastError), [CurrentSong.ErrorLineNo])) - else - ScreenPopupError.ShowPopup(Language.Translate('ERROR_CORRUPT_SONG')); - - // FIXME: do we need this? - CurrentSong.Path := CatSongs.Song[CatSongs.Selected].Path; - Exit; - end - else - begin - //Error Loading Song in Medley Mode -> Finish actual round - len := Length(PlaylistMedley.Song); - SetLength(PlaylistMedley.Song, len-1); - Dec(PlaylistMedley.NumMedleySongs); - Finish; - Exit; - end; - end; - end; -end; - -procedure TScreenSing.LoadNextSong(); -var - Color: TRGB; - Index: integer; - VideoFile: IPath; - BgFile: IPath; - success: boolean; - - function FindNote(beat: integer): TPos; - var - line: integer; - note: integer; - found: boolean; - min: integer; - diff: integer; - - begin - found := false; - - for line := 0 to length(Lines[0].Line) - 1 do - begin - for note := 0 to length(Lines[0].Line[line].Note) - 1 do - begin - if (beat >= Lines[0].Line[line].Note[line].Start) and - (beat <= Lines[0].Line[line].Note[line].Start + Lines[0].Line[line].Note[note].Length) then - begin - Result.part := 0; - Result.line := line; - Result.note := note; - Result.CP := 0; - found:=true; - break; - end; - end; - end; - - if found then //found exactly - exit; - - if CurrentSong.isDuet and (PlayersPlay <> 1) then - begin - for Line := 0 to length(Lines[1].Line) - 1 do - begin - for Note := 0 to length(Lines[1].Line[Line].Note) - 1 do - begin - if (beat>=Lines[1].Line[Line].Note[Note].Start) and - (beat<=Lines[1].Line[Line].Note[Note].Start + Lines[1].Line[Line].Note[Note].Length) then - begin - Result.CP := 1; - Result.line := Line; - Result.note := Note; - found:=true; - break; - end; - end; - end; - end; - - if found then //found exactly - exit; - - min := high(integer); - //second try (approximating) - for line := 0 to length(Lines[0].Line) - 1 do - begin - for note := 0 to length(Lines[0].Line[line].Note) - 1 do - begin - diff := abs(Lines[0].Line[line].Note[note].Start - beat); - if diff < min then - begin - Result.part := 0; - Result.line := line; - Result.note := note; - Result.CP := 0; - min := diff; - end; - end; - end; - - if CurrentSong.isDuet and (PlayersPlay <> 1) then - begin - for Line := 0 to length(Lines[1].Line) - 1 do - begin - for Note := 0 to length(Lines[1].Line[Line].Note) - 1 do - begin - diff := abs(Lines[1].Line[Line].Note[Note].Start - beat); - if diff<min then - begin - Result.CP := 1; - Result.line := Line; - Result.note := Note; - min := diff; - end; - end; - end; - end; - - end; - -begin - // background texture (garbage disposal) - if (Tex_Background.TexNum > 0) then - begin - glDeleteTextures(1, PGLuint(@Tex_Background.TexNum)); - Tex_Background.TexNum := 0; - end; - - // reset video playback engine - fCurrentVideo := nil; - - // setup score manager - Scores.ClearPlayers; // clear old player values - Color.R := 0; - Color.G := 0; - Color.B := 0; - - // add new players - for Index := 0 to PlayersPlay - 1 do - begin - Scores.AddPlayer(Tex_ScoreBG[Index], Color); - end; - - Scores.Init; // get positions for players - - // FIXME: sets path and filename to '' - ResetSingTemp; - - PlaylistMedley.ApplausePlayed := false; - - if ScreenSong.Mode = smMedley then - begin - if length(PlaylistMedley.Song) >= PlaylistMedley.CurrentMedleySong then - begin - CatSongs.Selected := PlaylistMedley.Song[PlaylistMedley.CurrentMedleySong-1]; - //Music.Open(CatSongs.Song[CatSongs.Selected].Path + CatSongs.Song[CatSongs.Selected].Mp3); - end - else - begin - SongError; - Exit; - end; - end; - - CurrentSong := CatSongs.Song[CatSongs.Selected]; - success := false; - // FIXME: bad style, put the try-except into loadsong() and not here - try - // check if file is xml - if CurrentSong.FileName.GetExtension.ToUTF8 = '.xml' then - success := CurrentSong.AnalyseXML and CurrentSong.LoadXMLSong() - else - success := CurrentSong.Analyse(false, ScreenSong.DuetChange); // and CurrentSong.LoadSong(); - except - on E: EInOutError do Log.LogWarn(E.Message, 'TScreenSing.LoadNextSong'); - end; - - if (not success) then - begin - SongError(); - Exit; - end; - - // Set up Medley timings - if ScreenSong.Mode = smMedley then - begin - CurrentSong.SetMedleyMode(); - - if (PlaylistMedley.NumMedleySongs > 1) then - Text[SongNameText].Text := IntToStr(PlaylistMedley.CurrentMedleySong) + - '/' + IntToStr(PlaylistMedley.NumMedleySongs) + ': ' + - CurrentSong.Artist + ' - ' + CurrentSong.Title - else - Text[SongNameText].Text := CurrentSong.Artist + ' - ' + CurrentSong.Title; - - //medley start and end timestamps - StartNote := FindNote(CurrentSong.Medley.StartBeat - round(CurrentSong.BPM[0].BPM*CurrentSong.Medley.FadeIn_time/60)); - MedleyStart := GetTimeFromBeat(Lines[0].Line[StartNote.line].Note[0].Start); - - //check Medley-Start - if (MedleyStart+CurrentSong.Medley.FadeIn_time*0.5>GetTimeFromBeat(CurrentSong.Medley.StartBeat)) then - MedleyStart := GetTimeFromBeat(CurrentSong.Medley.StartBeat) - CurrentSong.Medley.FadeIn_time; - if MedleyStart<0 then - MedleyStart := 0; - - MedleyEnd := GetTimeFromBeat(CurrentSong.Medley.EndBeat) + CurrentSong.Medley.FadeOut_time; - end; - - {* - * == Background == - * We have four types of backgrounds: - * + Blank : Nothing has been set, this is our fallback - * + Picture : Picture has been set, and exists - otherwise we fallback - * + Video : Video has been set, and exists - otherwise we fallback - * + Visualization: + Off : No visualization - * + WhenNoVideo: Overwrites blank and picture - * + On : Overwrites blank, picture and video - *} - - {* - * set background to: video - * Note: ffmpeg / this is also used for many background formats" - *} - fShowVisualization := false; - VideoFile := CurrentSong.Path.Append(CurrentSong.Video); - if (Ini.VideoEnabled = 1) and CurrentSong.Video.IsSet() and VideoFile.IsFile then - begin - fVideoClip := VideoPlayback.Open(VideoFile); - fCurrentVideo := fVideoClip; - if (fVideoClip <> nil) then - begin - fShowVisualization := false; - if ScreenSong.Mode = smMedley then - fCurrentVideo.Position := CurrentSong.VideoGAP + MedleyStart - else - fCurrentVideo.Position := CurrentSong.VideoGAP + CurrentSong.Start; - fCurrentVideo.Play; - end; - end; - - {* - * set background to: picture - *} - if (CurrentSong.Background.IsSet) then - begin - BgFile := CurrentSong.Path.Append(CurrentSong.Background); - try - Tex_Background := Texture.LoadTexture(BgFile); - except - Log.LogError('Background could not be loaded: ' + BgFile.ToNative); - Tex_Background.TexNum := 0; - end - end - else - begin - Tex_Background.TexNum := 0; - end; - - {* - * set background to: visualization (Overwrites all) - *} - if (TVisualizerOption(Ini.VisualizerOption) in [voOn]) then - begin - fShowVisualization := true; - fCurrentVideo := Visualization.Open(PATH_NONE); - if (fCurrentVideo <> nil) then - fCurrentVideo.Play; - end; - - {* - * set background to: visualization (Videos are still shown) - *} - if ((TVisualizerOption(Ini.VisualizerOption) in [voWhenNoVideo]) and - (fVideoClip = nil)) then - begin - fShowVisualization := true; - fCurrentVideo := Visualization.Open(PATH_NONE); - if fCurrentVideo <> nil then - fCurrentVideo.Play; - end; - - // prepare lyrics timer - LyricsState.Reset(); - - if ScreenSong.Mode = smMedley then - begin - LyricsState.SetCurrentTime(MedleyStart); - LyricsState.StartTime := CurrentSong.Gap; - LyricsState.TotalTime := MedleyEnd; - end - else - begin - LyricsState.SetCurrentTime(CurrentSong.Start); - LyricsState.StartTime := CurrentSong.Gap; - if CurrentSong.Finish > 0 then - LyricsState.TotalTime := CurrentSong.Finish / 1000 - else - LyricsState.TotalTime := AudioPlayback.Length; - end; - - LyricsState.UpdateBeats(); - - // prepare and start voice-capture - AudioInput.CaptureStart; - - // main text - Lyrics.Clear(CurrentSong.BPM[0].BPM, CurrentSong.Resolution); - LyricsDuetP1.Clear(CurrentSong.BPM[0].BPM, CurrentSong.Resolution); - LyricsDuetP2.Clear(CurrentSong.BPM[0].BPM, CurrentSong.Resolution); - - if (CurrentSong.isDuet) and (PlayersPlay <> 1) then - begin - // initialize lyrics by filling its queue - while (not LyricsDuetP1.IsQueueFull) and - (LyricsDuetP1.LineCounter <= High(Lines[0].Line)) do - begin - LyricsDuetP1.AddLine(@Lines[0].Line[LyricsDuetP1.LineCounter]); - end; - - // initialize lyrics by filling its queue - while (not LyricsDuetP2.IsQueueFull) and - (LyricsDuetP2.LineCounter <= High(Lines[1].Line)) do - begin - LyricsDuetP2.AddLine(@Lines[1].Line[LyricsDuetP2.LineCounter]); - end; - end - else - begin - // initialize lyrics by filling its queue - while (not Lyrics.IsQueueFull) and - (Lyrics.LineCounter <= High(Lines[0].Line)) do - begin - Lyrics.AddLine(@Lines[0].Line[Lyrics.LineCounter]); - end; - end; - - // kill all stars not killed yet (goldenstarstwinkle mod) - GoldenRec.SentenceChange(0); - if (CurrentSong.isDuet) and (PlayersPlay <> 1) then - GoldenRec.SentenceChange(1); - - // set position of line bonus - line bonus end - // set number of empty sentences for line bonus - NumEmptySentences[0] := 0; - NumEmptySentences[1] := 0; - - if (CurrentSong.isDuet) and (PlayersPlay <> 1) then - begin - for Index := Low(Lines[1].Line) to High(Lines[1].Line) do - if Lines[1].Line[Index].TotalNotes = 0 then - Inc(NumEmptySentences[1]); - - for Index := Low(Lines[0].Line) to High(Lines[0].Line) do - if Lines[0].Line[Index].TotalNotes = 0 then - Inc(NumEmptySentences[0]); - end - else - begin - for Index := Low(Lines[0].Line) to High(Lines[0].Line) do - if Lines[0].Line[Index].TotalNotes = 0 then - Inc(NumEmptySentences[0]); - end; - - eSongLoaded.CallHookChain(False); - - if (ScreenSong.Mode = smMedley) and (PlaylistMedley.CurrentMedleySong>1) then - onShowFinish; -end; - -procedure TScreenSing.ClearSettings; -begin - Settings.Finish := False; - Settings.LyricsVisible := True; - Settings.NotesVisible := high(Integer); - Settings.PlayerEnabled := high(Integer); - Settings.SoundEnabled := True; -end; - -{ applies changes of settings record } -procedure TScreenSing.ApplySettings; -begin - // -end; - -procedure TScreenSing.EndSong; -begin - Settings.Finish := True; -end; - -procedure TScreenSing.OnHide; -begin - // background texture - if Tex_Background.TexNum > 0 then - begin - glDeleteTextures(1, PGLuint(@Tex_Background.TexNum)); - Tex_Background.TexNum := 0; - end; - if fShowWebcam then - begin - Webcam.Release; - fShowWebCam:=false; - end; - Background.OnFinish; - Display.SetCursor; -end; - -function TScreenSing.FinishedMusic: boolean; -begin - Result := AudioPlayback.Finished; -end; - -function TScreenSing.Draw: boolean; -var - DisplayTime: real; - DisplayPrefix: string; - DisplayMin: integer; - DisplaySec: integer; - T: integer; - CurLyricsTime: real; - VideoFrameTime: Extended; - Line: TLyricLine; - LastWord: TLyricWord; - LineDuet: TLyricLine; - LastWordDuet: TLyricWord; - medley_end: boolean; - medley_start_applause: boolean; -begin - Background.Draw; - - // sound enabled/disabled (Party plugins) - if not(ScreenSing.settings.SoundEnabled) then - AudioPlayback.SetVolume(0) - else - AudioPlayback.SetVolume(1); - - // swap static textures to current screen ones - SwapToScreen(ScreenAct); - - // draw background picture (if any, and if no visualizations) - // when we don't check for visualizations the visualizations would - // be overdrawn by the picture when {UNDEFINED UseTexture} in UVisualizer - //if (not fShowVisualization) then - if (not fShowVisualization) or (fShowBackground) then - SingDrawBackground; - - if (fShowWebCam) then - SingDrawWebCamFrame; - - // set player names (for 2 screens and only singstar skin) - if ScreenAct = 1 then - begin - Text[TextP1].Text := P1Name; - Text[TextP1TwoP].Text := P1Name; - Text[TextP1ThreeP].Text := P1Name; - Text[TextP2R].Text := P2Name; - Text[TextP2M].Text := P2Name; - Text[TextP3R].Text := P3Name; - Text[TextDuetP1ThreeP].Text := P1DuetName; - Text[TextDuetP2M].Text := P2DuetName; - Text[TextDuetP3R].Text := P3DuetName; - Text[TextP1FourP].Text := P1Name; - Text[TextP2FourP].Text := P2Name; - Text[TextP3FourP].Text := P3Name; - Text[TextP4FourP].Text := P4Name; - Text[TextP1DuetFourP].Text := P1DuetName; - Text[TextP2DuetFourP].Text := P2DuetName; - Text[TextP3DuetFourP].Text := P3DuetName; - Text[TextP4DuetFourP].Text := P4DuetName; - Text[TextP1SixP].Text := P1Name; - Text[TextP2SixP].Text := P2Name; - Text[TextP3SixP].Text := P3Name; - Text[TextP4SixP].Text := P4Name; - Text[TextP5SixP].Text := P5Name; - Text[TextP6SixP].Text := P6Name; - Text[TextP1DuetSixP].Text := P1DuetName; - Text[TextP2DuetSixP].Text := P2DuetName; - Text[TextP3DuetSixP].Text := P3DuetName; - Text[TextP4DuetSixP].Text := P4DuetName; - Text[TextP5DuetSixP].Text := P5DuetName; - Text[TextP6DuetSixP].Text := P6DuetName; - - if (CurrentSong.isDuet) then - begin - if (PlayersPlay = 4) then - begin - LyricsDuetP1.LineColor_act.R := ColPlayer[0].R; - LyricsDuetP1.LineColor_act.G := ColPlayer[0].G; - LyricsDuetP1.LineColor_act.B := ColPlayer[0].B; - - LyricsDuetP2.LineColor_act.R := ColPlayer[1].R; - LyricsDuetP2.LineColor_act.G := ColPlayer[1].G; - LyricsDuetP2.LineColor_act.B := ColPlayer[1].B; - end; - end; - end; - - if ScreenAct = 2 then - begin - case PlayersPlay of - 4: - begin - Text[TextP1TwoP].Text := P3Name; - Text[TextP2R].Text := P4Name; - - if (CurrentSong.isDuet) and (PlayersPlay = 4) then - begin - LyricsDuetP1.LineColor_act.R := ColPlayer[2].R; - LyricsDuetP1.LineColor_act.G := ColPlayer[2].G; - LyricsDuetP1.LineColor_act.B := ColPlayer[2].B; - - LyricsDuetP2.LineColor_act.R := ColPlayer[3].R; - LyricsDuetP2.LineColor_act.G := ColPlayer[3].G; - LyricsDuetP2.LineColor_act.B := ColPlayer[3].B; - end; - - end; - 6: - begin - if (CurrentSong.isDuet) then - begin - Text[TextDuetP1ThreeP].Text := P4DuetName; - Text[TextDuetP2M].Text := P5DuetName; - Text[TextDuetP3R].Text := P6DuetName; - end - else - begin - Text[TextP1ThreeP].Text := P4Name; - Text[TextP2M].Text := P5Name; - Text[TextP3R].Text := P6Name; - end; - end; - end; // case - end; // if - - // retrieve current lyrics time, we have to store the value to avoid - // that min- and sec-values do not match - if ScreenSong.Mode = smMedley then - begin - CurLyricsTime := LyricsState.GetCurrentTime() - MedleyStart; - TotalTime := MedleyEnd - MedleyStart; - end - else - begin - CurLyricsTime := LyricsState.GetCurrentTime(); - TotalTime := LyricsState.TotalTime; - end; - - // retrieve time for timebar text - case (fTimebarMode) of - tbmRemaining: begin - DisplayTime := TotalTime - CurLyricsTime; - DisplayPrefix := '-'; - end; - tbmTotal: begin - DisplayTime := TotalTime; - DisplayPrefix := '#'; - end; - else begin // current time - DisplayTime := CurLyricsTime; - DisplayPrefix := ''; - end; - end; - DisplayMin := Round(DisplayTime) div 60; - DisplaySec := Round(DisplayTime) mod 60; - - // update static menu with time ... - Text[TextTimeText].Text := Format('%s%.2d:%.2d', - [DisplayPrefix, DisplayMin, DisplaySec]); - - //the song was sung to the end? - if not(CurrentSong.isDuet) then - begin - Line := Lyrics.GetUpperLine(); - if Line.LastLine then - begin - LastWord := Line.Words[Length(Line.Words)-1]; - if CurLyricsTime >= GetTimeFromBeat(LastWord.Start + LastWord.Length) then - SungToEnd := true; - end; - end - else - begin - { Line := Lyrics.GetUpperLine(); - LineDuet := LyricsDuet.GetUpperLine(); - if Line.LastLine and (LineDuet.LastLine) then - begin - LastWord := Line.Words[Length(Line.Words)-1]; - LastWordDuet := LineDuet.Words[Length(Line.Words)-1]; - if (CurLyricsTime >= GetTimeFromBeat(LastWord.Start+LastWord.Length)) and (CurLyricsTime >= GetTimeFromBeat(LastWordDuet.Start+LastWordDuet.Length)) then - // TODO SAVE DUET SCORES - SungToEnd := false; - //SungToEnd := true; - end; - } - end; - - // for medley-mode: - CurLyricsTime := LyricsState.GetCurrentTime(); - if (ScreenSong.Mode = smMedley) and (CurLyricsTime > MedleyEnd) then - medley_end := true - else - medley_end := false; - - if (ScreenSong.Mode = smMedley) and (CurLyricsTime > - GetTimeFromBeat(CurrentSong.Medley.EndBeat)) then - medley_start_applause := true - else - medley_start_applause := false; - - // update and draw movie - // USE FFMPEG - if Assigned(fCurrentVideo) and (not fShowWebcam) then - begin - // Just call this once - // when Screens = 2 - if (ScreenAct = 1) then - begin - if (ShowFinish) then - begin - // everything is setup, determine the current position - VideoFrameTime := CurrentSong.VideoGAP + LyricsState.GetCurrentTime(); - end - else - begin - // Important: do not yet start the triggered timer by a call to - // LyricsState.GetCurrentTime() - VideoFrameTime := CurrentSong.VideoGAP; - end; - try - fCurrentVideo.GetFrame(VideoFrameTime); - except - end; - end; - - fCurrentVideo.SetScreen(ScreenAct); - fCurrentVideo.Draw; - end; - - // draw notes lines - SingDrawLines; - - // draw static menu (FG) - DrawFG; - - //Medley Countdown - if ScreenSong.Mode = smMedley then - DrawMedleyCountdown; - - // check for music finish - //Log.LogError('Check for music finish: ' + BoolToStr(Music.Finished) + ' ' + FloatToStr(LyricsState.CurrentTime*1000) + ' ' + IntToStr(CurrentSong.Finish)); - if ShowFinish then - begin - if (not FinishedMusic) and (not medley_end or (ScreenSong.Mode <> smMedley)) and - ((CurrentSong.Finish = 0) or - (LyricsState.GetCurrentTime() * 1000 <= CurrentSong.Finish)) and - (not Settings.Finish) then - begin - // analyze song if not paused - if (not Paused) then - begin - Sing(Self); - - //Update Medley Stats - if (ScreenSong.Mode = smMedley) and not FadeOut then - UpdateMedleyStats(medley_start_applause); - - Party.CallOnSing; - end; - end - else - begin - if (not FadeOut) and (Screens=1) or (ScreenAct=2) then - begin - Finish; - end; - end; - end; - - // draw info lyric bar if not medley - if ScreenSong.Mode <> smMedley then DrawInfoLyricBar; - - // always draw custom items - SingDraw; - - // goldennotestarstwinkle - GoldenRec.SpawnRec; - - // draw scores - if (Ini.SingScores = 1) or (Party.bPartyGame) then - Scores.Draw; - - FadeMessage(); - - // draw pausepopup - // FIXME: this is a workaround that the static is drawn over the lyrics, lines, scores and effects - // maybe someone could find a better solution - if Paused then - begin - Statics[StaticPausePopup].Texture.Z := 1; - Statics[StaticPausePopup].Visible := true; - Statics[StaticPausePopup].Draw; - Statics[StaticPausePopup].Visible := false; - SDL_Delay(33); - end; - - Result := true; -end; - -procedure TScreenSing.Finish; -var - I, J: integer; - len, num: integer; - -begin - AudioInput.CaptureStop; - AudioPlayback.Stop; - AudioPlayback.SetSyncSource(nil); - - if (ScreenSong.Mode = smNormal) and (SungPaused = false) and (SungToEnd) and (Length(DllMan.Websites) > 0) then - begin - AutoSendScore; - AutoSaveScore; - end; - - LyricsState.Stop(); - LyricsState.SetSyncSource(nil); - - // close video files - fVideoClip := nil; - fCurrentVideo := nil; - - // kill all stars and effects - GoldenRec.KillAll; - - if (Ini.SavePlayback = 1) then - begin - Log.BenchmarkStart(0); - Log.LogVoice(0); - if (PlayersPlay > 1) then - Log.LogVoice(1); - if (PlayersPlay > 2) then - Log.LogVoice(2); - Log.BenchmarkEnd(0); - Log.LogBenchmark('Creating files', 0); - end; - - SetFontItalic(false); - - if ScreenSong.Mode = smMedley then - begin - if not FadeOut then - begin - for I := 0 to PlayersPlay - 1 do - PlaylistMedley.Stats[Length(PlaylistMedley.Stats) - 1].Player[I] := Player[I]; - - Inc(PlaylistMedley.CurrentMedleySong); - if PlaylistMedley.CurrentMedleySong <= PlaylistMedley.NumMedleySongs then - begin - LoadNextSong; - end - else - begin - //build sums - len := Length(PlaylistMedley.Stats); - num := PlaylistMedley.NumPlayer; - - SetLength(PlaylistMedley.Stats, len + 1); - SetLength(PlaylistMedley.Stats[len].Player, num); - - for J := 0 to len - 1 do - begin - for I := 0 to num - 1 do - begin - PlaylistMedley.Stats[len].Player[I].Score := - PlaylistMedley.Stats[len].Player[I].Score + - PlaylistMedley.Stats[J].Player[I].Score; - - PlaylistMedley.Stats[len].Player[I].ScoreLine := - PlaylistMedley.Stats[len].Player[I].ScoreLine + - PlaylistMedley.Stats[J].Player[I].ScoreLine; - - PlaylistMedley.Stats[len].Player[I].ScoreGolden := - PlaylistMedley.Stats[len].Player[I].ScoreGolden + - PlaylistMedley.Stats[J].Player[I].ScoreGolden; - - PlaylistMedley.Stats[len].Player[I].ScoreInt := - PlaylistMedley.Stats[len].Player[I].ScoreInt + - PlaylistMedley.Stats[J].Player[I].ScoreInt; - - PlaylistMedley.Stats[len].Player[I].ScoreLineInt := - PlaylistMedley.Stats[len].Player[I].ScoreLineInt + - PlaylistMedley.Stats[J].Player[I].ScoreLineInt; - - PlaylistMedley.Stats[len].Player[I].ScoreGoldenInt := - PlaylistMedley.Stats[len].Player[I].ScoreGoldenInt + - PlaylistMedley.Stats[J].Player[I].ScoreGoldenInt; - - PlaylistMedley.Stats[len].Player[I].ScoreTotalInt := - PlaylistMedley.Stats[len].Player[I].ScoreTotalInt + - PlaylistMedley.Stats[J].Player[I].ScoreTotalInt; - end; //of for I - end; //of for J - - //build mean on sum - for I := 0 to num - 1 do - begin - PlaylistMedley.Stats[len].Player[I].Score := round( - PlaylistMedley.Stats[len].Player[I].Score / len); - - PlaylistMedley.Stats[len].Player[I].ScoreLine := round( - PlaylistMedley.Stats[len].Player[I].ScoreLine / len); - - PlaylistMedley.Stats[len].Player[I].ScoreGolden := round( - PlaylistMedley.Stats[len].Player[I].ScoreGolden / len); - - PlaylistMedley.Stats[len].Player[I].ScoreInt := round( - PlaylistMedley.Stats[len].Player[I].ScoreInt / len); - - PlaylistMedley.Stats[len].Player[I].ScoreLineInt := round( - PlaylistMedley.Stats[len].Player[I].ScoreLineInt / len); - - PlaylistMedley.Stats[len].Player[I].ScoreGoldenInt := round( - PlaylistMedley.Stats[len].Player[I].ScoreGoldenInt / len); - - PlaylistMedley.Stats[len].Player[I].ScoreTotalInt := round( - PlaylistMedley.Stats[len].Player[I].ScoreTotalInt / len); - end; - - Party.CallAfterSing; - FadeOut:=true; - end; - end; - end - else - begin - SetLength(PlaylistMedley.Stats, 1); - SetLength(PlaylistMedley.Stats[0].Player, PlayersPlay); - for I := 0 to PlayersPlay - 1 do - PlaylistMedley.Stats[0].Player[I] := Player[I]; - - PlaylistMedley.Stats[0].SongArtist := CurrentSong.Artist; - PlaylistMedley.Stats[0].SongTitle := CurrentSong.Title; - - if not FadeOut then - Party.CallAfterSing; - - FadeOut := true; - end; - -end; - -procedure TScreenSing.OnSentenceEnd(CP: integer; SentenceIndex: cardinal); -var - PlayerIndex: byte; - CurrentPlayer: PPLayer; - CurrentScore: real; - Line: PLine; - LinePerfection: real; // perfection of singing performance on the current line - Rating: integer; - LineScore: real; - LineBonus: real; - MaxSongScore: integer; // max. points for the song (without line bonus) - MaxLineScore: real; // max. points for the current line - Index: integer; -const - // TODO: move this to a better place - MAX_LINE_RATING = 8; // max. rating for singing performance -begin - Line := @Lines[CP].Line[SentenceIndex]; - - // check for empty sentence - if Line.TotalNotes <= 0 then - Exit; - - // set max song score - if Ini.LineBonus = 0 then - MaxSongScore := MAX_SONG_SCORE - else - MaxSongScore := MAX_SONG_SCORE - MAX_SONG_LINE_BONUS; - - // Note: ScoreValue is the sum of all note values of the song - MaxLineScore := MaxSongScore * (Line.TotalNotes / Lines[CP].ScoreValue); - - for PlayerIndex := 0 to High(Player) do - begin - //PlayerIndex := Index; - - if (not CurrentSong.isDuet) or (PlayerIndex mod 2 = CP) or (PlayersPlay = 1)then - begin - CurrentPlayer := @Player[PlayerIndex]; - CurrentScore := CurrentPlayer.Score + CurrentPlayer.ScoreGolden; - - // line bonus - - // points for this line - LineScore := CurrentScore - CurrentPlayer.ScoreLast; - - // check for lines with low points - if MaxLineScore <= 2 then - LinePerfection := 1 - else - // determine LinePerfection - // Note: the "+2" extra points are a little bonus so the player does not - // have to be that perfect to reach the bonus steps. - LinePerfection := LineScore / (MaxLineScore - 2); - - // clamp LinePerfection to range [0..1] - if LinePerfection < 0 then - LinePerfection := 0 - else if LinePerfection > 1 then - LinePerfection := 1; - - // add line-bonus if enabled - if Ini.LineBonus > 0 then - begin - // line-bonus points (same for each line, no matter how long the line is) - LineBonus := MAX_SONG_LINE_BONUS / (Length(Lines[CP].Line) - - NumEmptySentences[CP]); - // apply line-bonus - CurrentPlayer.ScoreLine := - CurrentPlayer.ScoreLine + LineBonus * LinePerfection; - CurrentPlayer.ScoreLineInt := Floor(CurrentPlayer.ScoreLine / 10) * 10; - // update total score - CurrentPlayer.ScoreTotalInt := - CurrentPlayer.ScoreInt + - CurrentPlayer.ScoreGoldenInt - + CurrentPlayer.ScoreLineInt; - - // spawn rating pop-up - Rating := Round(LinePerfection * MAX_LINE_RATING); - Scores.SpawnPopUp(PlayerIndex, Rating, CurrentPlayer.ScoreTotalInt); - end - else - Scores.RaiseScore(PlayerIndex, CurrentPlayer.ScoreTotalInt); - - // PerfectLineTwinkle (effect), part 1 - if Ini.EffectSing = 1 then - CurrentPlayer.LastSentencePerfect := (LinePerfection >= 1); - - // refresh last score - CurrentPlayer.ScoreLast := CurrentScore; - end; - end; - - // PerfectLineTwinkle (effect), part 2 - if Ini.EffectSing = 1 then - begin - GoldenRec.SpawnPerfectLineTwinkle; - - for PlayerIndex := 0 to High(Player) do - begin - CurrentPlayer := @Player[PlayerIndex]; - CurrentPlayer.LastSentencePerfect := false; - end; - end; - -end; - - // Called on sentence change - // SentenceIndex: index of the new active sentence -procedure TScreenSing.OnSentenceChange(CP: integer; SentenceIndex: cardinal); -var - tmp_Lyric: TLyricEngine; -begin - // goldenstarstwinkle - GoldenRec.SentenceChange(CP); - - if (CurrentSong.isDuet) and (PlayersPlay <> 1) then - begin - if (CP = 1) then - tmp_Lyric := LyricsDuetP2 - else - tmp_Lyric := LyricsDuetP1; - end - else - tmp_Lyric := Lyrics; - - // fill lyrics queue and set upper line to the current sentence - while (tmp_Lyric.GetUpperLineIndex() < SentenceIndex) or - (not tmp_Lyric.IsQueueFull) do - begin - // add the next line to the queue or a dummy if no more lines are available - if (tmp_Lyric.LineCounter <= High(Lines[CP].Line)) then - begin - tmp_Lyric.AddLine(@Lines[CP].Line[tmp_Lyric.LineCounter]); - end - else - tmp_Lyric.AddLine(nil); - end; - -end; - -function TLyricsSyncSource.GetClock(): real; -begin - Result := LyricsState.GetCurrentTime(); -end; - -function TMusicSyncSource.GetClock(): real; -begin - Result := AudioPlayback.Position; -end; - -procedure TScreenSing.UpdateMedleyStats(medley_end: boolean); -var - len, num, I : integer; - -begin - len := Length(PlaylistMedley.Stats); - num := PlaylistMedley.NumPlayer; - - if (PlaylistMedley.CurrentMedleySong > len) and - (PlaylistMedley.CurrentMedleySong <= PlaylistMedley.NumMedleySongs) then - begin - inc(len); - SetLength(PlaylistMedley.Stats, len); - SetLength(PlaylistMedley.Stats[len - 1].Player, num); - PlaylistMedley.Stats[len-1].SongArtist := CurrentSong.Artist; - PlaylistMedley.Stats[len-1].SongTitle := CurrentSong.Title; - end; - - if PlaylistMedley.CurrentMedleySong <= PlaylistMedley.NumMedleySongs then - for I := 0 to num - 1 do - PlaylistMedley.Stats[len - 1].Player[I] := Player[I]; - - if medley_end and not PlaylistMedley.ApplausePlayed and - (PlaylistMedley.CurrentMedleySong<=PlaylistMedley.NumMedleySongs) then - begin - PlaylistMedley.ApplausePlayed:=true; - - AudioPlayback.Fade(CurrentSong.Medley.FadeOut_time, 0.1); - AudioPlayback.PlaySound(SoundLib.Applause); - end; -end; - -procedure TScreenSing.DrawMedleyCountdown(); -var - w, h: real; - timeDiff: real; - t: real; - CountDownText: UTF8String; - Position: real; -begin - if AudioPlayback.Position < GetTimeFromBeat(CurrentSong.Medley.StartBeat) then - begin - TextMedleyFadeOut := false; - - Statics[SongNameStatic].Texture.Alpha := 1; - Text[SongNameText].Alpha := 1; - - Statics[SongNameStatic].Visible := true; - Text[SongNameText].Visible := true; - - timeDiff := GetTimeFromBeat(CurrentSong.Medley.StartBeat) - AudioPlayback.Position + 1; - t := frac(timeDiff); - - glColor4f(0.15, 0.30, 0.6, t); - - h := 300*t*ScreenH/RenderH; - SetFontStyle(ftBoldHighRes); - SetFontItalic(false); - SetFontSize(h); - CountDownText := IntToStr(round(timeDiff-t)); - w := glTextWidth(PChar(CountDownText)); - - SetFontPos (RenderW/2-w/2, RenderH/2-h/2); - glPrint(PChar(CountDownText)); - end else - begin - if (TextMedleyFadeOut = false) then - begin - TextMedleyFadeOut := true; - TextMedleyFadeTime := SDL_GetTicks(); - end; - - MedleyTitleFadeOut; - end; -end; - -procedure TScreenSing.AutoSendScore; -var - SendInfo: TSendInfo; - SendStatus: byte; - Send: boolean; - TotalScore: integer; - PlayerIndex, IndexWeb, IndexUser: integer; -begin - for PlayerIndex := 1 to PlayersPlay do - begin - for IndexWeb := 0 to High(DataBase.NetworkUser) do - begin - for IndexUser := 0 to High(DataBase.NetworkUser[IndexWeb].Userlist) do - begin - Send := false; - TotalScore := player[PlayerIndex - 1].ScoreInt + player[PlayerIndex - 1].ScoreLineInt + player[PlayerIndex - 1].ScoreGoldenInt; - - case (Act_Level) of - 0: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreEasy) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 1) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then - Send := true; - - 1: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreMedium) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 1) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then - Send := true; - - 2: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreHard) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 1) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then - Send := true; - end; - - if (Send) then - begin - - DllMan.LoadWebsite(IndexWeb); - - SendInfo.Username := DataBase.NetworkUser[IndexWeb].UserList[IndexUser].Username; - SendInfo.Password := DataBase.NetworkUser[IndexWeb].UserList[IndexUser].Password; - - if (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].SendSavePlayer = 1) then - SendInfo.Name := Ini.Name[PlayerIndex - 1] - else - SendInfo.Name := ''; - - SendInfo.ScoreInt := player[PlayerIndex - 1].ScoreInt; - SendInfo.ScoreLineInt := player[PlayerIndex - 1].ScoreLineInt; - SendInfo.ScoreGoldenInt := player[PlayerIndex - 1].ScoreGoldenInt; - SendInfo.MD5Song := Act_MD5Song; - SendInfo.Level := Act_Level; - - SendStatus := DllMan.WebsiteSendScore(SendInfo); - - case SendStatus of - 0: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_NO_CONNECTION')); - 2: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_LOGIN_ERROR')); - 3: ScreenPopupInfo.ShowPopup(Language.Translate('WEBSITE_OK_SEND')); - 4: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_ERROR_SCORE')); - 5: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_ERROR_SCORE_DUPLICATED')); - 7: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_ERROR_SONG')); - end; - - end; - end; - end; - end; -end; - -procedure TScreenSing.AutoSaveScore; -var - SendInfo: TSendInfo; - ScoreFile: TextFile; - EncryptText: string; - WebName: UTF8String; - Save: boolean; - TotalScore: integer; - PlayerIndex, IndexWeb, IndexUser: integer; -begin - for PlayerIndex := 1 to PlayersPlay do - begin - for IndexWeb := 0 to High(DataBase.NetworkUser) do - begin - for IndexUser := 0 to High(DataBase.NetworkUser[IndexWeb].Userlist) do - begin - Save := false; - TotalScore := player[PlayerIndex - 1].ScoreInt + player[PlayerIndex - 1].ScoreLineInt + player[PlayerIndex - 1].ScoreGoldenInt; - - case (Act_Level) of - 0: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreEasy) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 2) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then - Save := true; - - 1: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreMedium) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 2) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then - Save := true; - - 2: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreHard) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 2) - and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then - Save := true; - end; - - if (Save) then - begin - - DllMan.LoadWebsite(IndexWeb); - - SendInfo.Username := DataBase.NetworkUser[IndexWeb].UserList[IndexUser].Username; - SendInfo.Password := DataBase.NetworkUser[IndexWeb].UserList[IndexUser].Password; - - if (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].SendSavePlayer = 1) then - SendInfo.Name := Ini.Name[PlayerIndex - 1] - else - SendInfo.Name := ''; - - SendInfo.ScoreInt := player[PlayerIndex - 1].ScoreInt; - SendInfo.ScoreLineInt := player[PlayerIndex - 1].ScoreLineInt; - SendInfo.ScoreGoldenInt := player[PlayerIndex - 1].ScoreGoldenInt; - SendInfo.MD5Song := Act_MD5Song; - SendInfo.Level := Act_Level; - - WebName := DataBase.NetworkUser[IndexWeb].Website; - EncryptText := DllMan.WebsiteEncryptScore(SendInfo); - - AssignFile(ScoreFile, WebScoresPath.Append(WebName + '.usc').ToNative); - - if FileExists(WebScoresPath.Append(WebName + '.usc').ToNative) then - Append(ScoreFile) - else - Rewrite(ScoreFile); - - WriteLn(ScoreFile, DatetoStr(Now) + '|' + TimetoStr(Now) + '|' + EncryptText); - - Flush(ScoreFile); - Close(ScoreFile); - - ScreenPopupInfo.ShowPopup(Language.Translate('WEBSITE_SAVE_SCORE')); - - end; - end; - end; - end; -end; - -procedure TScreenSing.WriteMessage(msg: UTF8String); -begin - MessageTime := SDL_GetTicks(); - - Statics[InfoMessageBG].Texture.Alpha := 1; - Text[InfoMessageText].Alpha := 1; - - Statics[InfoMessageBG].Visible := true; - Text[InfoMessageText].Visible := true; - Text[InfoMessageText].Text := msg; -end; - -procedure TScreenSing.FadeMessage(); -var - factor: real; -begin - if ((SDL_GetTicks - MessageTime)/1000 > MAX_MESSAGE) then - begin - if (MessageTimeFade = 0) then - MessageTimeFade := SDL_GetTicks(); - - factor := (SDL_GetTicks - MessageTimeFade)/1000/2; - - Statics[InfoMessageBG].Texture.Alpha := 1 - factor; - Text[InfoMessageText].Alpha := 1 - factor; - end - else - MessageTimeFade := 0; - - Statics[InfoMessageBG].Draw; - Text[InfoMessageText].Draw; -end; - -procedure TScreenSing.CloseMessage(); -begin - Statics[InfoMessageBG].Visible := false; - Text[InfoMessageText].Visible := false; -end; - -procedure TScreenSing.MedleyTitleFadeOut(); -var - I: integer; - Alpha: real; - CTime: cardinal; -begin - - CTime := SDL_GetTicks() - TextMedleyFadeTime; - Alpha := CTime/3000; - - if (Alpha >= 1) then - begin - Statics[SongNameStatic].Visible := false; - Text[SongNameText].Visible := false; - end - else - begin - Text[SongNameText].Alpha := 1 - Alpha; - Statics[SongNameStatic].Texture.Alpha := 1 - Alpha; - end; -end; - -function TScreenSing.GetLyricColor(Color: integer): TRGB; -begin - case (Color) of - 1://blue - begin - Result.R := 5/255; - Result.G := 153/255; - Result.B := 204/255; - end; - 2: //red - begin - Result.R := 230/255; - Result.G := 0; - Result.B := 0; - end; - 3: //green - begin - Result.R := 0; - Result.G := 170/255; - Result.B := 0; - end; - 4: //yellow - begin - Result.R := 255/255; - Result.G := 225/255; - Result.B := 0; - end; - 5: //orange - begin - Result.R := 227/255; - Result.G := 127/255; - Result.B := 0; - end; - 6: //pink - begin - Result.R := 255/255; - Result.G := 0/255; - Result.B := 130/255; - end; - 7: //purple - begin - Result.R := 180/255; - Result.G := 0; - Result.B := 220/255; - end; - 8: //gold - begin - Result.R := 255/255; - Result.G := 190/255; - Result.B := 35/255; - end; - 9: //gray - begin - Result.R := 80/255; - Result.G := 80/255; - Result.B := 80/255; - end; - 10: //dark blue - begin - Result.R := 90/255; - Result.G := 90/255; - Result.B := 240/255; - end; - 11: //sky - begin - Result.R := 0; - Result.G := 110/255; - Result.B := 210/255; - end; - 12: //cyan - begin - Result.R := 0/255; - Result.G := 215/255; - Result.B := 215/255; - end; - 13: //flame - begin - Result.R := 210/255; - Result.G := 70/255; - Result.B := 0/255; - end; - 14: //orchid - begin - Result.R := 210/255; - Result.G := 0; - Result.B := 210/255; - end; - 15: //harlequin - begin - Result.R := 110/255; - Result.G := 210/255; - Result.B := 0; - end; - 16: //lime - begin - Result.R := 160/255; - Result.G := 210/255; - Result.B := 0; - end; - else//blue - begin - Result.R := 5/255; - Result.G := 153/255; - Result.B := 204/255; - end; - end; -end; - -procedure TScreenSing.DrawInfoLyricBar(); -var - SongStart, SongEnd: real; - ww: real; - - pos: real; - br: real; - - line: integer; - numLines: integer; - - x, y, w, h: real; - CurrentLine: integer; - GAPxStart, GAPw: real; -begin - x := Theme.Sing.StaticTimeProgress.x; - y := Theme.Sing.StaticTimeProgress.y; - - w := Theme.Sing.StaticTimeProgress.w; - h := Theme.Sing.StaticTimeProgress.h; - - //calculate x (position of song start on the time-bar) - GAPxStart := w*((CurrentSong.GAP/1000)/LyricsState.TotalTime); - x := x + GAPxStart; //move x to the right by Song-Gap-Seconds - - //width - //LastLine := Lines[0].Line[Length(Lines[0].Line) - 1]; - w := w - GAPxStart; - - //calculate total singing seconds of song - SongStart := 99999999999999; - SongEnd := CurrentSong.BPM[0].BPM*TotalTime/60; - for CurrentLine := 0 to High(Lines) do //P1 of Duett or standard, P2 of Duett,.. - begin - numLines := Length(Lines[CurrentLine].Line); //Lyric lines - if (numLines < 2) then //catch cases which could cause endless loop - Exit; - if SongStart > (Lines[CurrentLine].Line[0].Note[0].Start+(CurrentSong.BPM[0].BPM*CurrentSong.GAP*(1/60/1000))) then - SongStart := Lines[CurrentLine].Line[0].Note[0].Start + (CurrentSong.BPM[0].BPM*CurrentSong.GAP*(1/60/1000)); - end; - ww := SongEnd - SongStart; - - for CurrentLine := 0 to High(Lines) do //for P1 of Duett-lyrics or standard-lyrics, P2 of Duett,.. - begin - numLines := Length(Lines[CurrentLine].Line); //Lyric lines - if (numLines < 2) then //catch cases which could cause endless loop - Exit; - //set color to player.color - if (CurrentLine = 0) then - glColor4f(GetLyricColor(Ini.SingColor[0]).R, GetLyricColor(Ini.SingColor[0]).G, GetLyricColor(Ini.SingColor[0]).B, 0.8) - else - glColor4f(GetLyricColor(Ini.SingColor[CurrentLine]).R, GetLyricColor(Ini.SingColor[CurrentLine]).G, GetLyricColor(Ini.SingColor[CurrentLine]).B, 0.4); - - glbegin(gl_quads); - for line := 0 to numLines - 1 do - begin - if (Lines[CurrentLine].Line[line].Note = nil) or (ww < Lines[CurrentLine].Line[line].Note[Lines[CurrentLine].Line[line].HighNote].Start) then Continue; - pos := (Lines[CurrentLine].Line[line].Note[0].Start)/ww*w; - br := (Lines[CurrentLine].Line[line].Note[Lines[CurrentLine].Line[line].HighNote].Start + - Lines[CurrentLine].Line[line].Note[Lines[CurrentLine].Line[line].HighNote].Length - - Lines[CurrentLine].Line[line].Note[0].Start ) / ww*w; //br = last note of sentence position + its length - first note of sentence position - - //draw a square - glVertex2f(x+pos, y); //left top - glVertex2f(x+pos, y+h); //left bottom - glVertex2f(x+pos+br, y+h); //right bottom - glVertex2f(x+pos+br, y); //right top - - end; - glEnd; - end; -end; - -end. - diff --git a/src/screens/UScreenSong.pas b/src/screens/UScreenSong.pas index 17fcd946..0cc5fc19 100644 --- a/src/screens/UScreenSong.pas +++ b/src/screens/UScreenSong.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenSong.pas $ - * $Id: UScreenSong.pas 3152 2015-10-27 01:23:15Z basisbit $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenSong; interface @@ -205,7 +203,7 @@ TScreenSong = class(TMenu) Static6PlayersDuetSingerP5: cardinal; Static6PlayersDuetSingerP6: cardinal; - ColPlayer: array[0..5] of TRGB; + ColPlayer: array[0..UIni.IMaxPlayerCount-1] of TRGB; //CurrentPartyTime: cardinal; //PartyTime: cardinal; @@ -326,6 +324,7 @@ implementation UMain, UMenuButton, UNote, + UAudioPlaybackBase, UParty, UPlaylist, UScreenSongMenu, @@ -520,7 +519,7 @@ procedure TScreenSong.ParseInputNextVertical(PressedKey: cardinal; CharCode: UCS //Only Change Cat when not in Playlist or Search Mode if (CatSongs.CatNumShow > -2) then begin - if (TSongMenuMode(Ini.SongMenu) <> smChessboard) and (TSongMenuMode(Ini.SongMenu) <> smMosaic) then + if (TSongMenuMode(Ini.SongMenu) <> smChessboard) and (TSongMenuMode(Ini.SongMenu) <> smMosaic) and (TSongMenuMode(Ini.SongMenu) <> smSlotMachine) then begin //Cat Change Hack if Ini.TabsAtStartup = 1 then @@ -558,12 +557,12 @@ procedure TScreenSong.ParseInputNextVertical(PressedKey: cardinal; CharCode: UCS SetScrollRefresh; end; - ResetScrollList; + // ResetScrollList; end else begin - if (TSongMenuMode(Ini.SongMenu) in [smChessboard, smMosaic]) then + if (TSongMenuMode(Ini.SongMenu) in [smChessboard, smMosaic, smSlotMachine]) then begin // chessboard change row SelectNextRow; @@ -579,12 +578,12 @@ procedure TScreenSong.ParseInputPrevVertical(PressedKey: cardinal; CharCode: UCS begin CloseMessage(); - if (FreeListMode) and not (TSongMenuMode(Ini.SongMenu) in [smList]) then + if (FreeListMode and not (TSongMenuMode(Ini.SongMenu) in [smList])) then begin //Only Change Cat when not in Playlist or Search Mode if (CatSongs.CatNumShow > -2) then begin - if (TSongMenuMode(Ini.SongMenu) <> smChessboard) and (TSongMenuMode(Ini.SongMenu) <> smMosaic) then + if (TSongMenuMode(Ini.SongMenu) <> smChessboard) and (TSongMenuMode(Ini.SongMenu) <> smMosaic) and (TSongMenuMode(Ini.SongMenu) <> smSlotMachine) then begin //Cat Change Hack if Ini.TabsAtStartup = 1 then @@ -624,16 +623,17 @@ procedure TScreenSong.ParseInputPrevVertical(PressedKey: cardinal; CharCode: UCS SetScrollRefresh; end; - ResetScrollList; + // ResetScrollList; end else begin - if (TSongMenuMode(Ini.SongMenu) in [smChessboard, smMosaic]) then + if (TSongMenuMode(Ini.SongMenu) in [smChessboard, smMosaic, smSlotMachine, smList]) then begin // chessboard change row SelectPrevRow; SetScrollRefresh; + end; end; end; @@ -678,6 +678,10 @@ function TScreenSong.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse //Jump to Artist/Titel if ((SDL_ModState and KMOD_LALT <> 0) and (FreeListMode)) then begin + if(PressedKey > 1114111) then + begin + Exit; + end; UpperLetter := UCS4UpperCase(PressedKey); if (PressedKey in ([SDLK_a..SDLK_z, SDLK_0..SDLK_9])) then @@ -731,6 +735,49 @@ function TScreenSong.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse end; end; + Exit; + end + else if (((PressedKey = SDLK_PAGEUP) or (PressedKey = SDLK_PAGEDOWN)) and (FreeListMode)) then + begin + I2 := Length(CatSongs.Song); + //get first letter of artist of currently selected song + UpperLetter := UCS4UpperCase(UTF8ToUCS4String(CatSongs.Song[(Interaction) mod I2].Artist)[0]); + if (PressedKey = SDLK_PAGEDOWN) then + begin + for I := 1 to High(CatSongs.Song) do + begin + if (CatSongs.Song[(I + Interaction) mod I2].Visible) then + begin + TempStr := CatSongs.Song[(I + Interaction) mod I2].Artist; + if (Length(TempStr) > 0) and + (UCS4UpperCase(UTF8ToUCS4String(TempStr)[0]) <> UpperLetter) then + begin + SkipTo(CatSongs.VisibleIndex((I + Interaction) mod I2), (I + Interaction) mod I2, VS); + AudioPlayback.PlaySound(SoundLib.Change); + SetScrollRefresh; + Exit; + end; + end; + end; + end + else if (PressedKey = SDLK_PAGEUP) then + begin + for I := High(CatSongs.Song) downto 1 do + begin + if (CatSongs.Song[(I + Interaction) mod I2].Visible) then + begin + TempStr := CatSongs.Song[(I + Interaction) mod I2].Artist; + if (Length(TempStr) > 0) and + (UCS4UpperCase(UTF8ToUCS4String(TempStr)[0]) <> UpperLetter) then + begin + SkipTo(CatSongs.VisibleIndex((I + Interaction) mod I2), (I + Interaction) mod I2, VS); + AudioPlayback.PlaySound(SoundLib.Change); + SetScrollRefresh; + Exit; + end; + end; + end; + end; Exit; end; @@ -751,8 +798,12 @@ function TScreenSong.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse Ord('K'): begin - //AudioPlayback.AddSoundEffect(); - //Exit; + UAudioPlaybackBase.ToggleVoiceRemoval(); + StopVideoPreview(); + StopMusicPreview(); + StartMusicPreview(); + StartVideoPreview(); + Exit; end; Ord('F'): @@ -859,23 +910,23 @@ function TScreenSong.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse Ord('S'): begin - if (SDL_ModState = KMOD_LSHIFT) and not MakeMedley and + if not (SDL_ModState = KMOD_LSHIFT) and (CatSongs.Song[Interaction].Medley.Source>=msTag) + and not MakeMedley and (Mode = smNormal) then + StartMedley(0, msTag) + else if not MakeMedley and (CatSongs.Song[Interaction].Medley.Source>=msCalculated) and (Mode = smNormal)then - StartMedley(0, msCalculated) - else if (CatSongs.Song[Interaction].Medley.Source>=msTag) and not MakeMedley and - (Mode = smNormal) then - StartMedley(0, msTag); + StartMedley(0, msCalculated); end; Ord('D'): begin - if (Mode = smNormal) and (SDL_ModState = KMOD_LSHIFT) and not MakeMedley and + if not (SDL_ModState = KMOD_LSHIFT) and (Mode = smNormal) and + (Length(getVisibleMedleyArr(msTag)) > 0) and not MakeMedley then + StartMedley(5, msTag) + else if (Mode = smNormal) and not MakeMedley and (length(getVisibleMedleyArr(msCalculated))>0) then - StartMedley(5, msCalculated) - else if (Mode = smNormal) and (Length(getVisibleMedleyArr(msTag)) > 0) - and not MakeMedley then - StartMedley(5, msTag); + StartMedley(5, msCalculated); end; Ord('R'): @@ -1006,7 +1057,7 @@ function TScreenSong.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse break; end; - if not(TSongMenuMode(Ini.SongMenu) in [smChessboard, smCarousel, smSlide, smList, smMosaic]) then + if not(TSongMenuMode(Ini.SongMenu) in [smChessboard, smCarousel, smSlide, smList, smMosaic, smSlotMachine]) then begin if (I <= 1) then Interaction := High(CatSongs.Song) @@ -1091,7 +1142,7 @@ function TScreenSong.ParseInput(PressedKey: cardinal; CharCode: UCS4Char; Presse CheckFadeTo(@ScreenMain,'MSG_END_PARTY'); end; - if (TSongMenuMode(Ini.SongMenu) in [smChessboard, smMosaic, smList]) then + if (TSongMenuMode(Ini.SongMenu) in [smChessboard, smMosaic, smList, smSlotMachine]) then SetScrollRefresh; end; @@ -1321,6 +1372,7 @@ function TScreenSong.ParseMouse(MouseButton: integer; BtnDown: boolean; X, Y: in case TSongMenuMode(Ini.SongMenu) of smChessboard: Result := ParseMouseChessboard(MouseButton, BtnDown, X, Y); smMosaic: Result := ParseMouseChessboard(MouseButton, BtnDown, X, Y); + smSlotMachine: Result := ParseMouseChessboard(MouseButton, BtnDown, X, Y); else Result := ParseMouseRoulette(MouseButton, BtnDown, X, Y); end; @@ -1340,12 +1392,12 @@ function TScreenSong.ParseMouseChessboard(MouseButton: integer; BtnDown: boolean if RightMbESC and (MouseButton = SDL_BUTTON_RIGHT) then Result:=ParseInput(SDLK_ESCAPE, 0, true) - {//song scrolling with mousewheel + //song scrolling with mousewheel else if (MouseButton = SDL_BUTTON_WHEELDOWN) then ParseInput(SDLK_DOWN, 0, true) else if (MouseButton = SDL_BUTTON_WHEELUP) then - ParseInput(SDLK_UP, 0, true)} + ParseInput(SDLK_UP, 0, true) else begin @@ -1404,12 +1456,12 @@ function TScreenSong.ParseMouseRoulette(MouseButton: integer; BtnDown: boolean; if RightMbESC and (MouseButton = SDL_BUTTON_RIGHT) then Result:=ParseInput(SDLK_ESCAPE, 0, true) - {//song scrolling with mousewheel + //song scrolling with mousewheel else if (MouseButton = SDL_BUTTON_WHEELDOWN) then ParseInput(SDLK_RIGHT, 0, true) else if (MouseButton = SDL_BUTTON_WHEELUP) then - ParseInput(SDLK_LEFT, 0, true)} + ParseInput(SDLK_LEFT, 0, true) //LMB anywhere starts else if (MouseButton = SDL_BUTTON_LEFT) then @@ -2231,7 +2283,7 @@ procedure TScreenSong.SetScroll; Text[TextNumber].Text := IntToStr(CatSongs.VisibleIndex(Interaction)+1) + '/' + IntToStr(VS) else if (Ini.TabsAtStartup = 1) then begin - Text[TextNumber].Text := IntToStr(CatSongs.Song[Interaction].CatNumber); + Text[TextNumber].Text := IntToStr(CatSongs.Song[Interaction].CatNumber)+ '/' + IntToStr(VS); if not Interaction = 0 then Text[TextNumber].Text := Text[TextNumber].Text + '/' + IntToStr(CatSongs.Song[Interaction - CatSongs.Song[Interaction].CatNumber].CatNumber); end else @@ -3638,14 +3690,16 @@ procedure TScreenSong.StartMusicPreview(); begin PreviewOpened := Interaction; - if Song.PreviewStart > 0 then + // preview start is either calculated (by finding the chorus) or pre-set, use it + if ((Song.PreviewStart > 0.0) or Song.HasPreview) and InRange(Song.PreviewStart, 0.0, AudioPlayback.Length) then PreviewPos := Song.PreviewStart else + begin // otherwise, fallback to simple preview calculation PreviewPos := AudioPlayback.Length / 4; + // fix for invalid music file lengths + if (PreviewPos > 120.0) then PreviewPos := 60.0; + end; - // fix for invalid music file lengths - if (PreviewPos > 120.0) then - PreviewPos := 60.0; AudioPlayback.Position := PreviewPos; // set preview volume diff --git a/src/screens/UScreenSongJumpto.pas b/src/screens/UScreenSongJumpto.pas index 69789ec8..e9514dd1 100644 --- a/src/screens/UScreenSongJumpto.pas +++ b/src/screens/UScreenSongJumpto.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: svn://basisbit@svn.code.sf.net/p/ultrastardx/svn/trunk/src/screens/UScreenSongJumpto.pas $ - * $Id: UScreenSongJumpto.pas 2199 2010-03-14 20:56:20Z brunzelchen $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenSongJumpto; interface diff --git a/src/screens/UScreenSongMenu.pas b/src/screens/UScreenSongMenu.pas index 91beecfb..68675125 100644 --- a/src/screens/UScreenSongMenu.pas +++ b/src/screens/UScreenSongMenu.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenSongMenu.pas $ - * $Id: UScreenSongMenu.pas 2071 2010-01-12 17:42:41Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenSongMenu; interface @@ -703,7 +701,7 @@ procedure TScreenSongMenu.MenuShow(sMenu: byte); Button[2].Visible := true; Button[2].Text[0].Text := Language.Translate('SONG_MENU_REFRESH_SCORES_NO_WEB'); Button[2].Selectable := false; - Button[3].Text[0].Text := Theme.Options.Description[9]; + Button[3].Text[0].Text := Theme.Options.Description[OPTIONS_DESC_INDEX_NETWORK]; Interaction := 7; end; end; diff --git a/src/screens/UScreenStatDetail.pas b/src/screens/UScreenStatDetail.pas index 631e5a80..03cc3c19 100644 --- a/src/screens/UScreenStatDetail.pas +++ b/src/screens/UScreenStatDetail.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenStatDetail.pas $ - * $Id: UScreenStatDetail.pas 1972 2009-12-06 12:13:34Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenStatDetail; interface @@ -173,7 +171,7 @@ constructor TScreenStatDetail.Create; AddButton(Theme.StatDetail.ButtonExit); if (Length(Button[3].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[9]); + AddButtonText(14, 20, Theme.Options.Description[OPTIONS_DESC_INDEX_NETWORK]); Interaction := 0; Typ := TStatType(0); diff --git a/src/screens/UScreenStatMain.pas b/src/screens/UScreenStatMain.pas index f430a267..46b2a1ff 100644 --- a/src/screens/UScreenStatMain.pas +++ b/src/screens/UScreenStatMain.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenStatMain.pas $ - * $Id: UScreenStatMain.pas 1939 2009-11-09 00:27:55Z s_alexander $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenStatMain; interface @@ -159,7 +157,7 @@ constructor TScreenStatMain.Create; AddButton(Theme.StatMain.ButtonExit); if (Length(Button[4].Text)=0) then - AddButtonText(14, 20, Theme.Options.Description[4]); + AddButtonText(14, 20, Theme.Options.Description[OPTIONS_DESC_INDEX_BACK]); Interaction := 0; diff --git a/src/screens/UScreenTop5.pas b/src/screens/UScreenTop5.pas index 0be5db0d..fe231e46 100644 --- a/src/screens/UScreenTop5.pas +++ b/src/screens/UScreenTop5.pas @@ -1,28 +1,26 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - * $URL: https://ultrastardx.svn.sourceforge.net/svnroot/ultrastardx/trunk/src/screens/UScreenTop5.pas $ - * $Id: UScreenTop5.pas 2548 2010-06-18 11:00:21Z whiteshark0 $ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. *} + unit UScreenTop5; interface diff --git a/src/screens/controllers/UScreenSingController.pas b/src/screens/controllers/UScreenSingController.pas new file mode 100644 index 00000000..28717c84 --- /dev/null +++ b/src/screens/controllers/UScreenSingController.pas @@ -0,0 +1,1905 @@ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} + +unit UScreenSingController; + +interface + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{$I switches.inc} + +uses + SysUtils, + sdl2, + dglOpenGL, + TextGL, + UAvatars, + UCommon, + UFiles, + UGraphicClasses, + UHookableEvent, + UScreenSingView, + UIni, + ULog, + ULyrics, + UMenu, + UMusic, + UPath, + USingScores, + USongs, + UTexture, + UThemes, + UTime, + USkins; + +type + TPos = record // Lines[part].Line[line].Note[note] + part: integer; + line: integer; + note: integer; + CP: integer; + end; + + TLyricsSyncSource = class(TSyncSource) + function GetClock(): real; override; + end; + + TMusicSyncSource = class(TSyncSource) + function GetClock(): real; override; + end; + + TTimebarMode = ( + tbmCurrent, // current song position + tbmRemaining, // remaining time + tbmTotal // total time + ); + +type + TScreenSingController = class(TMenu) + private + + StartNote, EndNote: TPos; + + procedure LoadNextSong(); + + procedure SongError(); + public + eSongLoaded: THookableEvent; //< event is called after lyrics of a song are loaded on OnShow + Paused: boolean; //pause Mod + NumEmptySentences: array [0..1] of integer; + // views + fShowVisualization: boolean; + fShowBackground: boolean; + + fCurrentVideo: IVideo; + fVideoClip: IVideo; + fLyricsSync: TLyricsSyncSource; + fMusicSync: TMusicSyncSource; + fTimebarMode: TTimebarMode; + + PlayMidi: boolean; + + removeVoice: boolean; + fShowWebcam: boolean; + + Act_Level: integer; + Act_MD5Song: string; + + MedleyStart, MedleyEnd: real; + + Lyrics: TLyricEngine; + LyricsDuetP1: TLyricEngine; + LyricsDuetP2: TLyricEngine; + + // score manager: + Scores: TSingScores; + + //the song was sung to the end + SungToEnd: boolean; + + //use pause + SungPaused: boolean; + + // some settings to be set by plugins + Settings: record + Finish: Boolean; //< if true, screen will finish on next draw + + LyricsVisible: Boolean; //< shows or hides lyrics + NotesVisible: Integer; //< if bit[playernum] is set the notes for the specified player are visible. By default all players notes are visible + + PlayerEnabled: Integer; //< defines whether a player can score atm + + SoundEnabled: Boolean; //< mute or unmute sound + end; + + // MIDI + ChannelOff : integer; + + MidiFadeIn: boolean; + MidiFadeOut: boolean; + FadeTime: cardinal; + + InfoMessageBG: cardinal; + InfoMessageText: cardinal; + + MessageTime: cardinal; + MessageTimeFade: cardinal; + + TextMedleyFadeOut: boolean; + TextMedleyFadeTime: cardinal; + + // names + PlayerNames: array [1..IMaxPlayerCount] of UTF8String; + PlayerDuetNames:array [1..IMaxPlayerCount] of UTF8String; + + Tex_Background: TTexture; + FadeOut: boolean; + + procedure ClearSettings; + procedure ApplySettings; //< applies changes of settings record + procedure EndSong; + + constructor Create; override; + procedure OnShow; override; + procedure OnShowFinish; override; + procedure OnHide; override; + function Draw: boolean; override; + + function ParseInput(PressedKey: cardinal; CharCode: UCS4Char; + PressedDown: boolean): boolean; override; + + function FinishedMusic: boolean; + + procedure AutoSendScore; + procedure AutoSaveScore; + + procedure Finish; virtual; + procedure Pause; // toggle pause + procedure UpdateMedleyStats(medley_end: boolean); + procedure OnSentenceEnd(CP: integer; SentenceIndex: cardinal); // for linebonus + singbar + procedure OnSentenceChange(CP: integer; SentenceIndex: cardinal); // for golden notes + end; + +var screenSingViewRef: TScreenSingView; + TotalTime: real; + +implementation + +uses + Classes, + Math, + UDatabase, + UDllManager, + UDraw, + UGraphic, + ULanguage, + UNote, + URecord, + USong, + UDisplay, + UParty, + UPathUtils, + UUnicodeUtils, + UWebcam, + UWebSDK; + +const + MAX_MESSAGE = 3; + +// method for input parsing. if false is returned, getnextwindow +// should be checked to know the next window to load; + +function TScreenSingController.ParseInput(PressedKey: Cardinal; CharCode: UCS4Char; + PressedDown: boolean): boolean; +var + SDL_ModState: word; + i1: integer; + Color: TRGB; +begin + Result := true; + if (PressedDown) then + begin // key down + + SDL_ModState := SDL_GetModState and (KMOD_LSHIFT + KMOD_RSHIFT + + KMOD_LCTRL + KMOD_RCTRL + KMOD_LALT + KMOD_RALT); + + + // check normal keys + case UCS4UpperCase(CharCode) of + Ord('Q'): + begin + // when not ask before exit then finish now + if (Ini.AskbeforeDel <> 1) then + Finish + // else just pause and let the popup make the work + else if not Paused then + Pause; + + Result := false; + Exit; + end; + + //Restart and pause song + Ord('R'): + begin + if ScreenSong.Mode = smMedley then Exit; + for i1 := 0 to High(Player) do + with Player[i1] do + begin + Score := 0; + ScoreLine := 0; + ScoreGolden := 0; + + ScoreInt := 0; + ScoreLineInt := 0; + ScoreGoldenInt := 0; + ScoreTotalInt := 0; + + ScoreLast := 0; + + LastSentencePerfect := false; + end; + AudioPlayback.SetPosition(CurrentSong.Start); + if (Assigned(fCurrentVideo)) then + fCurrentVideo.Position := CurrentSong.VideoGAP + CurrentSong.Start;// + (CurrentSong.gap / 1000.0 - 5.0); + Scores.KillAllPopUps; + // setup score manager + Scores.ClearPlayers; // clear old player values + Color.R := 0; + Color.G := 0; + Color.B := 0; + + // add new players + for i1 := 0 to PlayersPlay - 1 do + begin + Scores.AddPlayer(Tex_ScoreBG[i1], Color); + end; + LyricsState.SetCurrentTime(CurrentSong.Start); + Scores.Init; + Exit; + end; + + // show visualization + Ord('V'): + begin + if fShowWebcam then + begin + Webcam.Release; + fShowWebCam:=false; + end; + if ((fShowBackground = true) and (Ini.VideoEnabled = 1) and CurrentSong.Video.IsSet()) + or (fShowVisualization and not CurrentSong.Background.IsSet()) then //switch to video + begin + Log.LogStatus('decided to switch to video', 'UScreenSing.ParseInput'); + fShowBackground := false; + fCurrentVideo := nil; + fShowVisualization := false; + fCurrentVideo := fVideoClip; + if (Assigned(fCurrentVideo)) then + fCurrentVideo.Position := CurrentSong.VideoGAP + CurrentSong.Start + AudioPlayback.Position; + Log.LogStatus('finished switching to video', 'UScreenSing.ParseInput'); + end + else + begin + if fShowVisualization and CurrentSong.Background.IsSet() then + begin //switch to Background only + Log.LogStatus('decided to switch to background', 'UScreenSing.ParseInput'); + fShowBackground := true; + fCurrentVideo := nil; + fShowVisualization := false; + Log.LogStatus('finished switching to background', 'UScreenSing.ParseInput'); + end + else + begin //Video is currently visible, change to visualization + Log.LogStatus('decided to switch to visualization', 'UScreenSing.ParseInput'); + fShowVisualization := true; + fCurrentVideo := Visualization.Open(PATH_NONE); + fCurrentVideo.play; + Log.LogStatus('finished switching to visualization', 'UScreenSing.ParseInput'); + end; + end; + Exit; + end; + + // show Webcam + Ord('W'): + begin + if (fShowWebCam = false) then + begin + fCurrentVideo := nil; + fShowVisualization := false; + fShowBackground := false; + Webcam.Restart; + if (Webcam.Capture = nil) then + begin + fShowWebCam := false; + fShowBackground := true; + ScreenPopupError.ShowPopup(Language.Translate('SING_OPTIONS_WEBCAM_NO_WEBCAM')) + end + else + fShowWebCam := true; + // ChangeEffectLastTick := SDL_GetTicks; + // SelectsS[WebcamParamsSlide].Visible := true; + // LastTickFrame := SDL_GetTicks; + end + else + begin + Webcam.Release; + fShowWebCam:=false; + end; + + Exit; + end; + + // pause + Ord('P'): + begin + Pause; + Exit; + end; + + // toggle time display + Ord('T'): + begin + if (fTimebarMode = High(TTimebarMode)) then + fTimebarMode := Low(TTimebarMode) + else + Inc(fTimebarMode); + + Ini.SingTimebarMode := Ord(fTimebarMode); + Ini.SaveSingTimebarMode; + Exit; + end; + + // skip intro + Ord('S'): + begin + if (AudioPlayback.Position < CurrentSong.gap / 1000 - 6) then + begin + AudioPlayback.SetPosition(CurrentSong.gap / 1000.0 - 5.0); + if (Assigned(fCurrentVideo)) then + fCurrentVideo.Position := CurrentSong.VideoGAP + CurrentSong.Start + (CurrentSong.gap / 1000.0 - 5.0); + end; + Exit; + end; + end; + + // check special keys + case PressedKey of + SDLK_ESCAPE, + SDLK_BACKSPACE: + begin + // record sound hack: + //Sound[0].BufferLong + if ScreenSong.Mode = smMedley then + PlaylistMedley.NumMedleySongs := PlaylistMedley.CurrentMedleySong; + + Finish; + FadeOut := true; + AudioPlayback.PlaySound(SoundLib.Back); + end; + + SDLK_SPACE: + begin + Pause; + end; + + SDLK_TAB: // change visualization preset + begin + if fShowVisualization then + fCurrentVideo.Position := now; // move to a random position + + if (fShowWebcam) then + begin + if (Ini.WebCamEffect < 10) then + Ini.WebCamEffect := Ini.WebCamEffect + 1 + else + Ini.WebCamEffect := 0; + end; + end; + end; + end; +end; + +procedure TScreenSingController.Pause; +begin + if (not Paused) then // enable pause + begin + // pause time + Paused := true; + + LyricsState.Pause(); + + // pause music + AudioPlayback.Pause; + + // pause video + if (fCurrentVideo <> nil) then + fCurrentVideo.Pause; + + end + else // disable pause + begin + LyricsState.Start(); + + // play music + AudioPlayback.Play; + + // video + if (fCurrentVideo <> nil) then + fCurrentVideo.Pause; + + Paused := false; + end; +end; + +constructor TScreenSingController.Create; +var + Col: array [1..6] of TRGB; + I: integer; + Color: cardinal; +begin + inherited Create; + ScreenSing := self; + screenSingViewRef := TScreenSingView.Create(); + + ClearSettings; +end; + +procedure TScreenSingController.OnShow; +var + V1: boolean; + V1TwoP: boolean; // position of score box in two player mode + V1ThreeP: boolean; // position of score box in three player mode + V2R: boolean; + V2M: boolean; + V3R: boolean; + VDuet1ThreeP: boolean; + VDuet2M: boolean; + VDuet3R: boolean; + V1FourP: boolean; + V2FourP: boolean; + V3FourP: boolean; + V4FourP: boolean; + V1SixP: boolean; + V2SixP: boolean; + V3SixP: boolean; + V4SixP: boolean; + V5SixP: boolean; + V6SixP: boolean; + V1DuetFourP: boolean; + V2DuetFourP: boolean; + V3DuetFourP: boolean; + V4DuetFourP: boolean; + V1DuetSixP: boolean; + V2DuetSixP: boolean; + V3DuetSixP: boolean; + V4DuetSixP: boolean; + V5DuetSixP: boolean; + V6DuetSixP: boolean; + BadPlayer: integer; + Col, ColP1, ColP2: TRGB; + I: integer; +begin + inherited; + + Log.LogStatus('Begin', 'OnShow'); + + FadeOut := false; + + screenSingViewRef.CloseMessage(); + + //the song was sung to the end + SungToEnd := false; + SungPaused := false; + + ClearSettings; + Party.CallBeforeSing; + + // prepare players + SetLength(Player, PlayersPlay); + + //Reset Player Medley stats + if (ScreenSong.Mode = smMedley) then + begin + PlaylistMedley.CurrentMedleySong:=1; + + PlaylistMedley.NumPlayer := PlayersPlay; + SetLength(PlaylistMedley.Stats, 0); + end; + + fTimebarMode := TTimebarMode(Ini.SingTimebarMode); + + if (ScreenSong.Mode = smMedley) then + CatSongs.Selected := PlaylistMedley.Song[PlaylistMedley.CurrentMedleySong-1]; + + CurrentSong := CatSongs.Song[CatSongs.Selected]; + + for I := 0 to High(screenSingViewRef.StaticDuet) do + Statics[screenSingViewRef.StaticDuet[I]].Visible := CurrentSong.isDuet and (PlayersPlay > 1); + + Statics[screenSingViewRef.SongNameStatic].Visible := false; + Text[screenSingViewRef.SongNameText].Visible := false; + + V1 := false; + V1TwoP := false; + V1ThreeP := false; + V2R := false; + V2M := false; + V3R := false; + + VDuet1ThreeP := false; + VDuet2M := false; + VDuet3R := false; + + V1FourP := false; + V2FourP := false; + V3FourP := false; + V4FourP := false; + + V1SixP := false; + V2SixP := false; + V3SixP := false; + V4SixP := false; + V5SixP := false; + V6SixP := false; + + V1DuetFourP := false; + V2DuetFourP := false; + V3DuetFourP := false; + V4DuetFourP := false; + + V1DuetSixP := false; + V2DuetSixP := false; + V3DuetSixP := false; + V4DuetSixP := false; + V5DuetSixP := false; + V6DuetSixP := false; + + case PlayersPlay of + 1: + begin + V1 := true; + end; + 2: + begin + V1TwoP := true; + V2R := true; + end; + 3: + begin + if (CurrentSong.isDuet) then + begin + VDuet1ThreeP := true; + VDuet2M := true; + VDuet3R := true; + end + else + begin + V1ThreeP := true; + V2M := true; + V3R := true; + end; + end; + 4: + begin // double screen + if (Ini.Screens = 1) then + begin + V1TwoP := true; + V2R := true; + end + else + begin + if (CurrentSong.isDuet) then + begin + V1DuetFourP := true; + V2DuetFourP := true; + V3DuetFourP := true; + V4DuetFourP := true; + end + else + begin + V1FourP := true; + V2FourP := true; + V3FourP := true; + V4FourP := true; + end; + end; + end; + 6: + begin // double screen + if (Ini.Screens = 1) then + begin + if (CurrentSong.isDuet) then + begin + VDuet1ThreeP := true; + VDuet2M := true; + VDuet3R := true; + end + else + begin + V1ThreeP := true; + V2M := true; + V3R := true; + end; + end + else + begin + if (CurrentSong.isDuet) then + begin + V1DuetSixP := true; + V2DuetSixP := true; + V3DuetSixP := true; + V4DuetSixP := true; + V5DuetSixP := true; + V6DuetSixP := true; + end + else + begin + V1SixP := true; + V2SixP := true; + V3SixP := true; + V4SixP := true; + V5SixP := true; + V6SixP := true; + end; + end; + end; + end; + + Text[screenSingViewRef.TextP1].Visible := V1; + Text[screenSingViewRef.TextP1TwoP].Visible := V1TwoP; + Text[screenSingViewRef.TextP2R].Visible := V2R; + Text[screenSingViewRef.TextP1ThreeP].Visible := V1ThreeP; + Text[screenSingViewRef.TextP2M].Visible := V2M; + Text[screenSingViewRef.TextP3R].Visible := V3R; + Text[screenSingViewRef.TextDuetP1ThreeP].Visible := VDuet1ThreeP; + Text[screenSingViewRef.TextDuetP2M].Visible := VDuet2M; + Text[screenSingViewRef.TextDuetP3R].Visible := VDuet3R; + Text[screenSingViewRef.TextP1FourP].Visible := V1FourP; + Text[screenSingViewRef.TextP2FourP].Visible := V2FourP; + Text[screenSingViewRef.TextP3FourP].Visible := V3FourP; + Text[screenSingViewRef.TextP4FourP].Visible := V4FourP; + Text[screenSingViewRef.TextP1SixP].Visible := V1SixP; + Text[screenSingViewRef.TextP2SixP].Visible := V2SixP; + Text[screenSingViewRef.TextP3SixP].Visible := V3SixP; + Text[screenSingViewRef.TextP4SixP].Visible := V4SixP; + Text[screenSingViewRef.TextP5SixP].Visible := V5SixP; + Text[screenSingViewRef.TextP6SixP].Visible := V6SixP; + Text[screenSingViewRef.TextP1DuetFourP].Visible := V1DuetFourP; + Text[screenSingViewRef.TextP2DuetFourP].Visible := V2DuetFourP; + Text[screenSingViewRef.TextP3DuetFourP].Visible := V3DuetFourP; + Text[screenSingViewRef.TextP4DuetFourP].Visible := V4DuetFourP; + Text[screenSingViewRef.TextP1DuetSixP].Visible := V1DuetSixP; + Text[screenSingViewRef.TextP2DuetSixP].Visible := V2DuetSixP; + Text[screenSingViewRef.TextP3DuetSixP].Visible := V3DuetSixP; + Text[screenSingViewRef.TextP4DuetSixP].Visible := V4DuetSixP; + Text[screenSingViewRef.TextP5DuetSixP].Visible := V5DuetSixP; + Text[screenSingViewRef.TextP6DuetSixP].Visible := V6DuetSixP; + + BadPlayer := AudioInputProcessor.CheckPlayersConfig(PlayersPlay); + if (BadPlayer <> 0) then + begin + ScreenPopupError.ShowPopup( + Format(Language.Translate('ERROR_PLAYER_NO_DEVICE_ASSIGNMENT'), + [BadPlayer])); + end; + + if (CurrentSong.isDuet) then + begin + if (PlayersPlay = 4) then + begin + screenSingViewRef.ColPlayer[0] := GetPlayerColor(Ini.PlayerColor[0]); + screenSingViewRef.ColPlayer[1] := GetPlayerColor(Ini.PlayerColor[1]); + screenSingViewRef.ColPlayer[2] := GetPlayerColor(Ini.PlayerColor[2]); + screenSingViewRef.ColPlayer[3] := GetPlayerColor(Ini.PlayerColor[3]); + end; + end; + + // set custom options + if (CurrentSong.isDuet) and (PlayersPlay <> 1) then + begin + ColP1 := GetPlayerColor(Ini.PlayerColor[0]); + ColP2 := GetPlayerColor(Ini.PlayerColor[1]); + + // set custom options + case Ini.LyricsFont of + 0: // normal fonts + begin + LyricsDuetP1.FontStyle := ftNormal; + LyricsDuetP2.FontStyle := ftNormal; + + LyricsDuetP1.LineColor_en.R := Skin_FontR; + LyricsDuetP1.LineColor_en.G := Skin_FontG; + LyricsDuetP1.LineColor_en.B := Skin_FontB; + LyricsDuetP1.LineColor_en.A := 1; + + LyricsDuetP2.LineColor_en.R := Skin_FontR; + LyricsDuetP2.LineColor_en.G := Skin_FontG; + LyricsDuetP2.LineColor_en.B := Skin_FontB; + LyricsDuetP2.LineColor_en.A := 1; + + LyricsDuetP1.LineColor_dis.R := 0.2; + LyricsDuetP1.LineColor_dis.G := 0.2; + LyricsDuetP1.LineColor_dis.B := 0.2; + LyricsDuetP1.LineColor_dis.A := 1; + + LyricsDuetP2.LineColor_dis.R := 0.2; + LyricsDuetP2.LineColor_dis.G := 0.2; + LyricsDuetP2.LineColor_dis.B := 0.2; + LyricsDuetP2.LineColor_dis.A := 1; + + LyricsDuetP1.LineColor_act.R := ColP1.R; //0.02; + LyricsDuetP1.LineColor_act.G := ColP1.G; //0.6; + LyricsDuetP1.LineColor_act.B := ColP1.B; //0.8; + LyricsDuetP1.LineColor_act.A := 1; + + LyricsDuetP2.LineColor_act.R := ColP2.R; //0.02; + LyricsDuetP2.LineColor_act.G := ColP2.G; //0.6; + LyricsDuetP2.LineColor_act.B := ColP2.B; //0.8; + LyricsDuetP2.LineColor_act.A := 1; + + end; + 1, 2: // outline fonts + begin + if (Ini.LyricsFont = 1) then + begin + LyricsDuetP1.FontStyle := ftOutline1; + LyricsDuetP2.FontStyle := ftOutline1; + end + else + begin + LyricsDuetP1.FontStyle := ftOutline2; + LyricsDuetP2.FontStyle := ftOutline2; + end; + + LyricsDuetP1.LineColor_en.R := 0.7; + LyricsDuetP1.LineColor_en.G := 0.7; + LyricsDuetP1.LineColor_en.B := 0.7; + LyricsDuetP1.LineColor_en.A := 1; + + LyricsDuetP2.LineColor_en.R := 0.7; + LyricsDuetP2.LineColor_en.G := 0.7; + LyricsDuetP2.LineColor_en.B := 0.7; + LyricsDuetP2.LineColor_en.A := 1; + + LyricsDuetP1.LineColor_dis.R := 0.8; + LyricsDuetP1.LineColor_dis.G := 0.8; + LyricsDuetP1.LineColor_dis.B := 0.8; + LyricsDuetP1.LineColor_dis.A := 1; + + LyricsDuetP2.LineColor_dis.R := 0.8; + LyricsDuetP2.LineColor_dis.G := 0.8; + LyricsDuetP2.LineColor_dis.B := 0.8; + LyricsDuetP2.LineColor_dis.A := 1; + + LyricsDuetP1.LineColor_act.R := ColP1.R; //0.5; + LyricsDuetP1.LineColor_act.G := ColP1.G; //0.5; + LyricsDuetP1.LineColor_act.B := ColP1.B; //1; + LyricsDuetP1.LineColor_act.A := 1; + + LyricsDuetP2.LineColor_act.R := ColP2.R; //0.5; + LyricsDuetP2.LineColor_act.G := ColP2.G; //0.5; + LyricsDuetP2.LineColor_act.B := ColP2.B; //1; + LyricsDuetP2.LineColor_act.A := 1; + end; + end; // case + + end + else + begin + + case Ini.LyricsFont of + 0: // normal fonts + begin + Lyrics.FontStyle := ftNormal; + + Lyrics.LineColor_en.R := Skin_FontR; + Lyrics.LineColor_en.G := Skin_FontG; + Lyrics.LineColor_en.B := Skin_FontB; + Lyrics.LineColor_en.A := 1; + + Lyrics.LineColor_dis.R := 0.2; + Lyrics.LineColor_dis.G := 0.2; + Lyrics.LineColor_dis.B := 0.2; + Lyrics.LineColor_dis.A := 1; + + if (Ini.JukeboxSingLineColor = High(UIni.ISingLineColor)) then + Col := GetJukeboxLyricOtherColor(0) + else + Col := GetLyricColor(Ini.JukeboxSingLineColor); + + Lyrics.LineColor_act.R := Col.R; //0.02; + Lyrics.LineColor_act.G := Col.G; //0.6; + Lyrics.LineColor_act.B := Col.B; //0.8; + Lyrics.LineColor_act.A := 1; + end; + 1, 2: // outline fonts + begin + if (Ini.LyricsFont = 1) then + Lyrics.FontStyle := ftOutline1 + else + Lyrics.FontStyle := ftOutline2; + + if (Ini.JukeboxSingLineColor = High(UIni.ISingLineColor)) then + Col := GetJukeboxLyricOtherColor(0) + else + Col := GetLyricColor(Ini.JukeboxSingLineColor); + Lyrics.LineColor_act.R := Col.R; + Lyrics.LineColor_act.G := Col.G; + Lyrics.LineColor_act.B := Col.B; + Lyrics.LineColor_act.A := 1; + + if (Ini.JukeboxActualLineColor = High(UIni.IActualLineColor)) then + Col := GetJukeboxLyricOtherColor(1) + else + Col := GetLyricGrayColor(Ini.JukeboxActualLineColor); + Lyrics.LineColor_en.R := Col.R; + Lyrics.LineColor_en.G := Col.G; + Lyrics.LineColor_en.B := Col.B; + Lyrics.LineColor_en.A := 1; + + if (Ini.JukeboxNextLineColor = High(UIni.INextLineColor)) then + Col := GetJukeboxLyricOtherColor(2) + else + Col := GetLyricGrayColor(Ini.JukeboxNextLineColor); + Lyrics.LineColor_dis.R := Col.R; + Lyrics.LineColor_dis.G := Col.G; + Lyrics.LineColor_dis.B := Col.B; + Lyrics.LineColor_dis.A := 1; + end; + end; // case + end; + + // deactivate pause + Paused := false; + + LoadNextSong(); + + Log.LogStatus('End', 'OnShow'); +end; + +procedure TScreenSingController.onShowFinish; +var + I, Index: integer; +begin + // hide cursor on singscreen show + Display.SetCursor; + + // clear the scores of all players + for Index := 0 to High(Player) do + with Player[Index] do + begin + Score := 0; + ScoreLine := 0; + ScoreGolden := 0; + + ScoreInt := 0; + ScoreLineInt := 0; + ScoreGoldenInt := 0; + ScoreTotalInt := 0; + + ScoreLast := 0; + + LastSentencePerfect := false; + end; + + // prepare music + // Important: AudioPlayback must not be initialized in onShow() as TScreenSong + // uses stops AudioPlayback in onHide() which interferes with TScreenSings onShow. + PlayMidi := false; + MidiFadeIn := false; + + AudioPlayback.Open(CurrentSong.Path.Append(CurrentSong.Mp3)); + if ScreenSong.Mode = smMedley then + AudioPlayback.SetVolume(0.1) + else + AudioPlayback.SetVolume(1.0); + //AudioPlayback.Position := CurrentSong.Start; + AudioPlayback.Position := LyricsState.GetCurrentTime(); + + + // set time + if (CurrentSong.Finish > 0) then + LyricsState.TotalTime := CurrentSong.Finish / 1000 + else + begin + LyricsState.TotalTime := AudioPlayback.Length; + end; + + LyricsState.UpdateBeats(); + + // synchronize music + if Ini.SyncTo = Ord(stLyrics) then + AudioPlayback.SetSyncSource(fLyricsSync) + else + AudioPlayback.SetSyncSource(nil); + + // synchronize lyrics (do not set this before AudioPlayback is initialized) + if Ini.SyncTo = Ord(stMusic) then + LyricsState.SetSyncSource(fMusicSync) + else + LyricsState.SetSyncSource(nil); + + // start lyrics + LyricsState.Start(true); + + // start music + if ScreenSong.Mode = smMedley then + AudioPlayback.FadeIn(CurrentSong.Medley.FadeIn_time, 1.0) + else + AudioPlayback.Play(); + + // Send Score + Act_MD5Song := CurrentSong.MD5; + Act_Level := Ini.PlayerLevel[0]; + + // start timer + CountSkipTimeSet; + +end; + +procedure TScreenSingController.SongError(); +var + I, len: integer; + +begin + if ScreenSong.Mode <> smMedley then + begin + // error loading song -> go back to previous screen and show some error message + Display.AbortScreenChange; + + // select new song in party mode + if ScreenSong.Mode = smPartyClassic then + ScreenSong.SelectRandomSong(); + + if (Length(CurrentSong.LastError) > 0) then + ScreenPopupError.ShowPopup(Format(Language.Translate(CurrentSong.LastError), [CurrentSong.ErrorLineNo])) + else + ScreenPopupError.ShowPopup(Language.Translate('ERROR_CORRUPT_SONG')); + // FIXME: do we need this? + CurrentSong.Path := CatSongs.Song[CatSongs.Selected].Path; + Exit; + end + else + begin + if (PlaylistMedley.CurrentMedleySong<PlaylistMedley.NumMedleySongs) then + begin + //Error Loading Song in Medley Mode -> skip actual Medley Song an go on if possible + len := Length(PlaylistMedley.Song); + for I := PlaylistMedley.CurrentMedleySong-1 to len - 1 do + PlaylistMedley.Song[I] := PlaylistMedley.Song[I+1]; + + SetLength(PlaylistMedley.Song, Len-1); + Dec(PlaylistMedley.NumMedleySongs); + LoadNextSong; + Exit; + end + else + begin + if (PlaylistMedley.NumMedleySongs=1) then + begin + //Error Loading Song in Medley Mode -> Go back to Song Screen and Show some Error Message + Display.AbortScreenChange; + + // select new song in party mode + if ScreenSong.Mode = smPartyClassic then + ScreenSong.SelectRandomSong(); + + if (Length(CurrentSong.LastError) > 0) then + ScreenPopupError.ShowPopup(Format(Language.Translate(CurrentSong.LastError), [CurrentSong.ErrorLineNo])) + else + ScreenPopupError.ShowPopup(Language.Translate('ERROR_CORRUPT_SONG')); + + // FIXME: do we need this? + CurrentSong.Path := CatSongs.Song[CatSongs.Selected].Path; + Exit; + end + else + begin + //Error Loading Song in Medley Mode -> Finish actual round + len := Length(PlaylistMedley.Song); + SetLength(PlaylistMedley.Song, len-1); + Dec(PlaylistMedley.NumMedleySongs); + Finish; + Exit; + end; + end; + end; +end; + +procedure TScreenSingController.LoadNextSong(); +var + Color: TRGB; + Index: integer; + VideoFile: IPath; + BgFile: IPath; + success: boolean; + + function FindNote(beat: integer): TPos; + var + line: integer; + note: integer; + found: boolean; + min: integer; + diff: integer; + + begin + found := false; + + for line := 0 to length(Lines[0].Line) - 1 do + begin + for note := 0 to length(Lines[0].Line[line].Note) - 1 do + begin + if (beat >= Lines[0].Line[line].Note[note].Start) and + (beat <= Lines[0].Line[line].Note[note].Start + Lines[0].Line[line].Note[note].Length) then + begin + Result.part := 0; + Result.line := line; + Result.note := note; + Result.CP := 0; + found:=true; + break; + end; + end; + end; + + if found then //found exactly + exit; + + if CurrentSong.isDuet and (PlayersPlay <> 1) then + begin + for Line := 0 to length(Lines[1].Line) - 1 do + begin + for Note := 0 to length(Lines[1].Line[Line].Note) - 1 do + begin + if (beat>=Lines[1].Line[Line].Note[Note].Start) and + (beat<=Lines[1].Line[Line].Note[Note].Start + Lines[1].Line[Line].Note[Note].Length) then + begin + Result.CP := 1; + Result.line := Line; + Result.note := Note; + found:=true; + break; + end; + end; + end; + end; + + if found then //found exactly + exit; + + min := high(integer); + //second try (approximating) + for line := 0 to length(Lines[0].Line) - 1 do + begin + for note := 0 to length(Lines[0].Line[line].Note) - 1 do + begin + diff := abs(Lines[0].Line[line].Note[note].Start - beat); + if diff < min then + begin + Result.part := 0; + Result.line := line; + Result.note := note; + Result.CP := 0; + min := diff; + end; + end; + end; + + if CurrentSong.isDuet and (PlayersPlay <> 1) then + begin + for Line := 0 to length(Lines[1].Line) - 1 do + begin + for Note := 0 to length(Lines[1].Line[Line].Note) - 1 do + begin + diff := abs(Lines[1].Line[Line].Note[Note].Start - beat); + if diff<min then + begin + Result.CP := 1; + Result.line := Line; + Result.note := Note; + min := diff; + end; + end; + end; + end; + + end; + +begin + // background texture (garbage disposal) + if (Tex_Background.TexNum > 0) then + begin + glDeleteTextures(1, PGLuint(@Tex_Background.TexNum)); + Tex_Background.TexNum := 0; + end; + + // reset video playback engine + fCurrentVideo := nil; + + // setup score manager + Scores.ClearPlayers; // clear old player values + Color.R := 0; + Color.G := 0; + Color.B := 0; + + // add new players + for Index := 0 to PlayersPlay - 1 do + begin + Scores.AddPlayer(Tex_ScoreBG[Index], Color); + end; + + Scores.Init; // get positions for players + + // FIXME: sets path and filename to '' + ResetSingTemp; + + PlaylistMedley.ApplausePlayed := false; + + if ScreenSong.Mode = smMedley then + begin + if length(PlaylistMedley.Song) >= PlaylistMedley.CurrentMedleySong then + begin + CatSongs.Selected := PlaylistMedley.Song[PlaylistMedley.CurrentMedleySong-1]; + //Music.Open(CatSongs.Song[CatSongs.Selected].Path + CatSongs.Song[CatSongs.Selected].Mp3); + end + else + begin + SongError; + Exit; + end; + end; + + CurrentSong := CatSongs.Song[CatSongs.Selected]; + success := false; + // FIXME: bad style, put the try-except into loadsong() and not here + try + // check if file is xml + if CurrentSong.FileName.GetExtension.ToUTF8 = '.xml' then + success := CurrentSong.AnalyseXML and CurrentSong.LoadXMLSong() + else + success := CurrentSong.Analyse(false, ScreenSong.DuetChange); // and CurrentSong.LoadSong(); + except + on E: EInOutError do Log.LogWarn(E.Message, 'TScreenSing.LoadNextSong'); + end; + + if (not success) then + begin + SongError(); + Exit; + end; + + // Set up Medley timings + if ScreenSong.Mode = smMedley then + begin + CurrentSong.SetMedleyMode(); + + if (PlaylistMedley.NumMedleySongs > 1) then + Text[screenSingViewRef.SongNameText].Text := IntToStr(PlaylistMedley.CurrentMedleySong) + + '/' + IntToStr(PlaylistMedley.NumMedleySongs) + ': ' + + CurrentSong.Artist + ' - ' + CurrentSong.Title + else + Text[screenSingViewRef.SongNameText].Text := CurrentSong.Artist + ' - ' + CurrentSong.Title; + + //medley start and end timestamps + StartNote := FindNote(CurrentSong.Medley.StartBeat - round(CurrentSong.BPM[0].BPM*CurrentSong.Medley.FadeIn_time/60)); + MedleyStart := GetTimeFromBeat(Lines[0].Line[StartNote.line].Note[0].Start); + + //check Medley-Start + if (MedleyStart+CurrentSong.Medley.FadeIn_time*0.5>GetTimeFromBeat(CurrentSong.Medley.StartBeat)) then + MedleyStart := GetTimeFromBeat(CurrentSong.Medley.StartBeat) - CurrentSong.Medley.FadeIn_time; + if MedleyStart<0 then + MedleyStart := 0; + + MedleyEnd := GetTimeFromBeat(CurrentSong.Medley.EndBeat) + CurrentSong.Medley.FadeOut_time; + end; + + {* + * == Background == + * We have five types of backgrounds: + * + Blank : Nothing has been set, this is our fallback + * + Picture : Picture has been set, and exists - otherwise we fallback + * + Video : Video has been set, and exists - otherwise we fallback + * + Visualization: + Off : No visualization + * + WhenNoVideo : Overwrites blank and picture + * + WhenNoVideoAndImage : Overwrites blank + * + On : Overwrites blank, picture and video + *} + + {* + * set background to: video + * Note: ffmpeg / this is also used for many background formats" + *} + fShowVisualization := false; + VideoFile := CurrentSong.Path.Append(CurrentSong.Video); + if (Ini.VideoEnabled = 1) and CurrentSong.Video.IsSet() and VideoFile.IsFile then + begin + fVideoClip := VideoPlayback.Open(VideoFile); + fCurrentVideo := fVideoClip; + if (fVideoClip <> nil) then + begin + fShowVisualization := false; + if ScreenSong.Mode = smMedley then + fCurrentVideo.Position := CurrentSong.VideoGAP + MedleyStart + else + fCurrentVideo.Position := CurrentSong.VideoGAP + CurrentSong.Start; + fCurrentVideo.Play; + end; + end; + + {* + * set background to: picture + *} + if (CurrentSong.Background.IsSet) then + begin + BgFile := CurrentSong.Path.Append(CurrentSong.Background); + try + Tex_Background := Texture.LoadTexture(BgFile); + except + Log.LogError('Background could not be loaded: ' + BgFile.ToNative); + Tex_Background.TexNum := 0; + end + end + else + begin + Tex_Background.TexNum := 0; + end; + + {* + * set background to: visualization (Overwrites all) + *} + if (TVisualizerOption(Ini.VisualizerOption) in [voOn]) then + begin + fShowVisualization := true; + fCurrentVideo := Visualization.Open(PATH_NONE); + if (fCurrentVideo <> nil) then + fCurrentVideo.Play; + end + + {* + * set background to: visualization (if video and image is not set) + *} + else if (TVisualizerOption(Ini.VisualizerOption) in [voWhenNoVideoAndImage]) and + (not CurrentSong.Background.IsSet) and (fVideoClip = nil) then + begin + fShowVisualization := true; + fCurrentVideo := Visualization.Open(PATH_NONE); + if fCurrentVideo <> nil then + fCurrentVideo.Play; + end + + {* + * set background to: visualization (Videos are still shown) + *} + else if ((TVisualizerOption(Ini.VisualizerOption) in [voWhenNoVideo]) and + (fVideoClip = nil)) then + begin + fShowVisualization := true; + fCurrentVideo := Visualization.Open(PATH_NONE); + if fCurrentVideo <> nil then + fCurrentVideo.Play; + end; + + // prepare lyrics timer + LyricsState.Reset(); + + if ScreenSong.Mode = smMedley then + begin + LyricsState.SetCurrentTime(MedleyStart); + LyricsState.StartTime := CurrentSong.Gap; + LyricsState.TotalTime := MedleyEnd; + end + else + begin + LyricsState.SetCurrentTime(CurrentSong.Start); + LyricsState.StartTime := CurrentSong.Gap; + if CurrentSong.Finish > 0 then + LyricsState.TotalTime := CurrentSong.Finish / 1000 + else + LyricsState.TotalTime := AudioPlayback.Length; + end; + + LyricsState.UpdateBeats(); + + // prepare and start voice-capture + AudioInput.CaptureStart; + + // main text + Lyrics.Clear(CurrentSong.BPM[0].BPM, CurrentSong.Resolution); + LyricsDuetP1.Clear(CurrentSong.BPM[0].BPM, CurrentSong.Resolution); + LyricsDuetP2.Clear(CurrentSong.BPM[0].BPM, CurrentSong.Resolution); + + if (CurrentSong.isDuet) and (PlayersPlay <> 1) then + begin + // initialize lyrics by filling its queue + while (not LyricsDuetP1.IsQueueFull) and + (LyricsDuetP1.LineCounter <= High(Lines[0].Line)) do + begin + LyricsDuetP1.AddLine(@Lines[0].Line[LyricsDuetP1.LineCounter]); + end; + + // initialize lyrics by filling its queue + while (not LyricsDuetP2.IsQueueFull) and + (LyricsDuetP2.LineCounter <= High(Lines[1].Line)) do + begin + LyricsDuetP2.AddLine(@Lines[1].Line[LyricsDuetP2.LineCounter]); + end; + end + else + begin + // initialize lyrics by filling its queue + while (not Lyrics.IsQueueFull) and + (Lyrics.LineCounter <= High(Lines[0].Line)) do + begin + Lyrics.AddLine(@Lines[0].Line[Lyrics.LineCounter]); + end; + end; + + // kill all stars not killed yet (goldenstarstwinkle mod) + GoldenRec.SentenceChange(0); + if (CurrentSong.isDuet) and (PlayersPlay <> 1) then + GoldenRec.SentenceChange(1); + + // set position of line bonus - line bonus end + // set number of empty sentences for line bonus + NumEmptySentences[0] := 0; + NumEmptySentences[1] := 0; + + if (CurrentSong.isDuet) and (PlayersPlay <> 1) then + begin + for Index := Low(Lines[1].Line) to High(Lines[1].Line) do + if Lines[1].Line[Index].TotalNotes = 0 then + Inc(NumEmptySentences[1]); + + for Index := Low(Lines[0].Line) to High(Lines[0].Line) do + if Lines[0].Line[Index].TotalNotes = 0 then + Inc(NumEmptySentences[0]); + end + else + begin + for Index := Low(Lines[0].Line) to High(Lines[0].Line) do + if Lines[0].Line[Index].TotalNotes = 0 then + Inc(NumEmptySentences[0]); + end; + + eSongLoaded.CallHookChain(False); + + if (ScreenSong.Mode = smMedley) and (PlaylistMedley.CurrentMedleySong>1) then + onShowFinish; +end; + +procedure TScreenSingController.ClearSettings; +begin + Settings.Finish := False; + Settings.LyricsVisible := True; + Settings.NotesVisible := high(Integer); + Settings.PlayerEnabled := high(Integer); + Settings.SoundEnabled := True; +end; + +{ applies changes of settings record } +procedure TScreenSingController.ApplySettings; +begin + // +end; + +procedure TScreenSingController.EndSong; +begin + Settings.Finish := True; +end; + +procedure TScreenSingController.OnHide; +begin + // background texture + if Tex_Background.TexNum > 0 then + begin + glDeleteTextures(1, PGLuint(@Tex_Background.TexNum)); + Tex_Background.TexNum := 0; + end; + if fShowWebcam then + begin + Webcam.Release; + fShowWebCam:=false; + end; + Background.OnFinish; + Display.SetCursor; +end; + +function TScreenSingController.Draw: boolean; +begin + Result := screenSingViewRef.Draw(); +end; + +function TScreenSingController.FinishedMusic: boolean; +begin + Result := AudioPlayback.Finished; +end; + +procedure TScreenSingController.Finish; +var + I, J: integer; + len, num: integer; + +begin + AudioInput.CaptureStop; + AudioPlayback.Stop; + AudioPlayback.SetSyncSource(nil); + + if (ScreenSong.Mode = smNormal) and (SungPaused = false) and (SungToEnd) and (Length(DllMan.Websites) > 0) then + begin + AutoSendScore; + AutoSaveScore; + end; + + LyricsState.Stop(); + LyricsState.SetSyncSource(nil); + + // close video files + fVideoClip := nil; + fCurrentVideo := nil; + + // kill all stars and effects + GoldenRec.KillAll; + + if (Ini.SavePlayback = 1) then + begin + Log.BenchmarkStart(0); + Log.LogVoice(0); + if (PlayersPlay > 1) then + Log.LogVoice(1); + if (PlayersPlay > 2) then + Log.LogVoice(2); + Log.BenchmarkEnd(0); + Log.LogBenchmark('Creating files', 0); + end; + + SetFontItalic(false); + + if ScreenSong.Mode = smMedley then + begin + if not FadeOut then + begin + for I := 0 to PlayersPlay - 1 do + PlaylistMedley.Stats[Length(PlaylistMedley.Stats) - 1].Player[I] := Player[I]; + + Inc(PlaylistMedley.CurrentMedleySong); + if PlaylistMedley.CurrentMedleySong <= PlaylistMedley.NumMedleySongs then + begin + LoadNextSong; + end + else + begin + //build sums + len := Length(PlaylistMedley.Stats); + num := PlaylistMedley.NumPlayer; + + SetLength(PlaylistMedley.Stats, len + 1); + SetLength(PlaylistMedley.Stats[len].Player, num); + + for J := 0 to len - 1 do + begin + for I := 0 to num - 1 do + begin + PlaylistMedley.Stats[len].Player[I].Score := + PlaylistMedley.Stats[len].Player[I].Score + + PlaylistMedley.Stats[J].Player[I].Score; + + PlaylistMedley.Stats[len].Player[I].ScoreLine := + PlaylistMedley.Stats[len].Player[I].ScoreLine + + PlaylistMedley.Stats[J].Player[I].ScoreLine; + + PlaylistMedley.Stats[len].Player[I].ScoreGolden := + PlaylistMedley.Stats[len].Player[I].ScoreGolden + + PlaylistMedley.Stats[J].Player[I].ScoreGolden; + + PlaylistMedley.Stats[len].Player[I].ScoreInt := + PlaylistMedley.Stats[len].Player[I].ScoreInt + + PlaylistMedley.Stats[J].Player[I].ScoreInt; + + PlaylistMedley.Stats[len].Player[I].ScoreLineInt := + PlaylistMedley.Stats[len].Player[I].ScoreLineInt + + PlaylistMedley.Stats[J].Player[I].ScoreLineInt; + + PlaylistMedley.Stats[len].Player[I].ScoreGoldenInt := + PlaylistMedley.Stats[len].Player[I].ScoreGoldenInt + + PlaylistMedley.Stats[J].Player[I].ScoreGoldenInt; + + PlaylistMedley.Stats[len].Player[I].ScoreTotalInt := + PlaylistMedley.Stats[len].Player[I].ScoreTotalInt + + PlaylistMedley.Stats[J].Player[I].ScoreTotalInt; + end; //of for I + end; //of for J + + //build mean on sum + for I := 0 to num - 1 do + begin + PlaylistMedley.Stats[len].Player[I].Score := round( + PlaylistMedley.Stats[len].Player[I].Score / len); + + PlaylistMedley.Stats[len].Player[I].ScoreLine := round( + PlaylistMedley.Stats[len].Player[I].ScoreLine / len); + + PlaylistMedley.Stats[len].Player[I].ScoreGolden := round( + PlaylistMedley.Stats[len].Player[I].ScoreGolden / len); + + PlaylistMedley.Stats[len].Player[I].ScoreInt := round( + PlaylistMedley.Stats[len].Player[I].ScoreInt / len); + + PlaylistMedley.Stats[len].Player[I].ScoreLineInt := round( + PlaylistMedley.Stats[len].Player[I].ScoreLineInt / len); + + PlaylistMedley.Stats[len].Player[I].ScoreGoldenInt := round( + PlaylistMedley.Stats[len].Player[I].ScoreGoldenInt / len); + + PlaylistMedley.Stats[len].Player[I].ScoreTotalInt := round( + PlaylistMedley.Stats[len].Player[I].ScoreTotalInt / len); + end; + + Party.CallAfterSing; + FadeOut:=true; + end; + end; + end + else + begin + SetLength(PlaylistMedley.Stats, 1); + SetLength(PlaylistMedley.Stats[0].Player, PlayersPlay); + for I := 0 to PlayersPlay - 1 do + PlaylistMedley.Stats[0].Player[I] := Player[I]; + + PlaylistMedley.Stats[0].SongArtist := CurrentSong.Artist; + PlaylistMedley.Stats[0].SongTitle := CurrentSong.Title; + + if not FadeOut then + Party.CallAfterSing; + + FadeOut := true; + end; + +end; + +procedure TScreenSingController.OnSentenceEnd(CP: integer; SentenceIndex: cardinal); //ToDo: split and redo +var + PlayerIndex: byte; + CurrentPlayer: PPLayer; + CurrentScore: real; + Line: PLine; + LinePerfection: real; // perfection of singing performance on the current line + Rating: integer; + LineScore: real; + LineBonus: real; + MaxSongScore: integer; // max. points for the song (without line bonus) + MaxLineScore: real; // max. points for the current line + Index: integer; +const + // TODO: move this to a better place + MAX_LINE_RATING = 8; // max. rating for singing performance +begin + Line := @Lines[CP].Line[SentenceIndex]; + + // check for empty sentence + if Line.TotalNotes <= 0 then + Exit; + + // set max song score + if Ini.LineBonus = 0 then + MaxSongScore := MAX_SONG_SCORE + else + MaxSongScore := MAX_SONG_SCORE - MAX_SONG_LINE_BONUS; + + // Note: ScoreValue is the sum of all note values of the song + MaxLineScore := MaxSongScore * (Line.TotalNotes / Lines[CP].ScoreValue); + + for PlayerIndex := 0 to High(Player) do + begin + //PlayerIndex := Index; + + if (not CurrentSong.isDuet) or (PlayerIndex mod 2 = CP) or (PlayersPlay = 1)then + begin + CurrentPlayer := @Player[PlayerIndex]; + CurrentScore := CurrentPlayer.Score + CurrentPlayer.ScoreGolden; + + // line bonus + + // points for this line + LineScore := CurrentScore - CurrentPlayer.ScoreLast; + + // check for lines with low points + if MaxLineScore <= 2 then + LinePerfection := 1 + else + // determine LinePerfection + // Note: the "+2" extra points are a little bonus so the player does not + // have to be that perfect to reach the bonus steps. + LinePerfection := LineScore / (MaxLineScore - 2); + + // clamp LinePerfection to range [0..1] + if LinePerfection < 0 then + LinePerfection := 0 + else if LinePerfection > 1 then + LinePerfection := 1; + + // add line-bonus if enabled + if Ini.LineBonus > 0 then + begin + // line-bonus points (same for each line, no matter how long the line is) + LineBonus := MAX_SONG_LINE_BONUS / (Length(Lines[CP].Line) - + NumEmptySentences[CP]); + // apply line-bonus + CurrentPlayer.ScoreLine := + CurrentPlayer.ScoreLine + LineBonus * LinePerfection; + CurrentPlayer.ScoreLineInt := Floor(CurrentPlayer.ScoreLine / 10) * 10; + // update total score + CurrentPlayer.ScoreTotalInt := + CurrentPlayer.ScoreInt + + CurrentPlayer.ScoreGoldenInt + + CurrentPlayer.ScoreLineInt; + + // spawn rating pop-up + Rating := Round(LinePerfection * MAX_LINE_RATING); + Scores.SpawnPopUp(PlayerIndex, Rating, CurrentPlayer.ScoreTotalInt); + end + else + Scores.RaiseScore(PlayerIndex, CurrentPlayer.ScoreTotalInt); + + // PerfectLineTwinkle (effect), part 1 + if Ini.EffectSing = 1 then + CurrentPlayer.LastSentencePerfect := (LinePerfection >= 1); + + // refresh last score + CurrentPlayer.ScoreLast := CurrentScore; + end; + end; + + // PerfectLineTwinkle (effect), part 2 + if Ini.EffectSing = 1 then + begin + GoldenRec.SpawnPerfectLineTwinkle; + + for PlayerIndex := 0 to High(Player) do + begin + CurrentPlayer := @Player[PlayerIndex]; + CurrentPlayer.LastSentencePerfect := false; + end; + end; + +end; + + // Called on sentence change + // SentenceIndex: index of the new active sentence +procedure TScreenSingController.OnSentenceChange(CP: integer; SentenceIndex: cardinal); //ToDo: split and redo +var + tmp_Lyric: TLyricEngine; +begin + // goldenstarstwinkle + GoldenRec.SentenceChange(CP); + + if (CurrentSong.isDuet) and (PlayersPlay <> 1) then + begin + if (CP = 1) then + tmp_Lyric := LyricsDuetP2 + else + tmp_Lyric := LyricsDuetP1; + end + else + tmp_Lyric := Lyrics; + + // fill lyrics queue and set upper line to the current sentence + while (tmp_Lyric.GetUpperLineIndex() < SentenceIndex) or + (not tmp_Lyric.IsQueueFull) do + begin + // add the next line to the queue or a dummy if no more lines are available + if (tmp_Lyric.LineCounter <= High(Lines[CP].Line)) then + begin + tmp_Lyric.AddLine(@Lines[CP].Line[tmp_Lyric.LineCounter]); + end + else + tmp_Lyric.AddLine(nil); + end; + +end; + +function TLyricsSyncSource.GetClock(): real; +begin + Result := LyricsState.GetCurrentTime(); +end; + +function TMusicSyncSource.GetClock(): real; +begin + Result := AudioPlayback.Position; +end; + +procedure TScreenSingController.UpdateMedleyStats(medley_end: boolean); //TODO: view or controller? unsure +var + len, num, I : integer; + +begin + len := Length(PlaylistMedley.Stats); + num := PlaylistMedley.NumPlayer; + + if (PlaylistMedley.CurrentMedleySong > len) and + (PlaylistMedley.CurrentMedleySong <= PlaylistMedley.NumMedleySongs) then + begin + inc(len); + SetLength(PlaylistMedley.Stats, len); + SetLength(PlaylistMedley.Stats[len - 1].Player, num); + PlaylistMedley.Stats[len-1].SongArtist := CurrentSong.Artist; + PlaylistMedley.Stats[len-1].SongTitle := CurrentSong.Title; + end; + + if PlaylistMedley.CurrentMedleySong <= PlaylistMedley.NumMedleySongs then + for I := 0 to num - 1 do + PlaylistMedley.Stats[len - 1].Player[I] := Player[I]; + + if medley_end and not PlaylistMedley.ApplausePlayed and + (PlaylistMedley.CurrentMedleySong<=PlaylistMedley.NumMedleySongs) then + begin + PlaylistMedley.ApplausePlayed:=true; + + AudioPlayback.Fade(CurrentSong.Medley.FadeOut_time, 0.1); + AudioPlayback.PlaySound(SoundLib.Applause); + end; +end; + + +procedure TScreenSingController.AutoSendScore; +var + SendInfo: TSendInfo; + SendStatus: byte; + Send: boolean; + TotalScore: integer; + PlayerIndex, IndexWeb, IndexUser: integer; +begin + for PlayerIndex := 1 to PlayersPlay do + begin + for IndexWeb := 0 to High(DataBase.NetworkUser) do + begin + for IndexUser := 0 to High(DataBase.NetworkUser[IndexWeb].Userlist) do + begin + Send := false; + TotalScore := player[PlayerIndex - 1].ScoreInt + player[PlayerIndex - 1].ScoreLineInt + player[PlayerIndex - 1].ScoreGoldenInt; + + case (Act_Level) of + 0: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreEasy) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 1) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then + Send := true; + + 1: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreMedium) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 1) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then + Send := true; + + 2: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreHard) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 1) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then + Send := true; + end; + + if (Send) then + begin + + DllMan.LoadWebsite(IndexWeb); + + SendInfo.Username := DataBase.NetworkUser[IndexWeb].UserList[IndexUser].Username; + SendInfo.Password := DataBase.NetworkUser[IndexWeb].UserList[IndexUser].Password; + SendInfo.ScoreInt := player[PlayerIndex - 1].ScoreInt; + SendInfo.ScoreLineInt := player[PlayerIndex - 1].ScoreLineInt; + SendInfo.ScoreGoldenInt := player[PlayerIndex - 1].ScoreGoldenInt; + SendInfo.MD5Song := Act_MD5Song; + SendInfo.Level := Act_Level; + + SendStatus := DllMan.WebsiteSendScore(SendInfo); + + case SendStatus of + 0: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_NO_CONNECTION')); + 2: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_LOGIN_ERROR')); + 3: ScreenPopupInfo.ShowPopup(Language.Translate('WEBSITE_OK_SEND')); + 4: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_ERROR_SCORE')); + 5: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_ERROR_SCORE_DUPLICATED')); + 7: ScreenPopupError.ShowPopup(Language.Translate('WEBSITE_ERROR_SONG')); + end; + + end; + end; + end; + end; +end; + +procedure TScreenSingController.AutoSaveScore; +var + SendInfo: TSendInfo; + ScoreFile: TextFile; + EncryptText: string; + WebName: UTF8String; + Save: boolean; + TotalScore: integer; + PlayerIndex, IndexWeb, IndexUser: integer; +begin + for PlayerIndex := 1 to PlayersPlay do + begin + for IndexWeb := 0 to High(DataBase.NetworkUser) do + begin + for IndexUser := 0 to High(DataBase.NetworkUser[IndexWeb].Userlist) do + begin + Save := false; + TotalScore := player[PlayerIndex - 1].ScoreInt + player[PlayerIndex - 1].ScoreLineInt + player[PlayerIndex - 1].ScoreGoldenInt; + + case (Act_Level) of + 0: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreEasy) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 2) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then + Save := true; + + 1: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreMedium) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 2) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then + Save := true; + + 2: if (TotalScore >= DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoScoreHard) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoMode = 2) + and (DataBase.NetworkUser[IndexWeb].UserList[IndexUser].AutoPlayer = PlayerIndex - 1) then + Save := true; + end; + + if (Save) then + begin + + DllMan.LoadWebsite(IndexWeb); + + SendInfo.Username := DataBase.NetworkUser[IndexWeb].UserList[IndexUser].Username; + SendInfo.Password := DataBase.NetworkUser[IndexWeb].UserList[IndexUser].Password; + SendInfo.ScoreInt := player[PlayerIndex - 1].ScoreInt; + SendInfo.ScoreLineInt := player[PlayerIndex - 1].ScoreLineInt; + SendInfo.ScoreGoldenInt := player[PlayerIndex - 1].ScoreGoldenInt; + SendInfo.MD5Song := Act_MD5Song; + SendInfo.Level := Act_Level; + + WebName := DataBase.NetworkUser[IndexWeb].Website; + EncryptText := DllMan.WebsiteEncryptScore(SendInfo); + + AssignFile(ScoreFile, WebScoresPath.Append(WebName + '.usc').ToNative); + + if FileExists(WebScoresPath.Append(WebName + '.usc').ToNative) then + Append(ScoreFile) + else + Rewrite(ScoreFile); + + WriteLn(ScoreFile, DatetoStr(Now) + '|' + TimetoStr(Now) + '|' + EncryptText); + + Flush(ScoreFile); + Close(ScoreFile); + + ScreenPopupInfo.ShowPopup(Language.Translate('WEBSITE_SAVE_SCORE')); + + end; + end; + end; + end; +end; + +end. + diff --git a/src/screens/controllers/uscreensingc.pas b/src/screens/controllers/uscreensingc.pas deleted file mode 100644 index 70afd598..00000000 --- a/src/screens/controllers/uscreensingc.pas +++ /dev/null @@ -1,60 +0,0 @@ -{* UltraStar Deluxe - Karaoke Game - * - * UltraStar Deluxe is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * 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 Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - * - *} - - - -unit UScreenSingC; - -interface - -{$IFDEF FPC} - {$MODE Delphi} -{$ENDIF} - -{$I switches.inc} - -uses - SysUtils, - sdl2, - dglOpenGL, - TextGL, - UAvatars, - UCommon, - UFiles, - UGraphicClasses, - UHookableEvent, - UIni, - ULog, - ULyrics, - UMenu, - UMusic, - UPath, - USingScores, - USongs, - UTexture, - UThemes, - UTime, - USkins; - -end. - diff --git a/src/screens/views/UScreenSingView.pas b/src/screens/views/UScreenSingView.pas new file mode 100644 index 00000000..0be2adc2 --- /dev/null +++ b/src/screens/views/UScreenSingView.pas @@ -0,0 +1,1799 @@ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} + + +unit UScreenSingView; + +interface + +{$IFDEF FPC} + {$MODE Delphi} +{$ENDIF} + +{$I switches.inc} + +uses + SysUtils, + sdl2, + dglOpenGL, + TextGL, + UCommon, + UGraphicClasses, + UHookableEvent, + UIni, + ULog, + ULyrics, + UAvatars, + UMenu, + UMusic, + USingScores, + USongs, + UTexture, + UThemes, + UTime, + USkins; + +type + TScreenSingView = class + public + + StaticDuet: array of cardinal; + ColPlayer: array[0..3] of TRGB; + + // timebar fields + StaticTimeProgress: integer; + TextTimeText: integer; + + StaticP1: array [0..1] of integer; + TextP1: integer; + StaticP1Avatar: array [0..1] of integer; + + // shown when game is in 2/4 player modus + StaticP1TwoP: array [0..1] of integer; + TextP1TwoP: integer; + StaticP1TwoPAvatar: array [0..1] of integer; + + // shown when game is in 3/6 player modus + StaticP1ThreeP: array [0..1] of integer; + TextP1ThreeP: integer; + StaticP1ThreePAvatar: array [0..1] of integer; + + StaticP2R: array [0..1] of integer; + TextP2R: integer; + StaticP2RAvatar: array [0..1] of integer; + + StaticP2M: array [0..1] of integer; + TextP2M: integer; + StaticP2MAvatar: array [0..1] of integer; + + StaticP3R: array [0..1] of integer; + TextP3R: integer; + StaticP3RAvatar: array [0..1] of integer; + + // 4/6 players in one screen + StaticP1FourP: integer; + StaticP2FourP: integer; + StaticP3FourP: integer; + StaticP4FourP: integer; + + StaticP1FourPAvatar: integer; + StaticP2FourPAvatar: integer; + StaticP3FourPAvatar: integer; + StaticP4FourPAvatar: integer; + + TextP1FourP: integer; + TextP2FourP: integer; + TextP3FourP: integer; + TextP4FourP: integer; + + StaticP1SixP: integer; + StaticP2SixP: integer; + StaticP3SixP: integer; + StaticP4SixP: integer; + StaticP5SixP: integer; + StaticP6SixP: integer; + + StaticP1SixPAvatar: integer; + StaticP2SixPAvatar: integer; + StaticP3SixPAvatar: integer; + StaticP4SixPAvatar: integer; + StaticP5SixPAvatar: integer; + StaticP6SixPAvatar: integer; + + TextP1SixP: integer; + TextP2SixP: integer; + TextP3SixP: integer; + TextP4SixP: integer; + TextP5SixP: integer; + TextP6SixP: integer; + + // 3/6 players duet + StaticDuetP1ThreeP: array [0..1] of integer; + TextDuetP1ThreeP: integer; + StaticDuetP1ThreePAvatar: array [0..1] of integer; + + StaticDuetP2M: array [0..1] of integer; + TextDuetP2M: integer; + StaticDuetP2MAvatar: array [0..1] of integer; + + StaticDuetP3R: array [0..1] of integer; + TextDuetP3R: integer; + StaticDuetP3RAvatar: array [0..1] of integer; + + // 4/6 players duet one screen + StaticP1DuetFourP: integer; + StaticP2DuetFourP: integer; + StaticP3DuetFourP: integer; + StaticP4DuetFourP: integer; + + StaticP1DuetFourPAvatar: integer; + StaticP2DuetFourPAvatar: integer; + StaticP3DuetFourPAvatar: integer; + StaticP4DuetFourPAvatar: integer; + + TextP1DuetFourP: integer; + TextP2DuetFourP: integer; + TextP3DuetFourP: integer; + TextP4DuetFourP: integer; + + StaticP1DuetSixP: integer; + StaticP2DuetSixP: integer; + StaticP3DuetSixP: integer; + StaticP4DuetSixP: integer; + StaticP5DuetSixP: integer; + StaticP6DuetSixP: integer; + + StaticP1DuetSixPAvatar: integer; + StaticP2DuetSixPAvatar: integer; + StaticP3DuetSixPAvatar: integer; + StaticP4DuetSixPAvatar: integer; + StaticP5DuetSixPAvatar: integer; + StaticP6DuetSixPAvatar: integer; + + TextP1DuetSixP: integer; + TextP2DuetSixP: integer; + TextP3DuetSixP: integer; + TextP4DuetSixP: integer; + TextP5DuetSixP: integer; + TextP6DuetSixP: integer; + + + StaticPausePopup: integer; + + SongNameStatic: integer; + SongNameText: integer; + + + + constructor Create; + + procedure DrawMedleyCountdown(); + function Draw: boolean; + + procedure SwapToScreen(Screen: integer); + + procedure WriteMessage(msg: UTF8String); + procedure FadeMessage(); + procedure CloseMessage(); + + procedure MedleyTitleFadeOut(); + + function GetLyricColor(Color: integer): TRGB; + + procedure DrawInfoLyricBar(); + end; +var + lastVolume: single; + +implementation + +uses + Classes, + Math, + UDatabase, + UDllManager, + UDraw, + UGraphic, + ULanguage, + UNote, + URecord, + USong, + UDisplay, + UParty, + UPathUtils, + UUnicodeUtils, + UScreenSingController, + UWebcam, + UWebSDK; + +const + MAX_MESSAGE = 3; + +//ToDo basisbit: check this again +// Dirty HacK +procedure TScreenSingView.SwapToScreen(Screen: integer); +var + P, I: integer; +begin + { if screens = 2 and playerplay <= 3 the 2nd screen shows the + textures of screen 1 } + if (PlayersPlay <= 3) and (Screen = 2) then + Screen := 1; + + ScreenSing.Statics[StaticP1[0]].Visible := false; + ScreenSing.Statics[StaticP1TwoP[0]].Visible := false; + ScreenSing.Statics[StaticP2R[0]].Visible := false; + ScreenSing.Statics[StaticP1ThreeP[0]].Visible := false; + ScreenSing.Statics[StaticP2M[0]].Visible := false; + ScreenSing.Statics[StaticP3R[0]].Visible := false; + ScreenSing.Statics[StaticP1[1]].Visible := false; + ScreenSing.Statics[StaticP1TwoP[1]].Visible := false; + ScreenSing.Statics[StaticP2R[1]].Visible := false; + ScreenSing.Statics[StaticP1ThreeP[1]].Visible := false; + ScreenSing.Statics[StaticP2M[1]].Visible := false; + ScreenSing.Statics[StaticP3R[1]].Visible := false; + + ScreenSing.Statics[StaticP1Avatar[0]].Visible := false; + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Visible := false; + ScreenSing.Statics[StaticP2RAvatar[0]].Visible := false; + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Visible := false; + ScreenSing.Statics[StaticP2MAvatar[0]].Visible := false; + ScreenSing.Statics[StaticP3RAvatar[0]].Visible := false; + ScreenSing.Statics[StaticP1Avatar[1]].Visible := false; + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Visible := false; + ScreenSing.Statics[StaticP2RAvatar[1]].Visible := false; + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Visible := false; + ScreenSing.Statics[StaticP2MAvatar[1]].Visible := false; + ScreenSing.Statics[StaticP3RAvatar[1]].Visible := false; + + ScreenSing.Statics[StaticDuetP1ThreeP[0]].Visible := false; + ScreenSing.Statics[StaticDuetP1ThreeP[1]].Visible := false; + ScreenSing.Statics[StaticDuetP2M[0]].Visible := false; + ScreenSing.Statics[StaticDuetP2M[1]].Visible := false; + ScreenSing.Statics[StaticDuetP3R[1]].Visible := false; + ScreenSing.Statics[StaticDuetP3R[0]].Visible := false; + + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Visible := false; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Visible := false; + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Visible := false; + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Visible := false; + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Visible := false; + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Visible := false; + + // 4/6 players in one screen + ScreenSing.Statics[StaticP1FourP].Visible := false; + ScreenSing.Statics[StaticP2FourP].Visible := false; + ScreenSing.Statics[StaticP3FourP].Visible := false; + ScreenSing.Statics[StaticP4FourP].Visible := false; + + ScreenSing.Statics[StaticP1FourPAvatar].Visible := false; + ScreenSing.Statics[StaticP2FourPAvatar].Visible := false; + ScreenSing.Statics[StaticP3FourPAvatar].Visible := false; + ScreenSing.Statics[StaticP4FourPAvatar].Visible := false; + + ScreenSing.Statics[StaticP1DuetFourP].Visible := false; + ScreenSing.Statics[StaticP2DuetFourP].Visible := false; + ScreenSing.Statics[StaticP3DuetFourP].Visible := false; + ScreenSing.Statics[StaticP4DuetFourP].Visible := false; + + ScreenSing.Statics[StaticP1DuetFourPAvatar].Visible := false; + ScreenSing.Statics[StaticP2DuetFourPAvatar].Visible := false; + ScreenSing.Statics[StaticP3DuetFourPAvatar].Visible := false; + ScreenSing.Statics[StaticP4DuetFourPAvatar].Visible := false; + + ScreenSing.Statics[StaticP1SixP].Visible := false; + ScreenSing.Statics[StaticP2SixP].Visible := false; + ScreenSing.Statics[StaticP3SixP].Visible := false; + ScreenSing.Statics[StaticP4SixP].Visible := false; + ScreenSing.Statics[StaticP5SixP].Visible := false; + ScreenSing.Statics[StaticP6SixP].Visible := false; + + ScreenSing.Statics[StaticP1SixPAvatar].Visible := false; + ScreenSing.Statics[StaticP2SixPAvatar].Visible := false; + ScreenSing.Statics[StaticP3SixPAvatar].Visible := false; + ScreenSing.Statics[StaticP4SixPAvatar].Visible := false; + ScreenSing.Statics[StaticP5SixPAvatar].Visible := false; + ScreenSing.Statics[StaticP6SixPAvatar].Visible := false; + + ScreenSing.Statics[StaticP1DuetSixP].Visible := false; + ScreenSing.Statics[StaticP2DuetSixP].Visible := false; + ScreenSing.Statics[StaticP3DuetSixP].Visible := false; + ScreenSing.Statics[StaticP4DuetSixP].Visible := false; + ScreenSing.Statics[StaticP5DuetSixP].Visible := false; + ScreenSing.Statics[StaticP6DuetSixP].Visible := false; + + ScreenSing.Statics[StaticP1DuetSixPAvatar].Visible := false; + ScreenSing.Statics[StaticP2DuetSixPAvatar].Visible := false; + ScreenSing.Statics[StaticP3DuetSixPAvatar].Visible := false; + ScreenSing.Statics[StaticP4DuetSixPAvatar].Visible := false; + ScreenSing.Statics[StaticP5DuetSixPAvatar].Visible := false; + ScreenSing.Statics[StaticP6DuetSixPAvatar].Visible := false; + + if (PlayersPlay = 1) then + begin + if (Screen = 2) then + begin + ScreenSing.Statics[StaticP1[0]].Visible := true; + + ScreenSing.Statics[StaticP1Avatar[0]].Visible := true; + end; + + if (Screen = 1) then + begin + ScreenSing.Statics[StaticP1[0]].Visible := true; + + ScreenSing.Statics[StaticP1Avatar[0]].Visible := true; + end; + end; + + if (PlayersPlay = 2) or ((PlayersPlay = 4) and (Ini.Screens = 1)) then + begin + if (Screen = 2) then + begin + ScreenSing.Statics[StaticP1TwoP[1]].Visible := true; + ScreenSing.Statics[StaticP2R[1]].Visible := true; + + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Visible := true; + ScreenSing.Statics[StaticP2RAvatar[1]].Visible := true; + end; + + if (Screen = 1) then + begin + ScreenSing.Statics[StaticP1TwoP[0]].Visible := true; + ScreenSing.Statics[StaticP2R[0]].Visible := true; + + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Visible := true; + ScreenSing.Statics[StaticP2RAvatar[0]].Visible := true; + end; + end; + + if (PlayersPlay = 3) or ((PlayersPlay = 6) and (Ini.Screens = 1)) then + begin + if (CurrentSong.isDuet) then + begin + if (Screen = 2) then + begin + ScreenSing.Statics[StaticDuetP1ThreeP[1]].Visible := true; + ScreenSing.Statics[StaticDuetP2M[1]].Visible := true; + ScreenSing.Statics[StaticDuetP3R[1]].Visible := true; + + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Visible := true; + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Visible := true; + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Visible := true; + end; + + if (Screen = 1) then + begin + ScreenSing.Statics[StaticDuetP1ThreeP[0]].Visible := true; + ScreenSing.Statics[StaticDuetP2M[0]].Visible := true; + ScreenSing.Statics[StaticDuetP3R[0]].Visible := true; + + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Visible := true; + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Visible := true; + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Visible := true; + end; + end + else + begin + if (Screen = 2) then + begin + ScreenSing.Statics[StaticP1ThreeP[1]].Visible := true; + ScreenSing.Statics[StaticP2M[1]].Visible := true; + ScreenSing.Statics[StaticP3R[1]].Visible := true; + + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Visible := true; + ScreenSing.Statics[StaticP2MAvatar[1]].Visible := true; + ScreenSing.Statics[StaticP3RAvatar[1]].Visible := true; + end; + + if (Screen = 1) then + begin + ScreenSing.Statics[StaticP1ThreeP[0]].Visible := true; + ScreenSing.Statics[StaticP2M[0]].Visible := true; + ScreenSing.Statics[StaticP3R[0]].Visible := true; + + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Visible := true; + ScreenSing.Statics[StaticP2MAvatar[0]].Visible := true; + ScreenSing.Statics[StaticP3RAvatar[0]].Visible := true; + end; + end; + end; + + // 4 Players in 1 Screen + if (PlayersPlay = 4) and (Ini.Screens = 0) then + begin + if (CurrentSong.isDuet) then + begin + ScreenSing.Statics[StaticP1DuetFourP].Visible := true; + ScreenSing.Statics[StaticP2DuetFourP].Visible := true; + ScreenSing.Statics[StaticP3DuetFourP].Visible := true; + ScreenSing.Statics[StaticP4DuetFourP].Visible := true; + + ScreenSing.Statics[StaticP1DuetFourPAvatar].Visible := true; + ScreenSing.Statics[StaticP2DuetFourPAvatar].Visible := true; + ScreenSing.Statics[StaticP3DuetFourPAvatar].Visible := true; + ScreenSing.Statics[StaticP4DuetFourPAvatar].Visible := true; + end + else + begin + ScreenSing.Statics[StaticP1FourP].Visible := true; + ScreenSing.Statics[StaticP2FourP].Visible := true; + ScreenSing.Statics[StaticP3FourP].Visible := true; + ScreenSing.Statics[StaticP4FourP].Visible := true; + + ScreenSing.Statics[StaticP1FourPAvatar].Visible := true; + ScreenSing.Statics[StaticP2FourPAvatar].Visible := true; + ScreenSing.Statics[StaticP3FourPAvatar].Visible := true; + ScreenSing.Statics[StaticP4FourPAvatar].Visible := true; + end; + end; + + // 6 Players in 1 Screen + if (PlayersPlay = 6) and (Ini.Screens = 0) then + begin + if (CurrentSong.isDuet) then + begin + ScreenSing.Statics[StaticP1DuetSixP].Visible := true; + ScreenSing.Statics[StaticP2DuetSixP].Visible := true; + ScreenSing.Statics[StaticP3DuetSixP].Visible := true; + ScreenSing.Statics[StaticP4DuetSixP].Visible := true; + ScreenSing.Statics[StaticP5DuetSixP].Visible := true; + ScreenSing.Statics[StaticP6DuetSixP].Visible := true; + + ScreenSing.Statics[StaticP1DuetSixPAvatar].Visible := true; + ScreenSing.Statics[StaticP2DuetSixPAvatar].Visible := true; + ScreenSing.Statics[StaticP3DuetSixPAvatar].Visible := true; + ScreenSing.Statics[StaticP4DuetSixPAvatar].Visible := true; + ScreenSing.Statics[StaticP5DuetSixPAvatar].Visible := true; + ScreenSing.Statics[StaticP6DuetSixPAvatar].Visible := true; + end + else + begin + ScreenSing.Statics[StaticP1SixP].Visible := true; + ScreenSing.Statics[StaticP2SixP].Visible := true; + ScreenSing.Statics[StaticP3SixP].Visible := true; + ScreenSing.Statics[StaticP4SixP].Visible := true; + ScreenSing.Statics[StaticP5SixP].Visible := true; + ScreenSing.Statics[StaticP6SixP].Visible := true; + + ScreenSing.Statics[StaticP1SixPAvatar].Visible := true; + ScreenSing.Statics[StaticP2SixPAvatar].Visible := true; + ScreenSing.Statics[StaticP3SixPAvatar].Visible := true; + ScreenSing.Statics[StaticP4SixPAvatar].Visible := true; + ScreenSing.Statics[StaticP5SixPAvatar].Visible := true; + ScreenSing.Statics[StaticP6SixPAvatar].Visible := true; + end; + end; + +end; + +constructor TScreenSingView.Create; +var + Col: array [1..UIni.IMaxPlayerCount] of TRGB; + I: integer; + Color: cardinal; +begin + lastVolume:= -1; + //too dangerous, a mouse button is quickly pressed by accident + ScreenSing.RightMbESC := false; + + ScreenSing.fShowVisualization := false; + ScreenSing.fShowWebcam := false; + ScreenSing.fShowBackground := false; + + ScreenSing.fCurrentVideo := nil; + + // create score class + ScreenSing.Scores := TSingScores.Create; + ScreenSing.Scores.LoadfromTheme; + + ScreenSing.LoadFromTheme(Theme.Sing); + + SetLength(StaticDuet, Length(Theme.Sing.StaticDuet)); + for i := 0 to High(StaticDuet) do + StaticDuet[i] := ScreenSing.AddStatic(Theme.Sing.StaticDuet[i]); + + // timebar + StaticTimeProgress := ScreenSing.AddStatic(Theme.Sing.StaticTimeProgress); + TextTimeText := ScreenSing.AddText(Theme.Sing.TextTimeText); + + for I := 1 to 6 do + Col[I] := GetPlayerColor(Ini.SingColor[I - 1]); + + // SCREEN 1 + // 1 player | P1 + Theme.Sing.StaticP1.ColR := Col[1].R; + Theme.Sing.StaticP1.ColG := Col[1].G; + Theme.Sing.StaticP1.ColB := Col[1].B; + + // 2 or 4 players | P1 + Theme.Sing.StaticP1TwoP.ColR := Col[1].R; + Theme.Sing.StaticP1TwoP.ColG := Col[1].G; + Theme.Sing.StaticP1TwoP.ColB := Col[1].B; + + // | P2 + Theme.Sing.StaticP2R.ColR := Col[2].R; + Theme.Sing.StaticP2R.ColG := Col[2].G; + Theme.Sing.StaticP2R.ColB := Col[2].B; + + // 3 or 6 players | P1 + Theme.Sing.StaticP1ThreeP.ColR := Col[1].R; + Theme.Sing.StaticP1ThreeP.ColG := Col[1].G; + Theme.Sing.StaticP1ThreeP.ColB := Col[1].B; + + // | P2 + Theme.Sing.StaticP2M.ColR := Col[2].R; + Theme.Sing.StaticP2M.ColG := Col[2].G; + Theme.Sing.StaticP2M.ColB := Col[2].B; + + // | P3 + + Theme.Sing.StaticP3R.ColR := Col[3].R; + Theme.Sing.StaticP3R.ColG := Col[3].G; + Theme.Sing.StaticP3R.ColB := Col[3].B; + + // 3 or 6 players | P1 DUET + Theme.Sing.StaticDuetP1ThreeP.ColR := Col[1].R; + Theme.Sing.StaticDuetP1ThreeP.ColG := Col[1].G; + Theme.Sing.StaticDuetP1ThreeP.ColB := Col[1].B; + + // | P2 DUET + Theme.Sing.StaticDuetP2M.ColR := Col[2].R; + Theme.Sing.StaticDuetP2M.ColG := Col[2].G; + Theme.Sing.StaticDuetP2M.ColB := Col[2].B; + + // | P3 DUET + + Theme.Sing.StaticDuetP3R.ColR := Col[3].R; + Theme.Sing.StaticDuetP3R.ColG := Col[3].G; + Theme.Sing.StaticDuetP3R.ColB := Col[3].B; + + StaticP1[0] := ScreenSing.AddStatic(Theme.Sing.StaticP1); + StaticP1TwoP[0] := ScreenSing.AddStatic(Theme.Sing.StaticP1TwoP); + StaticP2R[0] := ScreenSing.AddStatic(Theme.Sing.StaticP2R); + StaticP1ThreeP[0] := ScreenSing.AddStatic(Theme.Sing.StaticP1ThreeP); + StaticP2M[0] := ScreenSing.AddStatic(Theme.Sing.StaticP2M); + StaticP3R[0] := ScreenSing.AddStatic(Theme.Sing.StaticP3R); + StaticDuetP1ThreeP[0] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP1ThreeP); + StaticDuetP2M[0] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP2M); + StaticDuetP3R[0] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP3R); + + // SCREEN 2 + // 1 player | P1 + Theme.Sing.StaticP1.ColR := Col[1].R; + Theme.Sing.StaticP1.ColG := Col[1].G; + Theme.Sing.StaticP1.ColB := Col[1].B; + + // 2 or 4 players | P1 + Theme.Sing.StaticP1TwoP.ColR := Col[3].R; + Theme.Sing.StaticP1TwoP.ColG := Col[3].G; + Theme.Sing.StaticP1TwoP.ColB := Col[3].B; + + // | P2 + Theme.Sing.StaticP2R.ColR := Col[4].R; + Theme.Sing.StaticP2R.ColG := Col[4].G; + Theme.Sing.StaticP2R.ColB := Col[4].B; + + // 3 or 6 players | P1 + Theme.Sing.StaticP1ThreeP.ColR := Col[4].R; + Theme.Sing.StaticP1ThreeP.ColG := Col[4].G; + Theme.Sing.StaticP1ThreeP.ColB := Col[4].B; + + // | P2 + Theme.Sing.StaticP2M.ColR := Col[5].R; + Theme.Sing.StaticP2M.ColG := Col[5].G; + Theme.Sing.StaticP2M.ColB := Col[5].B; + + // | P3 + Theme.Sing.StaticP3R.ColR := Col[6].R; + Theme.Sing.StaticP3R.ColG := Col[6].G; + Theme.Sing.StaticP3R.ColB := Col[6].B; + + // 3 or 6 players | P1 DUET + Theme.Sing.StaticDuetP1ThreeP.ColR := Col[4].R; + Theme.Sing.StaticDuetP1ThreeP.ColG := Col[4].G; + Theme.Sing.StaticDuetP1ThreeP.ColB := Col[4].B; + + // | P2 DUET + Theme.Sing.StaticDuetP2M.ColR := Col[5].R; + Theme.Sing.StaticDuetP2M.ColG := Col[5].G; + Theme.Sing.StaticDuetP2M.ColB := Col[5].B; + + // | P3 DUET + Theme.Sing.StaticDuetP3R.ColR := Col[6].R; + Theme.Sing.StaticDuetP3R.ColG := Col[6].G; + Theme.Sing.StaticDuetP3R.ColB := Col[6].B; + + StaticP1[1] := ScreenSing.AddStatic(Theme.Sing.StaticP1); + StaticP1TwoP[1] := ScreenSing.AddStatic(Theme.Sing.StaticP1TwoP); + StaticP2R[1] := ScreenSing.AddStatic(Theme.Sing.StaticP2R); + StaticP1ThreeP[1] := ScreenSing.AddStatic(Theme.Sing.StaticP1ThreeP); + StaticP2M[1] := ScreenSing.AddStatic(Theme.Sing.StaticP2M); + StaticP3R[1] := ScreenSing.AddStatic(Theme.Sing.StaticP3R); + StaticDuetP1ThreeP[1] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP1ThreeP); + StaticDuetP2M[1] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP2M); + StaticDuetP3R[1] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP3R); + + TextP1 := ScreenSing.AddText(Theme.Sing.TextP1); + TextP1TwoP := ScreenSing.AddText(Theme.Sing.TextP1TwoP); + TextP2R := ScreenSing.AddText(Theme.Sing.TextP2R); + TextP1ThreeP := ScreenSing.AddText(Theme.Sing.TextP1ThreeP); + TextP2M := ScreenSing.AddText(Theme.Sing.TextP2M); + TextP3R := ScreenSing.AddText(Theme.Sing.TextP3R); + TextDuetP1ThreeP := ScreenSing.AddText(Theme.Sing.TextDuetP1ThreeP); + TextDuetP2M := ScreenSing.AddText(Theme.Sing.TextDuetP2M); + TextDuetP3R := ScreenSing.AddText(Theme.Sing.TextDuetP3R); + + for I := 1 to PlayersPlay do + begin + if (Party.bPartyGame) then + begin + ScreenSing.PlayerNames[I] := Ini.NameTeam[I-1]; + end + else + begin + ScreenSing.PlayerNames[I] := Ini.Name[I-1]; + end; + ScreenSing.PlayerDuetNames[I] := ScreenSing.PlayerNames[I]; + end; + + // 4/6 players in 1 screen + // P1 + Theme.Sing.StaticP1FourP.ColR := Col[1].R; + Theme.Sing.StaticP1FourP.ColG := Col[1].G; + Theme.Sing.StaticP1FourP.ColB := Col[1].B; + + // P2 + Theme.Sing.StaticP2FourP.ColR := Col[2].R; + Theme.Sing.StaticP2FourP.ColG := Col[2].G; + Theme.Sing.StaticP2FourP.ColB := Col[2].B; + + // P3 + Theme.Sing.StaticP3FourP.ColR := Col[3].R; + Theme.Sing.StaticP3FourP.ColG := Col[3].G; + Theme.Sing.StaticP3FourP.ColB := Col[3].B; + + // P4 + Theme.Sing.StaticP4FourP.ColR := Col[4].R; + Theme.Sing.StaticP4FourP.ColG := Col[4].G; + Theme.Sing.StaticP4FourP.ColB := Col[4].B; + + StaticP1FourP := ScreenSing.AddStatic(Theme.Sing.StaticP1FourP); + StaticP2FourP := ScreenSing.AddStatic(Theme.Sing.StaticP2FourP); + StaticP3FourP := ScreenSing.AddStatic(Theme.Sing.StaticP3FourP); + StaticP4FourP := ScreenSing.AddStatic(Theme.Sing.StaticP4FourP); + + TextP1FourP := ScreenSing.AddText(Theme.Sing.TextP1FourP); + TextP2FourP := ScreenSing.AddText(Theme.Sing.TextP2FourP); + TextP3FourP := ScreenSing.AddText(Theme.Sing.TextP3FourP); + TextP4FourP := ScreenSing.AddText(Theme.Sing.TextP4FourP); + + // P1 + Theme.Sing.StaticP1SixP.ColR := Col[1].R; + Theme.Sing.StaticP1SixP.ColG := Col[1].G; + Theme.Sing.StaticP1SixP.ColB := Col[1].B; + + // P2 + Theme.Sing.StaticP2SixP.ColR := Col[2].R; + Theme.Sing.StaticP2SixP.ColG := Col[2].G; + Theme.Sing.StaticP2SixP.ColB := Col[2].B; + + // P3 + Theme.Sing.StaticP3SixP.ColR := Col[3].R; + Theme.Sing.StaticP3SixP.ColG := Col[3].G; + Theme.Sing.StaticP3SixP.ColB := Col[3].B; + + // P4 + Theme.Sing.StaticP4SixP.ColR := Col[4].R; + Theme.Sing.StaticP4SixP.ColG := Col[4].G; + Theme.Sing.StaticP4SixP.ColB := Col[4].B; + + // P5 + Theme.Sing.StaticP5SixP.ColR := Col[5].R; + Theme.Sing.StaticP5SixP.ColG := Col[5].G; + Theme.Sing.StaticP5SixP.ColB := Col[5].B; + + // P6 + Theme.Sing.StaticP6SixP.ColR := Col[6].R; + Theme.Sing.StaticP6SixP.ColG := Col[6].G; + Theme.Sing.StaticP6SixP.ColB := Col[6].B; + + StaticP1SixP := ScreenSing.AddStatic(Theme.Sing.StaticP1SixP); + StaticP2SixP := ScreenSing.AddStatic(Theme.Sing.StaticP2SixP); + StaticP3SixP := ScreenSing.AddStatic(Theme.Sing.StaticP3SixP); + StaticP4SixP := ScreenSing.AddStatic(Theme.Sing.StaticP4SixP); + StaticP5SixP := ScreenSing.AddStatic(Theme.Sing.StaticP5SixP); + StaticP6SixP := ScreenSing.AddStatic(Theme.Sing.StaticP6SixP); + + TextP1SixP := ScreenSing.AddText(Theme.Sing.TextP1SixP); + TextP2SixP := ScreenSing.AddText(Theme.Sing.TextP2SixP); + TextP3SixP := ScreenSing.AddText(Theme.Sing.TextP3SixP); + TextP4SixP := ScreenSing.AddText(Theme.Sing.TextP4SixP); + TextP5SixP := ScreenSing.AddText(Theme.Sing.TextP5SixP); + TextP6SixP := ScreenSing.AddText(Theme.Sing.TextP6SixP); + + + // 4/6 players duet in 1 screen + // P1 + Theme.Sing.StaticP1DuetFourP.ColR := Col[1].R; + Theme.Sing.StaticP1DuetFourP.ColG := Col[1].G; + Theme.Sing.StaticP1DuetFourP.ColB := Col[1].B; + + // P2 + Theme.Sing.StaticP2DuetFourP.ColR := Col[2].R; + Theme.Sing.StaticP2DuetFourP.ColG := Col[2].G; + Theme.Sing.StaticP2DuetFourP.ColB := Col[2].B; + + // P3 + Theme.Sing.StaticP3DuetFourP.ColR := Col[3].R; + Theme.Sing.StaticP3DuetFourP.ColG := Col[3].G; + Theme.Sing.StaticP3DuetFourP.ColB := Col[3].B; + + // P4 + Theme.Sing.StaticP4DuetFourP.ColR := Col[4].R; + Theme.Sing.StaticP4DuetFourP.ColG := Col[4].G; + Theme.Sing.StaticP4DuetFourP.ColB := Col[4].B; + + StaticP1DuetFourP := ScreenSing.AddStatic(Theme.Sing.StaticP1DuetFourP); + StaticP2DuetFourP := ScreenSing.AddStatic(Theme.Sing.StaticP2DuetFourP); + StaticP3DuetFourP := ScreenSing.AddStatic(Theme.Sing.StaticP3DuetFourP); + StaticP4DuetFourP := ScreenSing.AddStatic(Theme.Sing.StaticP4DuetFourP); + + TextP1DuetFourP := ScreenSing.AddText(Theme.Sing.TextP1DuetFourP); + TextP2DuetFourP := ScreenSing.AddText(Theme.Sing.TextP2DuetFourP); + TextP3DuetFourP := ScreenSing.AddText(Theme.Sing.TextP3DuetFourP); + TextP4DuetFourP := ScreenSing.AddText(Theme.Sing.TextP4DuetFourP); + + // P1 + Theme.Sing.StaticP1DuetSixP.ColR := Col[1].R; + Theme.Sing.StaticP1DuetSixP.ColG := Col[1].G; + Theme.Sing.StaticP1DuetSixP.ColB := Col[1].B; + + // P2 + Theme.Sing.StaticP2DuetSixP.ColR := Col[2].R; + Theme.Sing.StaticP2DuetSixP.ColG := Col[2].G; + Theme.Sing.StaticP2DuetSixP.ColB := Col[2].B; + + // P3 + Theme.Sing.StaticP3DuetSixP.ColR := Col[3].R; + Theme.Sing.StaticP3DuetSixP.ColG := Col[3].G; + Theme.Sing.StaticP3DuetSixP.ColB := Col[3].B; + + // P4 + Theme.Sing.StaticP4DuetSixP.ColR := Col[4].R; + Theme.Sing.StaticP4DuetSixP.ColG := Col[4].G; + Theme.Sing.StaticP4DuetSixP.ColB := Col[4].B; + + // P5 + Theme.Sing.StaticP5DuetSixP.ColR := Col[5].R; + Theme.Sing.StaticP5DuetSixP.ColG := Col[5].G; + Theme.Sing.StaticP5DuetSixP.ColB := Col[5].B; + + // P6 + Theme.Sing.StaticP6DuetSixP.ColR := Col[6].R; + Theme.Sing.StaticP6DuetSixP.ColG := Col[6].G; + Theme.Sing.StaticP6DuetSixP.ColB := Col[6].B; + + StaticP1DuetSixP := ScreenSing.AddStatic(Theme.Sing.StaticP1DuetSixP); + StaticP2DuetSixP := ScreenSing.AddStatic(Theme.Sing.StaticP2DuetSixP); + StaticP3DuetSixP := ScreenSing.AddStatic(Theme.Sing.StaticP3DuetSixP); + StaticP4DuetSixP := ScreenSing.AddStatic(Theme.Sing.StaticP4DuetSixP); + StaticP5DuetSixP := ScreenSing.AddStatic(Theme.Sing.StaticP5DuetSixP); + StaticP6DuetSixP := ScreenSing.AddStatic(Theme.Sing.StaticP6DuetSixP); + + TextP1DuetSixP := ScreenSing.AddText(Theme.Sing.TextP1DuetSixP); + TextP2DuetSixP := ScreenSing.AddText(Theme.Sing.TextP2DuetSixP); + TextP3DuetSixP := ScreenSing.AddText(Theme.Sing.TextP3DuetSixP); + TextP4DuetSixP := ScreenSing.AddText(Theme.Sing.TextP4DuetSixP); + TextP5DuetSixP := ScreenSing.AddText(Theme.Sing.TextP5DuetSixP); + TextP6DuetSixP := ScreenSing.AddText(Theme.Sing.TextP6DuetSixP); + + // Sing Bars + // P1-6 + for I := 1 to UIni.IMaxPlayerCount do + begin + Color := RGBFloatToInt(Col[I].R, Col[I].G, Col[I].B); + + // Color := $002222; //light blue + // Color := $10000 * Round(0.22*255) + $100 * Round(0.39*255) + Round(0.64*255); //dark blue + + Tex_Left[I] := Texture.LoadTexture(Skin.GetTextureFileName('GrayLeft'), TEXTURE_TYPE_COLORIZED, Color); + Tex_Mid[I] := Texture.LoadTexture(Skin.GetTextureFileName('GrayMid'), TEXTURE_TYPE_COLORIZED, Color); + Tex_Right[I] := Texture.LoadTexture(Skin.GetTextureFileName('GrayRight'), TEXTURE_TYPE_COLORIZED, Color); + + Tex_plain_Left[I] := Texture.LoadTexture(Skin.GetTextureFileName('NotePlainLeft'), TEXTURE_TYPE_COLORIZED, Color); + Tex_plain_Mid[I] := Texture.LoadTexture(Skin.GetTextureFileName('NotePlainMid'), TEXTURE_TYPE_COLORIZED, Color); + Tex_plain_Right[I] := Texture.LoadTexture(Skin.GetTextureFileName('NotePlainRight'), TEXTURE_TYPE_COLORIZED, Color); + + Tex_BG_Left[I] := Texture.LoadTexture(Skin.GetTextureFileName('NoteBGLeft'), TEXTURE_TYPE_COLORIZED, Color); + Tex_BG_Mid[I] := Texture.LoadTexture(Skin.GetTextureFileName('NoteBGMid'), TEXTURE_TYPE_COLORIZED, Color); + Tex_BG_Right[I] := Texture.LoadTexture(Skin.GetTextureFileName('NoteBGRight'), TEXTURE_TYPE_COLORIZED, Color); + + //## backgrounds for the scores ## + Tex_ScoreBG[I - 1] := Texture.LoadTexture(Skin.GetTextureFileName('ScoreBG'), TEXTURE_TYPE_COLORIZED, Color); + end; + + StaticPausePopup := ScreenSing.AddStatic(Theme.Sing.PausePopUp); + + // <note> pausepopup is not visible at the beginning </note> + ScreenSing.Statics[StaticPausePopup].Visible := false; + + ScreenSing.Lyrics := TLyricEngine.Create( + Theme.LyricBar.UpperX, Theme.LyricBar.UpperY, Theme.LyricBar.UpperW, Theme.LyricBar.UpperH, + Theme.LyricBar.LowerX, Theme.LyricBar.LowerY, Theme.LyricBar.LowerW, Theme.LyricBar.LowerH); + + ScreenSing.LyricsDuetP1 := TLyricEngine.Create( + Theme.LyricBarDuetP1.UpperX, Theme.LyricBarDuetP1.UpperY, Theme.LyricBarDuetP1.UpperW, Theme.LyricBarDuetP1.UpperH, + Theme.LyricBarDuetP1.LowerX, Theme.LyricBarDuetP1.LowerY, Theme.LyricBarDuetP1.LowerW, Theme.LyricBarDuetP1.LowerH); + + ScreenSing.LyricsDuetP2 := TLyricEngine.Create( + Theme.LyricBarDuetP2.UpperX, Theme.LyricBarDuetP2.UpperY, Theme.LyricBarDuetP2.UpperW, Theme.LyricBarDuetP2.UpperH, + Theme.LyricBarDuetP2.LowerX, Theme.LyricBarDuetP2.LowerY, Theme.LyricBarDuetP2.LowerW, Theme.LyricBarDuetP2.LowerH); + + ScreenSing.fLyricsSync := TLyricsSyncSource.Create(); + ScreenSing.fMusicSync := TMusicSyncSource.Create(); + + SongNameStatic := ScreenSing.AddStatic(Theme.Sing.StaticSongName);; + SongNameText := ScreenSing.AddText(Theme.Sing.TextSongName); + + ScreenSing.eSongLoaded := THookableEvent.Create('ScreenSing.SongLoaded'); + + // Info Message + ScreenSing.InfoMessageBG := ScreenSing.AddStatic(Theme.Sing.InfoMessageBG); + ScreenSing.InfoMessageText := ScreenSing.AddText(Theme.Sing.InfoMessageText); + + // avatars + StaticP1Avatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticP1Avatar); + ScreenSing.Statics[StaticP1Avatar[0]].Texture := AvatarPlayerTextures[1]; + ScreenSing.Statics[StaticP1Avatar[0]].Texture.X := Theme.Sing.StaticP1Avatar.X; + ScreenSing.Statics[StaticP1Avatar[0]].Texture.Y := Theme.Sing.StaticP1Avatar.Y; + ScreenSing.Statics[StaticP1Avatar[0]].Texture.H := Theme.Sing.StaticP1Avatar.H; + ScreenSing.Statics[StaticP1Avatar[0]].Texture.W := Theme.Sing.StaticP1Avatar.W; + ScreenSing.Statics[StaticP1Avatar[0]].Texture.Z := Theme.Sing.StaticP1Avatar.Z; + ScreenSing.Statics[StaticP1Avatar[0]].Texture.Alpha := Theme.Sing.StaticP1Avatar.Alpha; + + StaticP1Avatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticP1Avatar); + ScreenSing.Statics[StaticP1Avatar[1]].Texture := AvatarPlayerTextures[2]; + ScreenSing.Statics[StaticP1Avatar[1]].Texture.X := Theme.Sing.StaticP1Avatar.X; + ScreenSing.Statics[StaticP1Avatar[1]].Texture.Y := Theme.Sing.StaticP1Avatar.Y; + ScreenSing.Statics[StaticP1Avatar[1]].Texture.H := Theme.Sing.StaticP1Avatar.H; + ScreenSing.Statics[StaticP1Avatar[1]].Texture.W := Theme.Sing.StaticP1Avatar.W; + ScreenSing.Statics[StaticP1Avatar[1]].Texture.Z := Theme.Sing.StaticP1Avatar.Z; + ScreenSing.Statics[StaticP1Avatar[1]].Texture.Alpha := Theme.Sing.StaticP1Avatar.Alpha; + + StaticP1TwoPAvatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticP1TwoPAvatar); + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Texture := AvatarPlayerTextures[1]; + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Texture.X := Theme.Sing.StaticP1TwoPAvatar.X; + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Texture.Y := Theme.Sing.StaticP1TwoPAvatar.Y; + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Texture.H := Theme.Sing.StaticP1TwoPAvatar.H; + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Texture.W := Theme.Sing.StaticP1TwoPAvatar.W; + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Texture.Z := Theme.Sing.StaticP1TwoPAvatar.Z; + ScreenSing.Statics[StaticP1TwoPAvatar[0]].Texture.Alpha := Theme.Sing.StaticP1TwoPAvatar.Alpha; + + StaticP1TwoPAvatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticP1TwoPAvatar); + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Texture := AvatarPlayerTextures[3]; + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Texture.X := Theme.Sing.StaticP1TwoPAvatar.X; + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Texture.Y := Theme.Sing.StaticP1TwoPAvatar.Y; + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Texture.H := Theme.Sing.StaticP1TwoPAvatar.H; + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Texture.W := Theme.Sing.StaticP1TwoPAvatar.W; + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Texture.Z := Theme.Sing.StaticP1TwoPAvatar.Z; + ScreenSing.Statics[StaticP1TwoPAvatar[1]].Texture.Alpha := Theme.Sing.StaticP1TwoPAvatar.Alpha; + + StaticP2RAvatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticP2RAvatar); + ScreenSing.Statics[StaticP2RAvatar[0]].Texture := AvatarPlayerTextures[2]; + ScreenSing.Statics[StaticP2RAvatar[0]].Texture.X := Theme.Sing.StaticP2RAvatar.X; + ScreenSing.Statics[StaticP2RAvatar[0]].Texture.Y := Theme.Sing.StaticP2RAvatar.Y; + ScreenSing.Statics[StaticP2RAvatar[0]].Texture.H := Theme.Sing.StaticP2RAvatar.H; + ScreenSing.Statics[StaticP2RAvatar[0]].Texture.W := Theme.Sing.StaticP2RAvatar.W; + ScreenSing.Statics[StaticP2RAvatar[0]].Texture.Z := Theme.Sing.StaticP2RAvatar.Z; + ScreenSing.Statics[StaticP2RAvatar[0]].Texture.Alpha := Theme.Sing.StaticP2RAvatar.Alpha; + + StaticP2RAvatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticP2RAvatar); + ScreenSing.Statics[StaticP2RAvatar[1]].Texture := AvatarPlayerTextures[4]; + ScreenSing.Statics[StaticP2RAvatar[1]].Texture.X := Theme.Sing.StaticP2RAvatar.X; + ScreenSing.Statics[StaticP2RAvatar[1]].Texture.Y := Theme.Sing.StaticP2RAvatar.Y; + ScreenSing.Statics[StaticP2RAvatar[1]].Texture.H := Theme.Sing.StaticP2RAvatar.H; + ScreenSing.Statics[StaticP2RAvatar[1]].Texture.W := Theme.Sing.StaticP2RAvatar.W; + ScreenSing.Statics[StaticP2RAvatar[1]].Texture.Z := Theme.Sing.StaticP2RAvatar.Z; + ScreenSing.Statics[StaticP2RAvatar[1]].Texture.Alpha := Theme.Sing.StaticP2RAvatar.Alpha; + + StaticP1ThreePAvatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticP1ThreePAvatar); + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Texture := AvatarPlayerTextures[1]; + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Texture.X := Theme.Sing.StaticP1ThreePAvatar.X; + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Texture.Y := Theme.Sing.StaticP1ThreePAvatar.Y; + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Texture.H := Theme.Sing.StaticP1ThreePAvatar.H; + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Texture.W := Theme.Sing.StaticP1ThreePAvatar.W; + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Texture.Z := Theme.Sing.StaticP1ThreePAvatar.Z; + ScreenSing.Statics[StaticP1ThreePAvatar[0]].Texture.Alpha := Theme.Sing.StaticP1ThreePAvatar.Alpha; + + StaticP1ThreePAvatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticP1ThreePAvatar); + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Texture := AvatarPlayerTextures[4]; + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Texture.X := Theme.Sing.StaticP1ThreePAvatar.X; + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Texture.Y := Theme.Sing.StaticP1ThreePAvatar.Y; + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Texture.H := Theme.Sing.StaticP1ThreePAvatar.H; + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Texture.W := Theme.Sing.StaticP1ThreePAvatar.W; + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Texture.Z := Theme.Sing.StaticP1ThreePAvatar.Z; + ScreenSing.Statics[StaticP1ThreePAvatar[1]].Texture.Alpha := Theme.Sing.StaticP1ThreePAvatar.Alpha; + + StaticP2MAvatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticP2MAvatar); + ScreenSing.Statics[StaticP2MAvatar[0]].Texture := AvatarPlayerTextures[2]; + ScreenSing.Statics[StaticP2MAvatar[0]].Texture.X := Theme.Sing.StaticP2MAvatar.X; + ScreenSing.Statics[StaticP2MAvatar[0]].Texture.Y := Theme.Sing.StaticP2MAvatar.Y; + ScreenSing.Statics[StaticP2MAvatar[0]].Texture.H := Theme.Sing.StaticP2MAvatar.H; + ScreenSing.Statics[StaticP2MAvatar[0]].Texture.W := Theme.Sing.StaticP2MAvatar.W; + ScreenSing.Statics[StaticP2MAvatar[0]].Texture.Z := Theme.Sing.StaticP2MAvatar.Z; + ScreenSing.Statics[StaticP2MAvatar[0]].Texture.Alpha := Theme.Sing.StaticP2MAvatar.Alpha; + + StaticP2MAvatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticP2MAvatar); + ScreenSing.Statics[StaticP2MAvatar[1]].Texture := AvatarPlayerTextures[5]; + ScreenSing.Statics[StaticP2MAvatar[1]].Texture.X := Theme.Sing.StaticP2MAvatar.X; + ScreenSing.Statics[StaticP2MAvatar[1]].Texture.Y := Theme.Sing.StaticP2MAvatar.Y; + ScreenSing.Statics[StaticP2MAvatar[1]].Texture.H := Theme.Sing.StaticP2MAvatar.H; + ScreenSing.Statics[StaticP2MAvatar[1]].Texture.W := Theme.Sing.StaticP2MAvatar.W; + ScreenSing.Statics[StaticP2MAvatar[1]].Texture.Z := Theme.Sing.StaticP2MAvatar.Z; + ScreenSing.Statics[StaticP2MAvatar[1]].Texture.Alpha := Theme.Sing.StaticP2MAvatar.Alpha; + + StaticP3RAvatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticP3RAvatar); + ScreenSing.Statics[StaticP3RAvatar[0]].Texture := AvatarPlayerTextures[3]; + ScreenSing.Statics[StaticP3RAvatar[0]].Texture.X := Theme.Sing.StaticP3RAvatar.X; + ScreenSing.Statics[StaticP3RAvatar[0]].Texture.Y := Theme.Sing.StaticP3RAvatar.Y; + ScreenSing.Statics[StaticP3RAvatar[0]].Texture.H := Theme.Sing.StaticP3RAvatar.H; + ScreenSing.Statics[StaticP3RAvatar[0]].Texture.W := Theme.Sing.StaticP3RAvatar.W; + ScreenSing.Statics[StaticP3RAvatar[0]].Texture.Z := Theme.Sing.StaticP3RAvatar.Z; + ScreenSing.Statics[StaticP3RAvatar[0]].Texture.Alpha := Theme.Sing.StaticP3RAvatar.Alpha; + + StaticP3RAvatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticP3RAvatar); + ScreenSing.Statics[StaticP3RAvatar[1]].Texture := AvatarPlayerTextures[6]; + ScreenSing.Statics[StaticP3RAvatar[1]].Texture.X := Theme.Sing.StaticP3RAvatar.X; + ScreenSing.Statics[StaticP3RAvatar[1]].Texture.Y := Theme.Sing.StaticP3RAvatar.Y; + ScreenSing.Statics[StaticP3RAvatar[1]].Texture.H := Theme.Sing.StaticP3RAvatar.H; + ScreenSing.Statics[StaticP3RAvatar[1]].Texture.W := Theme.Sing.StaticP3RAvatar.W; + ScreenSing.Statics[StaticP3RAvatar[1]].Texture.Z := Theme.Sing.StaticP3RAvatar.Z; + ScreenSing.Statics[StaticP3RAvatar[1]].Texture.Alpha := Theme.Sing.StaticP3RAvatar.Alpha; + + StaticDuetP1ThreePAvatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP1ThreePAvatar); + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Texture := AvatarPlayerTextures[1]; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Texture.X := Theme.Sing.StaticDuetP1ThreePAvatar.X; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Texture.Y := Theme.Sing.StaticDuetP1ThreePAvatar.Y; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Texture.H := Theme.Sing.StaticDuetP1ThreePAvatar.H; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Texture.W := Theme.Sing.StaticDuetP1ThreePAvatar.W; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Texture.Z := Theme.Sing.StaticDuetP1ThreePAvatar.Z; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[0]].Texture.Alpha := Theme.Sing.StaticDuetP1ThreePAvatar.Alpha; + + StaticDuetP1ThreePAvatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP1ThreePAvatar); + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Texture := AvatarPlayerTextures[4]; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Texture.X := Theme.Sing.StaticDuetP1ThreePAvatar.X; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Texture.Y := Theme.Sing.StaticDuetP1ThreePAvatar.Y; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Texture.H := Theme.Sing.StaticDuetP1ThreePAvatar.H; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Texture.W := Theme.Sing.StaticDuetP1ThreePAvatar.W; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Texture.Z := Theme.Sing.StaticDuetP1ThreePAvatar.Z; + ScreenSing.Statics[StaticDuetP1ThreePAvatar[1]].Texture.Alpha := Theme.Sing.StaticDuetP1ThreePAvatar.Alpha; + + StaticDuetP2MAvatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP2MAvatar); + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Texture := AvatarPlayerTextures[2]; + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Texture.X := Theme.Sing.StaticDuetP2MAvatar.X; + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Texture.Y := Theme.Sing.StaticDuetP2MAvatar.Y; + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Texture.H := Theme.Sing.StaticDuetP2MAvatar.H; + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Texture.W := Theme.Sing.StaticDuetP2MAvatar.W; + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Texture.Z := Theme.Sing.StaticDuetP2MAvatar.Z; + ScreenSing.Statics[StaticDuetP2MAvatar[0]].Texture.Alpha := Theme.Sing.StaticDuetP2MAvatar.Alpha; + + StaticDuetP2MAvatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP2MAvatar); + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Texture := AvatarPlayerTextures[5]; + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Texture.X := Theme.Sing.StaticDuetP2MAvatar.X; + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Texture.Y := Theme.Sing.StaticDuetP2MAvatar.Y; + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Texture.H := Theme.Sing.StaticDuetP2MAvatar.H; + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Texture.W := Theme.Sing.StaticDuetP2MAvatar.W; + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Texture.Z := Theme.Sing.StaticDuetP2MAvatar.Z; + ScreenSing.Statics[StaticDuetP2MAvatar[1]].Texture.Alpha := Theme.Sing.StaticDuetP2MAvatar.Alpha; + + StaticDuetP3RAvatar[0] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP3RAvatar); + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Texture := AvatarPlayerTextures[3]; + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Texture.X := Theme.Sing.StaticDuetP3RAvatar.X; + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Texture.Y := Theme.Sing.StaticDuetP3RAvatar.Y; + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Texture.H := Theme.Sing.StaticDuetP3RAvatar.H; + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Texture.W := Theme.Sing.StaticDuetP3RAvatar.W; + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Texture.Z := Theme.Sing.StaticDuetP3RAvatar.Z; + ScreenSing.Statics[StaticDuetP3RAvatar[0]].Texture.Alpha := Theme.Sing.StaticDuetP3RAvatar.Alpha; + + StaticDuetP3RAvatar[1] := ScreenSing.AddStatic(Theme.Sing.StaticDuetP3RAvatar); + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Texture := AvatarPlayerTextures[6]; + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Texture.X := Theme.Sing.StaticDuetP3RAvatar.X; + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Texture.Y := Theme.Sing.StaticDuetP3RAvatar.Y; + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Texture.H := Theme.Sing.StaticDuetP3RAvatar.H; + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Texture.W := Theme.Sing.StaticDuetP3RAvatar.W; + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Texture.Z := Theme.Sing.StaticDuetP3RAvatar.Z; + ScreenSing.Statics[StaticDuetP3RAvatar[1]].Texture.Alpha := Theme.Sing.StaticDuetP3RAvatar.Alpha; + + StaticP1FourPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP1FourPAvatar); + ScreenSing.Statics[StaticP1FourPAvatar].Texture := AvatarPlayerTextures[1]; + ScreenSing.Statics[StaticP1FourPAvatar].Texture.X := Theme.Sing.StaticP1FourPAvatar.X; + ScreenSing.Statics[StaticP1FourPAvatar].Texture.Y := Theme.Sing.StaticP1FourPAvatar.Y; + ScreenSing.Statics[StaticP1FourPAvatar].Texture.H := Theme.Sing.StaticP1FourPAvatar.H; + ScreenSing.Statics[StaticP1FourPAvatar].Texture.W := Theme.Sing.StaticP1FourPAvatar.W; + ScreenSing.Statics[StaticP1FourPAvatar].Texture.Z := Theme.Sing.StaticP1FourPAvatar.Z; + ScreenSing.Statics[StaticP1FourPAvatar].Texture.Alpha := Theme.Sing.StaticP1FourPAvatar.Alpha; + + StaticP2FourPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP2FourPAvatar); + ScreenSing.Statics[StaticP2FourPAvatar].Texture := AvatarPlayerTextures[2]; + ScreenSing.Statics[StaticP2FourPAvatar].Texture.X := Theme.Sing.StaticP2FourPAvatar.X; + ScreenSing.Statics[StaticP2FourPAvatar].Texture.Y := Theme.Sing.StaticP2FourPAvatar.Y; + ScreenSing.Statics[StaticP2FourPAvatar].Texture.H := Theme.Sing.StaticP2FourPAvatar.H; + ScreenSing.Statics[StaticP2FourPAvatar].Texture.W := Theme.Sing.StaticP2FourPAvatar.W; + ScreenSing.Statics[StaticP2FourPAvatar].Texture.Z := Theme.Sing.StaticP2FourPAvatar.Z; + ScreenSing.Statics[StaticP2FourPAvatar].Texture.Alpha := Theme.Sing.StaticP2FourPAvatar.Alpha; + + StaticP3FourPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP3FourPAvatar); + ScreenSing.Statics[StaticP3FourPAvatar].Texture := AvatarPlayerTextures[3]; + ScreenSing.Statics[StaticP3FourPAvatar].Texture.X := Theme.Sing.StaticP3FourPAvatar.X; + ScreenSing.Statics[StaticP3FourPAvatar].Texture.Y := Theme.Sing.StaticP3FourPAvatar.Y; + ScreenSing.Statics[StaticP3FourPAvatar].Texture.H := Theme.Sing.StaticP3FourPAvatar.H; + ScreenSing.Statics[StaticP3FourPAvatar].Texture.W := Theme.Sing.StaticP3FourPAvatar.W; + ScreenSing.Statics[StaticP3FourPAvatar].Texture.Z := Theme.Sing.StaticP3FourPAvatar.Z; + ScreenSing.Statics[StaticP3FourPAvatar].Texture.Alpha := Theme.Sing.StaticP3FourPAvatar.Alpha; + + StaticP4FourPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP4FourPAvatar); + ScreenSing.Statics[StaticP4FourPAvatar].Texture := AvatarPlayerTextures[4]; + ScreenSing.Statics[StaticP4FourPAvatar].Texture.X := Theme.Sing.StaticP4FourPAvatar.X; + ScreenSing.Statics[StaticP4FourPAvatar].Texture.Y := Theme.Sing.StaticP4FourPAvatar.Y; + ScreenSing.Statics[StaticP4FourPAvatar].Texture.H := Theme.Sing.StaticP4FourPAvatar.H; + ScreenSing.Statics[StaticP4FourPAvatar].Texture.W := Theme.Sing.StaticP4FourPAvatar.W; + ScreenSing.Statics[StaticP4FourPAvatar].Texture.Z := Theme.Sing.StaticP4FourPAvatar.Z; + ScreenSing.Statics[StaticP4FourPAvatar].Texture.Alpha := Theme.Sing.StaticP4FourPAvatar.Alpha; + + StaticP1DuetFourPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP1DuetFourPAvatar); + ScreenSing.Statics[StaticP1DuetFourPAvatar].Texture := AvatarPlayerTextures[1]; + ScreenSing.Statics[StaticP1DuetFourPAvatar].Texture.X := Theme.Sing.StaticP1DuetFourPAvatar.X; + ScreenSing.Statics[StaticP1DuetFourPAvatar].Texture.Y := Theme.Sing.StaticP1DuetFourPAvatar.Y; + ScreenSing.Statics[StaticP1DuetFourPAvatar].Texture.H := Theme.Sing.StaticP1DuetFourPAvatar.H; + ScreenSing.Statics[StaticP1DuetFourPAvatar].Texture.W := Theme.Sing.StaticP1DuetFourPAvatar.W; + ScreenSing.Statics[StaticP1DuetFourPAvatar].Texture.Z := Theme.Sing.StaticP1DuetFourPAvatar.Z; + ScreenSing.Statics[StaticP1DuetFourPAvatar].Texture.Alpha := Theme.Sing.StaticP1DuetFourPAvatar.Alpha; + + StaticP2DuetFourPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP2DuetFourPAvatar); + ScreenSing.Statics[StaticP2DuetFourPAvatar].Texture := AvatarPlayerTextures[2]; + ScreenSing.Statics[StaticP2DuetFourPAvatar].Texture.X := Theme.Sing.StaticP2DuetFourPAvatar.X; + ScreenSing.Statics[StaticP2DuetFourPAvatar].Texture.Y := Theme.Sing.StaticP2DuetFourPAvatar.Y; + ScreenSing.Statics[StaticP2DuetFourPAvatar].Texture.H := Theme.Sing.StaticP2DuetFourPAvatar.H; + ScreenSing.Statics[StaticP2DuetFourPAvatar].Texture.W := Theme.Sing.StaticP2DuetFourPAvatar.W; + ScreenSing.Statics[StaticP2DuetFourPAvatar].Texture.Z := Theme.Sing.StaticP2DuetFourPAvatar.Z; + ScreenSing.Statics[StaticP2DuetFourPAvatar].Texture.Alpha := Theme.Sing.StaticP2DuetFourPAvatar.Alpha; + + StaticP3DuetFourPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP3DuetFourPAvatar); + ScreenSing.Statics[StaticP3DuetFourPAvatar].Texture := AvatarPlayerTextures[3]; + ScreenSing.Statics[StaticP3DuetFourPAvatar].Texture.X := Theme.Sing.StaticP3DuetFourPAvatar.X; + ScreenSing.Statics[StaticP3DuetFourPAvatar].Texture.Y := Theme.Sing.StaticP3DuetFourPAvatar.Y; + ScreenSing.Statics[StaticP3DuetFourPAvatar].Texture.H := Theme.Sing.StaticP3DuetFourPAvatar.H; + ScreenSing.Statics[StaticP3DuetFourPAvatar].Texture.W := Theme.Sing.StaticP3DuetFourPAvatar.W; + ScreenSing.Statics[StaticP3DuetFourPAvatar].Texture.Z := Theme.Sing.StaticP3DuetFourPAvatar.Z; + ScreenSing.Statics[StaticP3DuetFourPAvatar].Texture.Alpha := Theme.Sing.StaticP3DuetFourPAvatar.Alpha; + + StaticP4DuetFourPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP4DuetFourPAvatar); + ScreenSing.Statics[StaticP4DuetFourPAvatar].Texture := AvatarPlayerTextures[4]; + ScreenSing.Statics[StaticP4DuetFourPAvatar].Texture.X := Theme.Sing.StaticP4DuetFourPAvatar.X; + ScreenSing.Statics[StaticP4DuetFourPAvatar].Texture.Y := Theme.Sing.StaticP4DuetFourPAvatar.Y; + ScreenSing.Statics[StaticP4DuetFourPAvatar].Texture.H := Theme.Sing.StaticP4DuetFourPAvatar.H; + ScreenSing.Statics[StaticP4DuetFourPAvatar].Texture.W := Theme.Sing.StaticP4DuetFourPAvatar.W; + ScreenSing.Statics[StaticP4DuetFourPAvatar].Texture.Z := Theme.Sing.StaticP4DuetFourPAvatar.Z; + ScreenSing.Statics[StaticP4DuetFourPAvatar].Texture.Alpha := Theme.Sing.StaticP4DuetFourPAvatar.Alpha; + + StaticP1SixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP1SixPAvatar); + ScreenSing.Statics[StaticP1SixPAvatar].Texture := AvatarPlayerTextures[1]; + ScreenSing.Statics[StaticP1SixPAvatar].Texture.X := Theme.Sing.StaticP1SixPAvatar.X; + ScreenSing.Statics[StaticP1SixPAvatar].Texture.Y := Theme.Sing.StaticP1SixPAvatar.Y; + ScreenSing.Statics[StaticP1SixPAvatar].Texture.H := Theme.Sing.StaticP1SixPAvatar.H; + ScreenSing.Statics[StaticP1SixPAvatar].Texture.W := Theme.Sing.StaticP1SixPAvatar.W; + ScreenSing.Statics[StaticP1SixPAvatar].Texture.Z := Theme.Sing.StaticP1SixPAvatar.Z; + ScreenSing.Statics[StaticP1SixPAvatar].Texture.Alpha := Theme.Sing.StaticP1SixPAvatar.Alpha; + + StaticP2SixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP2SixPAvatar); + ScreenSing.Statics[StaticP2SixPAvatar].Texture := AvatarPlayerTextures[2]; + ScreenSing.Statics[StaticP2SixPAvatar].Texture.X := Theme.Sing.StaticP2SixPAvatar.X; + ScreenSing.Statics[StaticP2SixPAvatar].Texture.Y := Theme.Sing.StaticP2SixPAvatar.Y; + ScreenSing.Statics[StaticP2SixPAvatar].Texture.H := Theme.Sing.StaticP2SixPAvatar.H; + ScreenSing.Statics[StaticP2SixPAvatar].Texture.W := Theme.Sing.StaticP2SixPAvatar.W; + ScreenSing.Statics[StaticP2SixPAvatar].Texture.Z := Theme.Sing.StaticP2SixPAvatar.Z; + ScreenSing.Statics[StaticP2SixPAvatar].Texture.Alpha := Theme.Sing.StaticP2SixPAvatar.Alpha; + + StaticP3SixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP3SixPAvatar); + ScreenSing.Statics[StaticP3SixPAvatar].Texture := AvatarPlayerTextures[3]; + ScreenSing.Statics[StaticP3SixPAvatar].Texture.X := Theme.Sing.StaticP3SixPAvatar.X; + ScreenSing.Statics[StaticP3SixPAvatar].Texture.Y := Theme.Sing.StaticP3SixPAvatar.Y; + ScreenSing.Statics[StaticP3SixPAvatar].Texture.H := Theme.Sing.StaticP3SixPAvatar.H; + ScreenSing.Statics[StaticP3SixPAvatar].Texture.W := Theme.Sing.StaticP3SixPAvatar.W; + ScreenSing.Statics[StaticP3SixPAvatar].Texture.Z := Theme.Sing.StaticP3SixPAvatar.Z; + ScreenSing.Statics[StaticP3SixPAvatar].Texture.Alpha := Theme.Sing.StaticP3SixPAvatar.Alpha; + + StaticP4SixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP4SixPAvatar); + ScreenSing.Statics[StaticP4SixPAvatar].Texture := AvatarPlayerTextures[4]; + ScreenSing.Statics[StaticP4SixPAvatar].Texture.X := Theme.Sing.StaticP4SixPAvatar.X; + ScreenSing.Statics[StaticP4SixPAvatar].Texture.Y := Theme.Sing.StaticP4SixPAvatar.Y; + ScreenSing.Statics[StaticP4SixPAvatar].Texture.H := Theme.Sing.StaticP4SixPAvatar.H; + ScreenSing.Statics[StaticP4SixPAvatar].Texture.W := Theme.Sing.StaticP4SixPAvatar.W; + ScreenSing.Statics[StaticP4SixPAvatar].Texture.Z := Theme.Sing.StaticP4SixPAvatar.Z; + ScreenSing.Statics[StaticP4SixPAvatar].Texture.Alpha := Theme.Sing.StaticP4SixPAvatar.Alpha; + + StaticP5SixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP5SixPAvatar); + ScreenSing.Statics[StaticP5SixPAvatar].Texture := AvatarPlayerTextures[5]; + ScreenSing.Statics[StaticP5SixPAvatar].Texture.X := Theme.Sing.StaticP5SixPAvatar.X; + ScreenSing.Statics[StaticP5SixPAvatar].Texture.Y := Theme.Sing.StaticP5SixPAvatar.Y; + ScreenSing.Statics[StaticP5SixPAvatar].Texture.H := Theme.Sing.StaticP5SixPAvatar.H; + ScreenSing.Statics[StaticP5SixPAvatar].Texture.W := Theme.Sing.StaticP5SixPAvatar.W; + ScreenSing.Statics[StaticP5SixPAvatar].Texture.Z := Theme.Sing.StaticP5SixPAvatar.Z; + ScreenSing.Statics[StaticP5SixPAvatar].Texture.Alpha := Theme.Sing.StaticP5SixPAvatar.Alpha; + + StaticP6SixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP6SixPAvatar); + ScreenSing.Statics[StaticP6SixPAvatar].Texture := AvatarPlayerTextures[6]; + ScreenSing.Statics[StaticP6SixPAvatar].Texture.X := Theme.Sing.StaticP6SixPAvatar.X; + ScreenSing.Statics[StaticP6SixPAvatar].Texture.Y := Theme.Sing.StaticP6SixPAvatar.Y; + ScreenSing.Statics[StaticP6SixPAvatar].Texture.H := Theme.Sing.StaticP6SixPAvatar.H; + ScreenSing.Statics[StaticP6SixPAvatar].Texture.W := Theme.Sing.StaticP6SixPAvatar.W; + ScreenSing.Statics[StaticP6SixPAvatar].Texture.Z := Theme.Sing.StaticP6SixPAvatar.Z; + ScreenSing.Statics[StaticP6SixPAvatar].Texture.Alpha := Theme.Sing.StaticP6SixPAvatar.Alpha; + + StaticP1DuetSixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP1DuetSixPAvatar); + ScreenSing.Statics[StaticP1DuetSixPAvatar].Texture := AvatarPlayerTextures[1]; + ScreenSing.Statics[StaticP1DuetSixPAvatar].Texture.X := Theme.Sing.StaticP1DuetSixPAvatar.X; + ScreenSing.Statics[StaticP1DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP1DuetSixPAvatar.Y; + ScreenSing.Statics[StaticP1DuetSixPAvatar].Texture.H := Theme.Sing.StaticP1DuetSixPAvatar.H; + ScreenSing.Statics[StaticP1DuetSixPAvatar].Texture.W := Theme.Sing.StaticP1DuetSixPAvatar.W; + ScreenSing.Statics[StaticP1DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP1DuetSixPAvatar.Z; + ScreenSing.Statics[StaticP1DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP1DuetSixPAvatar.Alpha; + + StaticP2DuetSixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP2DuetSixPAvatar); + ScreenSing.Statics[StaticP2DuetSixPAvatar].Texture := AvatarPlayerTextures[2]; + ScreenSing.Statics[StaticP2DuetSixPAvatar].Texture.X := Theme.Sing.StaticP2DuetSixPAvatar.X; + ScreenSing.Statics[StaticP2DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP2DuetSixPAvatar.Y; + ScreenSing.Statics[StaticP2DuetSixPAvatar].Texture.H := Theme.Sing.StaticP2DuetSixPAvatar.H; + ScreenSing.Statics[StaticP2DuetSixPAvatar].Texture.W := Theme.Sing.StaticP2DuetSixPAvatar.W; + ScreenSing.Statics[StaticP2DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP2DuetSixPAvatar.Z; + ScreenSing.Statics[StaticP2DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP2DuetSixPAvatar.Alpha; + + StaticP3DuetSixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP3DuetSixPAvatar); + ScreenSing.Statics[StaticP3DuetSixPAvatar].Texture := AvatarPlayerTextures[3]; + ScreenSing.Statics[StaticP3DuetSixPAvatar].Texture.X := Theme.Sing.StaticP3DuetSixPAvatar.X; + ScreenSing.Statics[StaticP3DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP3DuetSixPAvatar.Y; + ScreenSing.Statics[StaticP3DuetSixPAvatar].Texture.H := Theme.Sing.StaticP3DuetSixPAvatar.H; + ScreenSing.Statics[StaticP3DuetSixPAvatar].Texture.W := Theme.Sing.StaticP3DuetSixPAvatar.W; + ScreenSing.Statics[StaticP3DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP3DuetSixPAvatar.Z; + ScreenSing.Statics[StaticP3DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP3DuetSixPAvatar.Alpha; + + StaticP4DuetSixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP4DuetSixPAvatar); + ScreenSing.Statics[StaticP4DuetSixPAvatar].Texture := AvatarPlayerTextures[4]; + ScreenSing.Statics[StaticP4DuetSixPAvatar].Texture.X := Theme.Sing.StaticP4DuetSixPAvatar.X; + ScreenSing.Statics[StaticP4DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP4DuetSixPAvatar.Y; + ScreenSing.Statics[StaticP4DuetSixPAvatar].Texture.H := Theme.Sing.StaticP4DuetSixPAvatar.H; + ScreenSing.Statics[StaticP4DuetSixPAvatar].Texture.W := Theme.Sing.StaticP4DuetSixPAvatar.W; + ScreenSing.Statics[StaticP4DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP4DuetSixPAvatar.Z; + ScreenSing.Statics[StaticP4DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP4DuetSixPAvatar.Alpha; + + StaticP5DuetSixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP5DuetSixPAvatar); + ScreenSing.Statics[StaticP5DuetSixPAvatar].Texture := AvatarPlayerTextures[5]; + ScreenSing.Statics[StaticP5DuetSixPAvatar].Texture.X := Theme.Sing.StaticP5DuetSixPAvatar.X; + ScreenSing.Statics[StaticP5DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP5DuetSixPAvatar.Y; + ScreenSing.Statics[StaticP5DuetSixPAvatar].Texture.H := Theme.Sing.StaticP5DuetSixPAvatar.H; + ScreenSing.Statics[StaticP5DuetSixPAvatar].Texture.W := Theme.Sing.StaticP5DuetSixPAvatar.W; + ScreenSing.Statics[StaticP5DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP5DuetSixPAvatar.Z; + ScreenSing.Statics[StaticP5DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP5DuetSixPAvatar.Alpha; + + StaticP6DuetSixPAvatar := ScreenSing.AddStatic(Theme.Sing.StaticP6DuetSixPAvatar); + ScreenSing.Statics[StaticP6DuetSixPAvatar].Texture := AvatarPlayerTextures[6]; + ScreenSing.Statics[StaticP6DuetSixPAvatar].Texture.X := Theme.Sing.StaticP6DuetSixPAvatar.X; + ScreenSing.Statics[StaticP6DuetSixPAvatar].Texture.Y := Theme.Sing.StaticP6DuetSixPAvatar.Y; + ScreenSing.Statics[StaticP6DuetSixPAvatar].Texture.H := Theme.Sing.StaticP6DuetSixPAvatar.H; + ScreenSing.Statics[StaticP6DuetSixPAvatar].Texture.W := Theme.Sing.StaticP6DuetSixPAvatar.W; + ScreenSing.Statics[StaticP6DuetSixPAvatar].Texture.Z := Theme.Sing.StaticP6DuetSixPAvatar.Z; + ScreenSing.Statics[StaticP6DuetSixPAvatar].Texture.Alpha := Theme.Sing.StaticP6DuetSixPAvatar.Alpha; + +end; + +function TScreenSingView.Draw: boolean; +var + DisplayTime: real; + DisplayPrefix: string; + DisplayMin: integer; + DisplaySec: integer; + T: integer; + CurLyricsTime: real; + VideoFrameTime: Extended; + Line: TLyricLine; + LastWord: TLyricWord; + LineDuet: TLyricLine; + LastWordDuet: TLyricWord; + medley_end: boolean; + medley_start_applause: boolean; +begin + ScreenSing.Background.Draw; + + // sound enabled/disabled (Party plugins) + if not(ScreenSing.settings.SoundEnabled) and not(lastVolume=0) then + begin + AudioPlayback.SetVolume(0); + lastVolume:=0; + end + else if not(lastVolume=1) and not(lastVolume=0) then + begin //changing volume is slow, so do not reset volume every frame + AudioPlayback.SetVolume(1); + lastVolume:=1; + end; + + // swap static textures to current screen ones + SwapToScreen(ScreenAct); + + // draw background picture (if any, and if no visualizations) + // when we don't check for visualizations the visualizations would + // be overdrawn by the picture when {UNDEFINED UseTexture} in UVisualizer + //if (not fShowVisualization) then + if (not ScreenSing.fShowVisualization) or (ScreenSing.fShowBackground) then + SingDrawBackground; + + if (ScreenSing.fShowWebCam) then + SingDrawWebCamFrame; + + // set player names (for 2 screens and only singstar skin) + if ScreenAct = 1 then + begin + ScreenSing.Text[TextP1].Text := ScreenSing.PlayerNames[1]; + ScreenSing.Text[TextP1TwoP].Text := ScreenSing.PlayerNames[1]; + ScreenSing.Text[TextP1ThreeP].Text := ScreenSing.PlayerNames[1]; + ScreenSing.Text[TextP2R].Text := ScreenSing.PlayerNames[2]; + ScreenSing.Text[TextP2M].Text := ScreenSing.PlayerNames[2]; + ScreenSing.Text[TextP3R].Text := ScreenSing.PlayerNames[3]; + ScreenSing.Text[TextDuetP1ThreeP].Text := ScreenSing.PlayerDuetNames[1]; + ScreenSing.Text[TextDuetP2M].Text := ScreenSing.PlayerDuetNames[2]; + ScreenSing.Text[TextDuetP3R].Text := ScreenSing.PlayerDuetNames[3]; + ScreenSing.Text[TextP1FourP].Text := ScreenSing.PlayerNames[1]; + ScreenSing.Text[TextP2FourP].Text := ScreenSing.PlayerNames[2]; + ScreenSing.Text[TextP3FourP].Text := ScreenSing.PlayerNames[3]; + ScreenSing.Text[TextP4FourP].Text := ScreenSing.PlayerNames[4]; + ScreenSing.Text[TextP1DuetFourP].Text := ScreenSing.PlayerDuetNames[1]; + ScreenSing.Text[TextP2DuetFourP].Text := ScreenSing.PlayerDuetNames[2]; + ScreenSing.Text[TextP3DuetFourP].Text := ScreenSing.PlayerDuetNames[3]; + ScreenSing.Text[TextP4DuetFourP].Text := ScreenSing.PlayerDuetNames[4]; + ScreenSing.Text[TextP1SixP].Text := ScreenSing.PlayerNames[1]; + ScreenSing.Text[TextP2SixP].Text := ScreenSing.PlayerNames[2]; + ScreenSing.Text[TextP3SixP].Text := ScreenSing.PlayerNames[3]; + ScreenSing.Text[TextP4SixP].Text := ScreenSing.PlayerNames[4]; + ScreenSing.Text[TextP5SixP].Text := ScreenSing.PlayerNames[5]; + ScreenSing.Text[TextP6SixP].Text := ScreenSing.PlayerNames[6]; + ScreenSing.Text[TextP1DuetSixP].Text := ScreenSing.PlayerDuetNames[1]; + ScreenSing.Text[TextP2DuetSixP].Text := ScreenSing.PlayerDuetNames[2]; + ScreenSing.Text[TextP3DuetSixP].Text := ScreenSing.PlayerDuetNames[3]; + ScreenSing.Text[TextP4DuetSixP].Text := ScreenSing.PlayerDuetNames[4]; + ScreenSing.Text[TextP5DuetSixP].Text := ScreenSing.PlayerDuetNames[5]; + ScreenSing.Text[TextP6DuetSixP].Text := ScreenSing.PlayerDuetNames[6]; + + if (CurrentSong.isDuet) then + begin + if (PlayersPlay = 4) then + begin + ScreenSing.LyricsDuetP1.LineColor_act.R := ColPlayer[0].R; + ScreenSing.LyricsDuetP1.LineColor_act.G := ColPlayer[0].G; + ScreenSing.LyricsDuetP1.LineColor_act.B := ColPlayer[0].B; + + ScreenSing.LyricsDuetP2.LineColor_act.R := ColPlayer[1].R; + ScreenSing.LyricsDuetP2.LineColor_act.G := ColPlayer[1].G; + ScreenSing.LyricsDuetP2.LineColor_act.B := ColPlayer[1].B; + end; + end; + end; + + if ScreenAct = 2 then + begin + case PlayersPlay of + 4: + begin + ScreenSing.Text[TextP1TwoP].Text := ScreenSing.PlayerNames[3]; + ScreenSing.Text[TextP2R].Text := ScreenSing.PlayerNames[4]; + + if (CurrentSong.isDuet) and (PlayersPlay = 4) then + begin + ScreenSing.LyricsDuetP1.LineColor_act.R := ColPlayer[2].R; + ScreenSing.LyricsDuetP1.LineColor_act.G := ColPlayer[2].G; + ScreenSing.LyricsDuetP1.LineColor_act.B := ColPlayer[2].B; + + ScreenSing.LyricsDuetP2.LineColor_act.R := ColPlayer[3].R; + ScreenSing.LyricsDuetP2.LineColor_act.G := ColPlayer[3].G; + ScreenSing.LyricsDuetP2.LineColor_act.B := ColPlayer[3].B; + end; + + end; + 6: + begin + if (CurrentSong.isDuet) then + begin + ScreenSing.Text[TextDuetP1ThreeP].Text := ScreenSing.PlayerDuetNames[4]; + ScreenSing.Text[TextDuetP2M].Text := ScreenSing.PlayerDuetNames[5]; + ScreenSing.Text[TextDuetP3R].Text := ScreenSing.PlayerDuetNames[6]; + end + else + begin + ScreenSing.Text[TextP1ThreeP].Text := ScreenSing.PlayerNames[4]; + ScreenSing.Text[TextP2M].Text := ScreenSing.PlayerNames[5]; + ScreenSing.Text[TextP3R].Text := ScreenSing.PlayerNames[6]; + end; + end; + end; // case + end; // if + + // retrieve current lyrics time, we have to store the value to avoid + // that min- and sec-values do not match + if ScreenSong.Mode = smMedley then + begin + CurLyricsTime := LyricsState.GetCurrentTime() - ScreenSing.MedleyStart; + TotalTime := ScreenSing.MedleyEnd - ScreenSing.MedleyStart; + end + else + begin + CurLyricsTime := LyricsState.GetCurrentTime(); + TotalTime := LyricsState.TotalTime; + end; + + // retrieve time for timebar text + case (ScreenSing.fTimebarMode) of + tbmRemaining: begin + DisplayTime := TotalTime - CurLyricsTime; + DisplayPrefix := '-'; + end; + tbmTotal: begin + DisplayTime := TotalTime; + DisplayPrefix := '#'; + end; + else begin // current time + DisplayTime := CurLyricsTime; + DisplayPrefix := ''; + end; + end; + DisplayMin := Round(DisplayTime) div 60; + DisplaySec := Round(DisplayTime) mod 60; + + // update static menu with time ... + ScreenSing.Text[TextTimeText].Text := Format('%s%.2d:%.2d', + [DisplayPrefix, DisplayMin, DisplaySec]); + + //the song was sung to the end? + if not(CurrentSong.isDuet) then + begin + Line := ScreenSing.Lyrics.GetUpperLine(); + if Line.LastLine then + begin + LastWord := Line.Words[Length(Line.Words)-1]; + if CurLyricsTime >= GetTimeFromBeat(LastWord.Start + LastWord.Length) then + ScreenSing.SungToEnd := true; + end; + end + else + begin + { Line := Lyrics.GetUpperLine(); + LineDuet := LyricsDuet.GetUpperLine(); + if Line.LastLine and (LineDuet.LastLine) then + begin + LastWord := Line.Words[Length(Line.Words)-1]; + LastWordDuet := LineDuet.Words[Length(Line.Words)-1]; + if (CurLyricsTime >= GetTimeFromBeat(LastWord.Start+LastWord.Length)) and (CurLyricsTime >= GetTimeFromBeat(LastWordDuet.Start+LastWordDuet.Length)) then + // TODO SAVE DUET SCORES + SungToEnd := false; + //SungToEnd := true; + end; + } + end; + + // for medley-mode: + CurLyricsTime := LyricsState.GetCurrentTime(); + if (ScreenSong.Mode = smMedley) and (CurLyricsTime > ScreenSing.MedleyEnd) then + medley_end := true + else + medley_end := false; + + if (ScreenSong.Mode = smMedley) and (CurLyricsTime > + GetTimeFromBeat(CurrentSong.Medley.EndBeat)) then + medley_start_applause := true + else + medley_start_applause := false; + + // update and draw movie + // USE FFMPEG + if Assigned(ScreenSing.fCurrentVideo) and (not ScreenSing.fShowWebcam) then + begin + // Just call this once + // when Screens = 2 + if (ScreenAct = 1) then + begin + if (ScreenSing.ShowFinish) then + begin + // everything is setup, determine the current position + VideoFrameTime := CurrentSong.VideoGAP + LyricsState.GetCurrentTime(); + end + else + begin + // Important: do not yet start the triggered timer by a call to + // LyricsState.GetCurrentTime() + VideoFrameTime := CurrentSong.VideoGAP; + end; + try + ScreenSing.fCurrentVideo.GetFrame(VideoFrameTime); + except + end; + end; + + ScreenSing.fCurrentVideo.SetScreen(ScreenAct); + ScreenSing.fCurrentVideo.Draw; + end; + + // draw notes lines + SingDrawLines; + + // draw static menu (FG) + ScreenSing.DrawFG; + + //Medley Countdown + if ScreenSong.Mode = smMedley then + DrawMedleyCountdown; + + // check for music finish + //Log.LogError('Check for music finish: ' + BoolToStr(Music.Finished) + ' ' + FloatToStr(LyricsState.CurrentTime*1000) + ' ' + IntToStr(CurrentSong.Finish)); + if ScreenSing.ShowFinish then + begin + if (not ScreenSing.FinishedMusic) and (not medley_end or (ScreenSong.Mode <> smMedley)) and + ((CurrentSong.Finish = 0) or + (LyricsState.GetCurrentTime() * 1000 <= CurrentSong.Finish)) and + (not ScreenSing.Settings.Finish) then + begin + // analyze song if not paused + if (not ScreenSing.Paused) then + begin + Sing(ScreenSing); + + //Update Medley Stats + if (ScreenSong.Mode = smMedley) and not ScreenSing.FadeOut then + ScreenSing.UpdateMedleyStats(medley_start_applause); + + Party.CallOnSing; + end; + end + else + begin + if (not ScreenSing.FadeOut) and (Screens=1) or (ScreenAct=2) then + begin + ScreenSing.Finish; + end; + end; + end; + + // draw info lyric bar if not medley + if ScreenSong.Mode <> smMedley then DrawInfoLyricBar; + + // always draw custom items + SingDraw; + + // goldennotestarstwinkle + GoldenRec.SpawnRec; + + // draw scores + if (Ini.SingScores = 1) or (Party.bPartyGame) then + ScreenSing.Scores.Draw; + + FadeMessage(); + + // draw pausepopup + // FIXME: this is a workaround that the static is drawn over the lyrics, lines, scores and effects + // maybe someone could find a better solution + if ScreenSing.Paused then + begin + ScreenSing.Statics[StaticPausePopup].Texture.Z := 1; + ScreenSing.Statics[StaticPausePopup].Visible := true; + ScreenSing.Statics[StaticPausePopup].Draw; + ScreenSing.Statics[StaticPausePopup].Visible := false; + SDL_Delay(33);//wait a bit to save electricity... + end; + + Result := true; +end; + +procedure TScreenSingView.DrawMedleyCountdown(); +var + w, h: real; + timeDiff: real; + t: real; + CountDownText: UTF8String; + Position: real; +begin + if AudioPlayback.Position < GetTimeFromBeat(CurrentSong.Medley.StartBeat) then + begin + ScreenSing.TextMedleyFadeOut := false; + + ScreenSing.Statics[SongNameStatic].Texture.Alpha := 1; + ScreenSing.Text[SongNameText].Alpha := 1; + + ScreenSing.Statics[SongNameStatic].Visible := true; + ScreenSing.Text[SongNameText].Visible := true; + + timeDiff := GetTimeFromBeat(CurrentSong.Medley.StartBeat) - AudioPlayback.Position + 1; + t := frac(timeDiff); + + glColor4f(0.15, 0.30, 0.6, t); + + h := 300*t*ScreenH/RenderH; + SetFontStyle(ftBoldHighRes); + SetFontItalic(false); + SetFontSize(h); + CountDownText := IntToStr(round(timeDiff-t)); + w := glTextWidth(PChar(CountDownText)); + + SetFontPos (RenderW/2-w/2, RenderH/2-h/2); + glPrint(PChar(CountDownText)); + end else + begin + if (ScreenSing.TextMedleyFadeOut = false) then + begin + ScreenSing.TextMedleyFadeOut := true; + ScreenSing.TextMedleyFadeTime := SDL_GetTicks(); + end; + + MedleyTitleFadeOut; + end; +end; + +procedure TScreenSingView.WriteMessage(msg: UTF8String); +begin + ScreenSing.MessageTime := SDL_GetTicks(); + + ScreenSing.Statics[ScreenSing.InfoMessageBG].Texture.Alpha := 1; + ScreenSing.Text[ScreenSing.InfoMessageText].Alpha := 1; + + ScreenSing.Statics[ScreenSing.InfoMessageBG].Visible := true; + ScreenSing.Text[ScreenSing.InfoMessageText].Visible := true; + ScreenSing.Text[ScreenSing.InfoMessageText].Text := msg; +end; + +procedure TScreenSingView.FadeMessage(); +var + factor: real; +begin + if ((SDL_GetTicks - ScreenSing.MessageTime)/1000 > MAX_MESSAGE) then + begin + if (ScreenSing.MessageTimeFade = 0) then + ScreenSing.MessageTimeFade := SDL_GetTicks(); + + factor := (SDL_GetTicks - ScreenSing.MessageTimeFade)/1000/2; + + ScreenSing.Statics[ScreenSing.InfoMessageBG].Texture.Alpha := 1 - factor; + ScreenSing.Text[ScreenSing.InfoMessageText].Alpha := 1 - factor; + end + else + ScreenSing.MessageTimeFade := 0; + + ScreenSing.Statics[ScreenSing.InfoMessageBG].Draw; + ScreenSing.Text[ScreenSing.InfoMessageText].Draw; +end; + +procedure TScreenSingView.CloseMessage(); +begin + ScreenSing.Statics[ScreenSing.InfoMessageBG].Visible := false; + ScreenSing.Text[ScreenSing.InfoMessageText].Visible := false; +end; + +procedure TScreenSingView.MedleyTitleFadeOut(); +var + I: integer; + Alpha: real; + CTime: cardinal; +begin + + CTime := SDL_GetTicks() - ScreenSing.TextMedleyFadeTime; + Alpha := CTime/3000; + + if (Alpha >= 1) then + begin + ScreenSing.Statics[SongNameStatic].Visible := false; + ScreenSing.Text[SongNameText].Visible := false; + end + else + begin + ScreenSing.Text[SongNameText].Alpha := 1 - Alpha; + ScreenSing.Statics[SongNameStatic].Texture.Alpha := 1 - Alpha; + end; +end; + +function TScreenSingView.GetLyricColor(Color: integer): TRGB; +begin + case (Color) of + 1://blue + begin + Result.R := 5/255; + Result.G := 153/255; + Result.B := 204/255; + end; + 2: //red + begin + Result.R := 230/255; + Result.G := 0; + Result.B := 0; + end; + 3: //green + begin + Result.R := 0; + Result.G := 170/255; + Result.B := 0; + end; + 4: //yellow + begin + Result.R := 255/255; + Result.G := 225/255; + Result.B := 0; + end; + 5: //orange + begin + Result.R := 227/255; + Result.G := 127/255; + Result.B := 0; + end; + 6: //pink + begin + Result.R := 255/255; + Result.G := 0/255; + Result.B := 130/255; + end; + 7: //purple + begin + Result.R := 180/255; + Result.G := 0; + Result.B := 220/255; + end; + 8: //gold + begin + Result.R := 255/255; + Result.G := 190/255; + Result.B := 35/255; + end; + 9: //gray + begin + Result.R := 80/255; + Result.G := 80/255; + Result.B := 80/255; + end; + 10: //dark blue + begin + Result.R := 90/255; + Result.G := 90/255; + Result.B := 240/255; + end; + 11: //sky + begin + Result.R := 0; + Result.G := 110/255; + Result.B := 210/255; + end; + 12: //cyan + begin + Result.R := 0/255; + Result.G := 215/255; + Result.B := 215/255; + end; + 13: //flame + begin + Result.R := 210/255; + Result.G := 70/255; + Result.B := 0/255; + end; + 14: //orchid + begin + Result.R := 210/255; + Result.G := 0; + Result.B := 210/255; + end; + 15: //harlequin + begin + Result.R := 110/255; + Result.G := 210/255; + Result.B := 0; + end; + 16: //lime + begin + Result.R := 160/255; + Result.G := 210/255; + Result.B := 0; + end; + else//blue + begin + Result.R := 5/255; + Result.G := 153/255; + Result.B := 204/255; + end; + end; +end; + +procedure TScreenSingView.DrawInfoLyricBar(); +var + SongStart, SongEnd: real; + ww: real; + + pos: real; + br: real; + + line: integer; + numLines: integer; + + x, y, w, h: real; + CurrentLine: integer; + GAPxStart, GAPw: real; +begin + x := Theme.Sing.StaticTimeProgress.x; + y := Theme.Sing.StaticTimeProgress.y; + + w := Theme.Sing.StaticTimeProgress.w; + h := Theme.Sing.StaticTimeProgress.h; + + //calculate x (position of song start on the time-bar) + GAPxStart := w*((CurrentSong.GAP/1000)/LyricsState.TotalTime); + x := x + GAPxStart; //move x to the right by Song-Gap-Seconds + + //width + //LastLine := Lines[0].Line[Length(Lines[0].Line) - 1]; + w := w - GAPxStart; + + //calculate total singing seconds of song + SongStart := 99999999999999; + SongEnd := CurrentSong.BPM[0].BPM*TotalTime/60; + for CurrentLine := 0 to High(Lines) do //P1 of Duett or standard, P2 of Duett,.. + begin + numLines := Length(Lines[CurrentLine].Line); //Lyric lines + if (numLines < 2) then //catch cases which could cause endless loop + Exit; + if SongStart > (Lines[CurrentLine].Line[0].Note[0].Start+(CurrentSong.BPM[0].BPM*CurrentSong.GAP*(1/60/1000))) then + SongStart := Lines[CurrentLine].Line[0].Note[0].Start + (CurrentSong.BPM[0].BPM*CurrentSong.GAP*(1/60/1000)); + end; + ww := SongEnd - SongStart; + + for CurrentLine := 0 to High(Lines) do //for P1 of Duett-lyrics or standard-lyrics, P2 of Duett,.. + begin + numLines := Length(Lines[CurrentLine].Line); //Lyric lines + if (numLines < 2) then //catch cases which could cause endless loop + Exit; + //set color to player.color + if (CurrentLine = 0) then + glColor4f(GetLyricColor(Ini.SingColor[0]).R, GetLyricColor(Ini.SingColor[0]).G, GetLyricColor(Ini.SingColor[0]).B, 0.8) + else + glColor4f(GetLyricColor(Ini.SingColor[CurrentLine]).R, GetLyricColor(Ini.SingColor[CurrentLine]).G, GetLyricColor(Ini.SingColor[CurrentLine]).B, 0.4); + + glbegin(gl_quads); + for line := 0 to numLines - 1 do + begin + if (Lines[CurrentLine].Line[line].Note = nil) or (ww < Lines[CurrentLine].Line[line].Note[Lines[CurrentLine].Line[line].HighNote].Start) then Continue; + pos := (Lines[CurrentLine].Line[line].Note[0].Start)/ww*w; + br := (Lines[CurrentLine].Line[line].Note[Lines[CurrentLine].Line[line].HighNote].Start + + Lines[CurrentLine].Line[line].Note[Lines[CurrentLine].Line[line].HighNote].Length - + Lines[CurrentLine].Line[line].Note[0].Start ) / ww*w; //br = last note of sentence position + its length - first note of sentence position + + //draw a square + glVertex2f(x+pos, y); //left top + glVertex2f(x+pos, y+h); //left bottom + glVertex2f(x+pos+br, y+h); //right bottom + glVertex2f(x+pos+br, y); //right top + + end; + glEnd; + end; +end; + +end. + diff --git a/src/switches.inc b/src/switches.inc index 18b88d71..413ab558 100644 --- a/src/switches.inc +++ b/src/switches.inc @@ -1,3 +1,25 @@ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} + // prevent pasdoc from parsing this file {$IFNDEF PASDOC} @@ -98,6 +120,9 @@ {$DEFINE UseFFmpegResample} {$DEFINE FF_API_AVCODEC_RESAMPLE} {$DEFINE UseFFmpegVideo} + {$IFDEF HaveSWResample} + {$DEFINE UseSWResample} + {$ENDIF} {$IFDEF HaveSWScale} {$DEFINE UseSWScale} {$ENDIF} diff --git a/src/ultrastardx-unix.lpi b/src/ultrastardx-unix.lpi deleted file mode 100644 index 4160f850..00000000 --- a/src/ultrastardx-unix.lpi +++ /dev/null @@ -1,598 +0,0 @@ -<?xml version="1.0"?> -<CONFIG> - <ProjectOptions> - <PathDelim Value="/"/> - <Version Value="7"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - <LRSInOutputDirectory Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <TargetFileExt Value=""/> - <Title Value="ultrastardx"/> - </General> - <VersionInfo> - <ProjectVersion Value=""/> - </VersionInfo> - <PublishOptions> - <Version Value="2"/> - <IgnoreBinaries Value="False"/> - <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> - <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> - </local> - </RunParams> - <Units Count="127"> - <Unit0> - <Filename Value="ultrastardx.dpr"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ultrastardx"/> - </Unit0> - <Unit1> - <Filename Value="base/TextGL.pas"/> - <IsPartOfProject Value="True"/> - </Unit1> - <Unit2> - <Filename Value="base/UCatCovers.pas"/> - <IsPartOfProject Value="True"/> - </Unit2> - <Unit3> - <Filename Value="base/UCommandLine.pas"/> - <IsPartOfProject Value="True"/> - </Unit3> - <Unit4> - <Filename Value="base/UCommon.pas"/> - <IsPartOfProject Value="True"/> - </Unit4> - <Unit5> - <Filename Value="base/UConfig.pas"/> - <IsPartOfProject Value="True"/> - </Unit5> - <Unit6> - <Filename Value="base/UCore.pas"/> - <IsPartOfProject Value="True"/> - </Unit6> - <Unit7> - <Filename Value="base/UCoreModule.pas"/> - <IsPartOfProject Value="True"/> - </Unit7> - <Unit8> - <Filename Value="base/UCovers.pas"/> - <IsPartOfProject Value="True"/> - </Unit8> - <Unit9> - <Filename Value="base/UDLLManager.pas"/> - <IsPartOfProject Value="True"/> - </Unit9> - <Unit10> - <Filename Value="base/UDataBase.pas"/> - <IsPartOfProject Value="True"/> - </Unit10> - <Unit11> - <Filename Value="base/UDraw.pas"/> - <IsPartOfProject Value="True"/> - </Unit11> - <Unit12> - <Filename Value="base/UEditorLyrics.pas"/> - <IsPartOfProject Value="True"/> - </Unit12> - <Unit13> - <Filename Value="base/UFiles.pas"/> - <IsPartOfProject Value="True"/> - </Unit13> - <Unit14> - <Filename Value="base/UFont.pas"/> - <IsPartOfProject Value="True"/> - </Unit14> - <Unit15> - <Filename Value="base/UGraphic.pas"/> - <IsPartOfProject Value="True"/> - </Unit15> - <Unit16> - <Filename Value="base/UGraphicClasses.pas"/> - <IsPartOfProject Value="True"/> - </Unit16> - <Unit17> - <Filename Value="base/UHooks.pas"/> - <IsPartOfProject Value="True"/> - </Unit17> - <Unit18> - <Filename Value="base/UImage.pas"/> - <IsPartOfProject Value="True"/> - </Unit18> - <Unit19> - <Filename Value="base/UIni.pas"/> - <IsPartOfProject Value="True"/> - </Unit19> - <Unit20> - <Filename Value="base/UJoystick.pas"/> - <IsPartOfProject Value="True"/> - </Unit20> - <Unit21> - <Filename Value="base/ULanguage.pas"/> - <IsPartOfProject Value="True"/> - </Unit21> - <Unit22> - <Filename Value="base/ULog.pas"/> - <IsPartOfProject Value="True"/> - </Unit22> - <Unit23> - <Filename Value="base/ULyrics.pas"/> - <IsPartOfProject Value="True"/> - </Unit23> - <Unit24> - <Filename Value="base/UMain.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UMain"/> - </Unit24> - <Unit25> - <Filename Value="base/UMusic.pas"/> - <IsPartOfProject Value="True"/> - </Unit25> - <Unit26> - <Filename Value="base/UParty.pas"/> - <IsPartOfProject Value="True"/> - </Unit26> - <Unit27> - <Filename Value="base/UPlatform.pas"/> - <IsPartOfProject Value="True"/> - </Unit27> - <Unit28> - <Filename Value="base/UPlatformLinux.pas"/> - <IsPartOfProject Value="True"/> - </Unit28> - <Unit29> - <Filename Value="base/UPlatformMacOSX.pas"/> - <IsPartOfProject Value="True"/> - </Unit29> - <Unit30> - <Filename Value="base/UPlatformWindows.pas"/> - <IsPartOfProject Value="True"/> - </Unit30> - <Unit31> - <Filename Value="base/UPlaylist.pas"/> - <IsPartOfProject Value="True"/> - </Unit31> - <Unit32> - <Filename Value="base/UPluginInterface.pas"/> - <IsPartOfProject Value="True"/> - </Unit32> - <Unit33> - <Filename Value="base/UPluginLoader.pas"/> - <IsPartOfProject Value="True"/> - </Unit33> - <Unit34> - <Filename Value="base/URecord.pas"/> - <IsPartOfProject Value="True"/> - </Unit34> - <Unit35> - <Filename Value="base/URingBuffer.pas"/> - <IsPartOfProject Value="True"/> - </Unit35> - <Unit36> - <Filename Value="base/UServices.pas"/> - <IsPartOfProject Value="True"/> - </Unit36> - <Unit37> - <Filename Value="base/USingNotes.pas"/> - <IsPartOfProject Value="True"/> - </Unit37> - <Unit38> - <Filename Value="base/USingScores.pas"/> - <IsPartOfProject Value="True"/> - </Unit38> - <Unit39> - <Filename Value="base/USkins.pas"/> - <IsPartOfProject Value="True"/> - </Unit39> - <Unit40> - <Filename Value="base/USong.pas"/> - <IsPartOfProject Value="True"/> - </Unit40> - <Unit41> - <Filename Value="base/USongs.pas"/> - <IsPartOfProject Value="True"/> - </Unit41> - <Unit42> - <Filename Value="base/UTextClasses.pas"/> - <IsPartOfProject Value="True"/> - </Unit42> - <Unit43> - <Filename Value="base/UTexture.pas"/> - <IsPartOfProject Value="True"/> - </Unit43> - <Unit44> - <Filename Value="base/UThemes.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UThemes"/> - </Unit44> - <Unit45> - <Filename Value="base/UTime.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UTime"/> - </Unit45> - <Unit46> - <Filename Value="base/UXMLSong.pas"/> - <IsPartOfProject Value="True"/> - </Unit46> - <Unit47> - <Filename Value="menu/UDisplay.pas"/> - <IsPartOfProject Value="True"/> - </Unit47> - <Unit48> - <Filename Value="menu/UDrawTexture.pas"/> - <IsPartOfProject Value="True"/> - </Unit48> - <Unit49> - <Filename Value="menu/UMenu.pas"/> - <IsPartOfProject Value="True"/> - </Unit49> - <Unit50> - <Filename Value="menu/UMenuBackground.pas"/> - <IsPartOfProject Value="True"/> - </Unit50> - <Unit51> - <Filename Value="menu/UMenuBackgroundColor.pas"/> - <IsPartOfProject Value="True"/> - </Unit51> - <Unit52> - <Filename Value="menu/UMenuBackgroundFade.pas"/> - <IsPartOfProject Value="True"/> - </Unit52> - <Unit53> - <Filename Value="menu/UMenuBackgroundNone.pas"/> - <IsPartOfProject Value="True"/> - </Unit53> - <Unit54> - <Filename Value="menu/UMenuBackgroundTexture.pas"/> - <IsPartOfProject Value="True"/> - </Unit54> - <Unit55> - <Filename Value="menu/UMenuBackgroundVideo.pas"/> - <IsPartOfProject Value="True"/> - </Unit55> - <Unit56> - <Filename Value="menu/UMenuButton.pas"/> - <IsPartOfProject Value="True"/> - </Unit56> - <Unit57> - <Filename Value="menu/UMenuButtonCollection.pas"/> - <IsPartOfProject Value="True"/> - </Unit57> - <Unit58> - <Filename Value="menu/UMenuEqualizer.pas"/> - <IsPartOfProject Value="True"/> - </Unit58> - <Unit59> - <Filename Value="menu/UMenuInteract.pas"/> - <IsPartOfProject Value="True"/> - </Unit59> - <Unit60> - <Filename Value="menu/UMenuSelectSlide.pas"/> - <IsPartOfProject Value="True"/> - </Unit60> - <Unit61> - <Filename Value="menu/UMenuStatic.pas"/> - <IsPartOfProject Value="True"/> - </Unit61> - <Unit62> - <Filename Value="menu/UMenuText.pas"/> - <IsPartOfProject Value="True"/> - </Unit62> - <Unit63> - <Filename Value="screens/UScreenCredits.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UScreenCredits"/> - </Unit63> - <Unit64> - <Filename Value="screens/UScreenEdit.pas"/> - <IsPartOfProject Value="True"/> - </Unit64> - <Unit65> - <Filename Value="screens/UScreenEditConvert.pas"/> - <IsPartOfProject Value="True"/> - </Unit65> - <Unit66> - <Filename Value="screens/UScreenEditHeader.pas"/> - <IsPartOfProject Value="True"/> - </Unit66> - <Unit67> - <Filename Value="screens/UScreenEditSub.pas"/> - <IsPartOfProject Value="True"/> - </Unit67> - <Unit68> - <Filename Value="screens/UScreenLevel.pas"/> - <IsPartOfProject Value="True"/> - </Unit68> - <Unit69> - <Filename Value="screens/UScreenLoading.pas"/> - <IsPartOfProject Value="True"/> - </Unit69> - <Unit70> - <Filename Value="screens/UScreenMain.pas"/> - <IsPartOfProject Value="True"/> - </Unit70> - <Unit71> - <Filename Value="screens/UScreenName.pas"/> - <IsPartOfProject Value="True"/> - </Unit71> - <Unit72> - <Filename Value="screens/UScreenOpen.pas"/> - <IsPartOfProject Value="True"/> - </Unit72> - <Unit73> - <Filename Value="screens/UScreenOptions.pas"/> - <IsPartOfProject Value="True"/> - </Unit73> - <Unit74> - <Filename Value="screens/UScreenOptionsAdvanced.pas"/> - <IsPartOfProject Value="True"/> - </Unit74> - <Unit75> - <Filename Value="screens/UScreenOptionsGame.pas"/> - <IsPartOfProject Value="True"/> - </Unit75> - <Unit76> - <Filename Value="screens/UScreenOptionsGraphics.pas"/> - <IsPartOfProject Value="True"/> - </Unit76> - <Unit77> - <Filename Value="screens/UScreenOptionsLyrics.pas"/> - <IsPartOfProject Value="True"/> - </Unit77> - <Unit78> - <Filename Value="screens/UScreenOptionsRecord.pas"/> - <IsPartOfProject Value="True"/> - </Unit78> - <Unit79> - <Filename Value="screens/UScreenOptionsSound.pas"/> - <IsPartOfProject Value="True"/> - </Unit79> - <Unit80> - <Filename Value="screens/UScreenOptionsThemes.pas"/> - <IsPartOfProject Value="True"/> - </Unit80> - <Unit81> - <Filename Value="screens/UScreenPartyNewRound.pas"/> - <IsPartOfProject Value="True"/> - </Unit81> - <Unit82> - <Filename Value="screens/UScreenPartyOptions.pas"/> - <IsPartOfProject Value="True"/> - </Unit82> - <Unit83> - <Filename Value="screens/UScreenPartyPlayer.pas"/> - <IsPartOfProject Value="True"/> - </Unit83> - <Unit84> - <Filename Value="screens/UScreenPartyScore.pas"/> - <IsPartOfProject Value="True"/> - </Unit84> - <Unit85> - <Filename Value="screens/UScreenPartyWin.pas"/> - <IsPartOfProject Value="True"/> - </Unit85> - <Unit86> - <Filename Value="screens/UScreenPopup.pas"/> - <IsPartOfProject Value="True"/> - </Unit86> - <Unit87> - <Filename Value="screens/UScreenScore.pas"/> - <IsPartOfProject Value="True"/> - </Unit87> - <Unit88> - <Filename Value="screens/UScreenSing.pas"/> - <IsPartOfProject Value="True"/> - </Unit88> - <Unit89> - <Filename Value="screens/UScreenSingModi.pas"/> - <IsPartOfProject Value="True"/> - </Unit89> - <Unit90> - <Filename Value="screens/UScreenSong.pas"/> - <IsPartOfProject Value="True"/> - </Unit90> - <Unit91> - <Filename Value="screens/UScreenSongJumpto.pas"/> - <IsPartOfProject Value="True"/> - </Unit91> - <Unit92> - <Filename Value="screens/UScreenSongMenu.pas"/> - <IsPartOfProject Value="True"/> - </Unit92> - <Unit93> - <Filename Value="screens/UScreenStatDetail.pas"/> - <IsPartOfProject Value="True"/> - </Unit93> - <Unit94> - <Filename Value="screens/UScreenStatMain.pas"/> - <IsPartOfProject Value="True"/> - </Unit94> - <Unit95> - <Filename Value="screens/UScreenTop5.pas"/> - <IsPartOfProject Value="True"/> - </Unit95> - <Unit96> - <Filename Value="screens/UScreenWelcome.pas"/> - <IsPartOfProject Value="True"/> - </Unit96> - <Unit97> - <Filename Value="media/UAudioConverter.pas"/> - <IsPartOfProject Value="True"/> - </Unit97> - <Unit98> - <Filename Value="media/UAudioCore_Bass.pas"/> - <IsPartOfProject Value="True"/> - </Unit98> - <Unit99> - <Filename Value="media/UAudioCore_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - </Unit99> - <Unit100> - <Filename Value="media/UAudioDecoder_Bass.pas"/> - <IsPartOfProject Value="True"/> - </Unit100> - <Unit101> - <Filename Value="media/UAudioDecoder_FFmpeg.pas"/> - <IsPartOfProject Value="True"/> - </Unit101> - <Unit102> - <Filename Value="media/UAudioInput_Bass.pas"/> - <IsPartOfProject Value="True"/> - </Unit102> - <Unit103> - <Filename Value="media/UAudioInput_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - </Unit103> - <Unit104> - <Filename Value="media/UAudioPlaybackBase.pas"/> - <IsPartOfProject Value="True"/> - </Unit104> - <Unit105> - <Filename Value="media/UAudioPlayback_Bass.pas"/> - <IsPartOfProject Value="True"/> - </Unit105> - <Unit106> - <Filename Value="media/UAudioPlayback_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - </Unit106> - <Unit107> - <Filename Value="media/UAudioPlayback_SDL.pas"/> - <IsPartOfProject Value="True"/> - </Unit107> - <Unit108> - <Filename Value="media/UAudioPlayback_SoftMixer.pas"/> - <IsPartOfProject Value="True"/> - </Unit108> - <Unit109> - <Filename Value="media/UMediaCore_FFmpeg.pas"/> - <IsPartOfProject Value="True"/> - </Unit109> - <Unit110> - <Filename Value="media/UMediaCore_SDL.pas"/> - <IsPartOfProject Value="True"/> - </Unit110> - <Unit111> - <Filename Value="media/UMedia_dummy.pas"/> - <IsPartOfProject Value="True"/> - </Unit111> - <Unit112> - <Filename Value="media/UVideo.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UVideo"/> - </Unit112> - <Unit113> - <Filename Value="media/UVisualizer.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UVisualizer"/> - </Unit113> - <Unit114> - <Filename Value="config-linux.inc"/> - <IsPartOfProject Value="True"/> - </Unit114> - <Unit115> - <Filename Value="paths.inc"/> - <IsPartOfProject Value="True"/> - </Unit115> - <Unit116> - <Filename Value="switches.inc"/> - <IsPartOfProject Value="True"/> - </Unit116> - <Unit117> - <Filename Value="lua/UHookableEvent.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UHookableEvent"/> - </Unit117> - <Unit118> - <Filename Value="lua/ULuaCore.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaCore"/> - </Unit118> - <Unit119> - <Filename Value="lua/ULuaGl.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaGl"/> - </Unit119> - <Unit120> - <Filename Value="lua/ULuaLog.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaLog"/> - </Unit120> - <Unit121> - <Filename Value="lua/ULuaParty.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaParty"/> - </Unit121> - <Unit122> - <Filename Value="lua/ULuaScreenSing.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaScreenSing"/> - </Unit122> - <Unit123> - <Filename Value="lua/ULuaTextGL.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaTextGL"/> - </Unit123> - <Unit124> - <Filename Value="lua/ULuaTexture.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaTexture"/> - </Unit124> - <Unit125> - <Filename Value="lua/ULuaUsdx.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaUsdx"/> - </Unit125> - <Unit126> - <Filename Value="lua/ULuaUtils.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="ULuaUtils"/> - </Unit126> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="8"/> - <Target> - <Filename Value="../game/ultrastardx"/> - </Target> - <SearchPaths> - <IncludeFiles Value="lib/JEDI-SDL/SDL/Pas/"/> - <OtherUnitFiles Value="base/;menu/;screens/;media/;lib/;lua/"/> - <UnitOutputDirectory Value="../build/fpc-$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - <Parsing> - <SyntaxOptions> - <CStyleOperator Value="False"/> - <AllowLabel Value="False"/> - </SyntaxOptions> - </Parsing> - <Linking> - <Debugging> - <GenerateDebugInfo Value="True"/> - </Debugging> - </Linking> - <Other> - <Verbosity> - <ShowNotes Value="False"/> - <ShowHints Value="False"/> - </Verbosity> - <CompilerPath Value="$(CompPath)"/> - <ExecuteBefore> - <Command Value="/usr/bin/make"/> - <ScanForFPCMsgs Value="True"/> - <ScanForMakeMsgs Value="True"/> - </ExecuteBefore> - <ExecuteAfter> - <CompileReasons Compile="False" Build="False" Run="False"/> - </ExecuteAfter> - </Other> - <CompileReasons Compile="False" Build="False" Run="False"/> - </CompilerOptions> -</CONFIG> diff --git a/src/ultrastardx-win.lpi b/src/ultrastardx-win.lpi deleted file mode 100644 index b8c737cb..00000000 --- a/src/ultrastardx-win.lpi +++ /dev/null @@ -1,629 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <PathDelim Value="\"/> - <General> - <Flags> - <MainUnitHasCreateFormStatements Value="False"/> - <MainUnitHasTitleStatement Value="False"/> - <LRSInOutputDirectory Value="False"/> - </Flags> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="ultrastardx"/> - <UseXPManifest Value="True"/> - <XPManifest> - <DpiAware Value="True"/> - </XPManifest> - </General> - <VersionInfo> - <MajorVersionNr Value="1"/> - <MinorVersionNr Value="2"/> - <RevisionNr Value="1"/> - <Attributes pvaDebug="True"/> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - <IgnoreBinaries Value="False"/> - <IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/> - <ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> - </local> - </RunParams> - <RequiredPackages Count="1"> - <Item1> - <PackageName Value="LazUtils"/> - </Item1> - </RequiredPackages> - <Units Count="131"> - <Unit0> - <Filename Value="ultrastardx.dpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - <Unit1> - <Filename Value="base\UXMLSong.pas"/> - <IsPartOfProject Value="True"/> - </Unit1> - <Unit2> - <Filename Value="base\TextGL.pas"/> - <IsPartOfProject Value="True"/> - </Unit2> - <Unit3> - <Filename Value="base\UCatCovers.pas"/> - <IsPartOfProject Value="True"/> - </Unit3> - <Unit4> - <Filename Value="base\UCommandLine.pas"/> - <IsPartOfProject Value="True"/> - </Unit4> - <Unit5> - <Filename Value="base\UCommon.pas"/> - <IsPartOfProject Value="True"/> - </Unit5> - <Unit6> - <Filename Value="base\UCovers.pas"/> - <IsPartOfProject Value="True"/> - </Unit6> - <Unit7> - <Filename Value="base\UDataBase.pas"/> - <IsPartOfProject Value="True"/> - </Unit7> - <Unit8> - <Filename Value="base\UDLLManager.pas"/> - <IsPartOfProject Value="True"/> - </Unit8> - <Unit9> - <Filename Value="base\UDraw.pas"/> - <IsPartOfProject Value="True"/> - </Unit9> - <Unit10> - <Filename Value="base\UEditorLyrics.pas"/> - <IsPartOfProject Value="True"/> - </Unit10> - <Unit11> - <Filename Value="base\UFiles.pas"/> - <IsPartOfProject Value="True"/> - </Unit11> - <Unit12> - <Filename Value="base\UFont.pas"/> - <IsPartOfProject Value="True"/> - </Unit12> - <Unit13> - <Filename Value="base\UGraphic.pas"/> - <IsPartOfProject Value="True"/> - </Unit13> - <Unit14> - <Filename Value="base\UGraphicClasses.pas"/> - <IsPartOfProject Value="True"/> - </Unit14> - <Unit15> - <Filename Value="base\UImage.pas"/> - <IsPartOfProject Value="True"/> - </Unit15> - <Unit16> - <Filename Value="base\UIni.pas"/> - <IsPartOfProject Value="True"/> - </Unit16> - <Unit17> - <Filename Value="base\UJoystick.pas"/> - <IsPartOfProject Value="True"/> - </Unit17> - <Unit18> - <Filename Value="base\ULanguage.pas"/> - <IsPartOfProject Value="True"/> - </Unit18> - <Unit19> - <Filename Value="base\ULog.pas"/> - <IsPartOfProject Value="True"/> - </Unit19> - <Unit20> - <Filename Value="base\ULyrics.pas"/> - <IsPartOfProject Value="True"/> - </Unit20> - <Unit21> - <Filename Value="base\UMain.pas"/> - <IsPartOfProject Value="True"/> - </Unit21> - <Unit22> - <Filename Value="base\UMusic.pas"/> - <IsPartOfProject Value="True"/> - </Unit22> - <Unit23> - <Filename Value="base\UParty.pas"/> - <IsPartOfProject Value="True"/> - </Unit23> - <Unit24> - <Filename Value="base\UPlatform.pas"/> - <IsPartOfProject Value="True"/> - </Unit24> - <Unit25> - <Filename Value="base\UPlatformLinux.pas"/> - <IsPartOfProject Value="True"/> - </Unit25> - <Unit26> - <Filename Value="base\UPlatformMacOSX.pas"/> - <IsPartOfProject Value="True"/> - </Unit26> - <Unit27> - <Filename Value="base\UPlatformWindows.pas"/> - <IsPartOfProject Value="True"/> - </Unit27> - <Unit28> - <Filename Value="base\UPlaylist.pas"/> - <IsPartOfProject Value="True"/> - </Unit28> - <Unit29> - <Filename Value="base\URecord.pas"/> - <IsPartOfProject Value="True"/> - </Unit29> - <Unit30> - <Filename Value="base\URingBuffer.pas"/> - <IsPartOfProject Value="True"/> - </Unit30> - <Unit31> - <Filename Value="base\USingNotes.pas"/> - <IsPartOfProject Value="True"/> - </Unit31> - <Unit32> - <Filename Value="base\USingScores.pas"/> - <IsPartOfProject Value="True"/> - </Unit32> - <Unit33> - <Filename Value="base\USkins.pas"/> - <IsPartOfProject Value="True"/> - </Unit33> - <Unit34> - <Filename Value="base\USong.pas"/> - <IsPartOfProject Value="True"/> - </Unit34> - <Unit35> - <Filename Value="base\USongs.pas"/> - <IsPartOfProject Value="True"/> - </Unit35> - <Unit36> - <Filename Value="base\UTexture.pas"/> - <IsPartOfProject Value="True"/> - </Unit36> - <Unit37> - <Filename Value="base\UThemes.pas"/> - <IsPartOfProject Value="True"/> - </Unit37> - <Unit38> - <Filename Value="base\UTime.pas"/> - <IsPartOfProject Value="True"/> - </Unit38> - <Unit39> - <Filename Value="menu\UMenuText.pas"/> - <IsPartOfProject Value="True"/> - </Unit39> - <Unit40> - <Filename Value="menu\UDisplay.pas"/> - <IsPartOfProject Value="True"/> - </Unit40> - <Unit41> - <Filename Value="menu\UDrawTexture.pas"/> - <IsPartOfProject Value="True"/> - </Unit41> - <Unit42> - <Filename Value="menu\UMenu.pas"/> - <IsPartOfProject Value="True"/> - </Unit42> - <Unit43> - <Filename Value="menu\UMenuBackground.pas"/> - <IsPartOfProject Value="True"/> - </Unit43> - <Unit44> - <Filename Value="menu\UMenuBackgroundColor.pas"/> - <IsPartOfProject Value="True"/> - </Unit44> - <Unit45> - <Filename Value="menu\UMenuBackgroundFade.pas"/> - <IsPartOfProject Value="True"/> - </Unit45> - <Unit46> - <Filename Value="menu\UMenuBackgroundNone.pas"/> - <IsPartOfProject Value="True"/> - </Unit46> - <Unit47> - <Filename Value="menu\UMenuBackgroundTexture.pas"/> - <IsPartOfProject Value="True"/> - </Unit47> - <Unit48> - <Filename Value="menu\UMenuBackgroundVideo.pas"/> - <IsPartOfProject Value="True"/> - </Unit48> - <Unit49> - <Filename Value="menu\UMenuButton.pas"/> - <IsPartOfProject Value="True"/> - </Unit49> - <Unit50> - <Filename Value="menu\UMenuButtonCollection.pas"/> - <IsPartOfProject Value="True"/> - </Unit50> - <Unit51> - <Filename Value="menu\UMenuEqualizer.pas"/> - <IsPartOfProject Value="True"/> - </Unit51> - <Unit52> - <Filename Value="menu\UMenuInteract.pas"/> - <IsPartOfProject Value="True"/> - </Unit52> - <Unit53> - <Filename Value="menu\UMenuSelectSlide.pas"/> - <IsPartOfProject Value="True"/> - </Unit53> - <Unit54> - <Filename Value="menu\UMenuStatic.pas"/> - <IsPartOfProject Value="True"/> - </Unit54> - <Unit55> - <Filename Value="screens\UScreenCredits.pas"/> - <IsPartOfProject Value="True"/> - </Unit55> - <Unit56> - <Filename Value="screens\UScreenEdit.pas"/> - <IsPartOfProject Value="True"/> - </Unit56> - <Unit57> - <Filename Value="screens\UScreenEditConvert.pas"/> - <IsPartOfProject Value="True"/> - </Unit57> - <Unit58> - <Filename Value="screens\UScreenEditHeader.pas"/> - <IsPartOfProject Value="True"/> - </Unit58> - <Unit59> - <Filename Value="screens\UScreenEditSub.pas"/> - <IsPartOfProject Value="True"/> - </Unit59> - <Unit60> - <Filename Value="screens\UScreenLevel.pas"/> - <IsPartOfProject Value="True"/> - </Unit60> - <Unit61> - <Filename Value="screens\UScreenLoading.pas"/> - <IsPartOfProject Value="True"/> - </Unit61> - <Unit62> - <Filename Value="screens\UScreenMain.pas"/> - <IsPartOfProject Value="True"/> - </Unit62> - <Unit63> - <Filename Value="screens\UScreenName.pas"/> - <IsPartOfProject Value="True"/> - </Unit63> - <Unit64> - <Filename Value="screens\UScreenOpen.pas"/> - <IsPartOfProject Value="True"/> - </Unit64> - <Unit65> - <Filename Value="screens\UScreenOptions.pas"/> - <IsPartOfProject Value="True"/> - </Unit65> - <Unit66> - <Filename Value="screens\UScreenOptionsAdvanced.pas"/> - <IsPartOfProject Value="True"/> - </Unit66> - <Unit67> - <Filename Value="screens\UScreenOptionsGame.pas"/> - <IsPartOfProject Value="True"/> - </Unit67> - <Unit68> - <Filename Value="screens\UScreenOptionsGraphics.pas"/> - <IsPartOfProject Value="True"/> - </Unit68> - <Unit69> - <Filename Value="screens\UScreenOptionsLyrics.pas"/> - <IsPartOfProject Value="True"/> - </Unit69> - <Unit70> - <Filename Value="screens\UScreenOptionsRecord.pas"/> - <IsPartOfProject Value="True"/> - </Unit70> - <Unit71> - <Filename Value="screens\UScreenOptionsSound.pas"/> - <IsPartOfProject Value="True"/> - </Unit71> - <Unit72> - <Filename Value="screens\UScreenOptionsThemes.pas"/> - <IsPartOfProject Value="True"/> - </Unit72> - <Unit73> - <Filename Value="screens\UScreenPartyNewRound.pas"/> - <IsPartOfProject Value="True"/> - </Unit73> - <Unit74> - <Filename Value="screens\UScreenPartyOptions.pas"/> - <IsPartOfProject Value="True"/> - </Unit74> - <Unit75> - <Filename Value="screens\UScreenPartyPlayer.pas"/> - <IsPartOfProject Value="True"/> - </Unit75> - <Unit76> - <Filename Value="screens\UScreenPartyScore.pas"/> - <IsPartOfProject Value="True"/> - </Unit76> - <Unit77> - <Filename Value="screens\UScreenPartyWin.pas"/> - <IsPartOfProject Value="True"/> - </Unit77> - <Unit78> - <Filename Value="screens\UScreenPopup.pas"/> - <IsPartOfProject Value="True"/> - </Unit78> - <Unit79> - <Filename Value="screens\UScreenScore.pas"/> - <IsPartOfProject Value="True"/> - </Unit79> - <Unit80> - <Filename Value="screens\UScreenSing.pas"/> - <IsPartOfProject Value="True"/> - </Unit80> - <Unit81> - <Filename Value="screens\UScreenSong.pas"/> - <IsPartOfProject Value="True"/> - </Unit81> - <Unit82> - <Filename Value="screens\UScreenSongJumpto.pas"/> - <IsPartOfProject Value="True"/> - </Unit82> - <Unit83> - <Filename Value="screens\UScreenSongMenu.pas"/> - <IsPartOfProject Value="True"/> - </Unit83> - <Unit84> - <Filename Value="screens\UScreenStatDetail.pas"/> - <IsPartOfProject Value="True"/> - </Unit84> - <Unit85> - <Filename Value="screens\UScreenStatMain.pas"/> - <IsPartOfProject Value="True"/> - </Unit85> - <Unit86> - <Filename Value="screens\UScreenTop5.pas"/> - <IsPartOfProject Value="True"/> - </Unit86> - <Unit87> - <Filename Value="media\UVisualizer.pas"/> - <IsPartOfProject Value="True"/> - </Unit87> - <Unit88> - <Filename Value="media\UAudioConverter.pas"/> - <IsPartOfProject Value="True"/> - </Unit88> - <Unit89> - <Filename Value="media\UAudioCore_Bass.pas"/> - <IsPartOfProject Value="True"/> - </Unit89> - <Unit90> - <Filename Value="media\UAudioCore_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - </Unit90> - <Unit91> - <Filename Value="media\UAudioDecoder_Bass.pas"/> - <IsPartOfProject Value="True"/> - </Unit91> - <Unit92> - <Filename Value="media\UAudioDecoder_FFmpeg.pas"/> - <IsPartOfProject Value="True"/> - </Unit92> - <Unit93> - <Filename Value="media\UAudioInput_Bass.pas"/> - <IsPartOfProject Value="True"/> - </Unit93> - <Unit94> - <Filename Value="media\UAudioInput_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - </Unit94> - <Unit95> - <Filename Value="media\UAudioPlayback_Bass.pas"/> - <IsPartOfProject Value="True"/> - </Unit95> - <Unit96> - <Filename Value="media\UAudioPlayback_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - </Unit96> - <Unit97> - <Filename Value="media\UAudioPlayback_SDL.pas"/> - <IsPartOfProject Value="True"/> - </Unit97> - <Unit98> - <Filename Value="media\UAudioPlayback_SoftMixer.pas"/> - <IsPartOfProject Value="True"/> - </Unit98> - <Unit99> - <Filename Value="media\UAudioPlaybackBase.pas"/> - <IsPartOfProject Value="True"/> - </Unit99> - <Unit100> - <Filename Value="media\UMedia_dummy.pas"/> - <IsPartOfProject Value="True"/> - </Unit100> - <Unit101> - <Filename Value="media\UMediaCore_FFmpeg.pas"/> - <IsPartOfProject Value="True"/> - </Unit101> - <Unit102> - <Filename Value="media\UMediaCore_SDL.pas"/> - <IsPartOfProject Value="True"/> - </Unit102> - <Unit103> - <Filename Value="media\UVideo.pas"/> - <IsPartOfProject Value="True"/> - </Unit103> - <Unit104> - <Filename Value="switches.inc"/> - <IsPartOfProject Value="True"/> - </Unit104> - <Unit105> - <Filename Value="config-win.inc"/> - <IsPartOfProject Value="True"/> - </Unit105> - <Unit106> - <Filename Value="lua\ULuaUtils.pas"/> - <IsPartOfProject Value="True"/> - </Unit106> - <Unit107> - <Filename Value="lua\UHookableEvent.pas"/> - <IsPartOfProject Value="True"/> - </Unit107> - <Unit108> - <Filename Value="lua\ULuaCore.pas"/> - <IsPartOfProject Value="True"/> - </Unit108> - <Unit109> - <Filename Value="lua\ULuaGl.pas"/> - <IsPartOfProject Value="True"/> - </Unit109> - <Unit110> - <Filename Value="lua\ULuaLog.pas"/> - <IsPartOfProject Value="True"/> - </Unit110> - <Unit111> - <Filename Value="lua\ULuaParty.pas"/> - <IsPartOfProject Value="True"/> - </Unit111> - <Unit112> - <Filename Value="lua\ULuaScreenSing.pas"/> - <IsPartOfProject Value="True"/> - </Unit112> - <Unit113> - <Filename Value="lua\ULuaTextGL.pas"/> - <IsPartOfProject Value="True"/> - </Unit113> - <Unit114> - <Filename Value="lua\ULuaTexture.pas"/> - <IsPartOfProject Value="True"/> - </Unit114> - <Unit115> - <Filename Value="lua\ULuaUsdx.pas"/> - <IsPartOfProject Value="True"/> - </Unit115> - <Unit116> - <Filename Value="lib\bass\delphi\bass.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="Bass"/> - </Unit116> - <Unit117> - <Filename Value="webSDK\UWebSDK.pas"/> - <IsPartOfProject Value="True"/> - </Unit117> - <Unit118> - <Filename Value="base\UWebcam.pas"/> - <IsPartOfProject Value="True"/> - </Unit118> - <Unit119> - <Filename Value="screens\UScreenJukebox.pas"/> - <IsPartOfProject Value="True"/> - </Unit119> - <Unit120> - <Filename Value="screens\UScreenOptionsWebcam.pas"/> - <IsPartOfProject Value="True"/> - </Unit120> - <Unit121> - <Filename Value="screens\UScreenAbout.pas"/> - <IsPartOfProject Value="True"/> - </Unit121> - <Unit122> - <Filename Value="base\UNote.pas"/> - <IsPartOfProject Value="True"/> - </Unit122> - <Unit123> - <Filename Value="base\UPath.pas"/> - <IsPartOfProject Value="True"/> - </Unit123> - <Unit124> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\packages\winunits-base\src\comobj.pp"/> - <IsPartOfProject Value="True"/> - </Unit124> - <Unit125> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\packages\fcl-registry\src\registry.pp"/> - <IsPartOfProject Value="True"/> - </Unit125> - <Unit126> - <Filename Value="..\..\..\lazarus\components\lazutils\lazutils.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="LazUtils"/> - </Unit126> - <Unit127> - <Filename Value="base\uunicodestringhelper.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UUnicodeStringHelper"/> - </Unit127> - <Unit128> - <Filename Value="base\UFilesystem.pas"/> - <IsPartOfProject Value="True"/> - </Unit128> - <Unit129> - <Filename Value="base\UConfig.pas"/> - <IsPartOfProject Value="True"/> - </Unit129> - <Unit130> - <Filename Value="screens\controllers\uscreensingc.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UScreenSingC"/> - </Unit130> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <PathDelim Value="\"/> - <Target> - <Filename Value="..\game\ultrastardx"/> - </Target> - <SearchPaths> - <OtherUnitFiles Value="base;lua;media;menu;screens;lib\dglOpenGL;lib\SDL2;lib\portaudio;lib\ffmpeg;lib\SQLite;lib\other;lib\openCV;webSDK;webSDK\encrypt;$(LazarusDir)\components\lazutils;lib\freetype;lib\bass;lib\Lua;screens\controllers"/> - <UnitOutputDirectory Value="..\build\fpc-$(TargetCPU)-$(TargetOS)"/> - </SearchPaths> - <Parsing> - <SyntaxOptions> - <CStyleOperator Value="False"/> - <AllowLabel Value="False"/> - <UseAnsiStrings Value="False"/> - </SyntaxOptions> - </Parsing> - <CodeGeneration> - <SmartLinkUnit Value="True"/> - <Checks> - <OverflowChecks Value="True"/> - <StackChecks Value="True"/> - </Checks> - <TargetCPU Value="i386"/> - <Optimizations> - <OptimizationLevel Value="0"/> - </Optimizations> - </CodeGeneration> - <Linking> - <Debugging> - <DebugInfoType Value="dsStabs"/> - </Debugging> - <LinkSmart Value="True"/> - </Linking> - <Other> - <Verbosity> - <ShowNotes Value="False"/> - <ShowHints Value="False"/> - </Verbosity> - <WriteFPCLogo Value="False"/> - <ExecuteBefore> - <Command Value="clean.bat ..\build\fpc-$(TargetCPU)-$(TargetOS)"/> - <ScanForFPCMsgs Value="True"/> - <ScanForMakeMsgs Value="True"/> - </ExecuteBefore> - <ExecuteAfter> - <CompileReasons Compile="False" Build="False" Run="False"/> - </ExecuteAfter> - </Other> - <CompileReasons Run="False"/> - </CompilerOptions> -</CONFIG> diff --git a/src/ultrastardx-win.lps b/src/ultrastardx-win.lps deleted file mode 100644 index f41c4415..00000000 --- a/src/ultrastardx-win.lps +++ /dev/null @@ -1,1339 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectSession> - <PathDelim Value="\"/> - <Version Value="9"/> - <Units Count="184"> - <Unit0> - <Filename Value="ultrastardx.dpr"/> - <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> - <TopLine Value="328"/> - <CursorPos X="3" Y="345"/> - <UsageCount Value="200"/> - <Loaded Value="True"/> - </Unit0> - <Unit1> - <Filename Value="base\UXMLSong.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="585"/> - <CursorPos X="13" Y="596"/> - <UsageCount Value="200"/> - </Unit1> - <Unit2> - <Filename Value="base\TextGL.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <UsageCount Value="200"/> - </Unit2> - <Unit3> - <Filename Value="base\UCatCovers.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit3> - <Unit4> - <Filename Value="base\UCommandLine.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit4> - <Unit5> - <Filename Value="base\UCommon.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="50"/> - <CursorPos X="47" Y="67"/> - <UsageCount Value="200"/> - </Unit5> - <Unit6> - <Filename Value="base\UCovers.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="143"/> - <CursorPos X="25" Y="162"/> - <UsageCount Value="200"/> - </Unit6> - <Unit7> - <Filename Value="base\UDataBase.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <UsageCount Value="200"/> - </Unit7> - <Unit8> - <Filename Value="base\UDLLManager.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="57"/> - <CursorPos X="44" Y="73"/> - <UsageCount Value="200"/> - </Unit8> - <Unit9> - <Filename Value="base\UDraw.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="76"/> - <CursorPos X="5" Y="101"/> - <UsageCount Value="200"/> - </Unit9> - <Unit10> - <Filename Value="base\UEditorLyrics.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="19"/> - <CursorPos X="5" Y="38"/> - <UsageCount Value="200"/> - </Unit10> - <Unit11> - <Filename Value="base\UFiles.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="110"/> - <CursorPos X="21" Y="126"/> - <UsageCount Value="200"/> - </Unit11> - <Unit12> - <Filename Value="base\UFont.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="2871"/> - <CursorPos X="22" Y="2888"/> - <UsageCount Value="200"/> - </Unit12> - <Unit13> - <Filename Value="base\UGraphic.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="55"/> - <CursorPos X="22" Y="76"/> - <UsageCount Value="200"/> - </Unit13> - <Unit14> - <Filename Value="base\UGraphicClasses.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="128"/> - <CursorPos X="26" Y="111"/> - <UsageCount Value="200"/> - </Unit14> - <Unit15> - <Filename Value="base\UImage.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="453"/> - <CursorPos Y="481"/> - <UsageCount Value="200"/> - </Unit15> - <Unit16> - <Filename Value="base\UIni.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="1266"/> - <CursorPos X="32" Y="1298"/> - <UsageCount Value="200"/> - </Unit16> - <Unit17> - <Filename Value="base\UJoystick.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="105"/> - <CursorPos X="34" Y="118"/> - <UsageCount Value="200"/> - </Unit17> - <Unit18> - <Filename Value="base\ULanguage.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit18> - <Unit19> - <Filename Value="base\ULog.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="110"/> - <CursorPos X="3" Y="127"/> - <UsageCount Value="200"/> - </Unit19> - <Unit20> - <Filename Value="base\ULyrics.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="5"/> - <CursorPos X="5" Y="37"/> - <UsageCount Value="200"/> - </Unit20> - <Unit21> - <Filename Value="base\UMain.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="1"/> - <TopLine Value="461"/> - <CursorPos X="28" Y="509"/> - <UsageCount Value="200"/> - <Loaded Value="True"/> - </Unit21> - <Unit22> - <Filename Value="base\UMusic.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="88"/> - <CursorPos X="5" Y="113"/> - <UsageCount Value="200"/> - </Unit22> - <Unit23> - <Filename Value="base\UParty.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit23> - <Unit24> - <Filename Value="base\UPlatform.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit24> - <Unit25> - <Filename Value="base\UPlatformLinux.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit25> - <Unit26> - <Filename Value="base\UPlatformMacOSX.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit26> - <Unit27> - <Filename Value="base\UPlatformWindows.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit27> - <Unit28> - <Filename Value="base\UPlaylist.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit28> - <Unit29> - <Filename Value="base\URecord.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="251"/> - <CursorPos X="7" Y="273"/> - <UsageCount Value="200"/> - </Unit29> - <Unit30> - <Filename Value="base\URingBuffer.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit30> - <Unit31> - <Filename Value="base\USingNotes.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit31> - <Unit32> - <Filename Value="base\USingScores.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="12"/> - <CursorPos X="5" Y="37"/> - <UsageCount Value="200"/> - </Unit32> - <Unit33> - <Filename Value="base\USkins.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit33> - <Unit34> - <Filename Value="base\USong.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="1154"/> - <CursorPos X="32" Y="1171"/> - <UsageCount Value="200"/> - </Unit34> - <Unit35> - <Filename Value="base\USongs.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="190"/> - <CursorPos Y="206"/> - <UsageCount Value="200"/> - </Unit35> - <Unit36> - <Filename Value="base\UTexture.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="40"/> - <CursorPos X="3" Y="74"/> - <UsageCount Value="200"/> - </Unit36> - <Unit37> - <Filename Value="base\UThemes.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="1424"/> - <CursorPos X="3" Y="1449"/> - <UsageCount Value="200"/> - </Unit37> - <Unit38> - <Filename Value="base\UTime.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="60"/> - <CursorPos X="7" Y="82"/> - <UsageCount Value="200"/> - </Unit38> - <Unit39> - <Filename Value="menu\UMenuText.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="273"/> - <CursorPos X="30" Y="287"/> - <UsageCount Value="200"/> - </Unit39> - <Unit40> - <Filename Value="menu\UDisplay.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="669"/> - <CursorPos X="52" Y="685"/> - <UsageCount Value="200"/> - </Unit40> - <Unit41> - <Filename Value="menu\UDrawTexture.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="27"/> - <CursorPos Y="38"/> - <UsageCount Value="200"/> - </Unit41> - <Unit42> - <Filename Value="menu\UMenu.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="1673"/> - <CursorPos X="8" Y="1693"/> - <UsageCount Value="200"/> - </Unit42> - <Unit43> - <Filename Value="menu\UMenuBackground.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="52"/> - <CursorPos X="19" Y="60"/> - <UsageCount Value="200"/> - </Unit43> - <Unit44> - <Filename Value="menu\UMenuBackgroundColor.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="24"/> - <CursorPos X="5" Y="55"/> - <UsageCount Value="200"/> - </Unit44> - <Unit45> - <Filename Value="menu\UMenuBackgroundFade.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="44"/> - <CursorPos X="5" Y="69"/> - <UsageCount Value="200"/> - </Unit45> - <Unit46> - <Filename Value="menu\UMenuBackgroundNone.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="22"/> - <CursorPos X="5" Y="54"/> - <UsageCount Value="200"/> - </Unit46> - <Unit47> - <Filename Value="menu\UMenuBackgroundTexture.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="56"/> - <CursorPos X="5" Y="64"/> - <UsageCount Value="200"/> - </Unit47> - <Unit48> - <Filename Value="menu\UMenuBackgroundVideo.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="80"/> - <CursorPos X="5" Y="105"/> - <UsageCount Value="200"/> - </Unit48> - <Unit49> - <Filename Value="menu\UMenuButton.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="15"/> - <CursorPos X="5" Y="39"/> - <UsageCount Value="200"/> - </Unit49> - <Unit50> - <Filename Value="menu\UMenuButtonCollection.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit50> - <Unit51> - <Filename Value="menu\UMenuEqualizer.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="69"/> - <CursorPos X="5" Y="88"/> - <UsageCount Value="200"/> - </Unit51> - <Unit52> - <Filename Value="menu\UMenuInteract.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit52> - <Unit53> - <Filename Value="menu\UMenuSelectSlide.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="5"/> - <CursorPos X="5" Y="37"/> - <UsageCount Value="200"/> - </Unit53> - <Unit54> - <Filename Value="menu\UMenuStatic.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <UsageCount Value="200"/> - </Unit54> - <Unit55> - <Filename Value="screens\UScreenCredits.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="22"/> - <CursorPos X="11" Y="37"/> - <UsageCount Value="200"/> - </Unit55> - <Unit56> - <Filename Value="screens\UScreenEdit.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="80"/> - <CursorPos X="40" Y="92"/> - <UsageCount Value="200"/> - </Unit56> - <Unit57> - <Filename Value="screens\UScreenEditConvert.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="54"/> - <CursorPos X="3" Y="63"/> - <UsageCount Value="200"/> - </Unit57> - <Unit58> - <Filename Value="screens\UScreenEditHeader.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="411"/> - <CursorPos X="18" Y="263"/> - <UsageCount Value="200"/> - </Unit58> - <Unit59> - <Filename Value="screens\UScreenEditSub.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="1416"/> - <CursorPos X="75" Y="1454"/> - <UsageCount Value="200"/> - </Unit59> - <Unit60> - <Filename Value="screens\UScreenLevel.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="32"/> - <CursorPos X="36" Y="70"/> - <UsageCount Value="200"/> - </Unit60> - <Unit61> - <Filename Value="screens\UScreenLoading.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="32"/> - <CursorPos X="76" Y="60"/> - <UsageCount Value="200"/> - </Unit61> - <Unit62> - <Filename Value="screens\UScreenMain.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="67"/> - <CursorPos X="9" Y="83"/> - <UsageCount Value="200"/> - </Unit62> - <Unit63> - <Filename Value="screens\UScreenName.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="350"/> - <CursorPos X="45" Y="387"/> - <UsageCount Value="200"/> - </Unit63> - <Unit64> - <Filename Value="screens\UScreenOpen.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="15"/> - <CursorPos X="75" Y="99"/> - <UsageCount Value="200"/> - </Unit64> - <Unit65> - <Filename Value="screens\UScreenOptions.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="133"/> - <CursorPos Y="47"/> - <UsageCount Value="200"/> - </Unit65> - <Unit66> - <Filename Value="screens\UScreenOptionsAdvanced.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="30"/> - <CursorPos X="36" Y="66"/> - <UsageCount Value="200"/> - </Unit66> - <Unit67> - <Filename Value="screens\UScreenOptionsGame.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="40"/> - <CursorPos X="36" Y="78"/> - <UsageCount Value="200"/> - </Unit67> - <Unit68> - <Filename Value="screens\UScreenOptionsGraphics.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="30"/> - <CursorPos X="36" Y="66"/> - <UsageCount Value="200"/> - </Unit68> - <Unit69> - <Filename Value="screens\UScreenOptionsLyrics.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="30"/> - <CursorPos X="36" Y="66"/> - <UsageCount Value="200"/> - </Unit69> - <Unit70> - <Filename Value="screens\UScreenOptionsRecord.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="102"/> - <CursorPos X="36" Y="140"/> - <UsageCount Value="200"/> - </Unit70> - <Unit71> - <Filename Value="screens\UScreenOptionsSound.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="30"/> - <CursorPos X="36" Y="68"/> - <UsageCount Value="200"/> - </Unit71> - <Unit72> - <Filename Value="screens\UScreenOptionsThemes.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="44"/> - <CursorPos X="36" Y="82"/> - <UsageCount Value="200"/> - </Unit72> - <Unit73> - <Filename Value="screens\UScreenPartyNewRound.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="74"/> - <CursorPos X="36" Y="112"/> - <UsageCount Value="200"/> - </Unit73> - <Unit74> - <Filename Value="screens\UScreenPartyOptions.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="64"/> - <CursorPos X="36" Y="102"/> - <UsageCount Value="200"/> - </Unit74> - <Unit75> - <Filename Value="screens\UScreenPartyPlayer.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <CursorPos X="7" Y="40"/> - <UsageCount Value="200"/> - </Unit75> - <Unit76> - <Filename Value="screens\UScreenPartyScore.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="57"/> - <CursorPos X="36" Y="95"/> - <UsageCount Value="200"/> - </Unit76> - <Unit77> - <Filename Value="screens\UScreenPartyWin.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="47"/> - <CursorPos X="36" Y="85"/> - <UsageCount Value="200"/> - </Unit77> - <Unit78> - <Filename Value="screens\UScreenPopup.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="1082"/> - <CursorPos X="10" Y="1079"/> - <UsageCount Value="200"/> - </Unit78> - <Unit79> - <Filename Value="screens\UScreenScore.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="292"/> - <CursorPos X="6" Y="308"/> - <UsageCount Value="200"/> - </Unit79> - <Unit80> - <Filename Value="screens\UScreenSing.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="3479"/> - <CursorPos X="14" Y="3496"/> - <UsageCount Value="200"/> - </Unit80> - <Unit81> - <Filename Value="screens\UScreenSong.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="955"/> - <CursorPos X="29" Y="962"/> - <UsageCount Value="200"/> - </Unit81> - <Unit82> - <Filename Value="screens\UScreenSongJumpto.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="78"/> - <CursorPos X="21" Y="90"/> - <UsageCount Value="200"/> - </Unit82> - <Unit83> - <Filename Value="screens\UScreenSongMenu.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="42"/> - <CursorPos X="58" Y="116"/> - <UsageCount Value="200"/> - </Unit83> - <Unit84> - <Filename Value="screens\UScreenStatDetail.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="63"/> - <CursorPos X="40" Y="81"/> - <UsageCount Value="200"/> - </Unit84> - <Unit85> - <Filename Value="screens\UScreenStatMain.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="63"/> - <CursorPos X="36" Y="82"/> - <UsageCount Value="200"/> - </Unit85> - <Unit86> - <Filename Value="screens\UScreenTop5.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="46"/> - <CursorPos X="36" Y="84"/> - <UsageCount Value="200"/> - </Unit86> - <Unit87> - <Filename Value="media\UVisualizer.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="136"/> - <CursorPos X="15" Y="157"/> - <UsageCount Value="200"/> - </Unit87> - <Unit88> - <Filename Value="media\UAudioConverter.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="47"/> - <CursorPos X="14" Y="47"/> - <UsageCount Value="200"/> - </Unit88> - <Unit89> - <Filename Value="media\UAudioCore_Bass.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit89> - <Unit90> - <Filename Value="media\UAudioCore_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit90> - <Unit91> - <Filename Value="media\UAudioDecoder_Bass.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit91> - <Unit92> - <Filename Value="media\UAudioDecoder_FFmpeg.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="339"/> - <CursorPos X="19" Y="355"/> - <UsageCount Value="200"/> - </Unit92> - <Unit93> - <Filename Value="media\UAudioInput_Bass.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit93> - <Unit94> - <Filename Value="media\UAudioInput_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit94> - <Unit95> - <Filename Value="media\UAudioPlayback_Bass.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="30"/> - <CursorPos X="3" Y="47"/> - <UsageCount Value="200"/> - </Unit95> - <Unit96> - <Filename Value="media\UAudioPlayback_Portaudio.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit96> - <Unit97> - <Filename Value="media\UAudioPlayback_SDL.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="31"/> - <CursorPos X="9" Y="39"/> - <UsageCount Value="200"/> - </Unit97> - <Unit98> - <Filename Value="media\UAudioPlayback_SoftMixer.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <CursorPos X="7" Y="38"/> - <UsageCount Value="200"/> - </Unit98> - <Unit99> - <Filename Value="media\UAudioPlaybackBase.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="150"/> - <CursorPos X="20" Y="167"/> - <UsageCount Value="200"/> - </Unit99> - <Unit100> - <Filename Value="media\UMedia_dummy.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="124"/> - <CursorPos Y="154"/> - <UsageCount Value="200"/> - </Unit100> - <Unit101> - <Filename Value="media\UMediaCore_FFmpeg.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="214"/> - <CursorPos X="18" Y="244"/> - <UsageCount Value="200"/> - </Unit101> - <Unit102> - <Filename Value="media\UMediaCore_SDL.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="25"/> - <CursorPos X="33" Y="40"/> - <UsageCount Value="200"/> - </Unit102> - <Unit103> - <Filename Value="media\UVideo.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="323"/> - <CursorPos X="36" Y="332"/> - <UsageCount Value="200"/> - </Unit103> - <Unit104> - <Filename Value="switches.inc"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <CursorPos X="5" Y="6"/> - <UsageCount Value="200"/> - </Unit104> - <Unit105> - <Filename Value="config-win.inc"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="44"/> - <CursorPos X="49" Y="17"/> - <UsageCount Value="200"/> - </Unit105> - <Unit106> - <Filename Value="lua\ULuaUtils.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit106> - <Unit107> - <Filename Value="lua\UHookableEvent.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit107> - <Unit108> - <Filename Value="lua\ULuaCore.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit108> - <Unit109> - <Filename Value="lua\ULuaGl.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="1479"/> - <CursorPos X="3" Y="88"/> - <UsageCount Value="200"/> - </Unit109> - <Unit110> - <Filename Value="lua\ULuaLog.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit110> - <Unit111> - <Filename Value="lua\ULuaParty.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit111> - <Unit112> - <Filename Value="lua\ULuaScreenSing.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit112> - <Unit113> - <Filename Value="lua\ULuaTextGL.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit113> - <Unit114> - <Filename Value="lua\ULuaTexture.pas"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="200"/> - </Unit114> - <Unit115> - <Filename Value="lua\ULuaUsdx.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="41"/> - <CursorPos X="10" Y="66"/> - <UsageCount Value="200"/> - </Unit115> - <Unit116> - <Filename Value="lib\bass\delphi\bass.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="Bass"/> - <UsageCount Value="204"/> - </Unit116> - <Unit117> - <Filename Value="webSDK\UWebSDK.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="5"/> - <CursorPos X="28" Y="16"/> - <UsageCount Value="203"/> - </Unit117> - <Unit118> - <Filename Value="base\UWebcam.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="317"/> - <CursorPos Y="335"/> - <UsageCount Value="207"/> - </Unit118> - <Unit119> - <Filename Value="screens\UScreenJukebox.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="1419"/> - <CursorPos X="49" Y="1424"/> - <UsageCount Value="206"/> - </Unit119> - <Unit120> - <Filename Value="screens\UScreenOptionsWebcam.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="103"/> - <CursorPos X="18" Y="118"/> - <UsageCount Value="206"/> - </Unit120> - <Unit121> - <Filename Value="screens\UScreenAbout.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="31"/> - <CursorPos X="68" Y="50"/> - <UsageCount Value="204"/> - </Unit121> - <Unit122> - <Filename Value="base\UNote.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="197"/> - <CursorPos X="14" Y="215"/> - <UsageCount Value="202"/> - </Unit122> - <Unit123> - <Filename Value="base\UPath.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="649"/> - <CursorPos X="27" Y="668"/> - <UsageCount Value="200"/> - </Unit123> - <Unit124> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\packages\winunits-base\src\comobj.pp"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="218"/> - </Unit124> - <Unit125> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\packages\fcl-registry\src\registry.pp"/> - <IsPartOfProject Value="True"/> - <UsageCount Value="218"/> - </Unit125> - <Unit126> - <Filename Value="..\..\..\lazarus\components\lazutils\lazutils.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="LazUtils"/> - <UsageCount Value="218"/> - </Unit126> - <Unit127> - <Filename Value="base\uunicodestringhelper.pas"/> - <IsPartOfProject Value="True"/> - <UnitName Value="UUnicodeStringHelper"/> - <EditorIndex Value="-1"/> - <TopLine Value="6"/> - <CursorPos Y="37"/> - <UsageCount Value="218"/> - </Unit127> - <Unit128> - <Filename Value="base\UConfig.pas"/> - <EditorIndex Value="-1"/> - <UsageCount Value="198"/> - </Unit128> - <Unit129> - <Filename Value="base\UCore.pas"/> - <UsageCount Value="198"/> - </Unit129> - <Unit130> - <Filename Value="base\UCoreModule.pas"/> - <UsageCount Value="198"/> - </Unit130> - <Unit131> - <Filename Value="base\UHooks.pas"/> - <UsageCount Value="198"/> - </Unit131> - <Unit132> - <Filename Value="base\UPluginInterface.pas"/> - <UsageCount Value="198"/> - </Unit132> - <Unit133> - <Filename Value="base\UPluginLoader.pas"/> - <UsageCount Value="198"/> - </Unit133> - <Unit134> - <Filename Value="base\UServices.pas"/> - <UsageCount Value="198"/> - </Unit134> - <Unit135> - <Filename Value="base\UTextClasses.pas"/> - <UsageCount Value="198"/> - </Unit135> - <Unit136> - <Filename Value="screens\UScreenWelcome.pas"/> - <UsageCount Value="198"/> - </Unit136> - <Unit137> - <Filename Value="screens\UScreenSingModi.pas"/> - <UsageCount Value="198"/> - </Unit137> - <Unit138> - <Filename Value="base\UModules.pas"/> - <UsageCount Value="177"/> - </Unit138> - <Unit139> - <Filename Value="webSDK\encrypt\UMD5.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="360"/> - <CursorPos X="23" Y="19"/> - <UsageCount Value="145"/> - </Unit139> - <Unit140> - <Filename Value="lib\TntUnicodeControls\TntClasses.pas"/> - <EditorIndex Value="-1"/> - <WindowIndex Value="-1"/> - <TopLine Value="-1"/> - <CursorPos X="-1" Y="-1"/> - <UsageCount Value="63"/> - </Unit140> - <Unit141> - <Filename Value="lib\openCV\opencv_core.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="252"/> - <CursorPos X="93" Y="252"/> - <UsageCount Value="75"/> - </Unit141> - <Unit142> - <Filename Value="lib\openCV\opencv_highgui.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="451"/> - <CursorPos X="17" Y="482"/> - <UsageCount Value="80"/> - </Unit142> - <Unit143> - <Filename Value="lib\openCV\opencv_imgproc.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="451"/> - <CursorPos X="72" Y="488"/> - <UsageCount Value="80"/> - </Unit143> - <Unit144> - <Filename Value="menu\UMenuStaticList.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="12"/> - <CursorPos Y="12"/> - <UsageCount Value="79"/> - </Unit144> - <Unit145> - <Filename Value="screens\UScreenJukeboxPlaylist.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="42"/> - <CursorPos X="67" Y="62"/> - <UsageCount Value="84"/> - </Unit145> - <Unit146> - <Filename Value="screens\UScreenJukeboxOptions.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="176"/> - <CursorPos X="83" Y="214"/> - <UsageCount Value="84"/> - </Unit146> - <Unit147> - <Filename Value="screens\UScreenPartyTournamentWin.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="45"/> - <CursorPos X="36" Y="83"/> - <UsageCount Value="84"/> - </Unit147> - <Unit148> - <Filename Value="screens\UScreenPartyTournamentOptions.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="71"/> - <CursorPos X="36" Y="109"/> - <UsageCount Value="84"/> - </Unit148> - <Unit149> - <Filename Value="screens\UScreenPartyTournamentPlayer.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="23"/> - <CursorPos X="7" Y="38"/> - <UsageCount Value="79"/> - </Unit149> - <Unit150> - <Filename Value="screens\UScreenPartyTournamentRounds.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="106"/> - <CursorPos X="28" Y="145"/> - <UsageCount Value="85"/> - </Unit150> - <Unit151> - <Filename Value="base\UPartyTournament.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="12"/> - <CursorPos Y="12"/> - <UsageCount Value="79"/> - </Unit151> - <Unit152> - <Filename Value="..\..\..\..\lazarus\fpc\2.6.4\source\packages\fcl-base\src\inifiles.pp"/> - <UnitName Value="IniFiles"/> - <EditorIndex Value="-1"/> - <TopLine Value="449"/> - <CursorPos X="19" Y="463"/> - <UsageCount Value="72"/> - </Unit152> - <Unit153> - <Filename Value="lib\JEDI-SDL\SDL\Pas\sdl.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="2320"/> - <CursorPos X="58" Y="2329"/> - <UsageCount Value="76"/> - </Unit153> - <Unit154> - <Filename Value="lib\JEDI-SDL\OpenGL\Pas\gl.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="1236"/> - <CursorPos X="3" Y="1250"/> - <UsageCount Value="40"/> - </Unit154> - <Unit155> - <Filename Value="lib\ffmpeg-2.8\avformat.pas"/> - <EditorIndex Value="-1"/> - <UsageCount Value="27"/> - </Unit155> - <Unit156> - <Filename Value="base\UFilesystem.pas"/> - <IsPartOfProject Value="True"/> - <EditorIndex Value="-1"/> - <TopLine Value="427"/> - <CursorPos X="23" Y="436"/> - <UsageCount Value="47"/> - </Unit156> - <Unit157> - <Filename Value="base\UUnicodeUtils.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="214"/> - <CursorPos Y="232"/> - <UsageCount Value="60"/> - </Unit157> - <Unit158> - <Filename Value="screens\UScreenOptionsJukebox.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="634"/> - <CursorPos Y="658"/> - <UsageCount Value="57"/> - </Unit158> - <Unit159> - <Filename Value="screens\UScreenOptionsNetwork.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="201"/> - <CursorPos X="83" Y="239"/> - <UsageCount Value="22"/> - </Unit159> - <Unit160> - <Filename Value="screens\UScreenPartyRounds.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="132"/> - <CursorPos X="36" Y="170"/> - <UsageCount Value="22"/> - </Unit160> - <Unit161> - <Filename Value="lib\SDL2\sdl2.pas"/> - <UnitName Value="SDL2"/> - <EditorIndex Value="-1"/> - <TopLine Value="144"/> - <UsageCount Value="32"/> - </Unit161> - <Unit162> - <Filename Value="lib\SDL2\sdlpixels.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="280"/> - <CursorPos X="53" Y="290"/> - <UsageCount Value="39"/> - </Unit162> - <Unit163> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\rtl\inc\systemh.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="412"/> - <CursorPos X="3" Y="429"/> - <UsageCount Value="39"/> - </Unit163> - <Unit164> - <Filename Value="lib\freetype\demo\nehe\UFreeType.pas"/> - <EditorIndex Value="-1"/> - <CursorPos X="5" Y="11"/> - <UsageCount Value="29"/> - </Unit164> - <Unit165> - <Filename Value="lib\projectM\projectM.pas"/> - <EditorIndex Value="-1"/> - <CursorPos X="5" Y="17"/> - <UsageCount Value="29"/> - </Unit165> - <Unit166> - <Filename Value="lib\OpenGL\moduleloader.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="105"/> - <UsageCount Value="3"/> - </Unit166> - <Unit167> - <Filename Value="lib\OpenGL\gl.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="2251"/> - <CursorPos X="11" Y="2278"/> - <UsageCount Value="83"/> - </Unit167> - <Unit168> - <Filename Value="lib\OpenGL\glu.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="120"/> - <CursorPos X="25" Y="127"/> - <UsageCount Value="22"/> - </Unit168> - <Unit169> - <Filename Value="lib\OpenGL\glext.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="9542"/> - <CursorPos X="89" Y="2318"/> - <UsageCount Value="30"/> - </Unit169> - <Unit170> - <Filename Value="lib\SDL2\sdlvideo.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="201"/> - <CursorPos X="25" Y="215"/> - <UsageCount Value="53"/> - </Unit170> - <Unit171> - <Filename Value="lib\SDL2\sdlkeyboard.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="66"/> - <CursorPos X="140" Y="104"/> - <UsageCount Value="23"/> - </Unit171> - <Unit172> - <Filename Value="lib\SDL2\sdlevents.inc"/> - <EditorIndex Value="-1"/> - <UsageCount Value="21"/> - </Unit172> - <Unit173> - <Filename Value="base\UTextEncoding.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="215"/> - <CursorPos X="3" Y="124"/> - <UsageCount Value="60"/> - </Unit173> - <Unit174> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\rtl\inc\objpash.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="403"/> - <CursorPos X="29" Y="308"/> - <UsageCount Value="32"/> - </Unit174> - <Unit175> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\rtl\objpas\classes\classesh.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="922"/> - <CursorPos X="77" Y="927"/> - <UsageCount Value="32"/> - </Unit175> - <Unit176> - <Filename Value="..\game\languages\Catalan.ini"/> - <EditorIndex Value="-1"/> - <TopLine Value="434"/> - <CursorPos X="51" Y="437"/> - <UsageCount Value="9"/> - <DefaultSyntaxHighlighter Value="Ini"/> - </Unit176> - <Unit177> - <Filename Value="..\game\Error.log"/> - <EditorIndex Value="-1"/> - <UsageCount Value="9"/> - <DefaultSyntaxHighlighter Value="None"/> - </Unit177> - <Unit178> - <Filename Value="encoding\Locale.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="17"/> - <CursorPos X="11" Y="28"/> - <UsageCount Value="13"/> - </Unit178> - <Unit179> - <Filename Value="encoding\CP1252.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="48"/> - <CursorPos X="45" Y="61"/> - <UsageCount Value="13"/> - </Unit179> - <Unit180> - <Filename Value="..\..\..\lazarus\fpc\3.0.0\source\rtl\objpas\sysutils\filutilh.inc"/> - <EditorIndex Value="-1"/> - <TopLine Value="107"/> - <CursorPos X="20" Y="124"/> - <UsageCount Value="12"/> - </Unit180> - <Unit181> - <Filename Value="..\..\..\lazarus\components\lazutils\lazutf8.pas"/> - <UnitName Value="LazUTF8"/> - <EditorIndex Value="-1"/> - <TopLine Value="166"/> - <CursorPos X="30" Y="174"/> - <UsageCount Value="10"/> - </Unit181> - <Unit182> - <Filename Value="lib\SQLite\example\uTestSqlite.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="160"/> - <CursorPos X="14" Y="182"/> - <UsageCount Value="10"/> - </Unit182> - <Unit183> - <Filename Value="webSDK\dcpcrypt2-2009\Demos\FileEncrypt\uMain.pas"/> - <EditorIndex Value="-1"/> - <TopLine Value="174"/> - <CursorPos X="11" Y="191"/> - <UsageCount Value="10"/> - </Unit183> - </Units> - <JumpHistory Count="1"> - <Position1> - <Filename Value="ultrastardx.dpr"/> - <Caret Line="95" Column="7" TopLine="78"/> - </Position1> - </JumpHistory> - </ProjectSession> - <Debugging> - <BreakPoints Count="4"> - <Item1> - <Kind Value="bpkSource"/> - <WatchScope Value="wpsLocal"/> - <WatchKind Value="wpkWrite"/> - <Source Value="screens\UScreenStatMain.pas"/> - <Line Value="102"/> - </Item1> - <Item2> - <Kind Value="bpkData"/> - <WatchData Value="Title"/> - <WatchScope Value="wpsGlobal"/> - <WatchKind Value="wpkWrite"/> - <InitialEnabled Value="False"/> - </Item2> - <Item3> - <Kind Value="bpkSource"/> - <WatchScope Value="wpsLocal"/> - <WatchKind Value="wpkWrite"/> - <Source Value="base\UJoystick.pas"/> - <Line Value="147"/> - </Item3> - <Item4> - <Kind Value="bpkSource"/> - <WatchScope Value="wpsLocal"/> - <WatchKind Value="wpkWrite"/> - <Source Value="media\UVisualizer.pas"/> - <Line Value="166"/> - </Item4> - </BreakPoints> - <Watches Count="3"> - <Item1> - <Expression Value="fmt1"/> - </Item1> - <Item2> - <Expression Value="fmt2"/> - </Item2> - <Item3> - <Expression Value="Title"/> - </Item3> - </Watches> - </Debugging> -</CONFIG> diff --git a/src/ultrastardx.cfg b/src/ultrastardx.cfg deleted file mode 100644 index ccf8d688..00000000 --- a/src/ultrastardx.cfg +++ /dev/null @@ -1,44 +0,0 @@ --$A8 --$B- --$C+ --$D+ --$E- --$F- --$G+ --$H+ --$I+ --$J- --$K- --$L+ --$M- --$N+ --$O+ --$P+ --$Q- --$R- --$S- --$T- --$U- --$V+ --$W- --$X+ --$YD --$Z1 --cg --AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; --H+ --W+ --M --$M16384,1048576 --K$00400000 --E"C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\game" --N"..\build\delphi-win" --LE"c:\program files (x86)\borland\delphi7\Projects\Bpl" --LN"c:\program files (x86)\borland\delphi7\Projects\Bpl" --U"lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella" --O"lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella" --I"lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella" --R"lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella" --w-UNSAFE_TYPE --w-UNSAFE_CODE --w-UNSAFE_CAST diff --git a/src/ultrastardx.dof b/src/ultrastardx.dof deleted file mode 100644 index b99a7f61..00000000 --- a/src/ultrastardx.dof +++ /dev/null @@ -1,150 +0,0 @@ -[FileVersion] -Version=7.0 -[Compiler] -A=8 -B=0 -C=1 -D=1 -E=0 -F=0 -G=1 -H=1 -I=1 -J=0 -K=0 -L=1 -M=0 -N=1 -O=1 -P=1 -Q=0 -R=0 -S=0 -T=0 -U=0 -V=1 -W=0 -X=1 -Y=1 -Z=1 -ShowHints=1 -ShowWarnings=1 -UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -NamespacePrefix= -SymbolDeprecated=1 -SymbolLibrary=1 -SymbolPlatform=1 -UnitLibrary=1 -UnitPlatform=1 -UnitDeprecated=1 -HResultCompat=1 -HidingMember=1 -HiddenVirtual=1 -Garbage=1 -BoundsError=1 -ZeroNilCompat=1 -StringConstTruncated=1 -ForLoopVarVarPar=1 -TypedConstVarPar=1 -AsgToTypedConst=1 -CaseLabelRange=1 -ForVariable=1 -ConstructingAbstract=1 -ComparisonFalse=1 -ComparisonTrue=1 -ComparingSignedUnsigned=1 -CombiningSignedUnsigned=1 -UnsupportedConstruct=1 -FileOpen=1 -FileOpenUnitSrc=1 -BadGlobalSymbol=1 -DuplicateConstructorDestructor=1 -InvalidDirective=1 -PackageNoLink=1 -PackageThreadVar=1 -ImplicitImport=1 -HPPEMITIgnored=1 -NoRetVal=1 -UseBeforeDef=1 -ForLoopVarUndef=1 -UnitNameMismatch=1 -NoCFGFileFound=1 -MessageDirective=1 -ImplicitVariants=1 -UnicodeToLocale=1 -LocaleToUnicode=1 -ImagebaseMultiple=1 -SuspiciousTypecast=1 -PrivatePropAccessor=1 -UnsafeType=0 -UnsafeCode=0 -UnsafeCast=0 -[Linker] -MapFile=0 -OutputObjs=0 -ConsoleApp=1 -DebugInfo=0 -RemoteSymbols=0 -MinStackSize=16384 -MaxStackSize=1048576 -ImageBase=4194304 -ExeDescription= -[Directories] -OutputDir=C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\game -UnitOutputDir=..\build\delphi-win -PackageDLLOutputDir= -PackageDCPOutputDir= -SearchPath=lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella -Packages=vclx;vcl;rtl;vcldb;dbrtl;dsnap;bdertl;dss;teeui;teedb;tee;vcldbx;vclactnband;adortl;visualclx;visualdbclx;dsnapcon;ibxpress -Conditionals= -DebugSourceDirs= -UsePackages=0 -[Parameters] -RunParams= -HostApplication= -Launcher= -UseLauncher=0 -DebugCWD= -[Language] -ActiveLang= -ProjectLang= -RootDir= -[Version Info] -IncludeVerInfo=0 -AutoIncBuild=0 -MajorVer=1 -MinorVer=0 -Release=0 -Build=0 -Debug=0 -PreRelease=0 -Special=0 -Private=0 -DLL=0 -Locale=1031 -CodePage=1252 -[Version Info Keys] -CompanyName= -FileDescription= -FileVersion=1.0.0.0 -InternalName= -LegalCopyright= -LegalTrademarks= -OriginalFilename= -ProductName= -ProductVersion=1.0.0.0 -Comments= -[HistoryLists\hlUnitAliases] -Count=1 -Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; -[HistoryLists\hlSearchPath] -Count=2 -Item0=lib\JEDI-SDL\SDL\Pas;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\openCV;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\webSDK\cURL\src;C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\src\lib\acinerella -Item1=lib\JEDI-SDL\SDL\Pas -[HistoryLists\hlUnitOutputDirectory] -Count=1 -Item0=..\build\delphi-win -[HistoryLists\hlOutputDirectorry] -Count=2 -Item0=C:\Users\rp\SkyDrive\usdx_2831_WORLDPARTY\game -Item1=..\game diff --git a/src/ultrastardx.ico b/src/ultrastardx.ico deleted file mode 100644 index 117d9c3e..00000000 Binary files a/src/ultrastardx.ico and /dev/null differ diff --git a/src/ultrastardx.res b/src/ultrastardx.res deleted file mode 100644 index c797e79b..00000000 Binary files a/src/ultrastardx.res and /dev/null differ diff --git a/src/webSDK/UWebSDK.pas b/src/webSDK/UWebSDK.pas index 38bb72a4..1bfdded9 100644 --- a/src/webSDK/UWebSDK.pas +++ b/src/webSDK/UWebSDK.pas @@ -1,3 +1,24 @@ +{* + UltraStar Deluxe WorldParty - Karaoke Game + + UltraStar Deluxe WorldParty is the legal property of its developers, + whose names are too numerous to list here. Please refer to the + COPYRIGHT file distributed with this source distribution. + + 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 3 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. Check "LICENSE" file. If not, see + <http://www.gnu.org/licenses/>. + *} unit UWebSDK; interface @@ -14,9 +35,8 @@ TWebsiteInfo = record end; TSendInfo = record - Username: UTF8String; // Username + Username: UTF8String; // Username & name of the player Password: UTF8String; // Password - Name: UTF8String; // Name of the player ScoreInt: integer; // Player's Score Int ScoreLineInt: integer; // Player's Score Line ScoreGoldenInt: integer; // Player's Score Golden diff --git a/tools/RobotClean.bat b/tools/RobotClean.bat new file mode 100644 index 00000000..0f147a7f --- /dev/null +++ b/tools/RobotClean.bat @@ -0,0 +1,21 @@ +@echo off +REM +REM It cleans temp files from project +REM + +echo Cleaning files from compiler +del /Q "..\src\WorldParty.res" +del /Q /S "..\*.lps" +RD /Q /S "..\build" +RD /Q /S "..\src\backup" + +echo Cleaning files from installer +RD /Q /S "..\installer\dist" + +echo Cleaning files from game +del /Q "..\game\error.log" "..\game\avatar.db" "..\game\ultrastar.db" "..\game\cover.db" "..\game\config.ini" "..\game\WorldParty.exe" + +echo Cleaning files from editor +del /Q /S "..\*.bak" + +echo Done diff --git a/travis-lazarus/.gitignore b/travis-lazarus/.gitignore deleted file mode 100644 index 91590239..00000000 --- a/travis-lazarus/.gitignore +++ /dev/null @@ -1,32 +0,0 @@ -# Source: https://github.com/github/gitignore/blob/master/Global/Lazarus.gitignore - -# Lazarus compiler-generated binaries (safe to delete) -*.exe -*.dll -*.so -*.dylib -*.lrs -*.res -*.compiled -*.dbg -*.ppu -*.o -*.or -*.a - -# Lazarus autogenerated files (duplicated info) -*.rst -*.rsj -*.lrt - -# Lazarus local files (user-specific info) -*.lps - -# Lazarus backups and unit output folders. -# These can be changed by user in Lazarus/project options. -backup/ -*.bak -lib/ - -# Application bundle for Mac OS -*.app/ diff --git a/travis-lazarus/.travis.install.py b/travis-lazarus/.travis.install.py deleted file mode 100644 index bdef3965..00000000 --- a/travis-lazarus/.travis.install.py +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/env python -# Part of `travis-lazarus` (https://github.com/nielsAD/travis-lazarus) -# License: MIT - -import sys -import os -import subprocess - -OS_NAME=os.environ.get('TRAVIS_OS_NAME') or 'linux' -OS_PMAN={'linux': 'sudo apt-get', 'osx': 'brew'}[OS_NAME] - -LAZ_TMP_DIR=os.environ.get('LAZ_TMP_DIR') or 'lazarus_tmp' -LAZ_REL_DEF=os.environ.get('LAZ_REL_DEF') or {'linux':'amd64', 'qemu-arm':'amd64', 'qemu-arm-static':'amd64', 'osx':'i386', 'wine':'32'} -LAZ_BIN_SRC=os.environ.get('LAZ_BIN_SRC') or 'http://mirrors.iwi.me/lazarus/releases/%(target)s/Lazarus%%20%(version)s' -LAZ_BIN_TGT=os.environ.get('LAZ_BIN_TGT') or { - 'linux': 'Lazarus%%20Linux%%20%(release)s%%20DEB', - 'qemu-arm': 'Lazarus%%20Linux%%20%(release)s%%20DEB', - 'qemu-arm-static': 'Lazarus%%20Linux%%20%(release)s%%20DEB', - 'osx': 'Lazarus%%20Mac%%20OS%%20X%%20%(release)s', - 'wine': 'Lazarus%%20Windows%%20%(release)s%%20bits' -} - -def install_osx_dmg(dmg): - try: - # Mount .dmg file and parse (automatically determined) target volumes - res = subprocess.check_output('sudo hdiutil attach %s | grep /Volumes/' % (dmg), shell=True) - vol = ('/Volumes/' + l.strip().split('/Volumes/')[-1] for l in res.splitlines() if '/Volumes/' in l) - except: - return False - - # Install .pkg files with installer - install_pkg = lambda v, f: os.system('sudo installer -pkg %s/%s -target /' % (v, f)) == 0 - - for v in vol: - try: - if not all(map(lambda f: (not f.endswith('.pkg')) or install_pkg(v, f), os.listdir(v))): - return False - finally: - # Unmount after installation - os.system('hdiutil detach %s' % (v)) - - return True - -def install_lazarus_default(): - if OS_NAME == 'linux': - # Make sure nogui is installed for headless runs - pkg = 'lazarus lcl-nogui' - elif OS_NAME == 'osx': - # Install brew cask first - pkg = 'caskroom/cask/brew-cask && %s cask install fpc fpcsrc lazarus' % OS_PMAN - else: - # Default to lazarus - pkg = 'lazarus' - return os.system('%s install %s' % (OS_PMAN, pkg)) == 0 - -def install_lazarus_version(ver,rel,env): - # Download all files in directory for specified Lazarus version - osn = env or OS_NAME - tgt = LAZ_BIN_TGT[osn] % {'release': rel or LAZ_REL_DEF[osn]} - src = LAZ_BIN_SRC % {'target': tgt, 'version': ver} - if os.system('wget -r -l1 -T 30 -np -nd -nc -A .deb,.dmg,.exe %s -P %s' % (src, LAZ_TMP_DIR)) != 0: - return False - - if osn == 'wine': - # Install wine and initialize wine directory - if os.system('%s install wine && wine wineboot' % (OS_PMAN)) != 0: - return False - - # Install all .exe files with wine - process_file = lambda f: (not f.endswith('.exe')) or os.system('wine %s /VERYSILENT /DIR="c:\\lazarus"' % (f)) == 0 - elif osn == 'qemu-arm' or osn == 'qemu-arm-static': - # Install qemu and arm cross compiling utilities - if os.system('%s install qemu-user qemu-user-static binutils-arm-linux-gnueabi gcc-arm-linux-gnueabi' % (OS_PMAN)) != 0: - return False - - # Install all .deb files (for linux) and cross compile later - process_file = lambda f: (not f.endswith('.deb')) or os.system('sudo dpkg -i %s' % (f)) == 0 - elif osn == 'linux': - # Install all .deb files - process_file = lambda f: (not f.endswith('.deb')) or os.system('sudo dpkg -i %s' % (f)) == 0 - elif osn == 'osx': - # Install all .dmg files - process_file = lambda f: (not f.endswith('.dmg')) or install_osx_dmg(f) - else: - return False - - # Process all downloaded files - if not all(map(lambda f: process_file(os.path.join(LAZ_TMP_DIR, f)), sorted(os.listdir(LAZ_TMP_DIR)))): - return False - - if osn == 'wine': - # Set wine Path (persistently) to include Lazarus binary directory - if os.system('wine cmd /C reg add HKEY_CURRENT_USER\\\\Environment /v PATH /t REG_SZ /d %%PATH%%\\;c:\\\\lazarus') != 0: - return False - - # Redirect listed executables so they execute in wine - for alias in ('fpc', 'lazbuild', 'lazarus'): - os.system('echo "#!/usr/bin/env bash \nwine %(target)s \$@" | sudo tee %(name)s > /dev/null && sudo chmod +x %(name)s' % { - 'target': alias, - 'name': '/usr/bin/%s' % (alias) - }) - elif osn == 'qemu-arm' or osn == 'qemu-arm-static': - fpcv = subprocess.check_output('fpc -iV', shell=True).strip() - gccv = subprocess.check_output('arm-linux-gnueabi-gcc -dumpversion', shell=True).strip() - opts = ' '.join([ - 'CPU_TARGET=arm', - 'OS_TARGET=linux', - 'BINUTILSPREFIX=arm-linux-gnueabi-', - # 'CROSSOPT="-CpARMV7A -CfVFPV3_D16"', - 'OPT=-dFPC_ARMEL', - 'INSTALL_PREFIX=/usr' - ]) - - # Compile ARM cross compiler - if os.system('cd /usr/share/fpcsrc/%s && sudo make clean crossall crossinstall %s' % (fpcv, opts)) != 0: - return False - - # Symbolic link to update default FPC cross compiler for ARM - if os.system('sudo ln -sf /usr/lib/fpc/%s/ppcrossarm /usr/bin/ppcarm' % (fpcv)) != 0: - return False - - # Update config file with paths to ARM libraries - config = '\n'.join([ - '#INCLUDE /etc/fpc.cfg', - '#IFDEF CPUARM', - '-Xd','-Xt', - '-XParm-linux-gnueabi-', - '-Fl/usr/arm-linux-gnueabi/lib', - '-Fl/usr/lib/gcc/arm-linux-gnueabi/%s' % (gccv), - # '-CpARMV7A', '-CfVFPV3_D16', - '#ENDIF' - ]) - with open(os.path.expanduser('~/.fpc.cfg'),'w') as f: - f.write(config) - - return True - -def install_lazarus(ver=None,rel=None,env=None): - return install_lazarus_version(ver,rel,env) if ver else install_lazarus_default() - -def main(): - os.system('%s update' % (OS_PMAN)) - return install_lazarus(os.environ.get('LAZ_VER'),os.environ.get('LAZ_REL'),os.environ.get('LAZ_ENV')) - -if __name__ == '__main__': - sys.exit(int(not main())) diff --git a/travis-lazarus/.travis.yml b/travis-lazarus/.travis.yml deleted file mode 100644 index fe53a786..00000000 --- a/travis-lazarus/.travis.yml +++ /dev/null @@ -1,52 +0,0 @@ -# Part of `travis-lazarus` (https://github.com/nielsAD/travis-lazarus) -# License: MIT - -sudo: true - -os: - - linux - - osx - -env: - global: - - WINEPREFIX=~/.winelaz - - DISPLAY=:99.0 - matrix: - - LAZ_PKG=true # Use the latest version from the default package manager - - LAZ_VER=1.0.14 # Use specific (binary) release - - LAZ_VER=1.2.6 - - LAZ_VER=1.4.4 - - LAZ_VER=1.6 - -matrix: - include: - - os: linux - env: LAZ_VER=1.2.6 LAZ_ENV=wine WINEARCH=win32 LAZ_OPT="--os=win32 --cpu=i386" - - os: linux - env: LAZ_VER=1.4.4 LAZ_ENV=wine WINEARCH=win32 LAZ_OPT="--os=win32 --cpu=i386" - - os: linux - env: LAZ_VER=1.6 LAZ_ENV=wine WINEARCH=win32 LAZ_OPT="--os=win32 --cpu=i386" - - os: linux - env: LAZ_VER=1.2.6 LAZ_ENV=wine WINEARCH=win64 LAZ_OPT="--os=win64 --cpu=x86_64" - - os: linux - env: LAZ_VER=1.4.4 LAZ_ENV=wine WINEARCH=win64 LAZ_OPT="--os=win64 --cpu=x86_64" - - os: linux - env: LAZ_VER=1.6 LAZ_ENV=wine WINEARCH=win64 LAZ_OPT="--os=win64 --cpu=x86_64" - - os: linux - env: LAZ_VER=1.2.6 LAZ_ENV=qemu-arm LAZ_OPT="--os=linux --cpu=arm --widgetset=nogui" - - os: linux - env: LAZ_VER=1.4.4 LAZ_ENV=qemu-arm LAZ_OPT="--os=linux --cpu=arm --widgetset=nogui" - - os: linux - env: LAZ_VER=1.6 LAZ_ENV=qemu-arm LAZ_OPT="--os=linux --cpu=arm --widgetset=nogui" - -before_install: - # Start virtual display server - - sh -e /etc/init.d/xvfb start || true - -install: - # Install prerequisites (fpc/lazarus/wine/qemu) - - ./.travis.install.py - -script: - - lazbuild $LAZ_OPT my_lazarus_tests.lpi # Build my_lazarus_test project - - $LAZ_ENV ./bin/my_lazarus_tests --all --format=plain # Run my_lazarus_test testsuite diff --git a/travis-lazarus/README.md b/travis-lazarus/README.md deleted file mode 100644 index f067238c..00000000 --- a/travis-lazarus/README.md +++ /dev/null @@ -1,70 +0,0 @@ -Travis CI integration for FPC / Lazarus -======================================= - -[![Build Status](https://travis-ci.org/nielsAD/travis-lazarus.svg?branch=master)](https://travis-ci.org/nielsAD/travis-lazarus) - -[Travis CI](https://travis-ci.org/) currently has no official support for [FreePascal](http://freepascal.org/). This repository demonstrates how FPC and [Lazarus](http://www.lazarus-ide.org/) projects can be used in combination with Travis. There is support for building with multiple Lazarus releases on both Travis' `Linux` and `Mac OSX` platforms. Support for Windows (both `win32` and `win64`) is done using [Wine](https://www.winehq.org/). - -Files ------ -`./.travis.install.py` Sets up the environment by downloading and installing the proper FreePascal and Lazarus versions. Run this script in Travis' `install` phase. - -`./.travis.yml` Custom Travis setup. Refer to their [documentation](http://docs.travis-ci.com/user/customizing-the-build/) for more information. - -`./my_lazarus_test*` Toy project demonstrating a possible test setup. - -How to use ----------- -- [Set up Travis CI for your repository](http://docs.travis-ci.com/user/for-beginners/) -- Add `.travis.install.py` to your repository and run it in the `install` phase. - - Execute the following command inside your repository: - - ```shell - git submodule add https://github.com/nielsAD/travis-lazarus.git travis-lazarus - ``` - - Add the following lines to your `.travis.yml` file: - - ```yaml - sudo: true - install: ./travis-lazarus/.travis.install.py - ``` -- **[OPTIONAL]** Modify settings to customize build versions. - - Add (multiple) `LAZ_VER` entries to the `env` table, for example: - - ```yaml - env: - - LAZ_VER=1.2.6 - - LAZ_VER=1.4.4 - ``` - - Set the `os` field to specify the target operating system(s): - - ```yaml - os: - - linux - - osx - ``` - - Add Windows builds using Wine (_although a good indicator, success with Wine does not guarantee success with Windows, and vice versa!!_): - - ```yaml - matrix: - include: - - os: linux - env: LAZ_VER=1.4.4 LAZ_ENV=wine WINEARCH=win32 LAZ_OPT="--os=win32 --cpu=i386" - - os: linux - env: LAZ_VER=1.4.4 LAZ_ENV=wine WINEARCH=win64 LAZ_OPT="--os=win64 --cpu=x86_64" - ``` - Note that your run script should take into account that it should run with Wine, for example using `$LAZ_ENV lazbuild $LAZ_OPT`. This also requires a virtual display server, as explained in the next step. - - Add a virtual display server if you cannot run headless (_required for Wine_): - - ```yaml - env: - global: - - DISPLAY=:99.0 - before_install: - sh -e /etc/init.d/xvfb start || true - ``` - - Other optional environment variables: - - `LAZ_REL` release platform (use with `LAZ_VER`): - - Linux: `i386` or `amd64` - - Mac OSX: `i386` or `powerpc` - - Wine: `32` or `64` - - `LAZ_TMP_DIR` temporary directory. diff --git a/travis-lazarus/my_lazarus_test.pas b/travis-lazarus/my_lazarus_test.pas deleted file mode 100644 index beeb9d1c..00000000 --- a/travis-lazarus/my_lazarus_test.pas +++ /dev/null @@ -1,33 +0,0 @@ -unit my_lazarus_test; - -{$mode objfpc}{$H+} - -interface - -uses - Classes, SysUtils, fpcunit, testregistry; - -type - TAwesomeTestCase= class(TTestCase) - published - procedure TestHookUp; - end; - -implementation - -uses - LCLIntf; - -procedure TAwesomeTestCase.TestHookUp; -begin - AssertTrue('This shouldn''t fail...', True); - AssertTrue('GetTickCount', GetTickCount() >= 0); - AssertEquals('RValue', $01, GetRValue($10FF01)); - AssertEquals('RValue', $FF, GetGValue($10FF01)); - AssertEquals('RValue', $10, GetBValue($10FF01)); -end; - -initialization - RegisterTest(TAwesomeTestCase); -end. - diff --git a/travis-lazarus/my_lazarus_tests.lpi b/travis-lazarus/my_lazarus_tests.lpi deleted file mode 100644 index 72919fb1..00000000 --- a/travis-lazarus/my_lazarus_tests.lpi +++ /dev/null @@ -1,72 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<CONFIG> - <ProjectOptions> - <Version Value="9"/> - <General> - <SessionStorage Value="InProjectDir"/> - <MainUnit Value="0"/> - <Title Value="my_lazarus_tests"/> - <UseAppBundle Value="False"/> - <ResourceType Value="res"/> - </General> - <i18n> - <EnableI18N LFM="False"/> - </i18n> - <VersionInfo> - <StringTable ProductVersion=""/> - </VersionInfo> - <BuildModes Count="1"> - <Item1 Name="Default" Default="True"/> - </BuildModes> - <PublishOptions> - <Version Value="2"/> - </PublishOptions> - <RunParams> - <local> - <FormatVersion Value="1"/> - </local> - </RunParams> - <RequiredPackages Count="1"> - <Item1> - <PackageName Value="LCL"/> - </Item1> - </RequiredPackages> - <Units Count="2"> - <Unit0> - <Filename Value="my_lazarus_tests.lpr"/> - <IsPartOfProject Value="True"/> - </Unit0> - <Unit1> - <Filename Value="my_lazarus_test.pas"/> - <IsPartOfProject Value="True"/> - </Unit1> - </Units> - </ProjectOptions> - <CompilerOptions> - <Version Value="11"/> - <SearchPaths> - <IncludeFiles Value="$(ProjOutDir)"/> - <OtherUnitFiles Value="$(LazarusDir)/components/fpcunit/console"/> - <UnitOutputDirectory Value="bin"/> - </SearchPaths> - <CodeGeneration> - <SmartLinkUnit Value="True"/> - </CodeGeneration> - <Linking> - <LinkSmart Value="True"/> - </Linking> - </CompilerOptions> - <Debugging> - <Exceptions Count="3"> - <Item1> - <Name Value="EAbort"/> - </Item1> - <Item2> - <Name Value="ECodetoolError"/> - </Item2> - <Item3> - <Name Value="EFOpenError"/> - </Item3> - </Exceptions> - </Debugging> -</CONFIG> diff --git a/travis-lazarus/my_lazarus_tests.lpr b/travis-lazarus/my_lazarus_tests.lpr deleted file mode 100644 index 08a57b62..00000000 --- a/travis-lazarus/my_lazarus_tests.lpr +++ /dev/null @@ -1,25 +0,0 @@ -program my_lazarus_tests; - -{$mode objfpc}{$H+} - -uses - Classes, Interfaces, consoletestrunner, my_lazarus_test; - -type - - { TLazTestRunner } - - TMyTestRunner = class(TTestRunner) - protected - // override the protected methods of TTestRunner to customize its behavior - end; - -var - Application: TMyTestRunner; - -begin - Application := TMyTestRunner.Create(nil); - Application.Initialize; - Application.Run; - Application.Free; -end.