--- a/.gitignore Wed Jul 31 23:14:27 2019 +0200
+++ b/.gitignore Fri Jul 03 23:51:47 2020 +0200
@@ -1,7 +1,7 @@
CMakeCache.txt
CMakeFiles
-moc_*.cxx
-qrc_*.cxx
+moc_*.*
+qrc_*.*
*.o
*.a
*.qm
--- a/.hgignore Wed Jul 31 23:14:27 2019 +0200
+++ b/.hgignore Fri Jul 03 23:51:47 2020 +0200
@@ -92,3 +92,6 @@
build-qmlfrontend*
.cabal-sandbox
cabal.sandbox.config
+*.so
+*_autogen
+build/
--- a/.hgtags Wed Jul 31 23:14:27 2019 +0200
+++ b/.hgtags Fri Jul 03 23:51:47 2020 +0200
@@ -89,3 +89,4 @@
afc089c39556bdd895892fa36ed47aaec83c3825 0.9.24.1-release
195208deff1dd3e22d303d4a92c2ba14be3b6623 Hedgewars-iOS-2.1
5e28098fb59379357a145b73380a1cd3839f643f 0.9.25-release
+88770c206c31dfdebf67271c0c980312a752eb84 1.0.0-release
--- a/CMakeLists.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/CMakeLists.txt Fri Jul 03 23:51:47 2020 +0200
@@ -20,16 +20,18 @@
#possible cmake configuration
option(NOSERVER "Disable gameServer build (off)" OFF)
-option(NOPNG "Disable screenshoot compression (off)" OFF)
+if(NOT WIN32)
+ option(NOPNG "Disable screenshoot compression (off)" OFF)
+endif()
option(NOVIDEOREC "Disable video recording (off)" OFF)
#libraries are built shared unless explicitly added as a static
option(BUILD_SHARED_LIBS "Build libraries as shared modules (on)" ON)
if(WIN32 OR APPLE)
- option(LUA_SYSTEM "Use system lua (off)" OFF)
+ option(LUA_SYSTEM "Use system Lua (off)" OFF)
else()
- option(LUA_SYSTEM "Use system lua (on)" ON)
+ option(LUA_SYSTEM "Use system Lua (on)" ON)
endif()
option(BUILD_ENGINE_LIBRARY "Enable hwengine library (off)" OFF)
@@ -40,8 +42,8 @@
option(SKIPBUNDLE "Do not create relocate bundle (off)" OFF)
option(BUILD_ENGINE_C "Compile hwengine as native C (off)" OFF)
-option(BUILD_ENGINE_JS "Compile hwengine as javascript (off)" OFF)
-option(GL2 "Enable OpenGL 2 rendering !!!EXPERIMENTAL - DO NOT USE!!! [default: off)" OFF)
+option(BUILD_ENGINE_JS "Compile hwengine as JavaScript (off)" OFF)
+option(GL2 "Enable OpenGL 2 rendering, only use if you know what you're doing (off)" OFF)
set(GHFLAGS "" CACHE STRING "Additional Haskell flags")
if(UNIX AND NOT APPLE)
@@ -52,7 +54,7 @@
if(BUILD_ENGINE_C AND NOT NOVIDEOREC)
- if((CMAKE_BUILD_TYPE MATCHES "RELEASE") OR (CMAKE_BUILD_TYPE MATCHES "RELWITHDEBUGINFO"))
+ if((CMAKE_BUILD_TYPE STREQUAL "Release") OR (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
message("NOTE: Video recorder support disabled. It's incompatible with BUILD_ENGINE_C")
set(BUILD_ENGINE_C ON CACHE STRING "Required for BUILD_ENGINE_JS" FORCE)
else()
@@ -90,8 +92,8 @@
set(CPACK_PACKAGE_VERSION_MAJOR 1)
set(CPACK_PACKAGE_VERSION_MINOR 0)
set(CPACK_PACKAGE_VERSION_PATCH 0)
-set(HEDGEWARS_PROTO_VER 58)
-if((CMAKE_BUILD_TYPE MATCHES "RELEASE") OR (CMAKE_BUILD_TYPE MATCHES "RELWITHDEBUGINFO"))
+set(HEDGEWARS_PROTO_VER 59)
+if((CMAKE_BUILD_TYPE STREQUAL "Release") OR (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
else()
set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}-dev")
@@ -110,10 +112,9 @@
#when build type is not specified, assume Debug/Release according to build version information
if(CMAKE_BUILD_TYPE)
- string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE)
- if(NOT((CMAKE_BUILD_TYPE MATCHES "RELEASE") OR
- (CMAKE_BUILD_TYPE MATCHES "DEBUG") OR
- (CMAKE_BUILD_TYPE MATCHES "RELWITHDEBINFO")))
+ if(NOT((CMAKE_BUILD_TYPE STREQUAL "Release") OR
+ (CMAKE_BUILD_TYPE STREQUAL "Debug") OR
+ (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")))
set(CMAKE_BUILD_TYPE ${default_build_type} CACHE STRING "Build type (Debug/Release/RelWithDebInfo)" FORCE)
message(STATUS "Unknown build type ${CMAKE_BUILD_TYPE}, using default (${default_build_type})")
endif()
@@ -166,7 +167,7 @@
#get BUILD_TYPE and enable/disable optimisation
message(STATUS "Using ${CMAKE_BUILD_TYPE} configuration")
-if(CMAKE_BUILD_TYPE MATCHES "DEBUG")
+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
list(APPEND haskell_flags "-Wall" # all warnings
"-debug" # debug mode
"-fno-warn-unused-do-bind"
--- a/CREDITS Wed Jul 31 23:14:27 2019 +0200
+++ b/CREDITS Fri Jul 03 23:51:47 2020 +0200
@@ -33,6 +33,7 @@
- Wohlstand -> policegirl [based on policecap and sm_daisy] (2014)
- TheMadCharles -> barrelhider (CC BY 3.0) (2015)
- Trey Perry <perry.j@gmail.com> -> Other hats
+- alfadur -> zoo_crocodile (2019)
==========
= GRAVES
--- a/ChangeLog.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/ChangeLog.txt Fri Jul 03 23:51:47 2020 +0200
@@ -5,7 +5,7 @@
+ In-Game chat size can now be adjusted. Hold Ctrl and press -, + or = while in chat input. Hold shift for finer control.
+ The intial in-game chat size can be configured in the Frontend's "advanced" settings tab.
-============== 1.0.0-dev (unreleased) ==============
+====================== 1.0.0 =======================
Highlights:
+ Campaigns now respect your team identity instead of overwriting it
+ Single missions now support team selection and track your progress
@@ -44,8 +44,9 @@
* Add missing winner animation in single missions
* Fix hog floating when switching to moving hog
* Fix jump key not being ignored after placing girder or target
- * Explode hog instantly when taking damage while dying
* Fix buggy hog when hog took damage during "idle" phase in kamikaze attack
+ * Fix movement stopping when activating flying saucer after long jump
+ * Girder/rubber can no longer be placed inside moving hogs and land objects
Styles and schemes:
+ The Specialists: Unlock game scheme
@@ -54,11 +55,16 @@
+ CTF_Blizzard: Various minor graphical and text improvements
+ Frenzy: Change ammo slots
+ Continental supplies: Show continent in team bars
+ + King Mode: Automatically select teleport in king placement phase
+ + Racer: Invulnerability can now be disabled in game scheme
* Balanced Random Weapon: Fix Lua errors after using Time Box
* Racer: Fix racer ghost not getting reset after a skip
+ * Racer, TechRacer: Improve compability with game scheme
* Space Invasion: No longer allow to set start shield above shield limit
* Battalion, WxW: Crates drop between turns, when appropriate
* Battalion: Sudden Death effects are now like in the base game
+ * Battalion: Fix incorrect health boost in Highland mode
+ * Battalion: Fix points display not updating properly
* King Mode: Fix team sometimes not being killed properly if king drowned
* King Mode: Kill resurrected minions if king is not alive
* King Mode: Fix whole clan being killed if a king died
@@ -127,6 +133,7 @@
+ Display laser sight icon above wind bar when laser sight utility is active
+ Display selected weapon above hedgehog for some weapons/tools
+ Change cursor of piano strike
+ + New style for switching arrows
+ Colorize switching arrows, pointing arrow and target cross in clan color
+ Skip ammo menu animation when playing with turn time of 10s or less
+ Don't show crate spawn message for initial crates in missions
@@ -135,6 +142,7 @@
+ Show contour of flying saucer and air mines when in highly opaque water
+ Remove visual clutter in cut scenes
+ Add setting to set default/initial zoom
+ + Render arrow pointing to hog only one if playing with wrapped map
* Black clan color can now be used without visual problems
* Fix last 2 characters in demo chat being missing
* Hide most HUD elements in cinematic mode
@@ -144,10 +152,11 @@
* Suppress “<team> is gone.” message at end of game
* Fix game engine ignoring appropriate number formatting of user language
* Fix buggy behaviour when entering speech bubble command in hog placement phase
+ * Fix switching arrows overlapping hedgehog tags of own hedgehog
Translations:
+ Complete: German, Polish
- + Major updates: Chinese, Scottish Gaelic
+ + Major updates: Chinese, Scottish Gaelic, Hungarian
+ Credits page is now translatable
* Remove Arabic translation from release
@@ -161,12 +170,14 @@
+ Visual notification when someone joins the room online
+ Display recommended max. hedgehog count for Perlin maps
+ Various minor style tweaks
+ + Remember maximized state of frontend/game window
* Fix broken handling of /watch chat command on official server
* Fix renaming a video leading to loss of thumbnail after restart
* Fix controls list failing to display correct key names with regards to keyboard layout
* Fix force-locked schemes getting unlocked when changing map types
* Fix possible to select background-only or hidden themes indirectly by changing map type
* Disallow slash, backslash and colon characters in team and scheme names
+ * Increase user name length from 20 to 40
Sounds and voicepacks:
+ sndYoohoo has been split to sndYoohoo and sndKiss
@@ -175,11 +186,15 @@
+ Add underwater sound for airplane
+ Tweak some taunts: sndFirstBlood, sndLeaveMeAlone, sndCutItOut
* Fix English voicepack selection of team being overwritten when playing in non-English locale
+ * Remove Coward.ogg in Default_es voicepack, it contained an insult
Theme customization
+ Default fallback Sudden Death music of themes (fallback-sd-music) is now sdmusic.ogg
+ Make rope stylable by theme: Support for RopeNode.png and rope-step in theme.cfg
+Other game media:
+ + New hat: zoo_crocodile
+
Lua API:
+ New call: SaveMissionVar(varname, value): Save value to mission variable (variable for non-campaign mission)
+ New call: GetMissionVar(varname): Get value of mission variable
@@ -389,7 +404,7 @@
Translations:
+ Translations kept up-to-date: German, Polish
- + Major translation updates: Russian, Japanese, Scottish Gaelic, Ukrainian
+ + Major translation updates: Russian, Japanese, Scottish Gaelic, Ukrainian, Italian
Lua API:
* Deprecation: Setting TurnTimeLeft/ReadyTimeLeft directly is deprecated and will become useless in future. Use the setter functions below
@@ -919,7 +934,7 @@
Translations:
+ Complete translations: German, Polish
- + Major translation updates: Scottish Gaelic, Italian
+ + Major translation updates: Scottish Gaelic, Italian, Hungarian
+ Loading screen can now be translated
+ A few window titles can be translated
+ Campaign names and campaign mission names can be translated
--- a/QTfrontend/CMakeLists.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/CMakeLists.txt Fri Jul 03 23:51:47 2020 +0200
@@ -213,9 +213,9 @@
#when debugging, always prompt a console to see fronted messages
#TODO: check it doesn't interfere on UNIX
-if(CMAKE_BUILD_TYPE MATCHES "RELEASE" OR CMAKE_BUILD_TYPE MATCHES "RELWITHDEBINFO")
+if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set(console_access "WIN32")
-endif(CMAKE_BUILD_TYPE MATCHES "RELEASE" OR CMAKE_BUILD_TYPE MATCHES "RELWITHDEBINFO")
+endif(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
add_executable(hedgewars ${console_access}
${hwfr_src}
--- a/QTfrontend/game.cpp Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/game.cpp Fri Jul 03 23:51:47 2020 +0200
@@ -507,9 +507,20 @@
// fetch new window resolution via IPC and save it in the settings
int size = msg.size();
QString newResolution = QString().append(msg.mid(2)).left(size - 4);
+ bool windowMaximized;
+ if (newResolution.endsWith('M'))
+ {
+ windowMaximized = true;
+ newResolution.chop(1);
+ }
+ else
+ {
+ windowMaximized = false;
+ }
QStringList wh = newResolution.split('x');
config->Form->ui.pageOptions->windowWidthEdit->setValue(wh[0].toInt());
config->Form->ui.pageOptions->windowHeightEdit->setValue(wh[1].toInt());
+ config->vid_SetMaximized(windowMaximized);
break;
}
case '~':
@@ -609,6 +620,8 @@
arguments << QString::number(resolutions.second.width());
arguments << "--height";
arguments << QString::number(resolutions.second.height());
+ if (config->vid_Maximized())
+ arguments << "--maximized";
if (config->zoom() != 100) {
arguments << "--zoom";
arguments << QString::number(config->zoom());
--- a/QTfrontend/gameuiconfig.cpp Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/gameuiconfig.cpp Fri Jul 03 23:51:47 2020 +0200
@@ -93,6 +93,7 @@
QString heightStr = QString::number(screenSize.height());
QString wWidth = value("video/windowedWidth", widthStr).toString();
QString wHeight = value("video/windowedHeight", heightStr).toString();
+ pIsEngineWindowMaximized = value("video/windowedMaximized", false).toBool();
// If left blank reset the resolution to the default
wWidth = (wWidth == "" ? widthStr : wWidth);
wHeight = (wHeight == "" ? heightStr : wHeight);
@@ -232,6 +233,10 @@
const QRect deskSize = HWApplication::desktop()->screenGeometry(-1);
Form->resize(value("frontend/width", qMin(qMax(deskSize.width()*2/3,800),deskSize.width())).toUInt(),
value("frontend/height", qMin(qMax(deskSize.height()*2/3,600),deskSize.height())).toUInt());
+ if(value("frontend/maximized", false) == true)
+ Form->setWindowState(Form->windowState() | Qt::WindowMaximized);
+ else
+ Form->setWindowState(Form->windowState() & ~Qt::WindowMaximized);
// move the window to the center of the screen
QPoint center = HWApplication::desktop()->availableGeometry(-1).center();
@@ -245,6 +250,7 @@
setValue("video/fullscreenResolution", Form->ui.pageOptions->CBResolution->currentText());
setValue("video/windowedWidth", Form->ui.pageOptions->windowWidthEdit->value());
setValue("video/windowedHeight", Form->ui.pageOptions->windowHeightEdit->value());
+ setValue("video/windowedMaximized", vid_Maximized());
setValue("video/fullscreen", vid_Fullscreen());
setValue("video/quality", Form->ui.pageOptions->SLQuality->value());
@@ -262,6 +268,7 @@
{
setValue("frontend/width", Form->width());
setValue("frontend/height", Form->height());
+ setValue("frontend/maximized", (Form->windowState() & Qt::WindowMaximized) != 0);
}
else
{
@@ -383,6 +390,16 @@
return result.second;
}
+bool GameUIConfig::vid_Maximized()
+{
+ return pIsEngineWindowMaximized;
+}
+
+void GameUIConfig::vid_SetMaximized(bool isMaximized)
+{
+ pIsEngineWindowMaximized = isMaximized;
+}
+
bool GameUIConfig::vid_Fullscreen()
{
return Form->ui.pageOptions->CBFullscreen->isChecked();
--- a/QTfrontend/gameuiconfig.h Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/gameuiconfig.h Fri Jul 03 23:51:47 2020 +0200
@@ -40,6 +40,8 @@
QStringList GetTeamsList();
QRect vid_Resolution();
std::pair<QRect, QRect> vid_ResolutionPair();
+ bool vid_Maximized();
+ void vid_SetMaximized(bool isMaximized);
bool vid_Fullscreen();
quint32 translateQuality();
bool isSoundEnabled();
@@ -108,6 +110,7 @@
QList<BindAction> m_binds;
void applyProxySettings();
+ bool pIsEngineWindowMaximized;
QString cachedRandomNick;
};
--- a/QTfrontend/hwform.cpp Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/hwform.cpp Fri Jul 03 23:51:47 2020 +0200
@@ -2303,7 +2303,6 @@
ui.pageCampaign->CBCampaign->setItemIcon(c, notFinishedIcon);
}
-// used for --set-everything [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] [show FPS] [alternate damage] [timer value] [reduced quality]
QString HWForm::getDemoArguments()
{
@@ -2321,6 +2320,7 @@
+ " --fullscreen-height " + QString::number(resolutions.first.height())
+ " --width " + QString::number(resolutions.second.width())
+ " --height " + QString::number(resolutions.second.height())
+ + (config->vid_Maximized() ? " --maximized" : "")
+ (config->zoom() == 100 ? "" : " --zoom " + QString::number(config->zoom()))
+ " --volume " + QString::number(config->volume())
+ (config->isMusicEnabled() ? "" : " --nomusic")
--- a/QTfrontend/model/gameSchemeModel.cpp Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/model/gameSchemeModel.cpp Fri Jul 03 23:51:47 2020 +0200
@@ -92,6 +92,7 @@
<< "The Specialists"
<< "Space Invasion"
<< "HedgeEditor"
+ << "Racer"
;
numberOfDefaultSchemes = predefSchemesNames.size();
@@ -818,6 +819,53 @@
<< QVariant() // scriptparam 43
;
+ QList<QVariant> racer;
+ racer
+ << predefSchemesNames[15] // name 0
+ << QVariant(false) // switchhog 1
+ << QVariant(false) // team divide 2
+ << QVariant(true) // solid land 3
+ << QVariant(true) // border 4
+ << QVariant(false) // low gravity 5
+ << QVariant(false) // laser sight 6
+ << QVariant(true) // invulnerable 7
+ << QVariant(false) // reset health 8
+ << QVariant(false) // vampiric 9
+ << QVariant(false) // karma 10
+ << QVariant(false) // artillery 11
+ << QVariant(true) // random order 12
+ << QVariant(false) // king 13
+ << QVariant(false) // place hog 14
+ << QVariant(true) // shared ammo 15
+ << QVariant(true) // disable girders 16
+ << QVariant(true) // disable land objects 17
+ << QVariant(false) // AI survival 18
+ << QVariant(true) // inf. attack 19
+ << QVariant(true) // reset weps 20
+ << QVariant(false) // per hog ammo 21
+ << QVariant(false) // no wind 22
+ << QVariant(false) // more wind 23
+ << QVariant(false) // tag team 24
+ << QVariant(false) // bottom border 25
+ << QVariant(100) // damage modfier 26
+ << QVariant(90) // turn time 27
+ << QVariant(100) // init health 28
+ << QVariant(50) // sudden death 29
+ << QVariant(0) // case prob 30
+ << QVariant(0) // mines time 31
+ << QVariant(0) // mines number 32
+ << QVariant(0) // mine dud pct 33
+ << QVariant(0) // explosives 34
+ << QVariant(0) // air mines 35
+ << QVariant(0) // health case pct 36
+ << QVariant(25) // health case amt 37
+ << QVariant(0) // water rise amt 38
+ << QVariant(0) // health dec amt 39
+ << QVariant(100) // rope modfier 40
+ << QVariant(100) // get away time 41
+ << QVariant(0) // world edge 42
+ << QVariant() // scriptparam 43
+ ;
schemes.append(defaultScheme);
@@ -835,6 +883,7 @@
schemes.append(specialists);
schemes.append(spaceinvasion);
schemes.append(hedgeeditor);
+ schemes.append(racer);
if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) {
QDir().mkdir(cfgdir->absolutePath() + "/Schemes");
Binary file QTfrontend/res/btnArtillery.png has changed
Binary file QTfrontend/res/btnArtillery@2x.png has changed
Binary file QTfrontend/res/btnDisableLandObjects.png has changed
Binary file QTfrontend/res/btnDisableLandObjects@2x.png has changed
Binary file QTfrontend/res/btnInvulnerable.png has changed
Binary file QTfrontend/res/btnInvulnerable@2x.png has changed
Binary file QTfrontend/res/btnLaserSight.png has changed
Binary file QTfrontend/res/btnLaserSight@2x.png has changed
Binary file QTfrontend/res/btnSwitchHog.png has changed
Binary file QTfrontend/res/btnSwitchHog@2x.png has changed
--- a/QTfrontend/res/credits.csv Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/res/credits.csv Fri Jul 03 23:51:47 2020 +0200
@@ -148,10 +148,12 @@
E,"German","Richard Karolyi","sheepluva@ercatec.net","sheepluva"
E,"German",,"Wuzzy2@mail.ru","Wuzzy"
E,"Greek",,"talos_kriti@yahoo.gr",
+E,"Hungarian",,,"z8w38"
E,"Italian","Luca Bonora","bonora.luca@gmail.com",
E,"Italian","Marco Bresciani","m.bresciani@email.it",
E,"Italian","Gianfranco Costamagna","costamagnagianfranco@yahoo.it",
E,"Italian",,"enricobe@hotmail.com","Enrico"
+E,"Italian","Pacella Marco Ernesto","pacella389@gmail.com","KIRA"
E,"Japanese","ADAM Etienne","etienne.adam@gmail.com",
E,"Japanese","Marco Bresciani","m.bresciani@email.it",
E,"Korean","Anthony Bellew","anthonyreflected@gmail.com",
--- a/QTfrontend/res/css/april1.css Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/res/css/april1.css Fri Jul 03 23:51:47 2020 +0200
@@ -569,3 +569,7 @@
padding-top: 2px;
padding-bottom: 2px;
}
+ToggleButtonWidget
+{
+padding: 0px;
+}
--- a/QTfrontend/res/css/birthday.css Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/res/css/birthday.css Fri Jul 03 23:51:47 2020 +0200
@@ -573,3 +573,7 @@
padding-top: 2px;
padding-bottom: 2px;
}
+ToggleButtonWidget
+{
+padding: 0px;
+}
--- a/QTfrontend/res/css/christmas.css Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/res/css/christmas.css Fri Jul 03 23:51:47 2020 +0200
@@ -568,3 +568,7 @@
padding-top: 2px;
padding-bottom: 2px;
}
+ToggleButtonWidget
+{
+padding: 0px;
+}
--- a/QTfrontend/res/css/easter.css Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/res/css/easter.css Fri Jul 03 23:51:47 2020 +0200
@@ -564,3 +564,7 @@
padding-top: 2px;
padding-bottom: 2px;
}
+ToggleButtonWidget
+{
+padding: 0px;
+}
--- a/QTfrontend/res/css/qt.css Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/res/css/qt.css Fri Jul 03 23:51:47 2020 +0200
@@ -560,3 +560,7 @@
padding-top: 2px;
padding-bottom: 2px;
}
+ToggleButtonWidget
+{
+padding: 0px;
+}
--- a/QTfrontend/ui/page/pageoptions.cpp Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/ui/page/pageoptions.cpp Fri Jul 03 23:51:47 2020 +0200
@@ -573,7 +573,7 @@
groupAccount->layout()->addWidget(labelNN, 0, 0);
editNetNick = new QLineEdit(groupAccount);
- editNetNick->setMaxLength(20);
+ editNetNick->setMaxLength(40);
editNetNick->setText(QLineEdit::tr("anonymous"));
groupAccount->layout()->addWidget(editNetNick, 0, 1);
--- a/QTfrontend/ui/widget/keybinder.cpp Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/ui/widget/keybinder.cpp Fri Jul 03 23:51:47 2020 +0200
@@ -209,7 +209,12 @@
curTable->insertRow(row);
curTable->setItem(row, 0, nameCell);
QTableWidgetItem * bindCell;
- if (cbinds[i].action != "!MULTI")
+ // Check if the bind text is bad. This was discovered after the 1.0.0,
+ // so we need a little workaround.
+ bool is_broken_strbind = cbinds[i].strbind == "precise + switch + toggle hedgehog tags";
+ // ^ should be "precise + switch + toggle team bars"
+ // TODO: Remove is_broken_strbind after 1.0.0 release.
+ if (cbinds[i].action != "!MULTI" && (!is_broken_strbind))
{
bindCell = new QTableWidgetItem(comboBox->currentText());
nameCell->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
@@ -218,7 +223,19 @@
}
else
{
- bindCell = new QTableWidgetItem(HWApplication::translate("binds (combination)", cbinds[i].strbind.toUtf8().constData()));
+ // Apply workaround for the broken 1.0.0 strbind
+ // TODO: Remove the workaround after 1.0.0 release and fix binds.cpp accordingly.
+ if (is_broken_strbind)
+ {
+ // We simply construct the string from other strings we *do* have. :-)
+ QString cellText =
+ HWApplication::translate("binds", "precise aim") + " + " +
+ HWApplication::translate("binds", "switch") + " + " +
+ HWApplication::translate("binds", "toggle team bars");
+ bindCell = new QTableWidgetItem(cellText);
+ }
+ else
+ bindCell = new QTableWidgetItem(HWApplication::translate("binds (combination)", cbinds[i].strbind.toUtf8().constData()));
nameCell->setFlags(Qt::NoItemFlags);
bindCell->setFlags(Qt::NoItemFlags);
bindCell->setIcon(emptyIcon);
--- a/QTfrontend/util/DataManager.cpp Wed Jul 31 23:14:27 2019 +0200
+++ b/QTfrontend/util/DataManager.cpp Fri Jul 03 23:51:47 2020 +0200
@@ -28,7 +28,7 @@
#include <QSettings>
#include <QColor>
-#include <SDL2/SDL.h>
+#include <SDL.h>
#include "hwconsts.h"
#include "HWApplication.h"
--- a/cmake_modules/compilerchecks.cmake Wed Jul 31 23:14:27 2019 +0200
+++ b/cmake_modules/compilerchecks.cmake Fri Jul 03 23:51:47 2020 +0200
@@ -62,7 +62,7 @@
endif()
endif()
- if(CMAKE_BUILD_TYPE MATCHES "RELEASE" OR CMAKE_BUILD_TYPE MATCHES "RELWITHDEBINFO")
+ if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set(CMAKE_REQUIRED_FLAGS "-Wl,--as-needed")
check_c_compiler_flag("" HAVE_ASNEEDED)
if(HAVE_ASNEEDED)
--- a/cmake_modules/cpackvars.cmake Wed Jul 31 23:14:27 2019 +0200
+++ b/cmake_modules/cpackvars.cmake Fri Jul 03 23:51:47 2020 +0200
@@ -1,6 +1,6 @@
# revision information in cpack-generated names
-if(CMAKE_BUILD_TYPE MATCHES DEBUG)
+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
set(full_suffix "${HEDGEWARS_VERSION}-r${HEDGEWARS_REVISION}")
else()
set(full_suffix "${HEDGEWARS_VERSION}")
--- a/cmake_modules/paths.cmake Wed Jul 31 23:14:27 2019 +0200
+++ b/cmake_modules/paths.cmake Fri Jul 03 23:51:47 2020 +0200
@@ -59,6 +59,7 @@
#@rpath mangling
set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
#install_name_tool for libraries
+ set(CMAKE_BUILD_WITH_INSTALL_NAME_DIR TRUE)
set(CMAKE_INSTALL_NAME_DIR "@executable_path/../Frameworks")
else(APPLE AND NOT (${CMAKE_INSTALL_PREFIX} MATCHES "/usr"))
#paths where to find libraries (final slash not optional):
--- a/cmake_modules/platform.cmake Wed Jul 31 23:14:27 2019 +0200
+++ b/cmake_modules/platform.cmake Fri Jul 03 23:51:47 2020 +0200
@@ -1,9 +1,12 @@
if(APPLE)
- if(${CMAKE_VERSION} VERSION_GREATER "2.8.10.2" AND
- ${CMAKE_VERSION} VERSION_LESS "2.8.12.1")
- message(FATAL_ERROR "This version of CMake is known *not* to work, please update or use a lower version")
- endif()
+ #minimum for macOS. sorry!
+ cmake_minimum_required(VERSION 3.9.0)
+
+ #set c++11 standard for QT requirements
+ set(CMAKE_CXX_STANDARD 11)
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
set(CMAKE_FIND_FRAMEWORK "FIRST")
@@ -31,21 +34,10 @@
set(minimum_macosx_version ${current_macosx_version})
endif()
- #10.3 systems don't have enough processing power anyway
- #10.4 does not have @rpath support (which SDL uses)
- if(minimum_macosx_version VERSION_LESS "10.5")
- message(FATAL_ERROR "Hedgewars is not supported on your version of Mac OS X")
- endif()
-
- if(NOT CMAKE_OSX_ARCHITECTURES)
- if(current_macosx_version VERSION_LESS "10.6")
- #SDL is only 32 bit on older OS version
- if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "powerpc*")
- set(CMAKE_OSX_ARCHITECTURES "ppc7400")
- else()
- set(CMAKE_OSX_ARCHITECTURES "i386")
- endif()
- endif()
+ #minimum OSX version is 10.8. Earlier versions cannot compile some dependencies anymore
+ #(like ffmpeg/libav)
+ if(minimum_macosx_version VERSION_LESS "10.8")
+ message(FATAL_ERROR "Hedgewars is unsupported on your platform and requires Mac OS X 10.8+")
endif()
#parse this system variable and adjust only the powerpc syntax to be compatible with -P
@@ -97,12 +89,6 @@
#add user framework directory
add_flag_append(CMAKE_Pascal_FLAGS "-Ff~/Library/Frameworks")
- #workaround older cmake versions
- if(${CMAKE_VERSION} VERSION_LESS "2.8.12")
- add_flag_append(CMAKE_C_LINK_FLAGS "-Wl,-rpath -Wl,${CMAKE_INSTALL_RPATH}")
- add_flag_append(CMAKE_CXX_LINK_FLAGS "-Wl,-rpath -Wl,${CMAKE_INSTALL_RPATH}")
- add_flag_append(CMAKE_Pascal_LINK_FLAGS "-k-rpath -k${CMAKE_INSTALL_RPATH}")
- endif()
endif(APPLE)
if(MINGW)
--- a/cmake_modules/revinfo.cmake Wed Jul 31 23:14:27 2019 +0200
+++ b/cmake_modules/revinfo.cmake Fri Jul 03 23:51:47 2020 +0200
@@ -17,7 +17,7 @@
endif()
#let's assume that if you have hg you might be interested in debugging
- set(default_build_type "DEBUG")
+ set(default_build_type "Debug")
#write down hash and rev for easy picking should hg be missing
file(WRITE "${CMAKE_SOURCE_DIR}/share/version_info.txt" "Hedgewars versioning information, do not modify\nrev ${HEDGEWARS_REVISION}\nhash ${HEDGEWARS_HASH}\n")
@@ -30,12 +30,12 @@
set(HEDGEWARS_REVISION "GIT")
#let's assume that if you have git you might be interested in debugging
- set(default_build_type "DEBUG")
+ set(default_build_type "Debug")
#write down hash and rev for easy picking should hg be missing
file(WRITE "${CMAKE_SOURCE_DIR}/share/version_info.txt" "Hedgewars versioning information, do not modify\nrev ${HEDGEWARS_REVISION}\nhash ${HEDGEWARS_HASH}\n")
else()
- set(default_build_type "RELEASE")
+ set(default_build_type "Release")
# when compiling outside rev control, fetch revision and hash information from version_info.txt
find_file(version_info version_info.txt PATH ${CMAKE_SOURCE_DIR}/share)
if(version_info)
--- a/gameServer/Actions.hs Wed Jul 31 23:14:27 2019 +0200
+++ b/gameServer/Actions.hs Fri Jul 03 23:51:47 2020 +0200
@@ -870,8 +870,8 @@
processAction (CheckSuccess _) = return ()
processAction (QueryReplay _) = processAction $ Warning $ loc "This server does not support replays!"
processAction (ShowReplay rname) = return ()
-processAction (SaveRoom rname) = return ()
-processAction (LoadRoom rname) = return ()
+processAction (SaveRoom rname) = return () -- TODO: Send warning that this command is unsupported
+processAction (LoadRoom rname) = return () -- TODO: Send warning that this command is unsupported
#endif
processAction Cleanup = do
--- a/gameServer/CommandHelp.hs Wed Jul 31 23:14:27 2019 +0200
+++ b/gameServer/CommandHelp.hs Fri Jul 03 23:51:47 2020 +0200
@@ -70,9 +70,12 @@
loc "/fix: Force this room to stay open when it is empty",
loc "/unfix: Undo the /fix command",
loc "/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map",
- loc "/delete <config ID>: Delete a votable room configuration",
+ loc "/delete <config ID>: Delete a votable room configuration"
+#if defined(OFFICIAL_SERVER)
+ ,
loc "/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file",
loc "/loadroom <file name>: Load votable room configurations (and greeting) from a file"
+#endif
]
cmdHelpHeaderLobby :: [B.ByteString]
--- a/gameServer/CoreTypes.hs Wed Jul 31 23:14:27 2019 +0200
+++ b/gameServer/CoreTypes.hs Fri Jul 03 23:51:47 2020 +0200
@@ -313,8 +313,8 @@
True
False
"<h2><p align=center><a href=\"https://www.hedgewars.org/\">https://www.hedgewars.org/</a></p></h2>"
- "<font color=yellow><h3 align=center>Hedgewars 0.9.25 is out! Please update.</h3><p align=center><a href=https://hedgewars.org/download.html>Download page here</a></font>"
- 57 -- latestReleaseVersion
+ "<font color=yellow><h3 align=center>Hedgewars 1.0.0 is out! Please update.</h3><p align=center><a href=https://hedgewars.org/download.html>Download page here</a></font>"
+ 59 -- latestReleaseVersion
41 -- earliestCompatibleVersion
46631
""
--- a/gameServer/Utils.hs Wed Jul 31 23:14:27 2019 +0200
+++ b/gameServer/Utils.hs Fri Jul 03 23:51:47 2020 +0200
@@ -127,6 +127,8 @@
, (56, "0.9.25-dev")
, (57, "0.9.25")
, (58, "1.0.0-dev")
+ , (59, "1.0.0")
+ , (60, "1.0.1-dev")
]
askFromConsole :: B.ByteString -> IO B.ByteString
--- a/hedgewars/ArgParsers.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/ArgParsers.pas Fri Jul 03 23:51:47 2020 +0200
@@ -78,31 +78,27 @@
WriteLn(stdout, 'Usage: hwengine <path to demo file> [options]');
WriteLn(stdout, '');
WriteLn(stdout, 'where [options] can be any of the following:');
- WriteLn(stdout, ' --prefix [path to folder]');
- WriteLn(stdout, ' --user-prefix [path to folder]');
- WriteLn(stdout, ' --locale [name of language file]');
- WriteLn(stdout, ' --nick [string]');
- WriteLn(stdout, ' --fullscreen-width [fullscreen width in pixels]');
- WriteLn(stdout, ' --fullscreen-height [fullscreen height in pixels]');
- WriteLn(stdout, ' --width [window width in pixels]');
- WriteLn(stdout, ' --height [window height in pixels]');
- WriteLn(stdout, ' --volume [sound level]');
- WriteLn(stdout, ' --frame-interval [milliseconds]');
- Writeln(stdout, ' --stereo [value]');
- WriteLn(stdout, ' --raw-quality [flags]');
- WriteLn(stdout, ' --low-quality');
- WriteLn(stdout, ' --nomusic');
- WriteLn(stdout, ' --nosound');
- WriteLn(stdout, ' --fullscreen');
- WriteLn(stdout, ' --showfps');
- WriteLn(stdout, ' --altdmg');
- WriteLn(stdout, ' --no-teamtag');
- WriteLn(stdout, ' --no-hogtag');
- WriteLn(stdout, ' --no-healthtag');
- WriteLn(stdout, ' --translucent-tags');
- WriteLn(stdout, ' --stats-only');
- WriteLn(stdout, ' --chat-size [default chat size in percent]');
- WriteLn(stdout, ' --help');
+ WriteLn(stdout, '');
+ WriteLn(stdout, 'File locations:');
+ WriteLn(stdout, ' --prefix <path to folder>: Set the path to the system game data folder');
+ WriteLn(stdout, ' --user-prefix <path to folder>: Set the path to the custom data folder to find game content');
+ WriteLn(stdout, ' --locale <name of file>: Set the game language (en.txt for example)');
+ WriteLn(stdout, '');
+ WriteLn(stdout, 'Graphics:');
+ WriteLn(stdout, ' --width <width in pixels>: Set game window width');
+ WriteLn(stdout, ' --height <height in pixels>: Set game window height');
+ WriteLn(stdout, ' --maximized: Start in maximized window');
+ WriteLn(stdout, ' --fullscreen: Start in fullscreen');
+ WriteLn(stdout, ' --fullscreen-width <width in pixels>: Set fullscreen width');
+ WriteLn(stdout, ' --fullscreen-height <height in pixels>: Set fullscreen height');
+ WriteLn(stdout, ' --low-quality: Lowers the game quality');
+ WriteLn(stdout, ' --zoom <percent>: Start with custom zoom level');
+ WriteLn(stdout, '');
+ WriteLn(stdout, 'Audio:');
+ WriteLn(stdout, ' --volume <sound level>: Set volume between 0 and 100');
+ WriteLn(stdout, ' --nomusic: Disable music');
+ WriteLn(stdout, ' --nosound: Disable sound effects');
+ WriteLn(stdout, ' --nodampen: Don''t dampen sound volume when game application loses focus');
WriteLn(stdout, '');
WriteLn(stdout, 'HUD:');
WriteLn(stdout, ' --altdmg: Show alternative damage');
@@ -135,14 +131,6 @@
helpCommandUsed:= true;
end;
-procedure setDepth(var paramIndex: LongInt);
-begin
- WriteLn(stdout, 'WARNING: --depth is a deprecated command, which could be removed in a future version!');
- WriteLn(stdout, ' This option no longer does anything, please consider removing it.');
- WriteLn(stdout, '');
- inc(ParamIndex);
-end;
-
procedure statsOnlyGame;
begin
cOnlyStats:= true;
@@ -255,20 +243,12 @@
ZoomValue:= UserZoom;
end;
-procedure parseClassicParameter(cmdarray: array of string; size:LongInt; var paramIndex:LongInt); forward;
-
function parseParameter(cmd:string; arg:string; var paramIndex:LongInt): Boolean;
-const videoarray: array [0..4] of string = ('--fullscreen-width','--fullscreen-height', '--width', '--height', '--depth');
- audioarray: array [0..2] of string = ('--volume','--nomusic','--nosound');
- otherarray: array [0..2] of string = ('--locale','--fullscreen','--showfps');
- mediaarray: array [0..9] of string = ('--fullscreen-width', '--fullscreen-height', '--width', '--height', '--depth', '--volume','--nomusic','--nosound','--locale','--fullscreen');
- allarray: array [0..19] of string = ('--fullscreen-width','--fullscreen-height', '--width', '--height', '--depth','--volume','--nomusic','--nosound','--nodampen','--locale','--fullscreen','--showfps','--altdmg','--frame-interval','--low-quality','--no-teamtag','--no-hogtag','--no-healthtag','--translucent-tags', '--chat-size');
- reallyAll: array[0..40] of shortstring = (
+const reallyAll: array[0..35] of shortstring = (
'--prefix', '--user-prefix', '--locale', '--fullscreen-width', '--fullscreen-height', '--width',
- '--height', '--frame-interval', '--volume','--nomusic', '--nosound', '--nodampen',
+ '--height', '--maximized', '--frame-interval', '--volume','--nomusic', '--nosound', '--nodampen',
'--fullscreen', '--showfps', '--altdmg', '--low-quality', '--raw-quality', '--stereo', '--nick',
'--zoom',
- {deprecated} '--depth', '--set-video', '--set-audio', '--set-other', '--set-multimedia', '--set-everything',
{internal} '--internal', '--port', '--recorder', '--landpreview',
{misc} '--stats-only', '--gci', '--help','--protocol', '--no-teamtag','--no-hogtag','--no-healthtag','--translucent-tags','--lua-test','--no-holiday-silliness','--chat-size');
var cmdIndex: byte;
@@ -288,43 +268,37 @@
{--fullscreen-height} 4 : cFullscreenHeight := max(getLongIntParameter(arg, paramIndex, parseParameter), cMinScreenHeight);
{--width} 5 : cWindowedWidth := max(2 * (getLongIntParameter(arg, paramIndex, parseParameter) div 2), cMinScreenWidth);
{--height} 6 : cWindowedHeight := max(2 * (getLongIntParameter(arg, paramIndex, parseParameter) div 2), cMinScreenHeight);
- {--frame-interval} 7 : cTimerInterval := getLongIntParameter(arg, paramIndex, parseParameter);
- {--volume} 8 : SetVolume ( max(getLongIntParameter(arg, paramIndex, parseParameter), 0) );
- {--nomusic} 9 : SetMusic ( false );
- {--nosound} 10 : SetSound ( false );
- {--nodampen} 11 : SetAudioDampen ( false );
- {--fullscreen} 12 : cFullScreen := true;
- {--showfps} 13 : cShowFPS := true;
- {--altdmg} 14 : cAltDamage := true;
- {--low-quality} 15 : cReducedQuality := $FFFFFFFF xor rqLowRes;
- {--raw-quality} 16 : cReducedQuality := getLongIntParameter(arg, paramIndex, parseParameter);
- {--stereo} 17 : setStereoMode ( getLongIntParameter(arg, paramIndex, parseParameter) );
- {--nick} 18 : UserNick := parseNick( getstringParameter(arg, paramIndex, parseParameter) );
- {--zoom} 19 : setZoom(arg, paramIndex, parseParameter);
- {deprecated options}
- {--depth} 20 : setDepth(paramIndex);
- {--set-video} 21 : parseClassicParameter(videoarray,5,paramIndex);
- {--set-audio} 22 : parseClassicParameter(audioarray,3,paramIndex);
- {--set-other} 23 : parseClassicParameter(otherarray,3,paramIndex);
- {--set-multimedia} 24 : parseClassicParameter(mediaarray,10,paramIndex);
- {--set-everything} 25 : parseClassicParameter(allarray,14,paramIndex);
+ {--maximized} 7 : cWindowedMaximized:= true;
+ {--frame-interval} 8 : cTimerInterval := getLongIntParameter(arg, paramIndex, parseParameter);
+ {--volume} 9 : SetVolume ( max(getLongIntParameter(arg, paramIndex, parseParameter), 0) );
+ {--nomusic} 10 : SetMusic ( false );
+ {--nosound} 11 : SetSound ( false );
+ {--nodampen} 12 : SetAudioDampen ( false );
+ {--fullscreen} 13 : cFullScreen := true;
+ {--showfps} 14 : cShowFPS := true;
+ {--altdmg} 15 : cAltDamage := true;
+ {--low-quality} 16 : cReducedQuality := $FFFFFFFF xor rqLowRes;
+ {--raw-quality} 17 : cReducedQuality := getLongIntParameter(arg, paramIndex, parseParameter);
+ {--stereo} 18 : setStereoMode ( getLongIntParameter(arg, paramIndex, parseParameter) );
+ {--nick} 19 : UserNick := parseNick( getstringParameter(arg, paramIndex, parseParameter) );
+ {--zoom} 20 : setZoom(arg, paramIndex, parseParameter);
{"internal" options}
- {--internal} 26 : {$IFDEF HWLIBRARY}isInternal:= true{$ENDIF};
- {--port} 27 : setIpcPort( getLongIntParameter(arg, paramIndex, parseParameter), parseParameter );
- {--recorder} 28 : startVideoRecording(paramIndex);
- {--landpreview} 29 : GameType := gmtLandPreview;
+ {--internal} 21 : {$IFDEF HWLIBRARY}isInternal:= true{$ENDIF};
+ {--port} 22 : setIpcPort( getLongIntParameter(arg, paramIndex, parseParameter), parseParameter );
+ {--recorder} 23 : startVideoRecording(paramIndex);
+ {--landpreview} 24 : GameType := gmtLandPreview;
{anything else}
- {--stats-only} 30 : statsOnlyGame();
- {--gci} 31 : GciEasterEgg();
- {--help} 32 : DisplayUsage();
- {--protocol} 33 : DisplayProtocol();
- {--no-teamtag} 34 : cTagsMask := cTagsMask and (not htTeamName);
- {--no-hogtag} 35 : cTagsMask := cTagsMask and (not htName);
- {--no-healthtag} 36 : cTagsMask := cTagsMask and (not htHealth);
- {--translucent-tags} 37 : cTagsMask := cTagsMask or htTransparent;
- {--lua-test} 38 : begin cTestLua := true; SetSound(false); cScriptName := getstringParameter(arg, paramIndex, parseParameter); WriteLn(stdout, 'Lua test file specified: ' + cScriptName);end;
- {--no-holiday-silliness} 39 : cHolidaySilliness:= false;
- {--chat-size} 40 : cDefaultChatScale := 1.0 * getLongIntParameter(arg, paramIndex, parseParameter) / 100;
+ {--stats-only} 25 : statsOnlyGame();
+ {--gci} 26 : GciEasterEgg();
+ {--help} 27 : DisplayUsage();
+ {--protocol} 28 : DisplayProtocol();
+ {--no-teamtag} 29 : cTagsMask := cTagsMask and (not htTeamName);
+ {--no-hogtag} 30 : cTagsMask := cTagsMask and (not htName);
+ {--no-healthtag} 31 : cTagsMask := cTagsMask and (not htHealth);
+ {--translucent-tags} 32 : cTagsMask := cTagsMask or htTransparent;
+ {--lua-test} 33 : begin cTestLua := true; SetSound(false); cScriptName := getstringParameter(arg, paramIndex, parseParameter); WriteLn(stdout, 'Lua test file specified: ' + cScriptName);end;
+ {--no-holiday-silliness} 34 : cHolidaySilliness:= false;
+ {--chat-size} 35 : cDefaultChatScale := 1.0 * getLongIntParameter(arg, paramIndex, parseParameter) / 100;
else
begin
//Assume the first "non parameter" is the demo file, anything else is invalid
@@ -339,48 +313,6 @@
end;
end;
-procedure parseClassicParameter(cmdarray: array of string; size:LongInt; var paramIndex:LongInt);
-var index, tmpInt: LongInt;
- isBool, isValid: Boolean;
- cmd, arg, newSyntax: string;
-begin
- WriteLn(stdout, 'WARNING: You are using a deprecated command, which could be removed in a future version!');
- WriteLn(stdout, ' Consider updating to the latest syntax, which is much more flexible!');
- WriteLn(stdout, ' Run "hwegine --help" to learn it!');
- WriteLn(stdout, '');
-
- index:= 0;
- tmpInt:= 1;
- while (index < size) do
- begin
- newSyntax:= '';
- inc(paramIndex);
- cmd:= cmdarray[index];
- arg:= cmdarray[paramIndex];
- isValid:= (cmd<>'--depth');
-
- // check if the parameter is a boolean one
- isBool:= (cmd = '--nomusic') or (cmd = '--nosound') or (cmd = '--nodampen') or (cmd = '--fullscreen') or (cmd = '--showfps') or (cmd = '--altdmg') or (cmd = '--no-teamtag') or (cmd = '--no-hogtag') or (cmd = '--no-healthtag') or (cmd = '--translucent-tags');
- if isBool and (arg='0') then
- isValid:= false;
- if (cmd='--nomusic') or (cmd='--nosound') or (cmd='--nodampen') then
- isValid:= not isValid;
-
- if isValid then
- begin
- parseParameter(cmd, arg, tmpInt);
- newSyntax:= newSyntax + cmd + ' ';
- if not isBool then
- newSyntax:= newSyntax + arg + ' ';
- end;
- inc(index);
- end;
-
- WriteLn(stdout, 'Attempted to automatically convert to the new syntax:');
- WriteLn(stdout, newSyntax);
- WriteLn(stdout, '');
-end;
-
procedure parseCommandLine;
var paramIndex: LongInt;
paramTotal: LongInt;
@@ -391,15 +323,6 @@
paramIndex:= {$IFDEF HWLIBRARY}0{$ELSE}1{$ENDIF};
paramTotal:= ParamCount; //-1 because pascal enumeration is inclusive
- (*
- WriteLn(stdout, 'total parameters: ' + inttostr(paramTotal));
- tmpInt:= 0;
- while (tmpInt <= paramTotal) do
- begin
- WriteLn(stdout, inttostr(tmpInt) + ': ' + {$IFDEF HWLIBRARY}argv[tmpInt]{$ELSE}paramCount(tmpInt){$ENDIF});
- inc(tmpInt);
- end;
- *)
wrongParameter:= false;
while (paramIndex <= paramTotal) do
begin
@@ -442,10 +365,6 @@
if (GameType = gmtBadSyntax) then
WriteLn(stderr, 'Please use --help to see possible arguments and their usage.');
- (*
- WriteLn(stdout,'PathPrefix: ' + PathPrefix);
- WriteLn(stdout,'UserPathPrefix: ' + UserPathPrefix);
- *)
end;
end.
--- a/hedgewars/CMakeLists.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/CMakeLists.txt Fri Jul 03 23:51:47 2020 +0200
@@ -144,13 +144,15 @@
add_definitions(-dUSE_VIDEO_RECORDING)
endif()
-find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP")
-if(PNG_FOUND)
- list(INSERT engine_sources 0 PNGh.pas)
- list(REMOVE_AT PNG_LIBRARIES 1) #removing the zlib library path
- get_filename_component(PNG_LIBRARY_DIR ${PNG_LIBRARIES} PATH)
- add_flag_append(CMAKE_Pascal_FLAGS "-k-L${PNG_LIBRARY_DIR} -Fl${PNG_LIBRARY_DIR}")
- add_definitions(-dPNG_SCREENSHOTS)
+if(NOT WIN32)
+ find_package_or_disable_msg(PNG NOPNG "Screenshots will be saved in BMP")
+ if(PNG_FOUND)
+ list(INSERT engine_sources 0 PNGh.pas)
+ list(REMOVE_AT PNG_LIBRARIES 1) #removing the zlib library path
+ get_filename_component(PNG_LIBRARY_DIR ${PNG_LIBRARIES} PATH)
+ add_flag_append(CMAKE_Pascal_FLAGS "-k-L${PNG_LIBRARY_DIR} -Fl${PNG_LIBRARY_DIR}")
+ add_definitions(-dPNG_SCREENSHOTS)
+ endif()
endif()
if(LUA_SYSTEM)
@@ -189,8 +191,12 @@
if (WIN32 AND VCPKG_TOOLCHAIN)
add_definitions(-dWIN32_VCPKG)
+ add_flag_append(CMAKE_Pascal_FLAGS_DEBUG "-dVCPKG_DEBUG")
endif()
+if (WIN32_WIN64_CROSS_COMPILE)
+ add_flag_append(CMAKE_Pascal_FLAGS "-Px86_64 -Twin64")
+endif()
#SOURCE AND PROGRAMS SECTION
if(BUILD_ENGINE_LIBRARY)
@@ -211,6 +217,11 @@
set_source_files_properties(hwLibrary.pas PROPERTIES OBJECT_DEPENDS "${sourcefiles_sofar};${CMAKE_CURRENT_SOURCE_DIR}/hwengine.pas")
add_library(hwengine SHARED hwLibrary.pas)
else()
+ if(APPLE)
+ # Handle large linker install_names
+ add_flag_prepend(CMAKE_Pascal_FLAGS "-k-headerpad_max_install_names")
+ endif()
+
# no need to change name here because target has same name
set(engine_output_name "hwengine${CMAKE_EXECUTABLE_SUFFIX}")
set(destination_dir ${target_binary_install_dir})
--- a/hedgewars/SDLh.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/SDLh.pas Fri Jul 03 23:51:47 2020 +0200
@@ -56,11 +56,10 @@
type PLongInt = ^LongInt;
{$ENDIF}
-
(* SDL *)
const
{$IFDEF WINDOWS}
- SDLLibName = 'SDL2.dll';
+ SDLLibName = {$IFDEF VCPKG_DEBUG}'SDL2d.dll'{$ELSE}'SDL2.dll'{$ENDIF};
SDL_TTFLibName = 'SDL2_ttf.dll';
SDL_MixerLibName = 'SDL2_mixer.dll';
SDL_ImageLibName = 'SDL2_image.dll';
@@ -219,6 +218,7 @@
GShift = 8;
BShift = 16;
AShift = 24;
+ AByteIndex = 3;
{$ELSE}
RMask = $FF000000;
GMask = $00FF0000;
@@ -228,6 +228,7 @@
GShift = 16;
BShift = 8;
AShift = 0;
+ AByteIndex = 0;
{$ENDIF}
KMOD_NONE = $0000;
@@ -477,7 +478,6 @@
SDL_SCANCODE_KP_E = 192;
SDL_SCANCODE_KP_F = 193;
SDL_SCANCODE_KP_XOR = 194;
- SDL_SCANCODE_KP_POWER = 195;
SDL_SCANCODE_KP_PERCENT = 196;
SDL_SCANCODE_KP_LESS = 197;
SDL_SCANCODE_KP_GREATER = 198;
@@ -933,6 +933,7 @@
PSDL_Thread = Pointer;
PSDL_mutex = Pointer;
+ PSDL_sem = Pointer;
TSDL_GLattr = (
SDL_GL_RED_SIZE,
@@ -1160,6 +1161,7 @@
function SDL_CreateThread(fn: Pointer; name: PChar; data: Pointer): PSDL_Thread; cdecl; external SDLLibName;
{$ENDIF}
procedure SDL_WaitThread(thread: PSDL_Thread; status: PLongInt); cdecl; external SDLLibName;
+procedure SDL_DetachThread(thread: PSDL_Thread); cdecl; external SDLLibName;
procedure SDL_KillThread(thread: PSDL_Thread); cdecl; external SDLLibName;
function SDL_CreateMutex: PSDL_mutex; cdecl; external SDLLibName;
@@ -1167,6 +1169,11 @@
function SDL_LockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName;
function SDL_UnlockMutex(mutex: PSDL_mutex): LongInt; cdecl; external SDLLibName;
+function SDL_CreateSemaphore(initial_value: Longword): PSDL_sem; cdecl; external SDLLibName;
+procedure SDL_DestroySemaphore(sem: PSDL_sem); cdecl; external SDLLibName;
+function SDL_SemWait(sem: PSDL_sem): LongInt; cdecl; external SDLLibName;
+function SDL_SemPost(sem: PSDL_sem): LongInt; cdecl; external SDLLibName;
+
function SDL_GL_SetAttribute(attr: TSDL_GLattr; value: LongInt): LongInt; cdecl; external SDLLibName;
procedure SDL_GL_SwapBuffers; cdecl; external SDLLibName;
@@ -1254,6 +1261,7 @@
function IMG_Load_RW(rwop: PSDL_RWops; freesrc: LongBool): PSDL_Surface; cdecl; external SDL_ImageLibName;
function IMG_LoadPNG_RW(rwop: PSDL_RWops): PSDL_Surface; cdecl; external SDL_ImageLibName;
function IMG_LoadTyped_RW(rwop: PSDL_RWops; freesrc: LongBool; type_: PChar): PSDL_Surface; cdecl; external SDL_ImageLibName;
+function IMG_SavePNG(surface: PSDL_Surface; const _file: PChar): LongInt; cdecl; external SDL_ImageLibName;
(* SDL_net *)
function SDLNet_Init: LongInt; cdecl; external SDL_NetLibName;
--- a/hedgewars/hwengine.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/hwengine.pas Fri Jul 03 23:51:47 2020 +0200
@@ -230,11 +230,14 @@
begin
if GameState = gsSuspend then
GameState:= previousGameState;
+ cWindowedMaximized:= false;
{$IFDEF ANDROID}
//This call is used to reinitialize the glcontext and reload the textures
ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true);
{$ENDIF}
end;
+ SDL_WINDOWEVENT_MAXIMIZED:
+ cWindowedMaximized:= true;
SDL_WINDOWEVENT_RESIZED:
begin
cNewScreenWidth:= max(2 * (event.window.data1 div 2), cMinScreenWidth);
@@ -302,12 +305,18 @@
cScreenHeight:= cWindowedHeight;
ParseCommand('fullscr '+intToStr(LongInt(cFullScreen)), true);
- WriteLnToConsole('window resize: ' + IntToStr(cScreenWidth) + ' x ' + IntToStr(cScreenHeight));
+ if cWindowedMaximized then
+ WriteLnToConsole('window resize: ' + IntToStr(cScreenWidth) + ' x ' + IntToStr(cScreenHeight) + ' (maximized)')
+ else
+ WriteLnToConsole('window resize: ' + IntToStr(cScreenWidth) + ' x ' + IntToStr(cScreenHeight));
ScriptOnScreenResize();
InitCameraBorders();
InitTouchInterface();
InitZoom(zoomValue);
- SendIPC('W' + IntToStr(cScreenWidth) + 'x' + IntToStr(cScreenHeight));
+ if cWindowedMaximized then
+ SendIPC('W' + IntToStr(cScreenWidth) + 'x' + IntToStr(cScreenHeight) + 'M')
+ else
+ SendIPC('W' + IntToStr(cScreenWidth) + 'x' + IntToStr(cScreenHeight));
end;
CurrTime:= SDL_GetTicks();
--- a/hedgewars/pas2cRedo.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/pas2cRedo.pas Fri Jul 03 23:51:47 2020 +0200
@@ -117,3 +117,4 @@
GetCurrentDir : function : PChar;
+ glShaderSource : procedure;
--- a/hedgewars/pas2cSystem.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/pas2cSystem.pas Fri Jul 03 23:51:47 2020 +0200
@@ -90,12 +90,12 @@
glBindRenderbufferEXT, glRenderbufferStorageEXT,
glFramebufferRenderbufferEXT, glFramebufferTexture2DEXT,
glUniformMatrix4fv, glVertexAttribPointer, glCreateShader,
- glShaderSource, glCompileShader, glGetShaderiv, glGetShaderInfoLog,
+ {glShaderSource, }glCompileShader, glGetShaderiv, glGetShaderInfoLog,
glCreateProgram, glAttachShader, glBindAttribLocation, glLinkProgram,
glDeleteShader, glGetProgramiv, glGetProgramInfoLog, glUseProgram,
glUniform1i, glGetUniformLocation, glEnableVertexAttribArray,
glGetError, glDeleteProgram, glDeleteBuffers,
- glGenBuffers, glBufferData, glBindBuffer, glewInit,
+ glGenBuffers, glBufferData, glBindBuffer,
glUniform4f, glDisableVertexAttribArray, glTexEnvi,
glLoadMatrixf, glMultMatrixf, glGetFloatv,
glDrawBuffer, glReadBuffer: procedure;
@@ -114,7 +114,7 @@
GL_RENDERBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_FLOAT, GL_UNSIGNED_BYTE, GL_COMPILE_STATUS,
GL_INFO_LOG_LENGTH, GL_LINK_STATUS, GL_VERTEX_SHADER, GL_FRAGMENT_SHADER,
- GL_NO_ERROR, GL_ARRAY_BUFFER, GL_STATIC_DRAW, GLEW_OK,
+ GL_NO_ERROR, GL_ARRAY_BUFFER, GL_STATIC_DRAW,
GL_AUX_BUFFERS, GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE, GL_ADD,
GL_MODELVIEW_MATRIX, GL_AUX0, GL_BACK: integer;
--- a/hedgewars/uAI.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uAI.pas Fri Jul 03 23:51:47 2020 +0200
@@ -38,20 +38,15 @@
CanUseAmmo: array [TAmmoType] of boolean;
StopThinking: boolean;
StartTicks: Longword;
- ThinkThread: PSDL_Thread;
- ThreadLock: PSDL_Mutex;
+ ThreadSem: PSDL_Sem;
procedure FreeActionsList;
begin
AddFileLog('FreeActionsList called');
- if (ThinkThread <> nil) then
- begin
- StopThinking:= true;
- SDL_WaitThread(ThinkThread, nil);
- end;
- SDL_LockMutex(ThreadLock);
- ThinkThread:= nil;
- SDL_UnlockMutex(ThreadLock);
+
+ StopThinking:= true;
+ SDL_SemWait(ThreadSem);
+ SDL_SemPost(ThreadSem);
if CurrentHedgehog <> nil then
with CurrentHedgehog^ do
@@ -112,6 +107,7 @@
BotLevel:= Me^.Hedgehog^.BotLevel;
windSpeed:= hwFloat2Float(cWindSpeed);
useThisActions:= false;
+Me^.AIHints:= Me^.AIHints and (not aihAmmosChanged);
for i:= 0 to Pred(Targets.Count) do
if (Targets.ar[i].Score >= 0) and (not StopThinking) then
@@ -437,7 +433,7 @@
switchCount:= HHHasAmmo(PGear(Me)^.Hedgehog^, amSwitch)
else switchCount:= 0;
-if ((Me^.State and gstAttacked) = 0) or isInMultiShoot or bonuses.activity then
+if ((Me^.State and gstAttacked) = 0) or isInMultiShoot or bonuses.activity or ((Me^.AIHints and aihAmmosChanged) <> 0) then
if Targets.Count > 0 then
begin
// iterate over current team hedgehogs
@@ -483,7 +479,7 @@
FillBonuses(false);
// Hog has no idea what to do. Use tardis or skip
- if not bonuses.activity then
+ if (not bonuses.activity) and ((Me^.AIHints and aihAmmosChanged) = 0) then
if (((GameFlags and gfInfAttack) <> 0) or (CurrentHedgehog^.MultiShootAttacks = 0)) and (HHHasAmmo(Me^.Hedgehog^, amTardis) > 0) and (CanUseTardis(Me^.Hedgehog^.Gear)) and (random(4) < 3) then
// Tardis brings hog to a random place. Perfect for clueless AI
begin
@@ -493,6 +489,7 @@
end
else
AddAction(BestActions, aia_Skip, 0, 250, 0, 0);
+ Me^.AIHints := ME^.AIHints and (not aihAmmosChanged);
end;
end else SDL_Delay(100)
@@ -522,18 +519,18 @@
end;
Me^.State:= Me^.State and (not gstHHThinking);
-SDL_LockMutex(ThreadLock);
-ThinkThread:= nil;
-SDL_UnlockMutex(ThreadLock);
Think:= 0;
+SDL_SemPost(ThreadSem);
end;
procedure StartThink(Me: PGear);
+var ThinkThread: PSDL_Thread;
begin
if ((Me^.State and (gstAttacking or gstHHJumping or gstMoving)) <> 0)
or isInMultiShoot then
exit;
+SDL_SemWait(ThreadSem);
//DeleteCI(Me); // this will break demo/netplay
Me^.State:= Me^.State or gstHHThinking;
@@ -556,9 +553,8 @@
FillBonuses(((Me^.State and gstAttacked) <> 0) and (not isInMultiShoot) and ((GameFlags and gfInfAttack) = 0));
-SDL_LockMutex(ThreadLock);
ThinkThread:= SDL_CreateThread(@Think, PChar('think'), Me);
-SDL_UnlockMutex(ThreadLock);
+SDL_DetachThread(ThinkThread);
end;
{$IFDEF DEBUGAI}
@@ -610,14 +606,13 @@
procedure initModule;
begin
StartTicks:= 0;
- ThinkThread:= nil;
- ThreadLock:= SDL_CreateMutex();
+ ThreadSem:= SDL_CreateSemaphore(1);
end;
procedure freeModule;
begin
FreeActionsList();
- SDL_DestroyMutex(ThreadLock);
+ SDL_DestroySemaphore(ThreadSem);
end;
end.
--- a/hedgewars/uAIActions.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uAIActions.pas Fri Jul 03 23:51:47 2020 +0200
@@ -68,7 +68,7 @@
procedure ProcessAction(var Actions: TActions; Me: PGear);
implementation
-uses uAIMisc, uAI, uAmmos, uVariables, uCommands, uUtils, uIO{$IFDEF TRACEAIACTIONS}, uConsole{$ENDIF};
+uses uAIMisc, uAI, uAmmos, uVariables, uCommands, uConsts, uUtils, uIO{$IFDEF TRACEAIACTIONS}, uConsole{$ENDIF};
var PrevX: LongInt = 0;
timedelta: Longword = 0;
@@ -206,21 +206,31 @@
CheckHang(Me);
exit
end;
- aia_LookLeft:
+ aia_LookLeft: begin
+ if (Me^.State and gstMoving) <> 0 then
+ exit;
+
if not Me^.dX.isNegative then
- begin
- ParseCommand('+left', true);
+ begin
+ if (Me^.Message and gmLeft) = 0 then
+ ParseCommand('+left', true);
exit
end
else
ParseCommand('-left', true);
- aia_LookRight:
+ end;
+ aia_LookRight: begin
+ if (Me^.State and gstMoving) <> 0 then
+ exit;
+
if Me^.dX.isNegative then
- begin
- ParseCommand('+right', true);
+ begin
+ if (Me^.Message and gmRight) = 0 then
+ ParseCommand('+right', true);
exit
end
else ParseCommand('-right', true);
+ end;
aia_AwareExpl:
AwareOfExplosion(X, Y, Param);
--- a/hedgewars/uAIAmmoTests.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uAIAmmoTests.pas Fri Jul 03 23:51:47 2020 +0200
@@ -1367,10 +1367,13 @@
cake.Radius:= 7;
cake.CollisionMask:= lfNotCurHogCrate;
cake.Hedgehog:= Me^.Hedgehog;
+ cake.Kind:= gtCake;
// check left direction
cake.Angle:= 3;
cake.dX.isNegative:= true;
+ cake.dX.QWordValue:= 0;
+ cake.dY:= _0;
cake.X:= Me^.X - _3;
cake.Y:= Me^.Y;
checkCakeWalk(Me, @cake, ap);
--- a/hedgewars/uAIMisc.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uAIMisc.pas Fri Jul 03 23:51:47 2020 +0200
@@ -57,7 +57,7 @@
TBonuses = record
activity: boolean;
- Count : Longword;
+ Count : LongInt;
ar : array[0..Pred(MAXBONUS)] of TBonus;
end;
@@ -799,7 +799,7 @@
begin
dead:= true;
Targets.reset:= true;
- if dX < 0.035 then
+ if abs(gdX) < 0.035 then
begin
subrate:= RealRateExplosion(Me, round(pX), round(pY), 61, afErasesLand or afTrackFall);
if abs(subrate) > 2000 then inc(Rate,subrate div 1024)
@@ -961,6 +961,9 @@
begin
HHGo:= false;
Gear^.CollisionMask:= lfNotCurHogCrate;
+
+Gear^.dX.isNegative:= (Gear^.Message and gmLeft) <> 0;
+
AltGear^:= Gear^;
GoInfo.Ticks:= 0;
@@ -1012,21 +1015,15 @@
continue
end;
- // usual walk
- if (Gear^.Message and gmLeft) <> 0 then
- Gear^.dX:= -cLittle
- else
- if (Gear^.Message and gmRight) <> 0 then
- Gear^.dX:= cLittle
- else
- exit(false);
+ // usual walk
+ Gear^.dX:= SignAs(cLittle, Gear^.dX);
- if MakeHedgehogsStep(Gear) then
- inc(GoInfo.Ticks, cHHStepTicks);
+ if MakeHedgehogsStep(Gear) then
+ inc(GoInfo.Ticks, cHHStepTicks);
- // we have moved for 1 px
- if (pX <> hwRound(Gear^.X)) and ((Gear^.State and gstMoving) = 0) then
- exit(true)
+ // we have moved for 1 px
+ if (pX <> hwRound(Gear^.X)) and ((Gear^.State and gstMoving) = 0) then
+ exit(true)
until (pX = hwRound(Gear^.X)) and (pY = hwRound(Gear^.Y)) and ((Gear^.State and gstMoving) = 0);
HHJump(AltGear, jmpHJump, GoInfo);
--- a/hedgewars/uAmmos.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uAmmos.pas Fri Jul 03 23:51:47 2020 +0200
@@ -202,7 +202,7 @@
if Hedgehogs[i].Gear <> nil then
begin
Hedgehogs[i].Ammo:= GetAmmoByNum(Hedgehogs[i].AmmoStore);
- if (GameFlags and gfPlaceHog) <> 0 then
+ if ((GameFlags and gfPlaceHog) <> 0) or (((GameFlags and gfKing) <> 0) and (Hedgehogs[i].King = true)) then
Hedgehogs[i].CurAmmoType:= amTeleport
else
Hedgehogs[i].CurAmmoType:= amNothing
@@ -265,7 +265,9 @@
begin
PackAmmo(Ammo, Ammoz[AmmoType].Slot);
CurAmmoType:= amNothing
- end
+ end;
+if Hedgehog.BotLevel <> 0 then
+ Hedgehog.Gear^.AIHints := Hedgehog.Gear^.AIHints or aihAmmosChanged;
end;
procedure PackAmmo(Ammo: PHHAmmo; Slot: LongInt);
--- a/hedgewars/uCollisions.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uCollisions.pas Fri Jul 03 23:51:47 2020 +0200
@@ -96,8 +96,10 @@
function CalcSlopeNearGear(Gear: PGear; dirX, dirY: LongInt): hwFloat;
function CalcSlopeTangent(Gear: PGear; collisionX, collisionY: LongInt; var outDeltaX, outDeltaY: LongInt; TestWord: LongWord): boolean;
+function CheckGearsUnderSprite(Sprite: TSprite; sprX, sprY, Frame: LongInt): boolean;
+
implementation
-uses uConsts, uLandGraphics, uVariables;
+uses uConsts, uLandGraphics, uVariables, SDLh, uLandTexture, uDebug;
type TCollisionEntry = record
X, Y, Radius: LongInt;
@@ -1020,6 +1022,66 @@
CalcSlopeBelowGear := _0;
end;
+function CheckGearsUnderSprite(Sprite: TSprite; sprX, sprY, Frame: LongInt): boolean;
+var x, y, bpp, h, w, row, col, gx, gy, r, numFramesFirstCol: LongInt;
+ p: PByteArray;
+ Image: PSDL_Surface;
+ Gear: PGear;
+begin
+ CheckGearsUnderSprite := false;
+ if checkFails(SpritesData[Sprite].Surface <> nil, 'Assert SpritesData[Sprite].Surface failed', true) then exit;
+
+ numFramesFirstCol:= SpritesData[Sprite].imageHeight div SpritesData[Sprite].Height;
+ Image:= SpritesData[Sprite].Surface;
+
+ if SDL_MustLock(Image) then
+ if SDLCheck(SDL_LockSurface(Image) >= 0, 'CheckGearsUnderSprite', true) then exit;
+
+ bpp:= Image^.format^.BytesPerPixel;
+
+ if checkFails(bpp = 4, 'It should be 32 bpp sprite', true) then
+ begin
+ if SDL_MustLock(Image) then
+ SDL_UnlockSurface(Image);
+ exit
+ end;
+
+ w:= SpritesData[Sprite].Width;
+ h:= SpritesData[Sprite].Height;
+
+ row:= Frame mod numFramesFirstCol;
+ col:= Frame div numFramesFirstCol;
+ p:= PByteArray(@(PByteArray(Image^.pixels)^[ Image^.pitch * row * h + col * w * 4 ]));
+ Gear:= GearsList;
+
+ while Gear <> nil do
+ begin
+ if (Gear^.Kind = gtAirMine) or
+ ((Gear^.Kind in [gtCase, gtExplosives, gtTarget, gtKnife, gtMine, gtHedgehog, gtSMine]) and (Gear^.CollisionIndex = -1)) then
+ begin
+ gx:= hwRound(Gear^.X);
+ gy:= hwRound(Gear^.Y);
+ r:= Gear^.Radius + 1;
+ if (gx + r >= sprX) and (gx - r < sprX + w) and (gy + r >= sprY) and (gy - r < sprY + h) then
+ for y := gy - r to gy + r do
+ for x := gx - r to gx + r do
+ begin
+ if (x >= sprX) and (x < sprX + w) and (y >= sprY) and (y < sprY + h)
+ and (Sqr(x - gx) + Sqr(y - gy) <= Sqr(r))
+ and (((PLongword(@(p^[Image^.pitch * (y - sprY) + (x - sprX) * 4]))^) and AMask) <> 0) then
+ begin
+ CheckGearsUnderSprite := true;
+ if SDL_MustLock(Image) then
+ SDL_UnlockSurface(Image);
+ exit
+ end
+ end
+ end;
+
+ Gear := Gear^.NextGear
+ end;
+end;
+
procedure initModule;
begin
Count:= 0;
--- a/hedgewars/uConsts.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uConsts.pas Fri Jul 03 23:51:47 2020 +0200
@@ -110,6 +110,8 @@
ifCritical = $00000002; // image is critical for gameplay (exit game if unable to load)
ifColorKey = $00000004; // image uses transparent pixels (color keying)
ifIgnoreCaps = $00000008; // ignore hardware capabilities when loading (i.e. image will not be drawn using OpenGL)
+ ifDigestAlpha = $00000010; // add alpha channel to the digest
+ ifDigestAll = $00000020; // add all channels to the digest
// texture priority (allows OpenGL to keep frequently used textures in video memory more easily)
tpLowest = 0.00;
@@ -326,6 +328,7 @@
// AI hints to be set for any gear
aihUsualProcessing = $00000000; // treat gear as usual
aihDoesntMatter = $00000001; // ignore gear in attack calculations and don't intentionally attack it
+ aihAmmosChanged = $00000002; // set when ammos were changed within this turn but not processed yet
// ammo properties
ammoprop_Timerable = $00000001; // can set timer
--- a/hedgewars/uGears.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uGears.pas Fri Jul 03 23:51:47 2020 +0200
@@ -43,6 +43,7 @@
procedure EndTurnCleanup;
procedure DrawGears;
procedure DrawGearsGui;
+procedure DrawFinger;
procedure FreeGearsList;
procedure AddMiscGears;
procedure AssignHHCoords;
@@ -276,7 +277,7 @@
end;
if curHandledGear^.Active then
begin
- if curHandledGear^.RenderTimer then
+ if (not cOnlyStats) and curHandledGear^.RenderTimer then
begin
// Mine timer
if (curHandledGear^.Kind in [gtMine, gtSMine, gtAirMine]) then
@@ -728,6 +729,19 @@
end;
end;
+procedure DrawFinger;
+var Gear: PGear;
+ x, y: LongInt;
+begin
+if ((CurrentHedgehog <> nil) and (CurrentHedgehog^.Gear <> nil)) then
+ begin
+ Gear:= CurrentHedgehog^.Gear;
+ x:= hwRound(Gear^.X) + WorldDx;
+ y:= hwRound(Gear^.Y) + WorldDy;
+ RenderFinger(Gear, x, y);
+ end;
+end;
+
procedure FreeGearsList;
var t, tt: PGear;
begin
--- a/hedgewars/uGearsHandlersMess.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uGearsHandlersMess.pas Fri Jul 03 23:51:47 2020 +0200
@@ -2422,7 +2422,7 @@
doStepCase(Gear)
else
// health texture (FlightTime = health when the last texture was generated)
- if (Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil) then
+ if (not cOnlyStats) and ((Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil)) then
begin
Gear^.FlightTime:= Gear^.Health;
FreeAndNilTexture(Gear^.Tex);
@@ -2500,7 +2500,7 @@
dec(Gear^.Health, Gear^.Damage);
Gear^.Damage := 0;
// health texture (FlightTime = health when the last texture was generated)
- if (Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil) then
+ if (not cOnlyStats) and ((Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil)) then
begin
Gear^.FlightTime:= Gear^.Health;
FreeAndNilTexture(Gear^.Tex);
@@ -2523,12 +2523,14 @@
i:= 1
else
i:= 0
+ else if cOnlyStats then
+ i:= 0
// Always show health (default)
else
i:= 1;
if i = 1 then
begin
- if (Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil) then
+ if (not cOnlyStats) and ((Gear^.Health <> Gear^.FlightTime) or (Gear^.Tex = nil)) then
begin
Gear^.FlightTime:= Gear^.Health;
FreeAndNilTexture(Gear^.Tex);
@@ -2537,7 +2539,7 @@
end
else
begin
- if (Gear^.FlightTime <> $ffffffff) or (Gear^.Tex = nil) then
+ if (not cOnlyStats) and ((Gear^.FlightTime <> $ffffffff) or (Gear^.Tex = nil)) then
begin
Gear^.FlightTime:= $ffffffff;
FreeAndNilTexture(Gear^.Tex);
@@ -3317,6 +3319,7 @@
(hwRound(Distance(tx - int2hwFloat(leftX-(rightX-rx)), ty - y)) > cBuildMaxDist)
)));
if distFail
+ or CheckGearsUnderSprite(Ammoz[Gear^.AmmoType].PosSprite, Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Gear^.State)
or (not TryPlaceOnLand(Gear^.Target.X - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Width div 2, Gear^.Target.Y - SpritesData[Ammoz[Gear^.AmmoType].PosSprite].Height div 2, Ammoz[Gear^.AmmoType].PosSprite, Gear^.State, true, LandFlags)) then
begin
PlaySound(sndDenied);
@@ -3477,6 +3480,7 @@
HHGear := CurrentHedgehog^.Gear;
ApplyAmmoChanges(HHGear^.Hedgehog^);
DeleteGear(Gear);
+ bShowSwitcher:= false;
exit
end;
@@ -3538,6 +3542,9 @@
begin
Gear^.doStep := @doStepSwitcherWork;
+ // Note: The game assumes there's at most only one gtSwitcher gear in the game.
+ bShowSwitcher:= true;
+
HHGear := Gear^.Hedgehog^.Gear;
OnUsedAmmo(HHGear^.Hedgehog^);
with HHGear^ do
@@ -4610,7 +4617,7 @@
i:= Gear^.Health div 20;
- if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
+ if (not cOnlyStats) and (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
begin
Gear^.Damage:= i;
FreeAndNilTexture(Gear^.Tex);
@@ -4619,8 +4626,12 @@
end;
if (HHGear^.Message and (gmAttack or gmUp or gmLeft or gmRight) <> 0) and
- (HHGear^.Message and gmPrecise = 0) then
+ (HHGear^.Message and gmPrecise = 0) and
+ ((Gear^.State and gsttmpFlag) <> 0) then
+ begin
Gear^.State := Gear^.State and (not gsttmpFlag);
+ HHGear^.dX := Gear^.dX;
+ end;
if HHGear^.Message and gmPrecise = 0 then
HHGear^.Message := HHGear^.Message and (not (gmUp or gmLeft or gmRight));
@@ -4635,7 +4646,9 @@
if ((Gear^.State and gsttmpFlag) = 0)
or (HHGear^.dY < _0) then
- doStepHedgehogMoving(HHGear);
+ doStepHedgehogMoving(HHGear)
+ else
+ HHGear^.dX:= SignAs(_0, HHGear^.dX);
if
(HHGear^.Damage <> 0)
@@ -4680,8 +4693,8 @@
if (dY < _0_1) and (dY > -_0_1) then
begin
Gear^.State := Gear^.State or gsttmpFlag;
- dX := SignAs(_0, dX);
- dY := dY - _0_2
+ dY := dY - _0_2;
+ Gear^.dX:= dX;
end
end
end;
@@ -5876,7 +5889,7 @@
else
begin
i:= Gear^.Health div 5;
- if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
+ if (not cOnlyStats) and (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
begin
Gear^.Damage:= i;
FreeAndNilTexture(Gear^.Tex);
@@ -5967,7 +5980,7 @@
else
begin
i:= Gear^.Health div 10;
- if (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
+ if (not cOnlyStats) and (i <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
begin
Gear^.Damage:= i;
FreeAndNilTexture(Gear^.Tex);
@@ -6486,7 +6499,7 @@
t:LongInt;
begin
t:= Gear^.Health div 10;
- if (t <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
+ if (not cOnlyStats) and (t <> Gear^.Damage) and ((GameTicks and $3F) = 0) then
begin
Gear^.Damage:= t;
FreeAndNilTexture(Gear^.Tex);
--- a/hedgewars/uGearsHedgehog.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uGearsHedgehog.pas Fri Jul 03 23:51:47 2020 +0200
@@ -916,10 +916,10 @@
Gear^.PortalCounter:= 0;
PrevdX:= hwSign(Gear^.dX);
if (Gear^.Message and gmLeft )<>0 then
- Gear^.dX:= -cLittle else
+ Gear^.dX:= -_0 else
if (Gear^.Message and gmRight )<>0 then
- Gear^.dX:= cLittle
- else exit;
+ Gear^.dX:= _0
+ else exit;
StepSoundTimer:= cHHStepTicks;
--- a/hedgewars/uGearsRender.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uGearsRender.pas Fri Jul 03 23:51:47 2020 +0200
@@ -38,6 +38,7 @@
procedure RenderGear(Gear: PGear; x, y: LongInt);
procedure RenderGearTimer(Gear: PGear; x, y: LongInt);
procedure RenderGearHealth(Gear: PGear; x, y: LongInt);
+procedure RenderFinger(Gear: PGear; ox, oy: LongInt);
procedure RenderHHGuiExtras(Gear: PGear; ox, oy: LongInt);
procedure RenderAirMineGuiExtras(Gear: PGear; ox, oy: LongInt);
procedure DrawHHOrder();
@@ -238,15 +239,12 @@
end;
-// Render some informational GUI next to hedgehog, like fuel and alternate weapon
-procedure RenderHHGuiExtras(Gear: PGear; ox, oy: LongInt);
+procedure RenderFinger(Gear: PGear; ox, oy: LongInt);
var HH: PHedgehog;
- sx, sy, tx, ty, t, hogLR: LongInt;
+ tx, ty, t: LongInt;
dAngle: real;
begin
HH:= Gear^.Hedgehog;
- sx:= ox + 1; // this offset is very common
- sy:= oy - 3;
if HH^.Unplaced then
exit;
if (Gear^.State and gstHHDeath) <> 0 then
@@ -256,17 +254,19 @@
if (CinematicScript) then
exit;
- // render finger (pointing arrow)
+ // render finger (arrow pointing to hog)
if bShowFinger and ((Gear^.State and gstHHDriven) <> 0) then
begin
ty := oy - 32;
- // move finger higher up if tags are above hog
+ // move finger higher up if tags or switching arrows are above hog
if (cTagsMask and htTeamName) <> 0 then
ty := ty - HH^.Team^.NameTagTex^.h - 2;
if (cTagsMask and htName) <> 0 then
ty := ty - HH^.NameTagTex^.h - 2;
if (cTagsMask and htHealth) <> 0 then
ty := ty - HH^.HealthTagTex^.h - 2;
+ if bShowSwitcher then
+ ty := ty - SpritesData[sprSwitch].Height - 4;
tx := ox;
// don't go offscreen
@@ -292,6 +292,25 @@
DrawSpriteRotatedF(sprFinger, tx, ty, RealTicks div 32 mod 16, 1, dAngle);
untint;
end;
+end;
+
+
+// Render some informational GUI next to hedgehog, like fuel and alternate weapon
+procedure RenderHHGuiExtras(Gear: PGear; ox, oy: LongInt);
+var HH: PHedgehog;
+ sx, sy, hogLR: LongInt;
+begin
+ HH:= Gear^.Hedgehog;
+ sx:= ox + 1; // this offset is very common
+ sy:= oy - 3;
+ if HH^.Unplaced then
+ exit;
+ if (Gear^.State and gstHHDeath) <> 0 then
+ exit;
+ if (Gear^.State and gstHHGone) <> 0 then
+ exit;
+ if (CinematicScript) then
+ exit;
// render crosshair
if (CrosshairGear <> nil) and (Gear = CrosshairGear) then
@@ -1296,7 +1315,7 @@
vg: PVisualGear;
i: Longword;
aAngle: real;
- startX, endX, startY, endY: LongInt;
+ startX, endX, startY, endY, ty: LongInt;
begin
// airmine has its own sprite
if (Gear^.State and gstFrozen <> 0) and (Gear^.Kind <> gtAirMine) then Tint($A0, $A0, $FF, $FF);
@@ -1543,8 +1562,30 @@
end;
gtSwitcher: begin
setTintAdd(true);
+ if IsTooDarkToRead(Gear^.Hedgehog^.Team^.Clan^.Color) then
+ Tint($FFFFFFFF)
+ else
+ Tint($000000FF);
+
+ ty := y - SpritesData[sprSwitch].Height;
+ // Move higher up if hedgehog tags are visible.
+ // This happens when finger is active. The finger is then moved above the switching arrows.
+ if bShowFinger then
+ begin
+ if (cTagsMask and htTeamName) <> 0 then
+ ty := ty - Gear^.Hedgehog^.Team^.NameTagTex^.h - 2;
+ if (cTagsMask and htName) <> 0 then
+ ty := ty - Gear^.Hedgehog^.NameTagTex^.h - 2;
+ if (cTagsMask and htHealth) <> 0 then
+ ty := ty - Gear^.Hedgehog^.HealthTagTex^.h - 2;
+ if (cTagsMask and (htTeamName or htName or htHealth)) <> 0 then
+ ty := ty - 4;
+ end;
+
+ DrawSpriteRotatedF(sprSwitch, x + 1, ty, 1, 0, (RealTicks div 5) mod 360);
+
Tint(Gear^.Hedgehog^.Team^.Clan^.Color shl 8 or $FF);
- DrawSprite(sprSwitch, x - 16, y - 56, (RealTicks shr 6) mod 12);
+ DrawSpriteRotatedF(sprSwitch, x + 1, ty, 0, 0, (RealTicks div 5) mod 360);
untint;
setTintAdd(false);
end;
--- a/hedgewars/uGearsUtils.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uGearsUtils.pas Fri Jul 03 23:51:47 2020 +0200
@@ -284,10 +284,7 @@
Gear^.Hedgehog^.Team^.Clan^.Flawless:= false;
- if (Gear^.State and gstHHDeath) <> 0 then
- // If hog took damage while dying, explode hog instantly (see doStepHedgehogDead)
- Gear^.Timer:= 1
- else
+ if (Gear^.State and gstHHDeath) = 0 then
begin
HHHurt(Gear^.Hedgehog, Source, Damage);
AddDamageTag(hwRound(Gear^.X), hwRound(Gear^.Y), Damage, Gear^.Hedgehog^.Team^.Clan^.Color);
--- a/hedgewars/uLandObjects.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uLandObjects.pas Fri Jul 03 23:51:47 2020 +0200
@@ -36,7 +36,7 @@
implementation
uses uStore, uConsts, uConsole, uRandom, uSound
, uTypes, uVariables, uDebug, uUtils
- , uPhysFSLayer, adler32, uRenderUtils;
+ , uPhysFSLayer, uRenderUtils;
const MaxRects = 512;
MAXOBJECTRECTS = 16;
@@ -89,18 +89,18 @@
// this an if instead of masking colours to avoid confusing map creators
if ((AMask and Pixel) = 0) then
LandWord:= 0
- else if Pixel = $FFFFFFFF then // white
+ else if (Pixel and AMask > 0) and (Pixel and RMask > 0) and (Pixel and GMask > 0) and (Pixel and BMask > 0) then // whiteish
LandWord:= lfObject
- else if Pixel = AMask then // black
+ else if (Pixel and AMask > 0) and (Pixel and RMask = 0) and (Pixel and GMask = 0) and (Pixel and BMask = 0) then // blackish
begin
LandWord:= lfBasic;
disableLandBack:= false
end
- else if Pixel = (AMask or RMask) then // red
+ else if (Pixel and AMask > 0) and (Pixel and RMask > 0) and (Pixel and GMask = 0) and (Pixel and BMask = 0) then // reddish
LandWord:= lfIndestructible
- else if Pixel = (AMask or BMask) then // blue
+ else if (Pixel and AMask > 0) and (Pixel and RMask = 0) and (Pixel and GMask = 0) and (Pixel and BMask > 0) then // blueish
LandWord:= lfObject or lfIce
- else if Pixel = (AMask or GMask) then // green
+ else if (Pixel and AMask > 0) and (Pixel and RMask = 0) and (Pixel and GMask > 0) and (Pixel and BMask = 0) then // greenish
LandWord:= lfObject or lfBouncy
end;
@@ -346,37 +346,13 @@
CountNonZeroz:= lRes;
end;
-procedure ChecksumLandObjectImage(Image: PSDL_Surface);
-var y: LongInt;
-begin
- if Image = nil then exit;
-
- if SDL_MustLock(Image) then
- SDL_LockSurface(Image);
-
- if checkFails(Image^.format^.BytesPerPixel = 4, 'Land object image should be 32bit', true) then
- begin
- if SDL_MustLock(Image) then
- SDL_UnlockSurface(Image);
- exit
- end;
-
- for y := 0 to Image^.h-1 do
- syncedPixelDigest:= Adler32Update(syncedPixelDigest, @PByteArray(Image^.pixels)^[y*Image^.pitch], Image^.w*4);
-
- if SDL_MustLock(Image) then
- SDL_UnlockSurface(Image);
-end;
-
function AddGirder(gX: LongInt; var girSurf: PSDL_Surface): boolean;
var x1, x2, y, k, i, girderHeight: LongInt;
rr: TSDL_Rect;
bRes: boolean;
begin
if girSurf = nil then
- girSurf:= LoadDataImageAltPath(ptCurrTheme, ptGraphics, 'Girder', ifCritical or ifColorKey or ifIgnoreCaps);
-
-ChecksumLandObjectImage(girsurf);
+ girSurf:= LoadDataImageAltPath(ptCurrTheme, ptGraphics, 'Girder', ifCritical or ifColorKey or ifIgnoreCaps or ifDigestAlpha);
girderHeight:= girSurf^.h;
@@ -731,11 +707,10 @@
Delete(s, 1, i);
i:= Pos(',', s);
if i = 0 then i:= Succ(Length(S));
- Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifColorKey or ifIgnoreCaps or ifCritical);
+ Surf:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i))), ifColorKey or ifIgnoreCaps or ifCritical or ifDigestAlpha );
Width:= Surf^.w;
Height:= Surf^.h;
Delete(s, 1, i);
- ChecksumLandObjectImage(Surf);
end;
end;
@@ -935,18 +910,22 @@
begin
i:= Pos(',', s);
Name:= Trim(Copy(s, 1, Pred(i)));
- Surf:= LoadDataImage(ptCurrTheme, Name, ifColorKey or ifIgnoreCaps or ifCritical);
+
+ Mask:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i)))+'_mask', ifColorKey or ifIgnoreCaps or ifDigestAll);
+ if Mask = nil then
+ Surf:= LoadDataImage(ptCurrTheme, Name, ifColorKey or ifIgnoreCaps or ifCritical or ifDigestAlpha)
+ else
+ Surf:= LoadDataImage(ptCurrTheme, Name, ifColorKey or ifIgnoreCaps or ifCritical);
+
Width:= Surf^.w;
Height:= Surf^.h;
- Mask:= LoadDataImage(ptCurrTheme, Trim(Copy(s, 1, Pred(i)))+'_mask', ifColorKey or ifIgnoreCaps);
+
Delete(s, 1, i);
i:= Pos(',', s);
Maxcnt:= StrToInt(Trim(Copy(s, 1, Pred(i))));
Delete(s, 1, i);
if (Maxcnt < 1) or (Maxcnt > MAXTHEMEOBJECTS) then
OutError('Broken theme. Object''s max. count should be between 1 and '+ inttostr(MAXTHEMEOBJECTS) +' (it was '+ inttostr(Maxcnt) +').', true);
- ChecksumLandObjectImage(Surf);
- ChecksumLandObjectImage(Mask);
inrectcnt := 0;
--- a/hedgewars/uMisc.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uMisc.pas Fri Jul 03 23:51:47 2020 +0200
@@ -99,8 +99,49 @@
SaveScreenshot:= 0;
end;
-{$ELSE} // no PNG_SCREENSHOTS
+{$ELSE} //PNG_SCREENSHOTS
+{$IFDEF WINDOWS}
+function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export;
+var
+ surface: PSDL_Surface;
+ image: PScreenshot;
+ rowBuffer: PByte;
+ row, stride: LongInt;
+begin
+ image:= PScreenshot(screenshot);
+ stride:= image^.width * 4;
+ rowBuffer:= PByte(GetMem(stride));
+ for row:= 0 to (image^.height div 2) - 1 do
+ begin
+ Move((image^.buffer + (image^.height - row - 1) * stride)^,
+ rowBuffer^,
+ stride);
+ Move((image^.buffer + row * stride)^,
+ (image^.buffer + (image^.height - row - 1) * stride)^,
+ stride);
+ Move(rowBuffer^,
+ (image^.buffer + row * stride)^,
+ stride);
+ end;
+
+ surface:= SDL_CreateRGBSurfaceFrom(
+ image^.buffer,
+ image^.width, image^.height, 32, stride,
+ $000000FF, $0000FF00, $00FF0000, $FF000000);
+
+ if surface <> nil then
+ begin
+ IMG_SavePNG(surface, Str2PChar(image^.filename));
+ SDL_FreeSurface(surface);
+ end;
+
+ FreeMem(rowBuffer, stride);
+ FreeMem(image^.buffer, image^.size);
+ Dispose(image);
+ SaveScreenshot:= 0;
+end;
+{$ELSE} //WINDOWS
// this funtion will be executed in separate thread
function SaveScreenshot(screenshot: pointer): LongInt; cdecl; export;
var f: file;
@@ -169,7 +210,8 @@
SaveScreenshot:= 0;
end;
-{$ENDIF} // no PNG_SCREENSHOTS
+{$ENDIF} // WINDOWS
+{$ENDIF} // PNG_SCREENSHOTS
{$IFDEF USE_VIDEO_RECORDING}
// make image k times smaller (useful for saving thumbnails)
@@ -218,9 +260,14 @@
format:= GL_RGBA;
ext:= '.png';
{$ELSE}
+{$IFDEF WINDOWS}
+format:= GL_RGBA;
+ext:= '.png';
+{$ELSE}
format:= GL_BGRA;
ext:= '.bmp';
{$ENDIF}
+{$ENDIF}
if dump > 0 then
size:= LAND_WIDTH*LAND_HEIGHT*4
--- a/hedgewars/uRender.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uRender.pas Fri Jul 03 23:51:47 2020 +0200
@@ -520,14 +520,6 @@
{$IFDEF GL2}
-{$IFDEF PAS2C}
- if glewInit() <> GLEW_OK then
- begin
- WriteLnToConsole('Failed to initialize GLEW.');
- halt(HaltStartupError);
- end;
-{$ENDIF}
-
{$IFNDEF PAS2C}
if not Load_GL_VERSION_2_0 then
begin
@@ -2185,6 +2177,7 @@
procedure freeModule;
begin
+ if cOnlyStats then exit;
{$IFDEF GL2}
glDeleteProgram(shaderMain);
glDeleteProgram(shaderWater);
--- a/hedgewars/uSound.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uSound.pas Fri Jul 03 23:51:47 2020 +0200
@@ -345,11 +345,11 @@
{ Adjust for language suffix: Voicepacks can have an optional language suffix.
It's an underscore followed by an ISO 639-1 or ISO 639-2 language code.
- The suffix “_qau” is special, it will enable automatic language selection
+ The suffix "_qau" is special, it will enable automatic language selection
of this voicepack. For example, if team has set Default_qau as voicepack,
and the player language is Russian, the actual voicepack will be Default_ru,
provided it can be found on the disk.
- “qau” is a valid ISO 639-2 language code reserved for local use. }
+ "qau" is a valid ISO 639-2 language code reserved for local use. }
tmp:= Copy(name, Length(name) - 3, 4);
if (tmp = '_qau') then
name:= Copy(name, 1, Length(name) - 4);
@@ -574,7 +574,7 @@
function PlaySoundV(snd: TSound; voicepack: PVoicepack; keepPlaying, ignoreMask, soundAsMusic: boolean): boolean;
var s: shortstring;
-tempSnd: TSound;
+tempSnd, loadSnd: TSound;
rwops: PSDL_RWops;
begin
PlaySoundV:= false;
@@ -591,24 +591,26 @@
begin
if (voicepack^.chunks[snd] = nil) and (Soundz[snd].Path = ptVoices) and (Soundz[snd].FileName <> '') then
begin
- s:= cPathz[Soundz[snd].Path] + '/' + voicepack^.name + '/' + Soundz[snd].FileName;
+ loadSnd:= snd;
+ s:= cPathz[Soundz[loadSnd].Path] + '/' + voicepack^.name + '/' + Soundz[loadSnd].FileName;
+
// Fallback taunts
if (not pfsExists(s)) then
begin
tempSnd := GetFallbackV(snd);
if tempSnd <> sndNone then
begin
- snd := tempSnd;
- LastVoice.snd := tempSnd;
+ loadSnd := tempSnd;
+ //LastVoice.snd := tempSnd;
end;
- s:= cPathz[Soundz[snd].Path] + '/' + voicepack^.name + '/' + Soundz[snd].FileName;
+ s:= cPathz[Soundz[loadSnd].Path] + '/' + voicepack^.name + '/' + Soundz[loadSnd].FileName;
end;
- WriteToConsole(msgLoading + s + ' ');
+ WriteToConsole(msgLoading + s + ' ... ');
rwops := rwopsOpenRead(s);
if rwops = nil then
begin
- s:= cPathz[Soundz[snd].AltPath] + '/' + Soundz[snd].FileName;
+ s:= cPathz[Soundz[loadSnd].AltPath] + '/' + Soundz[loadSnd].FileName;
WriteToConsole(msgLoading + s + ' ... ');
rwops := rwopsOpenRead(s);
end;
@@ -627,7 +629,7 @@
if (defVoicepack^.chunks[snd] = nil) and (Soundz[snd].Path <> ptVoices) and (Soundz[snd].FileName <> '') then
begin
s:= cPathz[Soundz[snd].Path] + '/' + Soundz[snd].FileName;
- WriteToConsole(msgLoading + s + ' ');
+ WriteToConsole(msgLoading + s + ' ... ');
rwops := rwopsOpenRead(s);
if rwops = nil then
--- a/hedgewars/uStats.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uStats.pas Fri Jul 03 23:51:47 2020 +0200
@@ -71,9 +71,9 @@
HitTargets : LongWord = 0; // Target (gtTarget) hits in turn
AmmoUsedCount : Longword = 0; // Number of times an ammo has been used this turn
AmmoDamagingUsed : boolean = false; // true if damaging ammo was used in turn
- FirstBlood : boolean = false; // true if the “First blood” taunt has been used in this game
- StepFirstBlood : boolean = false; // true if the “First blood” taunt is to be used this turn
- LeaveMeAlone : boolean = false; // true if the “Leave me alone” taunt is to be used this turn
+ FirstBlood : boolean = false; // true if the "First blood" taunt has been used in this game
+ StepFirstBlood : boolean = false; // true if the "First blood" taunt is to be used this turn
+ LeaveMeAlone : boolean = false; // true if the "Leave me alone" taunt is to be used this turn
SkippedTurns: LongWord = 0; // number of skipped turns in game
isTurnSkipped: boolean = false; // true if this turn was skipped
vpHurtSameClan: PVoicepack = nil; // voicepack of current clan (used for taunts)
--- a/hedgewars/uStore.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uStore.pas Fri Jul 03 23:51:47 2020 +0200
@@ -398,7 +398,7 @@
var ii: TSprite;
ai: TAmmoType;
tmpsurf, tmpoverlay: PSDL_Surface;
- i, y, imflags: LongInt;
+ i, imflags: LongInt;
keyConfirm, keyQuit: shortstring;
begin
AddFileLog('StoreLoad()');
@@ -443,10 +443,10 @@
imflags := (imflags or ifCritical);
// load the image
- tmpsurf := LoadDataImageAltPath(Path, AltPath, FileName, imflags);
- if (tmpsurf <> nil) and checkSum then
- for y := 0 to tmpsurf^.h-1 do
- syncedPixelDigest:= Adler32Update(syncedPixelDigest, @PByteArray(tmpsurf^.pixels)^[y*tmpsurf^.pitch], tmpsurf^.w*4)
+ if checkSum then
+ tmpsurf := LoadDataImageAltPath(Path, AltPath, FileName, imflags or ifDigestAlpha)
+ else
+ tmpsurf := LoadDataImageAltPath(Path, AltPath, FileName, imflags);
end;
if tmpsurf <> nil then
@@ -650,10 +650,13 @@
function LoadImage(const filename: shortstring; imageFlags: LongInt): PSDL_Surface;
var tmpsurf: PSDL_Surface;
s: shortstring;
- logMsg: shortstring;
+ logMsg, digestMsg: shortstring;
rwops: PSDL_RWops;
+ y, x: LongInt;
+ rowData: PByteArray;
begin
LoadImage:= nil;
+ digestMsg:= '';
logMsg:= msgLoading + filename + '.png [flags: ' + inttostr(imageFlags) + ']';
s:= filename + '.png';
@@ -704,8 +707,37 @@
if (imageFlags and ifColorKey) <> 0 then
if checkFails(SDL_SetColorKey(tmpsurf, SDL_TRUE, 0) = 0, errmsgTransparentSet, true) then exit;
+ if ((imageFlags and (ifDigestAll or ifDigestAlpha)) <> 0)
+ and (tmpsurf^.format^.BytesPerPixel = 4)then
+ begin
+ if SDL_MustLock(tmpsurf) then
+ SDL_LockSurface(tmpsurf);
+
+ if (imageFlags and ifDigestAll) <> 0 then
+ begin
+ for y := 0 to tmpsurf^.h - 1 do
+ syncedPixelDigest:= Adler32Update(syncedPixelDigest, @PByteArray(tmpsurf^.pixels)^[y*tmpsurf^.pitch], tmpsurf^.w*4);
+ digestMsg := ' [CD: ' + inttostr(syncedPixelDigest) + ']'
+ end
+ else if (imageFlags and ifDigestAlpha) <> 0 then
+ begin
+ rowData := GetMem(tmpsurf^.w);
+ for y := 0 to tmpsurf^.h - 1 do
+ begin
+ for x := 0 to tmpsurf^.w - 1 do
+ rowData^[x] := PByteArray(tmpsurf^.pixels)^[y * tmpsurf^.pitch + x * 4 + AByteIndex];
+ syncedPixelDigest:= Adler32Update(syncedPixelDigest, rowData, tmpsurf^.w);
+ end;
+ FreeMem(rowData, tmpsurf^.w);
+ digestMsg := ' [AD: ' + inttostr(syncedPixelDigest) + ']'
+ end;
+
+ if SDL_MustLock(tmpsurf) then
+ SDL_UnlockSurface(tmpsurf);
+ end;
+
// log success
- WriteLnToConsole(logMsg + ' ' + msgOK + ' (' + inttostr(tmpsurf^.w) + 'x' + inttostr(tmpsurf^.h) + ')');
+ WriteLnToConsole(logMsg + ' ' + msgOK + ' (' + inttostr(tmpsurf^.w) + 'x' + inttostr(tmpsurf^.h) + ')' + digestMsg);
LoadImage:= tmpsurf //Result
end;
@@ -874,7 +906,9 @@
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0); // no depth buffer
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); // no alpha channel
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 16); // buffer should be 16
- SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); // prefer hw rendering
+{$IFNDEF DARWIN}
+ SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); // force hw rendering except on macOS
+{$ENDIF}
end;
procedure SetupOpenGL;
--- a/hedgewars/uTeams.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uTeams.pas Fri Jul 03 23:51:47 2020 +0200
@@ -393,6 +393,8 @@
CurWeapon:= GetCurAmmoEntry(CurrentHedgehog^);
if CurWeapon^.Count = 0 then
CurrentHedgehog^.CurAmmoType:= amNothing;
+if CurrentHedgehog^.BotLevel <> 0 then
+ CurrentHedgehog^.Gear^.AIHints:= (CurrentHedgehog^.Gear^.AIHints and (not aihAmmosChanged));
with CurrentHedgehog^ do
begin
@@ -453,7 +455,7 @@
if ((GameFlags and gfSwitchHog) <> 0) and (not CurrentTeam^.hasGone) and
// Exception: During the special "Place your King" round in King Mode;
// you're not supposed to switch away from your king in this round.
- (not (((GameFlags and gfKing) <> 0) and ((GameFlags and gfPlaceHog) = 0) and (TotalRoundsReal <= 0))) then
+ (not (((GameFlags and gfKing) <> 0) and ((GameFlags and gfPlaceHog) = 0) and (TotalRoundsReal = -1))) then
begin
g:= AddGear(hwRound(CurrentHedgehog^.Gear^.X), hwRound(CurrentHedgehog^.Gear^.Y), gtSwitcher, 0, _0, _0, 0);
CurAmmoGear:= g;
--- a/hedgewars/uVariables.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uVariables.pas Fri Jul 03 23:51:47 2020 +0200
@@ -33,6 +33,7 @@
cFullscreenHeight : LongInt;
cWindowedWidth : LongInt;
cWindowedHeight : LongInt;
+ cWindowedMaximized : boolean;
cScreenWidth : LongInt;
cScreenHeight : LongInt;
cNewScreenWidth : LongInt;
@@ -479,7 +480,7 @@
(FileName: 'hhMask'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHHTelepMask
(FileName: 'Switch'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
- Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSwitch
+ Width: 40; Height: 40; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSwitch
(FileName: 'Parachute'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprParachute
(FileName: 'Target'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
@@ -2589,6 +2590,7 @@
bShowAmmoMenu: boolean;
bSelected: boolean;
bShowFinger: boolean;
+ bShowSwitcher: boolean;
Frames: Longword;
WaterColor, DeepWaterColor: TSDL_Color;
SDTint, SkyColor, RQSkyColor, SDSkyColor: TSDL_Color;
@@ -2678,6 +2680,7 @@
cFullscreenHeight := 0;
cWindowedWidth := 1024;
cWindowedHeight := 768;
+ cWindowedMaximized:= false;
cScreenWidth := cWindowedWidth;
cScreenHeight := cWindowedHeight;
--- a/hedgewars/uVideoRec.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uVideoRec.pas Fri Jul 03 23:51:47 2020 +0200
@@ -51,7 +51,7 @@
uses uVariables, GLunit, SDLh, SysUtils, uUtils, uSound, uIO, uMisc, uTypes, uDebug;
type TAddFileLogRaw = procedure (s: pchar); cdecl;
-const AvwrapperLibName = 'libavwrapper';
+const AvwrapperLibName = {$IFDEF WIN32_VCPKG}'avwrapper'{$ELSE}'libavwrapper'{$ENDIF};
function AVWrapper_Init(
AddLog: TAddFileLogRaw;
--- a/hedgewars/uWorld.pas Wed Jul 31 23:14:27 2019 +0200
+++ b/hedgewars/uWorld.pas Fri Jul 03 23:51:47 2020 +0200
@@ -1299,6 +1299,10 @@
DrawGearsGui();
+// Finger (arrow pointing to hedgehog).
+// NOT wrapped like the other stuff because it might be confusing.
+DrawFinger();
+
// everything after this ChangeDepth will be drawn outside the screen
// note: negative parallax gears should last very little for a smooth stereo effect
ChangeDepth(RM, cStereo_Outside);
--- a/misc/racer.yaml Wed Jul 31 23:14:27 2019 +0200
+++ b/misc/racer.yaml Fri Jul 03 23:51:47 2020 +0200
@@ -16,14 +16,14 @@
DRAWNMAP:
- AAAAaXjaY3RgdGBgWcB2gIGDAcjiTgCy+A6AxVhlgFwgwcHA9ISBgYGRYb8AkGAQYGAG8iAEK4gLJthBXCDBCDTvDzbzAMZ6DUU=
SCHEME:
- - Shoppa
+ - Racer
- 'false'
- 'false'
- 'true'
- 'true'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -35,7 +35,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -46,12 +46,12 @@
- '30'
- '100'
- '50'
- - '1'
- '0'
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -78,193 +78,7 @@
DRAWNMAP:
- AAAEC3jaHZJ9aJZVGIevc859znme930etsRKEyllVlJr2AInGDXBBSWVfdHXlFFiq5CWH39U7gNCHVE6WrnSRIq0j01nW7KxaZEtwvFMSzYCl9MWKKnEYrI5puvZ+9/hwH39rt+5T1TjHybMcJjsjXoHJpKr+Dn2KG7KtOCV2oqZrdqZGmGiLX8uE+lJj7XlXdJjTF2S9C5PJgA32ZafcZP4s25d4rvdGXy5X4A77+/AbXHDuFVuA67GGdxp24lfadvx7XZ0eqIiN0Zwzr6WBL/Zvwi+cI8TPOcO4MfdFXy9vw0/wxfidvvZuCJ3AXvK7cJud0uwa+2v2FV2JXajnMZ+I29gr8pNuHLTjzthWvFl5lt8l+khWGCuEbwjjxF0yfcEg/bOXC7hqLyehP/IMGFinyXcY38hLHd3EUbuXYKDro+gzIf4fr8Iv9o/hLuQPp2r8iXYKT8T25iWtsVuJzLkSpFddghZa9cjyy3IYqlHlsoNyFNmN1Jj7ka6dQ821JXYl/Ut2ONqELdEHcQdUI34Bep9/GfqU4J81UmwWV1MTfU9hCW6jrBWnyXsMOnyhkw34X9yb64C8WG9OYm/1qPEdWYN8TLTS3RZbiXaJquJbpatZPfKR2QXyjYyHVJB5gmZT3jN9BEeMZWEjXqccMt0xoc6Q9ipmgjHVTGZFfxJ5hC7yc5jA9km1hDlUUVUx06i8wwQ368WElerD4j3q+vTLhtzQsR7dHES1+uviFeYPKJ/zfNE1aaWyJm3U5R5lGypniQb6QYyU3oO2blqP9kKtZzsMaWIFvM3UQsjxLPU7cSVqpr4Y3UpR0YWyWAi8+2TmDH7E+aQK8A846rQF90+9Cb3A+q660K95z5BFbgX4YQLoMF+DutsEbwiHVAry6DdDKAwb6EqzH2ok8ajy9Lfro8YwRSaIswOsx5zxiTITClBiqQlZ4DJV8cSPaZL0N/pJvQjuh/Vr4dRL+kfUaF+Ewa0g1Nqe5qh5qGepg/Vw5fopTSj9zGMHlEPTqPacjxMKFcSPWJfRTfb3tQlFVcn3SxUuR1DKdsMvbYUfpbjcFleQD0ggmpJe+gC8we6QUL0uXTTxsvvOR6+0Jcl0SZfhjpKaxLOoJX/Ac8c7Ww=
SCHEME:
- - Shoppa-tech
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - '100'
- - '30'
- - '100'
- - '50'
- - '1'
- - '0'
- - '0'
- - '0'
- - '0'
- - '8'
- - '0'
- - '25'
- - '47'
- - '5'
- - '100'
- - '100'
- - '0'
- - ! '!m=4'
- THEME:
- - Nature
- ! '#04':
- - ! 'Racer Challenge #4'
- - SEED: ! '{173c526c-5464-40af-beb2-f130f6998625}'
- MAPGEN: '3'
- FEATURE_SIZE: '12'
- MAZE_SIZE: '0'
- MAP: +drawn+
- TEMPLATE: '3'
- - SCRIPT:
- - Racer
- AMMO:
- - Shoppa
- - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
- DRAWNMAP:
- - AAAA63jaDcgvSwRRFIbxc+89Z86ZXdkRFgwmg0VQMAmWZWCLW1cW/0QRLLIMWARB3muwiPgJRJtgMQh+ANFglzFomaLVZNiy3vKD5+ksUEOtMtslGmdPlK35K/KFI8o2pkTS49PIE56Al7kCVzyL8BMOEJ79OcK7+4r26q9jfu8fYv7NqzHv8mF6Moo2lmm0Wy2jbckf9EUH0DcF9CQhNzqHsJctwh1JADW8A7fNPUiflqClc9B9GkIvCbAhPaJ9F4rY/vUXoNzkrPgwIbdpUocqIf2ErhjV1lhet45Tzqyn7Mwnis/0/gGJl0BN
- SCHEME:
- - Borderless Shoppa
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - '100'
- - '30'
- - '100'
- - '50'
- - '1'
- - '3'
- - '0'
- - '0'
- - '0'
- - '0'
- - '0'
- - '25'
- - '47'
- - '5'
- - '100'
- - '100'
- - '0'
- - ! '!'
- THEME:
- - Hell
- ! '#10':
- - ! 'Racer Challenge #10'
- - SEED: ! '{4f2be5e8-69a0-4116-8d80-d270d772f6ee}'
- MAPGEN: '3'
- FEATURE_SIZE: '12'
- MAZE_SIZE: '0'
- MAP: +drawn+
- TEMPLATE: '3'
- - SCRIPT:
- - Racer
- AMMO:
- - Shoppa
- - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
- DRAWNMAP:
- - AAABSnjaJc7ZDoQwDEPRQJcwC/DDU6kf3oix45cDUuWr+LBhPnzY8TOCP48npoeFGdnA3AKfXexhRZSwKmpYEy2si04QeDCbxq1xtonCVFKZShpTSWcqwSEuEPDF0xaiFznBPBcevgLlj0D5LVB+CZQP0QkCN2bz4vbi7BSFqaQylTSmks5UwqsEAn+uK4bq
- SCHEME:
- - Shoppa
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - '100'
- - '30'
- - '100'
- - '50'
- - '1'
- - '0'
- - '0'
- - '0'
- - '0'
- - '8'
- - '0'
- - '25'
- - '47'
- - '5'
- - '100'
- - '100'
- - '0'
- - ! '!'
- THEME:
- - EarthRise
- ! '#09':
- - ! 'Racer Challenge #9'
- - SEED: ! '{4f2be5e8-69a0-4116-8d80-d270d772f6ee}'
- MAPGEN: '3'
- FEATURE_SIZE: '12'
- MAZE_SIZE: '0'
- MAP: +drawn+
- TEMPLATE: '3'
- - SCRIPT:
- - Racer
- AMMO:
- - Shoppa
- - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
- DRAWNMAP:
- - AAAB1njaLY9bjsMgDEUNNjhp2syGg8TCQR0f6M+R7ftIqE2apGZNrHkTb6XJ+cTtfuJ2PXE7nrjZ/M5uU6ZUpsrkgV6YytTf6rOwLlRulUQiEWnbyFQ5lhA0IEJWqVISOXw9M6UNB2FJmL/EZMcy5oUlGIIhKH1KTIkVbgsVn/OnUfoa8ZjXiO8eTAeTB/rJdA79rT4K6wLPAsdIJIyWhUyVYwnhCshN9qLqIvEOX38zfTYchOWD+Y/YvWMZ88ISDMEQlD4lpsQKt4WKj2dR+g9qCctS
- SCHEME:
- - Shoppa
+ - TechRacer
- 'false'
- 'false'
- 'true'
@@ -299,7 +113,193 @@
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
+ - '25'
+ - '47'
+ - '5'
+ - '100'
+ - '100'
+ - '0'
+ - ! '!m=4'
+ THEME:
+ - Nature
+ ! '#04':
+ - ! 'Racer Challenge #4'
+ - SEED: ! '{173c526c-5464-40af-beb2-f130f6998625}'
+ MAPGEN: '3'
+ FEATURE_SIZE: '12'
+ MAZE_SIZE: '0'
+ MAP: +drawn+
+ TEMPLATE: '3'
+ - SCRIPT:
+ - Racer
+ AMMO:
+ - Shoppa
+ - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
+ DRAWNMAP:
+ - AAAA63jaDcgvSwRRFIbxc+89Z86ZXdkRFgwmg0VQMAmWZWCLW1cW/0QRLLIMWARB3muwiPgJRJtgMQh+ANFglzFomaLVZNiy3vKD5+ksUEOtMtslGmdPlK35K/KFI8o2pkTS49PIE56Al7kCVzyL8BMOEJ79OcK7+4r26q9jfu8fYv7NqzHv8mF6Moo2lmm0Wy2jbckf9EUH0DcF9CQhNzqHsJctwh1JADW8A7fNPUiflqClc9B9GkIvCbAhPaJ9F4rY/vUXoNzkrPgwIbdpUocqIf2ErhjV1lhet45Tzqyn7Mwnis/0/gGJl0BN
+ SCHEME:
+ - Borderless Racer
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - '100'
+ - '30'
+ - '100'
+ - '50'
+ - '0'
+ - '3'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '25'
+ - '47'
+ - '5'
+ - '100'
+ - '100'
+ - '0'
+ - ! '!'
+ THEME:
+ - Hell
+ ! '#10':
+ - ! 'Racer Challenge #10'
+ - SEED: ! '{4f2be5e8-69a0-4116-8d80-d270d772f6ee}'
+ MAPGEN: '3'
+ FEATURE_SIZE: '12'
+ MAZE_SIZE: '0'
+ MAP: +drawn+
+ TEMPLATE: '3'
+ - SCRIPT:
+ - Racer
+ AMMO:
+ - Shoppa
+ - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
+ DRAWNMAP:
+ - AAABSnjaJc7ZDoQwDEPRQJcwC/DDU6kf3oix45cDUuWr+LBhPnzY8TOCP48npoeFGdnA3AKfXexhRZSwKmpYEy2si04QeDCbxq1xtonCVFKZShpTSWcqwSEuEPDF0xaiFznBPBcevgLlj0D5LVB+CZQP0QkCN2bz4vbi7BSFqaQylTSmks5UwqsEAn+uK4bq
+ SCHEME:
+ - Racer
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - '100'
+ - '30'
+ - '100'
+ - '50'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '25'
+ - '47'
+ - '5'
+ - '100'
+ - '100'
+ - '0'
+ - ! '!'
+ THEME:
+ - EarthRise
+ ! '#09':
+ - ! 'Racer Challenge #9'
+ - SEED: ! '{4f2be5e8-69a0-4116-8d80-d270d772f6ee}'
+ MAPGEN: '3'
+ FEATURE_SIZE: '12'
+ MAZE_SIZE: '0'
+ MAP: +drawn+
+ TEMPLATE: '3'
+ - SCRIPT:
+ - Racer
+ AMMO:
+ - Shoppa
+ - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
+ DRAWNMAP:
+ - AAAB1njaLY9bjsMgDEUNNjhp2syGg8TCQR0f6M+R7ftIqE2apGZNrHkTb6XJ+cTtfuJ2PXE7nrjZ/M5uU6ZUpsrkgV6YytTf6rOwLlRulUQiEWnbyFQ5lhA0IEJWqVISOXw9M6UNB2FJmL/EZMcy5oUlGIIhKH1KTIkVbgsVn/OnUfoa8ZjXiO8eTAeTB/rJdA79rT4K6wLPAsdIJIyWhUyVYwnhCshN9qLqIvEOX38zfTYchOWD+Y/YvWMZ88ISDMEQlD4lpsQKt4WKj2dR+g9qCctS
+ SCHEME:
+ - Racer
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - '100'
+ - '30'
+ - '100'
+ - '50'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -326,14 +326,14 @@
DRAWNMAP:
- AAAA4Xja43vHWMfAc4SFi4FrB5DFrsEiy8DCyriegTGGRYeBIYldlIGfkX02A/di9qIO7sWsrxhARMf/K0AWLy9bUwffXiDBEst2qPP/b3bRzQwO7FIXGO3YpUAGmC0GGrVlMbsui9JiEPcSkLgDMn7LJRZWpkwGoIT6JSDxn4HvCWPvZq7NjHWbQc64wX2FSYmB7yVj8w0+VqZ0Bp6TLAybgY5kvcFzhOk0AwMDu+gmkNMuMFYC3ceSw3bhApM7u0AXgwgjbyvDJwZ9Bj5p9tBW/nvsoQwAuyw7Aw==
SCHEME:
- - Borderless Shoppa
+ - Borderless Racer
- 'false'
- 'false'
- 'true'
- 'false'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -345,7 +345,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -356,7 +356,7 @@
- '30'
- '100'
- '50'
- - '1'
+ - '0'
- '3'
- '0'
- '0'
@@ -388,69 +388,7 @@
DRAWNMAP:
- AAAEC3jaHZJ9aJZVGIevc859znme930etsRKEyllVlJr2AInGDXBBSWVfdHXlFFiq5CWH39U7gNCHVE6WrnSRIq0j01nW7KxaZEtwvFMSzYCl9MWKKnEYrI5puvZ+9/hwH39rt+5T1TjHybMcJjsjXoHJpKr+Dn2KG7KtOCV2oqZrdqZGmGiLX8uE+lJj7XlXdJjTF2S9C5PJgA32ZafcZP4s25d4rvdGXy5X4A77+/AbXHDuFVuA67GGdxp24lfadvx7XZ0eqIiN0Zwzr6WBL/Zvwi+cI8TPOcO4MfdFXy9vw0/wxfidvvZuCJ3AXvK7cJud0uwa+2v2FV2JXajnMZ+I29gr8pNuHLTjzthWvFl5lt8l+khWGCuEbwjjxF0yfcEg/bOXC7hqLyehP/IMGFinyXcY38hLHd3EUbuXYKDro+gzIf4fr8Iv9o/hLuQPp2r8iXYKT8T25iWtsVuJzLkSpFddghZa9cjyy3IYqlHlsoNyFNmN1Jj7ka6dQ821JXYl/Ut2ONqELdEHcQdUI34Bep9/GfqU4J81UmwWV1MTfU9hCW6jrBWnyXsMOnyhkw34X9yb64C8WG9OYm/1qPEdWYN8TLTS3RZbiXaJquJbpatZPfKR2QXyjYyHVJB5gmZT3jN9BEeMZWEjXqccMt0xoc6Q9ipmgjHVTGZFfxJ5hC7yc5jA9km1hDlUUVUx06i8wwQ368WElerD4j3q+vTLhtzQsR7dHES1+uviFeYPKJ/zfNE1aaWyJm3U5R5lGypniQb6QYyU3oO2blqP9kKtZzsMaWIFvM3UQsjxLPU7cSVqpr4Y3UpR0YWyWAi8+2TmDH7E+aQK8A846rQF90+9Cb3A+q660K95z5BFbgX4YQLoMF+DutsEbwiHVAry6DdDKAwb6EqzH2ok8ajy9Lfro8YwRSaIswOsx5zxiTITClBiqQlZ4DJV8cSPaZL0N/pJvQjuh/Vr4dRL+kfUaF+Ewa0g1Nqe5qh5qGepg/Vw5fopTSj9zGMHlEPTqPacjxMKFcSPWJfRTfb3tQlFVcn3SxUuR1DKdsMvbYUfpbjcFleQD0ggmpJe+gC8we6QUL0uXTTxsvvOR6+0Jcl0SZfhjpKaxLOoJX/Ac8c7Ww=
SCHEME:
- - Shoppa-tech
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - '100'
- - '30'
- - '100'
- - '50'
- - '1'
- - '0'
- - '0'
- - '0'
- - '0'
- - '8'
- - '0'
- - '25'
- - '47'
- - '5'
- - '100'
- - '100'
- - '0'
- - ! '!m=5'
- THEME:
- - Nature
- ! '#03':
- - ! 'Racer Challenge #3'
- - SEED: ! '{173c526c-5464-40af-beb2-f130f6998625}'
- MAPGEN: '3'
- FEATURE_SIZE: '12'
- MAZE_SIZE: '0'
- MAP: +drawn+
- TEMPLATE: '3'
- - SCRIPT:
- - Racer
- AMMO:
- - Shoppa
- - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
- DRAWNMAP:
- - AAAQaHjabddtbKRVFQfw/31/3rZGCiliozRaxWFJkWpoNE2saJGaWFeLFDbFMGADKWpNatxBHWObsRIbrS6NWMgiDpqKJaSs9EPBVDqgs7vUsCLD2FktSKM2OsGUxUZHWf9Hv/rll9uZZ+5z77nnnOepa9qrYWfMpfAPuBvgl8xHib4c4bC9Fgc+774CnIeL4X5oDx0PD9kbjsez9sbj8ZftrxDf5N6L+ApXRvSK14ge8Nchutrfh/CCryNMBsC3woXwM+FN8Fl4Pdzd/izcpf4p2Kr/Guykfw/s29yLME1XhHnKnQ/zsP0hzLJ9N8zPzFMwL5gbYC/Qr8Ie1t+DfVhfA/c6HeDuUL+B+6tagb9ZfR++oe5HOKSOI2yoOqKDOkM0pz+KaFv/APFb9GuIP2FuQXzEPIP4a/Z9kH3A5NTCGZMLt0Df4186kx30L8FshO+cMX8K98CGcB/s24Ubw48ZJqEsVIU94s4TrhAOC18KD8HdKzwu/JH4JKzCXyoMh8fgp4S7wpPwj4YT8L8VXgubCAeFQ+F5hC8K9wiPCQ0SQbhYeJ9wk/BV4f7QQPSE8AcSp8Kl4deIPyzczknjOd4jLoefI3o5HDoTvYwS4nn13Bnyd470RcIHhFuEbwqPCC8wTMYJOWFImBLuEn4q/A5x0WrhIOKCvUH4urAiNOSLc7zOXcz53EcQL7jPIF50R7kgd1x4VngF8TF/Pkf+XYiX/QjiRz1vtObvktGjiFf8c8KriKv+94hf8k8jMf4nSF7vZ5G82Q8jucT3ILnMe8KUIo8L9wpfED7GS9w7hJi/sDv8rV1DEtlvIz5nbxbeg/jv9g3E/E04hfiv5gfCEWFIPusm+l+I/6mfFx4R7uRv9W3Ch7gq/Va55ADi6xliHFHPwWY4e4bxOQt7SPic8G38BXZVaAjnCFdHrhFuE47yOgaJPIt/g0H6N/yFwvuFcfwD3PxZMAzkGeFVEi4SPiTcKnxHeER4nkSOM0fdwgeFTwkl4UG8jKjOSWMvXC5cLxSEeWIGzfAZe7sZhr3DjNcFREdNT11AdLe7sy7AfNZdWbefc1dyl3bvlPms3WO5mKkNAbYlo9b/Gf1ZRk33xg0B9s8yIog63eENgQt3120IMjosI37WYT6+IfA6M7oh8FsztiHIzEfkHkdgvmWv+oVP7FWMqb36RQHhAXvtjoCwam/9ZXIJG0/aqRqzpMWR7kTapfuRdusxoYg0p48h7dHrSHv1NtJ+A6SDpgvpqOF1k7x5OmsmkZbNNNKKmUe6YxaQObOIrFtGg2YOWd4UkBUZv2yB4czKjF+2YtqQrekmsoreRFbVy/InL17WE7xEDyFb1Dlk07oL2bzurGXHuDR+MYZsiUsjZbm4InCWZZlvwfTxF2YE2bjcbUjum5MVtBnuo2mWkNZkkRVZ8yrXki5yLem0aUea13tIR/Rp2XQZaRvXkuzrSSS7elhgvTV1G5KWaiJ1qoZ0SlWPC5xZVRsCsoKaOCFwBWr/hMBlqL4TAteiOk8IyGIZEaQt1XZCQFpUQ1sCMmB/S0C6jeUtAemmjDZlVMbqloB0AWtbAtKCjAgjpGpbAiOktrcEfqsGt9K84laHFbc6AG61H6eFFaR9mJfPZnl4qrKV7vMXXFoLWZduR9bLnWdDepDHKLGfZkh4CkU5NwZ2Ry/ggNOLONDNVDnQzz8ZkpUnkzxPRh21V39draqlqqqpJah9oruEYXUMuigsCw1iYqFPmFBzMAvCmpqGaagCrFN52JwahR1Ug7Djqh92ljuyS6qbzyhG0ja5N9emYrheYVA56EE1XtXjahx6gociNPScGoNeUSPQNQZbtzif6VQDMP2c1OSFaZ6WKatemIqwq3KwsZBTXbBDqgN2gvewcwqwy2jBbvK0bIu4nDAsTAll4bSwT3ynMCLMCktCTdhHE6FbGBQK/CzIb0OVRJIMUTfvFo0KBWFZqHEZ0T6JO4R+Li3OMxrxNFcaS3DiqrDLWCVt3FuSU8znQYYzyTOwyTTjnJQZ9mSdLxhJQ20ihdpF2qEhtc8UHdS9SMdYBmlRmsIxqY81aQoNaQotVg+rbETqrSjFzrKfMsyhKctEn7ajyObsPIvTVoVdfuYcv3XdLBIGKht1TKkBx0u6HdOxxWilNccVrDq2pTkvxelzTFHfx1XJ06/B52Wy7rnwY76MpOCrSEb9LpK+4JDEgTvfDb2I1xnL+FgYRTwZJhAPBz5m28Msor0wj6gSlhCV+a4SFRjkqF9eKzrCDsJ22GOLFBYCD2BKGBQc8ZvCvDAWmvDdYZdHG7bhapzArYYa3JwwKvQJHcRuCyvCtDDKdxWbCxVmdliHqYUVmCUeuJnm0kw+MO/7wyQTkwvXzZCHrgSm7QI3o6fCMPRIYO72hgHoOHRA1bh9tehXoab8ItSoL0DlmGiqzQ8Ae3xdwCbDiQVXAcbdHJB3eaDgBoE51wmUHYB1Hg+aTGbVxtcFlbOs2mE7BTVmOdW47YKaME2oSVOFKrCfqqKZhZrn6asy35vUKt+gVJUdXTWYJWqXLUPtsY2oPbUnnBZWoDaFRdXgBOw0alxzC4N6gLfU40CLvQQ19mJU2NtRNh3APHs7CmaCC2cLx5BZA3rMPtBl+W2n5bcdzDW026LACdq4D7JHXDs/c72AY42SPZzb9SMVtPkxoJdvFxhlSmHaTwNLntNXGUTssjxVLDHNeUZjyLOlTXhuYd5z4WsS8W3f5AGweLWknp4MbXJGHdCrTEK9G3Lsa8xEvnazoQwxHc0ED8/M8Rj/C5cxNKMejFhyLozM6PXAtkRmzHejg2yHYX0m2mGCxGMBM6ERTSMeDW4mPc27xXl+loH/emSzbnMmfiI6+r9RNitNelaPcyTNnMygyBHZmVEzmguf080ZzBoGZ87szwj/G6lP2zrP1/IXc5IqZEa9098K1eMnZnCvfw3Jac6SfYOP1GzH9NYFFrZeqpNZFjtPMCvyLLNJeXbn2UayYbWDrEceSm3y5GxKk9lUFaRLio+xOcWGMqEW+fxVfBTlVLEusMmEsbrAx3FYrAu8JCzUBb6SyKiPo6wnDNSzdoaT0ZhAshZ268kiKzQpsHEmoxHfgfuiDiQdERvjfsT2sBP1IO4OrbqA6HSEUwKiRRktyqgoIwIzwJEAMx5apwSo9lA+JbDUwsopNcVKVvMsbLXEpqAqvDnyfvMUhv0y0C8plZMM6/BMUbAkz+17pkVvqJSiFf6W1ErxJ8MlctLdpXSUjwKSK2XfdGf5KmTKpWzR7Uh/rpaye82dSKpqvYQJtc6XE46yNVZFtm7mS9k6G2hWdbVSOs72IJTiPo7ioTBaYtfbk9bXLDG5mpKYzRKTtSAZWyhhjyPMho4StmU05TZL6jzPopu0rqSuYm5gSDVK6ia+LaFl8nWBlWLm6wL7i5msCywcN1UXmDkyIsCK668LwI5fOSmwLfnKSUG61OpJAWj48klBMrb75LmaZr8ftiPfEFjOIa6orhCzH/j9ChZZiJBqZNXu4lzLrVaw7ThLp2lWVDv7FXbtfkWdtjyUZT9bUdN8+Kpu01nRsWHr29e7FXYpVsWIaauoKelhC5qHPCWMCP0ky7ti5UA7/3tP7tbjTwtI6vpHTws4cIEZefrABf4y/Afo8PkY
- SCHEME:
- - Shoppa
+ - TechRacer
- 'false'
- 'false'
- 'true'
@@ -485,7 +423,69 @@
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
+ - '25'
+ - '47'
+ - '5'
+ - '100'
+ - '100'
+ - '0'
+ - ! '!m=5'
+ THEME:
+ - Nature
+ ! '#03':
+ - ! 'Racer Challenge #3'
+ - SEED: ! '{173c526c-5464-40af-beb2-f130f6998625}'
+ MAPGEN: '3'
+ FEATURE_SIZE: '12'
+ MAZE_SIZE: '0'
+ MAP: +drawn+
+ TEMPLATE: '3'
+ - SCRIPT:
+ - Racer
+ AMMO:
+ - Shoppa
+ - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
+ DRAWNMAP:
+ - AAAQaHjabddtbKRVFQfw/31/3rZGCiliozRaxWFJkWpoNE2saJGaWFeLFDbFMGADKWpNatxBHWObsRIbrS6NWMgiDpqKJaSs9EPBVDqgs7vUsCLD2FktSKM2OsGUxUZHWf9Hv/rll9uZZ+5z77nnnOepa9qrYWfMpfAPuBvgl8xHib4c4bC9Fgc+774CnIeL4X5oDx0PD9kbjsez9sbj8ZftrxDf5N6L+ApXRvSK14ge8Nchutrfh/CCryNMBsC3woXwM+FN8Fl4Pdzd/izcpf4p2Kr/Guykfw/s29yLME1XhHnKnQ/zsP0hzLJ9N8zPzFMwL5gbYC/Qr8Ie1t+DfVhfA/c6HeDuUL+B+6tagb9ZfR++oe5HOKSOI2yoOqKDOkM0pz+KaFv/APFb9GuIP2FuQXzEPIP4a/Z9kH3A5NTCGZMLt0Df4186kx30L8FshO+cMX8K98CGcB/s24Ubw48ZJqEsVIU94s4TrhAOC18KD8HdKzwu/JH4JKzCXyoMh8fgp4S7wpPwj4YT8L8VXgubCAeFQ+F5hC8K9wiPCQ0SQbhYeJ9wk/BV4f7QQPSE8AcSp8Kl4deIPyzczknjOd4jLoefI3o5HDoTvYwS4nn13Bnyd470RcIHhFuEbwqPCC8wTMYJOWFImBLuEn4q/A5x0WrhIOKCvUH4urAiNOSLc7zOXcz53EcQL7jPIF50R7kgd1x4VngF8TF/Pkf+XYiX/QjiRz1vtObvktGjiFf8c8KriKv+94hf8k8jMf4nSF7vZ5G82Q8jucT3ILnMe8KUIo8L9wpfED7GS9w7hJi/sDv8rV1DEtlvIz5nbxbeg/jv9g3E/E04hfiv5gfCEWFIPusm+l+I/6mfFx4R7uRv9W3Ch7gq/Va55ADi6xliHFHPwWY4e4bxOQt7SPic8G38BXZVaAjnCFdHrhFuE47yOgaJPIt/g0H6N/yFwvuFcfwD3PxZMAzkGeFVEi4SPiTcKnxHeER4nkSOM0fdwgeFTwkl4UG8jKjOSWMvXC5cLxSEeWIGzfAZe7sZhr3DjNcFREdNT11AdLe7sy7AfNZdWbefc1dyl3bvlPms3WO5mKkNAbYlo9b/Gf1ZRk33xg0B9s8yIog63eENgQt3120IMjosI37WYT6+IfA6M7oh8FsztiHIzEfkHkdgvmWv+oVP7FWMqb36RQHhAXvtjoCwam/9ZXIJG0/aqRqzpMWR7kTapfuRdusxoYg0p48h7dHrSHv1NtJ+A6SDpgvpqOF1k7x5OmsmkZbNNNKKmUe6YxaQObOIrFtGg2YOWd4UkBUZv2yB4czKjF+2YtqQrekmsoreRFbVy/InL17WE7xEDyFb1Dlk07oL2bzurGXHuDR+MYZsiUsjZbm4InCWZZlvwfTxF2YE2bjcbUjum5MVtBnuo2mWkNZkkRVZ8yrXki5yLem0aUea13tIR/Rp2XQZaRvXkuzrSSS7elhgvTV1G5KWaiJ1qoZ0SlWPC5xZVRsCsoKaOCFwBWr/hMBlqL4TAteiOk8IyGIZEaQt1XZCQFpUQ1sCMmB/S0C6jeUtAemmjDZlVMbqloB0AWtbAtKCjAgjpGpbAiOktrcEfqsGt9K84laHFbc6AG61H6eFFaR9mJfPZnl4qrKV7vMXXFoLWZduR9bLnWdDepDHKLGfZkh4CkU5NwZ2Ry/ggNOLONDNVDnQzz8ZkpUnkzxPRh21V39draqlqqqpJah9oruEYXUMuigsCw1iYqFPmFBzMAvCmpqGaagCrFN52JwahR1Ug7Djqh92ljuyS6qbzyhG0ja5N9emYrheYVA56EE1XtXjahx6gociNPScGoNeUSPQNQZbtzif6VQDMP2c1OSFaZ6WKatemIqwq3KwsZBTXbBDqgN2gvewcwqwy2jBbvK0bIu4nDAsTAll4bSwT3ynMCLMCktCTdhHE6FbGBQK/CzIb0OVRJIMUTfvFo0KBWFZqHEZ0T6JO4R+Li3OMxrxNFcaS3DiqrDLWCVt3FuSU8znQYYzyTOwyTTjnJQZ9mSdLxhJQ20ihdpF2qEhtc8UHdS9SMdYBmlRmsIxqY81aQoNaQotVg+rbETqrSjFzrKfMsyhKctEn7ajyObsPIvTVoVdfuYcv3XdLBIGKht1TKkBx0u6HdOxxWilNccVrDq2pTkvxelzTFHfx1XJ06/B52Wy7rnwY76MpOCrSEb9LpK+4JDEgTvfDb2I1xnL+FgYRTwZJhAPBz5m28Msor0wj6gSlhCV+a4SFRjkqF9eKzrCDsJ22GOLFBYCD2BKGBQc8ZvCvDAWmvDdYZdHG7bhapzArYYa3JwwKvQJHcRuCyvCtDDKdxWbCxVmdliHqYUVmCUeuJnm0kw+MO/7wyQTkwvXzZCHrgSm7QI3o6fCMPRIYO72hgHoOHRA1bh9tehXoab8ItSoL0DlmGiqzQ8Ae3xdwCbDiQVXAcbdHJB3eaDgBoE51wmUHYB1Hg+aTGbVxtcFlbOs2mE7BTVmOdW47YKaME2oSVOFKrCfqqKZhZrn6asy35vUKt+gVJUdXTWYJWqXLUPtsY2oPbUnnBZWoDaFRdXgBOw0alxzC4N6gLfU40CLvQQ19mJU2NtRNh3APHs7CmaCC2cLx5BZA3rMPtBl+W2n5bcdzDW026LACdq4D7JHXDs/c72AY42SPZzb9SMVtPkxoJdvFxhlSmHaTwNLntNXGUTssjxVLDHNeUZjyLOlTXhuYd5z4WsS8W3f5AGweLWknp4MbXJGHdCrTEK9G3Lsa8xEvnazoQwxHc0ED8/M8Rj/C5cxNKMejFhyLozM6PXAtkRmzHejg2yHYX0m2mGCxGMBM6ERTSMeDW4mPc27xXl+loH/emSzbnMmfiI6+r9RNitNelaPcyTNnMygyBHZmVEzmguf080ZzBoGZ87szwj/G6lP2zrP1/IXc5IqZEa9098K1eMnZnCvfw3Jac6SfYOP1GzH9NYFFrZeqpNZFjtPMCvyLLNJeXbn2UayYbWDrEceSm3y5GxKk9lUFaRLio+xOcWGMqEW+fxVfBTlVLEusMmEsbrAx3FYrAu8JCzUBb6SyKiPo6wnDNSzdoaT0ZhAshZ268kiKzQpsHEmoxHfgfuiDiQdERvjfsT2sBP1IO4OrbqA6HSEUwKiRRktyqgoIwIzwJEAMx5apwSo9lA+JbDUwsopNcVKVvMsbLXEpqAqvDnyfvMUhv0y0C8plZMM6/BMUbAkz+17pkVvqJSiFf6W1ErxJ8MlctLdpXSUjwKSK2XfdGf5KmTKpWzR7Uh/rpaye82dSKpqvYQJtc6XE46yNVZFtm7mS9k6G2hWdbVSOs72IJTiPo7ioTBaYtfbk9bXLDG5mpKYzRKTtSAZWyhhjyPMho4StmU05TZL6jzPopu0rqSuYm5gSDVK6ia+LaFl8nWBlWLm6wL7i5msCywcN1UXmDkyIsCK668LwI5fOSmwLfnKSUG61OpJAWj48klBMrb75LmaZr8ftiPfEFjOIa6orhCzH/j9ChZZiJBqZNXu4lzLrVaw7ThLp2lWVDv7FXbtfkWdtjyUZT9bUdN8+Kpu01nRsWHr29e7FXYpVsWIaauoKelhC5qHPCWMCP0ky7ti5UA7/3tP7tbjTwtI6vpHTws4cIEZefrABf4y/Afo8PkY
+ SCHEME:
+ - Racer
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - '100'
+ - '30'
+ - '100'
+ - '50'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -512,14 +512,14 @@
DRAWNMAP:
- AAACCHjaLY8LDsMgDEMpAbKtn114lTg40eYHkyrrtUltx+7tTvkudzo+ovMjqvGNXiNF0hO9QAZZbJEy8pX0BKUwXi16hnLkSGWJpm2J/m18c5ydPVtSMJiivKoV5U4/Z88ZNIJEG7SxnLWstEkNcqwq/Zxco3OFGuQ4F5ydLkaXCjXIaVX+ac+hfs+hey9Jf0E7tA/dcSBvSb+gaxiv8jugY+jA1xJNH0v074NvjrOzty8pGEyp5GZypx+XSzRoBIlO6GT50LLSJjXIsar0c3KNzhVq0Lyo4Ox0MbpUqEFcznSm/QB50Oil
SCHEME:
- - Shoppa
+ - Racer
- 'false'
- 'false'
- 'true'
- 'true'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -531,7 +531,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -542,12 +542,12 @@
- '30'
- '100'
- '50'
- - '1'
- '0'
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -574,14 +574,14 @@
DRAWNMAP:
- AAACF3jaHdA9aBRRFIbh795z/2Z2h7sgAbs0EpsEjKI2goUgCBaujRG0ECVYpAgEbERiWJ2BK4wgqL0Yf0Bc0BBYA9FIcMGQiQQrrSSBLGsRcGGRWKxz0jy8nOaDg6vmNqLrtAuS4gn0gshR3dDrkIv6EJJpnAa9UY3MDpkV2GGzkrk/ZbkB9d8z+7W7X/GyNmm8POghXsV6mrzUB8CkNQiC74la6nvuG/x3M5eaD2YOUaJ+N6LEXEFl3kw2KvPUQbyGX414bfAYfkYcL/wM5ZDOHsmlw0fIw2jlZgEtlHwpi+6AyelZWTRM7cJOUBtmjxYLs4czsAJpUe6nEEtoFmLJHQS9VmmQ4yoFTYqdFwxoSuxsM1AnZHWbgT4nus8Z6LOiu8VA/RB/txjQhPiXMdCzopsxiCLqZwzsT3W37XJ1AbapRtvulRpF9Sad3Cg5Bj8iL973I+YB/D3zaJOB79tOXmnaDuSYvZXLMfe0fJwdCgxETX8OTHlTrcAAA/oaGOCUfBgYiLfifGCAa/poYBBPox4YJLPiRmAgL9t6UJdsHX7cvFtlUEuc+sTgP8+NlIU=
SCHEME:
- - Shoppa
+ - Racer
- 'false'
- 'false'
- 'true'
- 'true'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -593,7 +593,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -604,12 +604,12 @@
- '30'
- '100'
- '50'
- - '1'
- '0'
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -636,14 +636,14 @@
DRAWNMAP:
- AAAFlnjaHZR3bNdlEMY/771371FLixoxKEKEQAgGwzA1SMJ0D6ZARY1SLTEgKEVGGOKIDGUjEJkBIYKADFFQ2RISLFVcjQXRGnBQLEJECUgUv/398+RyefO+994ztEgLsUt+FdI35JH/itxPwa+2g7yquIUGo9M89Lj0hTKWbKPMW9Ngdw5YkushN0rJNrnRxlJ4XQ6kJNcjdoy1ywtaxFr8F5Uq/1lb4if0PvxHHYYf1Vn4N7oZP6xf4fv1PL7DrsPXWxG+3Abgs20MPtkW4sNtGz7IsnN321m8XcrHb0itcEk9SDXpcdKRNIb0QZpFWpzWkCalT0hPpCOkbukk6eZ0gYQ7Vu2NsD3eClvmRdh4744N9J5YBy/GCv1J9LQ/gx70EegqL0Mn+Ri02Mei7X0cWj+r4m8+mvipjyQu9+HE8T6EOMCfILb3AcQCfwA57V2RQ94BecdbIK95Q6TUFbkr/Ym0SNVISocJNWk7oSKtJGxJ0wmL0kjCpFRMKE2dCQ+l5oTbUyI0sxpCgVXAP/Ye1NgcOGrPQ7n1ht3WFrZaIazVWlih5bBI18FcnQoztBSmaXeYok0ziJdhaqyC1+N2mBnfhPmxDBbHXrAqtoENMR+2Sw18Kp/Bl5JdVS3T4ZwMJYg8SGgotxJay9WELuE8YUCoIowIuwlTw2rCyvAGYWcYRfguPEb4K9yDXBvaI+1CE6RPyEdGcgmZRw2yjWNIJZ8jF9lHbMyHxK5sJD7NauI0lhE3soj4FfOJF5iDNmYW2q0OhjAbfYNMp5tZgH6baVIvshK7iXVYN7ZipezCpnEIe5dK7DAnsVrOkwpCJN0aGpIeCq1Jw0Jn0rTQj7QmDCXtDS+TjobFpPPhfTw/VODNwym8oyjeU5rhJdIFf0Eex1+TifgCWYq/LTvxzXIc3yn/4gdjU/yL2A2vjE/h38cp+E9xLX4ylmfWiGdy/shm0cIfUn3tQKqnA0lBx2MXdVk2qe7BftBqrEL/wz62Jtga64TNzExio+w5rNimYJ1sKdbYNqGXbQ96zD5HP7IqdKGdQEfZKbRX9m29xc6gyX4nnrDfiHvtJ+Iy+444IdtMHGS7iJ1sQ8aCvYVcsVeRkzYMKbe+GVGZOWWFNUJmaEbeBD2KDNePkBJdhDyio5F+2gfppW2QnloP6R1/Rh6O+5FH44rMAXEiUhYHIS/Fjhn78QZkjVxGPpEfka/lAFIr64kubxJbymTiXfIssVQeI06RnsS10oNYLncQ/5Db0GukHVokbdFB0h59UW5HV0pn9IDci/4i/bEkT2MtZTR2ZyZgGywrsImyHVsgR7D18ju2N+ZhX8csFE7E+7BzcSh2Oc4gxbiJlJfpLtWPf+c4yl7LiKqDuqp/uRbVram5Sjl7Mxp9uHQvz1uVKTGvii2VeVU+mAbjcsCWXI+rOqTqygbXB8ul7dm6tD2bf0SWVhTMtS5cOVWPff8D7Vs1fw==
SCHEME:
- - Shoppa
+ - Racer
- 'false'
- 'false'
- 'true'
- 'true'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -655,7 +655,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -666,12 +666,12 @@
- '30'
- '100'
- '50'
- - '1'
- '0'
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -698,14 +698,14 @@
DRAWNMAP:
- AAAG73jaPdR7bBRFHAfw79zM/Gb3XntQyqNBSAVFm2qlAp4RUDRtA5FCiKASmwaMREs0hIeBIAp4lROKAmLkJWCiRAkGwhlQQ4xajr4o1xY4aGl4GKGPAIZTuFSw6+y2xz+ffH/fmdub3WTXXIHlMIfxNHwpOQGilQ+DWab2A5XYFEOlugmrxwWb3A7BTkWxYKdnOliLiyK3A88X4RjPl70IchcRdjvYt1GZ1FxF6ME+Kt0OVpr9lXSAXZzBHREU05MOCI3J4I4YSOGkA0JDMrgjRqiapIPenMEdrR9UQ9IBvXcyuCObouqSeqwD3tBJcw72F330dcDT+rf2aL2Z6lUq6QBMzuCOVovqSVotxnr0o3r6CAUNT9IB9qsZ3DHkUTtPaA7BKu9jp9vpO1dbTmhWIjSwjy1uB+u2WnvCAcbEDO6Ix9XKEw6wCzK4I55Ti+P2x2o1MNVJL6nFwEWqittTqQrYJK/H7S3yul6VHXH7O9kBPHo/jZfdcfuw7AaznO4xp3tNXo3bG+VVsFUUjdvPUxSoEmWneheKMlgpMa211xTTgGKdBoR1srpYqrV3IdPPqkynAWGdrGbKa/1vBuXpTqcBYZ0MIBUzYBxAP0j1k8UKYkaWvQj9sIJ+JJsWM6T9OWgFK75BC1jBTbOMpdtprZgEMyzC7f4c+Qe8Sylvl5F0/uOILN7lS9Fu+IO0bmtgOKURWKqqz/pzVTWoi/ISBmQWHHRSf8IwVXWCgnrVN1zUJgJhAgIzqCxhJIU+y12Rd9EcIgqumMPFlGuaaftMiEn7zCliyD6zkR/YbjbKHfCu4M3bvStkF7yDqOK0dxA39XPh5mn7XZ3EZU/PNiriIVA2r9hMP3sug857OjaorZ6ZMLNYxQbK55thrmITNxifsCMQZ3jOBf9I+XIi0C1K4Tsv6hKBOOXCHxDHO+R7rGCHr0i2NfmKqByBES6yDU4HXwnNbvKVyBL0Q7PvM1cviNHOrTrQXLeD96gYEPGN5/vh/ZXmRXyvUzO8PbQn4sumg/CmaRu8N2kffNfkU3s145I+JQvrfNWyEOIRZFexTthVZo7wNpk59CHMobSmyStojU4i55x+aprBDjl9aehGc6TI+dRZ+NTZouHttTplwczlnbVmrk5qsDgcpSHiDrgU6SivFHvgEBUPiDTESL4/Ki6IwXCIyt/5JohG3h4VN3gbREqDK3xXlG0WDA5Rz3y+DWwNr42yr3gt2PcaeZr/W0tTxTCwDyh/Nx2hfLBRcmYjG0VtTprVqL6Ws8DuyMURzT14ItIT0UzWp5LHIp57chl4tfgnwg/JZyDelr9ERFh3coQUEZGSRZClMhaRa+VbkH/rq1BYHgV1i3SEfpRPQAl5IKK+lGehIvJmRC0iBTWHRkE9S36oYv3qqgX6vdSpHepheQ7KkqfBFlDbSZZ0DnmJzic8hdRW69lL51s8vdR8is+j5gb+Da1pFEQzGsQceqVetNBnZ2QJ/dYgY7TnFDF6s4Eq6IUENdKSk8qib+tVGS2vV+U0tkaVy1t1aqU8VkOX1Moa9ZP+0qhVomudUSS6YCxTa9cZy4xCGKUytM4oNYKwLK5aQmO4gnVcE7zLg86oF8q56ST9Qoy7v2X0/bSaSydJ+JP0YkugkB6Cv4HKGwLz6RaC2TQZ/o/4O+uDSzyH1ls9LK/KPs7y9Gddp9AYnSiPjW1Rg9hY0EE2pVO+z57cpZmA/wEVf+kG
SCHEME:
- - Wrap Shoppa
+ - Wrap Racer
- 'false'
- 'false'
- 'true'
- 'false'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -717,7 +717,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -728,7 +728,7 @@
- '30'
- '100'
- '50'
- - '1'
+ - '0'
- '3'
- '0'
- '0'
@@ -760,7 +760,7 @@
DRAWNMAP:
- AAAEC3jaHZJ9aJZVGIevc859znme930etsRKEyllVlJr2AInGDXBBSWVfdHXlFFiq5CWH39U7gNCHVE6WrnSRIq0j01nW7KxaZEtwvFMSzYCl9MWKKnEYrI5puvZ+9/hwH39rt+5T1TjHybMcJjsjXoHJpKr+Dn2KG7KtOCV2oqZrdqZGmGiLX8uE+lJj7XlXdJjTF2S9C5PJgA32ZafcZP4s25d4rvdGXy5X4A77+/AbXHDuFVuA67GGdxp24lfadvx7XZ0eqIiN0Zwzr6WBL/Zvwi+cI8TPOcO4MfdFXy9vw0/wxfidvvZuCJ3AXvK7cJud0uwa+2v2FV2JXajnMZ+I29gr8pNuHLTjzthWvFl5lt8l+khWGCuEbwjjxF0yfcEg/bOXC7hqLyehP/IMGFinyXcY38hLHd3EUbuXYKDro+gzIf4fr8Iv9o/hLuQPp2r8iXYKT8T25iWtsVuJzLkSpFddghZa9cjyy3IYqlHlsoNyFNmN1Jj7ka6dQ821JXYl/Ut2ONqELdEHcQdUI34Bep9/GfqU4J81UmwWV1MTfU9hCW6jrBWnyXsMOnyhkw34X9yb64C8WG9OYm/1qPEdWYN8TLTS3RZbiXaJquJbpatZPfKR2QXyjYyHVJB5gmZT3jN9BEeMZWEjXqccMt0xoc6Q9ipmgjHVTGZFfxJ5hC7yc5jA9km1hDlUUVUx06i8wwQ368WElerD4j3q+vTLhtzQsR7dHES1+uviFeYPKJ/zfNE1aaWyJm3U5R5lGypniQb6QYyU3oO2blqP9kKtZzsMaWIFvM3UQsjxLPU7cSVqpr4Y3UpR0YWyWAi8+2TmDH7E+aQK8A846rQF90+9Cb3A+q660K95z5BFbgX4YQLoMF+DutsEbwiHVAry6DdDKAwb6EqzH2ok8ajy9Lfro8YwRSaIswOsx5zxiTITClBiqQlZ4DJV8cSPaZL0N/pJvQjuh/Vr4dRL+kfUaF+Ewa0g1Nqe5qh5qGepg/Vw5fopTSj9zGMHlEPTqPacjxMKFcSPWJfRTfb3tQlFVcn3SxUuR1DKdsMvbYUfpbjcFleQD0ggmpJe+gC8we6QUL0uXTTxsvvOR6+0Jcl0SZfhjpKaxLOoJX/Ac8c7Ww=
SCHEME:
- - Shoppa-tech
+ - TechRacer
- 'false'
- 'false'
- 'true'
@@ -795,7 +795,7 @@
- '0'
- '0'
- '0'
- - '8'
+ - '0'
- '0'
- '25'
- '47'
@@ -822,14 +822,14 @@
DRAWNMAP:
- AAABkHjaFdCxK8RhGAfw7/u87/v8zns/9y63Wij+A5SE8YYbXErCplgMRBxXBgveS91goOQGN1jdImVw0xlOucGVQcpgk9hQ/J7l07fn21NPj9vGtIoW+Ej5Ne5WVtsVpcfsgPITKCo/qmrK5+hemV7eqgtwbd6rC6AWl0/iVS7D9PPOmwD3yHuvAqjElXZ3D1eQrFWCIO1xEKR1gTbxCSG47ySZyK4GE+kmhBA/S0rTlMwewAWaCVzQF0itJ7NUMUmuRPPBlfQ54mvbaMbX0SnUix1/oFZ0Bc7bnaqA1KLZqApwLTt0JsAvoavul7SG/9JPZf8V/SLj6K7jR+gOmVlV6/hBVUNmGcWOH0MR6Qjv++no71ZuqX0IcsHFhwDOqb7AOSrBHSTJHdIl6EYVGnRjf2DyqtkweT2X/E8NN1ybHmGYJoNhu4k4S9ldAf9Gt2jZ
SCHEME:
- - Shoppa
+ - Racer
- 'false'
- 'false'
- 'true'
- 'true'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -841,7 +841,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -852,12 +852,12 @@
- '30'
- '100'
- '50'
- - '1'
- '0'
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -884,14 +884,14 @@
DRAWNMAP:
- AAAC83jaFdJraE5xHAfw7/9+zvOc55y5vnB5oVy2NXmSS0viIZdJ2NiKeEMrhQiRJP2I8U8uHcWL1d6g1Yp41nLfC9FCG4Z2DOtxF4XRRto45//i0+/Ft379v/3Qjpfwe8xcMGW2QwkzC/HrzxcNRT+Cz/xXHqP5L/zrlV/zwWf5FUG37sljgu6JY6b3WNEE0wu0ozMKKthNJET+E1OChCi9nt9DQsRSPIeEeDJVybaqSD4SdZAvxMnIm6RnICGSg2Yy+EKWC81odIaZ/WxlGFToXaF/Tg6G6YnqSGj2mlmhmSqvh/KjHBGys6otFN/ZQOge4utCLyuXhmwtllmxE7ut8thW6zK8t6nZrMN689hPG5zjTdZv4VOsv0U9tP4Q/ddmitX1hBZklsoV1pvEX9nUgMhaM1cMt6qND7OO4uMs17zLyju8w/KxrGBxkW+yqFdejO627L4Zb8UKddmK1XKRdQvqh/XKdItNaeNadUo3WOeonmNlltWTiNgCyEHsIHkczVB92E16FDrh1LICOSXsENxS9pNcy0Kky3lA6X2sC6kHbAylVsWde9VsCXnleAO/OM5lPvHl8P+yE+R34y6CdrGNghqxDf5GcZr8N9JHpkULimlLfvmWMn3yLdJ7xG1KX4vbSs/mlyj1gZfC/S00uSfEfDjnRZac1fwddANfRbqRFaCe82ZSt0QRxCP+h8Q03gRWKk4SuyC6wHKyjthV+Roo6EpCra4EP61nEP+i14A/VR7xw/IZ5Ah5kOQiZaBHymrS5TKCbhR1pB7HZ+GckWVk+uUGuEvkZnIbVRFcpuKJqR9xB/oKpafrb8nRjCLvgGqNc7qV3Fx8wM55U0POTN0HfUO3Ucxi6IypItVsmvAfnbXVgw==
SCHEME:
- - Shoppa
+ - Racer
- 'false'
- 'false'
- 'true'
- 'true'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -903,7 +903,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -914,12 +914,12 @@
- '30'
- '100'
- '50'
- - '1'
- '0'
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -946,14 +946,14 @@
DRAWNMAP:
- AAACYnjaFc9NSJRRFAbgc3/PfP8lqGGLIlpIJVktlHAgXaSRLTLMQIQGwwhJF8UIUs7umHExvCn5CcWgiSFo0SBGUrjJjSAIFZWgQdmiggqjdd9sHs7qfc/rZ2UWwnasg6hS1IMzy7ZBn9BbAEfwEXAu6kBl2FNgGTZbcMpFZSEo5+0F+VLfKMiIbczrMbk2H7RpM8+kXs3zEdlR5BLoa6w77/TqK3nvuuzPh1/lmbxXxarzsCCHYr6i0zEe1Cux14k1RY4nHyRX0CLvx3Jc/IxTa6wpxlL+KQ4n4FsctfLGmLWIVstfiArL38GCVS3wzKppPmJTOXXYukdVifWW9CHr1fAd6+dg0uIyzFj+CmOry3DUph7iPevuxT7r7sc+iPZp3zKr7hjxRlUniE4jf8sfJnVA3zb4Tx4z6peIDS6xdeNe5OkiteB8hxnjZOSkcR/rdJFa8HNi0/hZ1WXCniQvNKLC+DmcMmIR75Ju1OeJN6sBYnk5TJAVVQQd0E+8DK4S32LTxFf5ZRLPYZzkEAyR/CAYiY8yR3BBPSD2Gp8UmQKOqEmcTVDncIpwFy4TliY7cRNHCf+oDCGpbUoNq8/kDKguwlviLekGUUp6B3LknCyyzrrJbU96vXqeJl+J0+ROiD5yG+Qe8rS6Sd4X1UthMy5SsJGkBF1ijsLdRQa5obCH/aXgPSsh/xTLUNCWjInmRCdFpJooWtZjFE7oQfoP92i1IA==
SCHEME:
- - Borderless Shoppa
+ - Borderless Racer
- 'false'
- 'false'
- 'true'
- 'false'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -965,7 +965,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -976,7 +976,7 @@
- '30'
- '100'
- '50'
- - '1'
+ - '0'
- '3'
- '0'
- '0'
@@ -1008,14 +1008,14 @@
DRAWNMAP:
- AAABrnjaJcsxS0JRGMbx55xzzz2ecymJllwCCYeGPoDjJaVR1K0tihoEa2nR1dD6BBdBCDIIahACxwzqonIXDRochIIGh4Yg2ju+d/nx8Od9kymsI/GtctAb/AbuoTyHGcod6KTzBfdU3MJtsgPIFqt1ZMu5QOKEYDVqUEVR76iiSsO7J0SdGvRcNjp6jheoZ0I2qEEGrB3JwLmEHhOsTQ2qh0Gkem4BekpgQA1eX1Qir69SUD4hKtSgN9l+pFedz4lb5d3Qcgf5GNPFssGMnFJoRqIJ80o4JWrwyjwIvbLYhVcgeEANesbsxwOzJ3sqFVp+aMF7khhbEljJxYAa1MJNvstrnhlatiHKMRksG9wrdvymFmJrqv94NjRHPIvEr/Inas2ZTUya+2PzwX0YyfORxa5uTJ4azBnXka7K3+k/hAxnGg==
SCHEME:
- - Shoppa
+ - Racer
- 'false'
- 'false'
- 'true'
- 'true'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -1027,7 +1027,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -1038,12 +1038,12 @@
- '30'
- '100'
- '50'
- - '1'
- '0'
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -1070,69 +1070,7 @@
DRAWNMAP:
- AAAEC3jaHZJ9aJZVGIevc859znme930etsRKEyllVlJr2AInGDXBBSWVfdHXlFFiq5CWH39U7gNCHVE6WrnSRIq0j01nW7KxaZEtwvFMSzYCl9MWKKnEYrI5puvZ+9/hwH39rt+5T1TjHybMcJjsjXoHJpKr+Dn2KG7KtOCV2oqZrdqZGmGiLX8uE+lJj7XlXdJjTF2S9C5PJgA32ZafcZP4s25d4rvdGXy5X4A77+/AbXHDuFVuA67GGdxp24lfadvx7XZ0eqIiN0Zwzr6WBL/Zvwi+cI8TPOcO4MfdFXy9vw0/wxfidvvZuCJ3AXvK7cJud0uwa+2v2FV2JXajnMZ+I29gr8pNuHLTjzthWvFl5lt8l+khWGCuEbwjjxF0yfcEg/bOXC7hqLyehP/IMGFinyXcY38hLHd3EUbuXYKDro+gzIf4fr8Iv9o/hLuQPp2r8iXYKT8T25iWtsVuJzLkSpFddghZa9cjyy3IYqlHlsoNyFNmN1Jj7ka6dQ821JXYl/Ut2ONqELdEHcQdUI34Bep9/GfqU4J81UmwWV1MTfU9hCW6jrBWnyXsMOnyhkw34X9yb64C8WG9OYm/1qPEdWYN8TLTS3RZbiXaJquJbpatZPfKR2QXyjYyHVJB5gmZT3jN9BEeMZWEjXqccMt0xoc6Q9ipmgjHVTGZFfxJ5hC7yc5jA9km1hDlUUVUx06i8wwQ368WElerD4j3q+vTLhtzQsR7dHES1+uviFeYPKJ/zfNE1aaWyJm3U5R5lGypniQb6QYyU3oO2blqP9kKtZzsMaWIFvM3UQsjxLPU7cSVqpr4Y3UpR0YWyWAi8+2TmDH7E+aQK8A846rQF90+9Cb3A+q660K95z5BFbgX4YQLoMF+DutsEbwiHVAry6DdDKAwb6EqzH2ok8ajy9Lfro8YwRSaIswOsx5zxiTITClBiqQlZ4DJV8cSPaZL0N/pJvQjuh/Vr4dRL+kfUaF+Ewa0g1Nqe5qh5qGepg/Vw5fopTSj9zGMHlEPTqPacjxMKFcSPWJfRTfb3tQlFVcn3SxUuR1DKdsMvbYUfpbjcFleQD0ggmpJe+gC8we6QUL0uXTTxsvvOR6+0Jcl0SZfhjpKaxLOoJX/Ac8c7Ww=
SCHEME:
- - Shoppa-tech
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - '100'
- - '30'
- - '100'
- - '50'
- - '1'
- - '0'
- - '0'
- - '0'
- - '0'
- - '8'
- - '0'
- - '25'
- - '47'
- - '5'
- - '100'
- - '100'
- - '0'
- - ! '!m=7'
- THEME:
- - Nature
- ! '#01':
- - ! 'Racer Challenge #1'
- - SEED: ! '{173c526c-5464-40af-beb2-f130f6998625}'
- MAPGEN: '3'
- FEATURE_SIZE: '12'
- MAZE_SIZE: '0'
- MAP: +drawn+
- TEMPLATE: '3'
- - SCRIPT:
- - Racer
- AMMO:
- - Shoppa
- - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
- DRAWNMAP:
- - AAAAw3jaJc6xDcIwEAXQz+niWBhkiggxAS0djZs0kYVASFmBBWiYw0xAQ5sOV7SZgBpKRvAC+Ezz9PWlfzrd8BHmyzvwiTvoFe7QTf0AAoaIUO9hrwUMpQN56iN5tcT8U6C+dKADuzi7scsHeJuEnCaXJOSkXklAtWaXBBjDbRJKF/7dgtsgyPYcBNm+gwBtaTNqqzyqJ3fj1Oeff4W8JYk=
- SCHEME:
- - Shoppa
+ - TechRacer
- 'false'
- 'false'
- 'true'
@@ -1167,7 +1105,69 @@
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
+ - '25'
+ - '47'
+ - '5'
+ - '100'
+ - '100'
+ - '0'
+ - ! '!m=7'
+ THEME:
+ - Nature
+ ! '#01':
+ - ! 'Racer Challenge #1'
+ - SEED: ! '{173c526c-5464-40af-beb2-f130f6998625}'
+ MAPGEN: '3'
+ FEATURE_SIZE: '12'
+ MAZE_SIZE: '0'
+ MAP: +drawn+
+ TEMPLATE: '3'
+ - SCRIPT:
+ - Racer
+ AMMO:
+ - Shoppa
+ - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
+ DRAWNMAP:
+ - AAAAw3jaJc6xDcIwEAXQz+niWBhkiggxAS0djZs0kYVASFmBBWiYw0xAQ5sOV7SZgBpKRvAC+Ezz9PWlfzrd8BHmyzvwiTvoFe7QTf0AAoaIUO9hrwUMpQN56iN5tcT8U6C+dKADuzi7scsHeJuEnCaXJOSkXklAtWaXBBjDbRJKF/7dgtsgyPYcBNm+gwBtaTNqqzyqJ3fj1Oeff4W8JYk=
+ SCHEME:
+ - Racer
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - '100'
+ - '30'
+ - '100'
+ - '50'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -1194,14 +1194,14 @@
DRAWNMAP:
- AAAAaXjaAWkAlv8ITgKBAAmqA0YACZMErAAISQV1AAbfBXoABZEEsAAFVQM9AAbWAoYAB5cAqpkHlwc7AAMmA/WZDB4D9QADtAEBmQtiBvIAA7kHCZkLawD8AA2jAaaFDboGDYUBhQYthQGPAlSFB6AEC/E0HxtP
SCHEME:
- - Borderless Shoppa
+ - Borderless Racer
- 'false'
- 'false'
- 'true'
- 'false'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -1213,7 +1213,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -1224,7 +1224,7 @@
- '30'
- '100'
- '50'
- - '1'
+ - '0'
- '3'
- '0'
- '0'
@@ -1256,131 +1256,7 @@
DRAWNMAP:
- AAAEC3jaHZJ9aJZVGIevc859znme930etsRKEyllVlJr2AInGDXBBSWVfdHXlFFiq5CWH39U7gNCHVE6WrnSRIq0j01nW7KxaZEtwvFMSzYCl9MWKKnEYrI5puvZ+9/hwH39rt+5T1TjHybMcJjsjXoHJpKr+Dn2KG7KtOCV2oqZrdqZGmGiLX8uE+lJj7XlXdJjTF2S9C5PJgA32ZafcZP4s25d4rvdGXy5X4A77+/AbXHDuFVuA67GGdxp24lfadvx7XZ0eqIiN0Zwzr6WBL/Zvwi+cI8TPOcO4MfdFXy9vw0/wxfidvvZuCJ3AXvK7cJud0uwa+2v2FV2JXajnMZ+I29gr8pNuHLTjzthWvFl5lt8l+khWGCuEbwjjxF0yfcEg/bOXC7hqLyehP/IMGFinyXcY38hLHd3EUbuXYKDro+gzIf4fr8Iv9o/hLuQPp2r8iXYKT8T25iWtsVuJzLkSpFddghZa9cjyy3IYqlHlsoNyFNmN1Jj7ka6dQ821JXYl/Ut2ONqELdEHcQdUI34Bep9/GfqU4J81UmwWV1MTfU9hCW6jrBWnyXsMOnyhkw34X9yb64C8WG9OYm/1qPEdWYN8TLTS3RZbiXaJquJbpatZPfKR2QXyjYyHVJB5gmZT3jN9BEeMZWEjXqccMt0xoc6Q9ipmgjHVTGZFfxJ5hC7yc5jA9km1hDlUUVUx06i8wwQ368WElerD4j3q+vTLhtzQsR7dHES1+uviFeYPKJ/zfNE1aaWyJm3U5R5lGypniQb6QYyU3oO2blqP9kKtZzsMaWIFvM3UQsjxLPU7cSVqpr4Y3UpR0YWyWAi8+2TmDH7E+aQK8A846rQF90+9Cb3A+q660K95z5BFbgX4YQLoMF+DutsEbwiHVAry6DdDKAwb6EqzH2ok8ajy9Lfro8YwRSaIswOsx5zxiTITClBiqQlZ4DJV8cSPaZL0N/pJvQjuh/Vr4dRL+kfUaF+Ewa0g1Nqe5qh5qGepg/Vw5fopTSj9zGMHlEPTqPacjxMKFcSPWJfRTfb3tQlFVcn3SxUuR1DKdsMvbYUfpbjcFleQD0ggmpJe+gC8we6QUL0uXTTxsvvOR6+0Jcl0SZfhjpKaxLOoJX/Ac8c7Ww=
SCHEME:
- - Shoppa-tech
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - '100'
- - '30'
- - '100'
- - '50'
- - '1'
- - '0'
- - '0'
- - '0'
- - '0'
- - '8'
- - '0'
- - '25'
- - '47'
- - '5'
- - '100'
- - '100'
- - '0'
- - ! '!m=2'
- THEME:
- - Nature
- ! '#12':
- - ! 'Racer Challenge #2'
- - SEED: ! '{4f2be5e8-69a0-4116-8d80-d270d772f6ee}'
- MAPGEN: '3'
- FEATURE_SIZE: '12'
- MAZE_SIZE: '0'
- MAP: +drawn+
- TEMPLATE: '3'
- - SCRIPT:
- - Racer
- AMMO:
- - Shoppa
- - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
- DRAWNMAP:
- - AAAB1njaJY5HjsUwDEPpnjq5sAP44BIy5NfmgWoUxztelLe8wNuliG1i4pp14plJioAnX5lAdjhKgGULsNED1TECw/H55+shaFBlUGXQVfbo0YWDJtXUK4Gq2+IryTQ5n9ZA0R50kfTtB5ZDgTpXqLJ+8LZEoOarK0tSlqS9KlWl/qzZughc1g1ngOUeKIYtkA0j8BkeG7Y+ggZZBlkGUIno0YWDXWpX7wxk3RZbt0xvq4YjULTXddH07QeWQ4E2rlBV/eDtGYGSrU1ZbmW5tXdIHVL/NLTKIw==
- SCHEME:
- - Shoppa
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'true'
- - 'true'
- - 'false'
- - 'false'
- - 'true'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - 'false'
- - '100'
- - '30'
- - '100'
- - '50'
- - '1'
- - '0'
- - '0'
- - '0'
- - '0'
- - '8'
- - '0'
- - '25'
- - '47'
- - '5'
- - '100'
- - '100'
- - '0'
- - ! '!'
- THEME:
- - EarthRise
- ! '#19':
- - ! 'Racer Challenge #19'
- - SEED: ! '{4f2be5e8-69a0-4116-8d80-d270d772f6ee}'
- MAPGEN: '3'
- FEATURE_SIZE: '12'
- MAZE_SIZE: '0'
- MAP: +drawn+
- TEMPLATE: '3'
- - SCRIPT:
- - Racer
- AMMO:
- - Shoppa
- - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
- DRAWNMAP:
- - AAACWHjaJdGxS1tRFMfx3825556TtJ0cRdCpFIpLJzOktIUGQZBCh0hLx+IoCoKDFFok2CJFKDilon9AEB/SwRZKhEDiEGhxKTg5+FQchEAtYuh95y2f4TtcOL97b9qNgd/gH7hG1+Az/gx9Ty8QRHZRWpM96CI/QnhcmEvCn8JORh96krODrEHrJInW+Rvkp0FiDdLnqUT6YRj82+Apa5AR6iYy4lcRnhnUtQZ/7MqJP6ZfkFXDla1B9+k80X1+iOKtQefW4C9dJfWX1II8MVzFGkKVBmmo+ivogkEDa+Abnk35JtyBfDd41hr0lT9KIxUUOzlH1qAHhX6qB/QB+s7Izo8NpUm/fBhp4O5MzrI1hKHQPAxD+jK+bISmNciEK7VlAkDoGq5kDf6p225HfoCqOdvW4Feo1Y58gvuY07KG4lu//jWyBlnJWbeWbTC/EdcYhjww3Lw1hPt80WClesNfuecNfo2/vfjxgx5f8JdeaNKgE5q+jOK4kQ0WG2SLNjuyVZiDLBm0aQ06yrWOjvpb6KnBNWv4DxsWmqM=
- SCHEME:
- - Shoppa
+ - TechRacer
- 'false'
- 'false'
- 'true'
@@ -1415,7 +1291,131 @@
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
+ - '25'
+ - '47'
+ - '5'
+ - '100'
+ - '100'
+ - '0'
+ - ! '!m=2'
+ THEME:
+ - Nature
+ ! '#12':
+ - ! 'Racer Challenge #12'
+ - SEED: ! '{4f2be5e8-69a0-4116-8d80-d270d772f6ee}'
+ MAPGEN: '3'
+ FEATURE_SIZE: '12'
+ MAZE_SIZE: '0'
+ MAP: +drawn+
+ TEMPLATE: '3'
+ - SCRIPT:
+ - Racer
+ AMMO:
+ - Shoppa
+ - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
+ DRAWNMAP:
+ - AAAB1njaJY5HjsUwDEPpnjq5sAP44BIy5NfmgWoUxztelLe8wNuliG1i4pp14plJioAnX5lAdjhKgGULsNED1TECw/H55+shaFBlUGXQVfbo0YWDJtXUK4Gq2+IryTQ5n9ZA0R50kfTtB5ZDgTpXqLJ+8LZEoOarK0tSlqS9KlWl/qzZughc1g1ngOUeKIYtkA0j8BkeG7Y+ggZZBlkGUIno0YWDXWpX7wxk3RZbt0xvq4YjULTXddH07QeWQ4E2rlBV/eDtGYGSrU1ZbmW5tXdIHVL/NLTKIw==
+ SCHEME:
+ - Racer
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - '100'
+ - '30'
+ - '100'
+ - '50'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '25'
+ - '47'
+ - '5'
+ - '100'
+ - '100'
+ - '0'
+ - ! '!'
+ THEME:
+ - EarthRise
+ ! '#19':
+ - ! 'Racer Challenge #19'
+ - SEED: ! '{4f2be5e8-69a0-4116-8d80-d270d772f6ee}'
+ MAPGEN: '3'
+ FEATURE_SIZE: '12'
+ MAZE_SIZE: '0'
+ MAP: +drawn+
+ TEMPLATE: '3'
+ - SCRIPT:
+ - Racer
+ AMMO:
+ - Shoppa
+ - '00000099000000000000000000000000000000000000000000000000000444441004424440221011212122242200000000200040001001100100000000000000000000000000000000000000000000000000000000000000011111101111111111111111111111111111111111011011111111110000'
+ DRAWNMAP:
+ - AAACWHjaJdGxS1tRFMfx3825556TtJ0cRdCpFIpLJzOktIUGQZBCh0hLx+IoCoKDFFok2CJFKDilon9AEB/SwRZKhEDiEGhxKTg5+FQchEAtYuh95y2f4TtcOL97b9qNgd/gH7hG1+Az/gx9Ty8QRHZRWpM96CI/QnhcmEvCn8JORh96krODrEHrJInW+Rvkp0FiDdLnqUT6YRj82+Apa5AR6iYy4lcRnhnUtQZ/7MqJP6ZfkFXDla1B9+k80X1+iOKtQefW4C9dJfWX1II8MVzFGkKVBmmo+ivogkEDa+Abnk35JtyBfDd41hr0lT9KIxUUOzlH1qAHhX6qB/QB+s7Izo8NpUm/fBhp4O5MzrI1hKHQPAxD+jK+bISmNciEK7VlAkDoGq5kDf6p225HfoCqOdvW4Feo1Y58gvuY07KG4lu//jWyBlnJWbeWbTC/EdcYhjww3Lw1hPt80WClesNfuecNfo2/vfjxgx5f8JdeaNKgE5q+jOK4kQ0WG2SLNjuyVZiDLBm0aQ06yrWOjvpb6KnBNWv4DxsWmqM=
+ SCHEME:
+ - Racer
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'true'
+ - 'true'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - 'false'
+ - '100'
+ - '30'
+ - '100'
+ - '50'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
@@ -1442,7 +1442,7 @@
DRAWNMAP:
- AAAEC3jaHZJ9aJZVGIevc859znme930etsRKEyllVlJr2AInGDXBBSWVfdHXlFFiq5CWH39U7gNCHVE6WrnSRIq0j01nW7KxaZEtwvFMSzYCl9MWKKnEYrI5puvZ+9/hwH39rt+5T1TjHybMcJjsjXoHJpKr+Dn2KG7KtOCV2oqZrdqZGmGiLX8uE+lJj7XlXdJjTF2S9C5PJgA32ZafcZP4s25d4rvdGXy5X4A77+/AbXHDuFVuA67GGdxp24lfadvx7XZ0eqIiN0Zwzr6WBL/Zvwi+cI8TPOcO4MfdFXy9vw0/wxfidvvZuCJ3AXvK7cJud0uwa+2v2FV2JXajnMZ+I29gr8pNuHLTjzthWvFl5lt8l+khWGCuEbwjjxF0yfcEg/bOXC7hqLyehP/IMGFinyXcY38hLHd3EUbuXYKDro+gzIf4fr8Iv9o/hLuQPp2r8iXYKT8T25iWtsVuJzLkSpFddghZa9cjyy3IYqlHlsoNyFNmN1Jj7ka6dQ821JXYl/Ut2ONqELdEHcQdUI34Bep9/GfqU4J81UmwWV1MTfU9hCW6jrBWnyXsMOnyhkw34X9yb64C8WG9OYm/1qPEdWYN8TLTS3RZbiXaJquJbpatZPfKR2QXyjYyHVJB5gmZT3jN9BEeMZWEjXqccMt0xoc6Q9ipmgjHVTGZFfxJ5hC7yc5jA9km1hDlUUVUx06i8wwQ368WElerD4j3q+vTLhtzQsR7dHES1+uviFeYPKJ/zfNE1aaWyJm3U5R5lGypniQb6QYyU3oO2blqP9kKtZzsMaWIFvM3UQsjxLPU7cSVqpr4Y3UpR0YWyWAi8+2TmDH7E+aQK8A846rQF90+9Cb3A+q660K95z5BFbgX4YQLoMF+DutsEbwiHVAry6DdDKAwb6EqzH2ok8ajy9Lfro8YwRSaIswOsx5zxiTITClBiqQlZ4DJV8cSPaZL0N/pJvQjuh/Vr4dRL+kfUaF+Ewa0g1Nqe5qh5qGepg/Vw5fopTSj9zGMHlEPTqPacjxMKFcSPWJfRTfb3tQlFVcn3SxUuR1DKdsMvbYUfpbjcFleQD0ggmpJe+gC8we6QUL0uXTTxsvvOR6+0Jcl0SZfhjpKaxLOoJX/Ac8c7Ww=
SCHEME:
- - Shoppa-tech
+ - TechRacer
- 'false'
- 'false'
- 'true'
@@ -1477,7 +1477,7 @@
- '0'
- '0'
- '0'
- - '8'
+ - '0'
- '0'
- '25'
- '47'
@@ -1504,14 +1504,14 @@
DRAWNMAP:
- AAAAtHjaFc6xDsFQHIXxc3tv+48oHUw2kRKv4Am8hYjFC4hGYjuLwWRi6+QVDDazxGbpYpHYPEL1LL9845cVVsD9/BrdjR/Cju4Cv6oHSM8Ndk32sDL0gYVVzN5WQahyZJXlRNlUdIq/FLBb/KJAp44fFAjTcKBAMvFbCrR2fkmBdBbmFAgWjSngnm5EgfY96lE0f/hQ4A+Rki/Q
SCHEME:
- - Borderless Shoppa
+ - Borderless Racer
- 'false'
- 'false'
- 'true'
- 'false'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -1523,7 +1523,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -1534,7 +1534,7 @@
- '30'
- '100'
- '50'
- - '1'
+ - '0'
- '3'
- '0'
- '0'
@@ -1566,7 +1566,7 @@
DRAWNMAP:
- AAAEC3jaHZJ9aJZVGIevc859znme930etsRKEyllVlJr2AInGDXBBSWVfdHXlFFiq5CWH39U7gNCHVE6WrnSRIq0j01nW7KxaZEtwvFMSzYCl9MWKKnEYrI5puvZ+9/hwH39rt+5T1TjHybMcJjsjXoHJpKr+Dn2KG7KtOCV2oqZrdqZGmGiLX8uE+lJj7XlXdJjTF2S9C5PJgA32ZafcZP4s25d4rvdGXy5X4A77+/AbXHDuFVuA67GGdxp24lfadvx7XZ0eqIiN0Zwzr6WBL/Zvwi+cI8TPOcO4MfdFXy9vw0/wxfidvvZuCJ3AXvK7cJud0uwa+2v2FV2JXajnMZ+I29gr8pNuHLTjzthWvFl5lt8l+khWGCuEbwjjxF0yfcEg/bOXC7hqLyehP/IMGFinyXcY38hLHd3EUbuXYKDro+gzIf4fr8Iv9o/hLuQPp2r8iXYKT8T25iWtsVuJzLkSpFddghZa9cjyy3IYqlHlsoNyFNmN1Jj7ka6dQ821JXYl/Ut2ONqELdEHcQdUI34Bep9/GfqU4J81UmwWV1MTfU9hCW6jrBWnyXsMOnyhkw34X9yb64C8WG9OYm/1qPEdWYN8TLTS3RZbiXaJquJbpatZPfKR2QXyjYyHVJB5gmZT3jN9BEeMZWEjXqccMt0xoc6Q9ipmgjHVTGZFfxJ5hC7yc5jA9km1hDlUUVUx06i8wwQ368WElerD4j3q+vTLhtzQsR7dHES1+uviFeYPKJ/zfNE1aaWyJm3U5R5lGypniQb6QYyU3oO2blqP9kKtZzsMaWIFvM3UQsjxLPU7cSVqpr4Y3UpR0YWyWAi8+2TmDH7E+aQK8A846rQF90+9Cb3A+q660K95z5BFbgX4YQLoMF+DutsEbwiHVAry6DdDKAwb6EqzH2ok8ajy9Lfro8YwRSaIswOsx5zxiTITClBiqQlZ4DJV8cSPaZL0N/pJvQjuh/Vr4dRL+kfUaF+Ewa0g1Nqe5qh5qGepg/Vw5fopTSj9zGMHlEPTqPacjxMKFcSPWJfRTfb3tQlFVcn3SxUuR1DKdsMvbYUfpbjcFleQD0ggmpJe+gC8we6QUL0uXTTxsvvOR6+0Jcl0SZfhjpKaxLOoJX/Ac8c7Ww=
SCHEME:
- - Shoppa-tech
+ - TechRacer
- 'false'
- 'false'
- 'true'
@@ -1601,7 +1601,7 @@
- '0'
- '0'
- '0'
- - '8'
+ - '0'
- '0'
- '25'
- '47'
@@ -1628,14 +1628,14 @@
DRAWNMAP:
- AAAEC3jaHZJ9aJZVGIevc859znme930etsRKEyllVlJr2AInGDXBBSWVfdHXlFFiq5CWH39U7gNCHVE6WrnSRIq0j01nW7KxaZEtwvFMSzYCl9MWKKnEYrI5puvZ+9/hwH39rt+5T1TjHybMcJjsjXoHJpKr+Dn2KG7KtOCV2oqZrdqZGmGiLX8uE+lJj7XlXdJjTF2S9C5PJgA32ZafcZP4s25d4rvdGXy5X4A77+/AbXHDuFVuA67GGdxp24lfadvx7XZ0eqIiN0Zwzr6WBL/Zvwi+cI8TPOcO4MfdFXy9vw0/wxfidvvZuCJ3AXvK7cJud0uwa+2v2FV2JXajnMZ+I29gr8pNuHLTjzthWvFl5lt8l+khWGCuEbwjjxF0yfcEg/bOXC7hqLyehP/IMGFinyXcY38hLHd3EUbuXYKDro+gzIf4fr8Iv9o/hLuQPp2r8iXYKT8T25iWtsVuJzLkSpFddghZa9cjyy3IYqlHlsoNyFNmN1Jj7ka6dQ821JXYl/Ut2ONqELdEHcQdUI34Bep9/GfqU4J81UmwWV1MTfU9hCW6jrBWnyXsMOnyhkw34X9yb64C8WG9OYm/1qPEdWYN8TLTS3RZbiXaJquJbpatZPfKR2QXyjYyHVJB5gmZT3jN9BEeMZWEjXqccMt0xoc6Q9ipmgjHVTGZFfxJ5hC7yc5jA9km1hDlUUVUx06i8wwQ368WElerD4j3q+vTLhtzQsR7dHES1+uviFeYPKJ/zfNE1aaWyJm3U5R5lGypniQb6QYyU3oO2blqP9kKtZzsMaWIFvM3UQsjxLPU7cSVqpr4Y3UpR0YWyWAi8+2TmDH7E+aQK8A846rQF90+9Cb3A+q660K95z5BFbgX4YQLoMF+DutsEbwiHVAry6DdDKAwb6EqzH2ok8ajy9Lfro8YwRSaIswOsx5zxiTITClBiqQlZ4DJV8cSPaZL0N/pJvQjuh/Vr4dRL+kfUaF+Ewa0g1Nqe5qh5qGepg/Vw5fopTSj9zGMHlEPTqPacjxMKFcSPWJfRTfb3tQlFVcn3SxUuR1DKdsMvbYUfpbjcFleQD0ggmpJe+gC8we6QUL0uXTTxsvvOR6+0Jcl0SZfhjpKaxLOoJX/Ac8c7Ww=
SCHEME:
- - Shoppa
+ - Racer
- 'false'
- 'false'
- 'true'
- 'true'
- 'false'
- 'false'
- - 'false'
+ - 'true'
- 'false'
- 'false'
- 'false'
@@ -1647,7 +1647,7 @@
- 'true'
- 'true'
- 'false'
- - 'false'
+ - 'true'
- 'true'
- 'false'
- 'false'
@@ -1658,12 +1658,12 @@
- '30'
- '100'
- '50'
- - '1'
- '0'
- '0'
- '0'
- '0'
- - '8'
+ - '0'
+ - '0'
- '0'
- '25'
- '47'
Binary file misc/winutils/Hedgewars.lnk has changed
--- a/misc/winutils/include/libavcodec/avcodec.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4604 +0,0 @@
-/*
- * copyright (c) 2001 Fabrice Bellard
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_AVCODEC_H
-#define AVCODEC_AVCODEC_H
-
-/**
- * @file
- * external API header
- */
-
-#include <errno.h>
-#include "libavutil/samplefmt.h"
-#include "libavutil/avutil.h"
-#include "libavutil/cpu.h"
-#include "libavutil/dict.h"
-#include "libavutil/log.h"
-#include "libavutil/pixfmt.h"
-#include "libavutil/rational.h"
-
-#include "libavcodec/version.h"
-/**
- * @defgroup libavc Encoding/Decoding Library
- * @{
- *
- * @defgroup lavc_decoding Decoding
- * @{
- * @}
- *
- * @defgroup lavc_encoding Encoding
- * @{
- * @}
- *
- * @defgroup lavc_codec Codecs
- * @{
- * @defgroup lavc_codec_native Native Codecs
- * @{
- * @}
- * @defgroup lavc_codec_wrappers External library wrappers
- * @{
- * @}
- * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
- * @{
- * @}
- * @}
- * @defgroup lavc_internal Internal
- * @{
- * @}
- * @}
- *
- */
-
-/**
- * @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 a 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.
- */
-enum AVCodecID {
- AV_CODEC_ID_NONE,
-
- /* video codecs */
- AV_CODEC_ID_MPEG1VIDEO,
- AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
- AV_CODEC_ID_MPEG2VIDEO_XVMC,
- 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_SNOW,
- 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_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,
-
- /* various PCM "codecs" */
- AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
- AV_CODEC_ID_PCM_S16LE = 0x10000,
- 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,
-
- /* various ADPCM codecs */
- AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
- 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,
-
- /* AMR */
- AV_CODEC_ID_AMR_NB = 0x12000,
- AV_CODEC_ID_AMR_WB,
-
- /* RealAudio codecs*/
- AV_CODEC_ID_RA_144 = 0x13000,
- AV_CODEC_ID_RA_288,
-
- /* various DPCM codecs */
- AV_CODEC_ID_ROQ_DPCM = 0x14000,
- AV_CODEC_ID_INTERPLAY_DPCM,
- AV_CODEC_ID_XAN_DPCM,
- AV_CODEC_ID_SOL_DPCM,
-
- /* audio codecs */
- AV_CODEC_ID_MP2 = 0x15000,
- 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,
- AV_CODEC_ID_VOXWARE,
- 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,
-
- /* subtitle codecs */
- AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
- AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
- 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,
-
- /* 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_TTF = 0x18000,
-
- AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
-
- AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
- * stream (only used by libavformat) */
- AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
- * stream (only used by libavformat) */
- AV_CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
-
-#if FF_API_CODEC_ID
-#include "old_codec_ids.h"
-#endif
-};
-
-#if FF_API_CODEC_ID
-#define CodecID AVCodecID
-#endif
-
-/**
- * This struct describes the properties of a single codec described by an
- * AVCodecID.
- * @see avcodec_get_descriptor()
- */
-typedef struct AVCodecDescriptor {
- enum AVCodecID id;
- enum AVMediaType type;
- /**
- * 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.
- */
- const char *name;
- /**
- * A more descriptive name for this codec. May be NULL.
- */
- const char *long_name;
- /**
- * Codec properties, a combination of AV_CODEC_PROP_* flags.
- */
- int props;
-} AVCodecDescriptor;
-
-/**
- * Codec uses only intra compression.
- * Video codecs only.
- */
-#define 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
- */
-#define AV_CODEC_PROP_LOSSY (1 << 1)
-/**
- * Codec supports lossless compression. Audio and video codecs only.
- */
-#define AV_CODEC_PROP_LOSSLESS (1 << 2)
-
-#if FF_API_OLD_DECODE_AUDIO
-/* in bytes */
-#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
-#endif
-
-/**
- * @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.
- */
-#define FF_INPUT_BUFFER_PADDING_SIZE 8
-
-/**
- * @ingroup lavc_encoding
- * minimum encoding buffer size
- * Used to avoid some checks during header writing.
- */
-#define FF_MIN_BUFFER_SIZE 16384
-
-
-/**
- * @ingroup lavc_encoding
- * motion estimation type.
- */
-enum Motion_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, ///< iterative search
- ME_TESA, ///< transformed exhaustive search algorithm
-};
-
-/**
- * @ingroup lavc_decoding
- */
-enum AVDiscard{
- /* 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_NONKEY = 32, ///< discard all frames except keyframes
- AVDISCARD_ALL = 48, ///< discard all
-};
-
-enum AVColorPrimaries{
- 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_NB , ///< Not part of ABI
-};
-
-enum AVColorTransferCharacteristic{
- 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_SMPTE240M = 7,
- AVCOL_TRC_NB , ///< Not part of ABI
-};
-
-enum AVColorSpace{
- 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_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
- AVCOL_SPC_NB , ///< Not part of ABI
-};
-
-enum AVColorRange{
- 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
-};
-
-/**
- * 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
- */
-enum AVChromaLocation{
- 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
-};
-
-enum AVAudioServiceType {
- 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_encoding
- */
-typedef struct RcOverride{
- int start_frame;
- int end_frame;
- int qscale; // If this is 0 then quality_factor will be used instead.
- float quality_factor;
-} RcOverride;
-
-#define FF_MAX_B_FRAMES 16
-
-/* encoding support
- These flags can be passed in AVCodecContext.flags before initialization.
- Note: Not everything is supported yet.
-*/
-
-#define CODEC_FLAG_QSCALE 0x0002 ///< Use fixed qscale.
-#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / advanced prediction for H.263.
-#define CODEC_FLAG_QPEL 0x0010 ///< Use qpel MC.
-#define CODEC_FLAG_GMC 0x0020 ///< Use GMC.
-#define CODEC_FLAG_MV0 0x0040 ///< Always try a MB with MV=<0,0>.
-/**
- * The parent program guarantees that the input for B-frames containing
- * streams is not written to for at least s->max_b_frames+1 frames, if
- * this is not set the input will be copied.
- */
-#define CODEC_FLAG_INPUT_PRESERVED 0x0100
-#define CODEC_FLAG_PASS1 0x0200 ///< Use internal 2pass ratecontrol in first pass mode.
-#define CODEC_FLAG_PASS2 0x0400 ///< Use internal 2pass ratecontrol in second pass mode.
-#define CODEC_FLAG_GRAY 0x2000 ///< Only decode/encode grayscale.
-#define CODEC_FLAG_EMU_EDGE 0x4000 ///< Don't draw edges.
-#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding.
-#define CODEC_FLAG_TRUNCATED 0x00010000 /** Input bitstream might be truncated at a random
- location instead of only at frame boundaries. */
-#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< Normalize adaptive quantization.
-#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
-#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< Force low delay.
-#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< Place global headers in extradata instead of every keyframe.
-#define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT).
-/* Fx : Flag for h263+ extra options */
-#define CODEC_FLAG_AC_PRED 0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
-#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
-#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
-#define CODEC_FLAG_CLOSED_GOP 0x80000000
-#define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks.
-#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< Skip bitstream encoding.
-#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< Place global headers at every keyframe instead of in extradata.
-#if FF_API_MPV_GLOBAL_OPTS
-#define CODEC_FLAG_CBP_RD 0x04000000 ///< Use rate distortion optimization for cbp.
-#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon.
-#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< Strictly enforce GOP size.
-#define CODEC_FLAG2_SKIP_RD 0x00004000 ///< RD optimal MB level residual skipping
-#endif
-#define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
-
-/* Unsupported options :
- * Syntax Arithmetic coding (SAC)
- * Reference Picture Selection
- * Independent Segment Decoding */
-/* /Fx */
-/* codec capabilities */
-
-#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< 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.
- */
-#define CODEC_CAP_DR1 0x0002
-#define CODEC_CAP_TRUNCATED 0x0008
-/* Codec can export data for HW decoding (XvMC). */
-#define CODEC_CAP_HWACCEL 0x0010
-/**
- * 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.
- */
-#define CODEC_CAP_DELAY 0x0020
-/**
- * Codec can be fed a final frame with a smaller size.
- * This can be used to prevent truncation of the last audio samples.
- */
-#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
-/**
- * Codec can export data for HW decoding (VDPAU).
- */
-#define CODEC_CAP_HWACCEL_VDPAU 0x0080
-/**
- * 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 carring 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.
- */
-#define CODEC_CAP_SUBFRAMES 0x0100
-/**
- * Codec is experimental and is thus avoided in favor of non experimental
- * encoders
- */
-#define CODEC_CAP_EXPERIMENTAL 0x0200
-/**
- * Codec should fill in channel configuration and samplerate instead of container
- */
-#define CODEC_CAP_CHANNEL_CONF 0x0400
-/**
- * Codec is able to deal with negative linesizes
- */
-#define CODEC_CAP_NEG_LINESIZES 0x0800
-/**
- * Codec supports frame-level multithreading.
- */
-#define CODEC_CAP_FRAME_THREADS 0x1000
-/**
- * Codec supports slice-based (or partition-based) multithreading.
- */
-#define CODEC_CAP_SLICE_THREADS 0x2000
-/**
- * Codec supports changed parameters at any point.
- */
-#define CODEC_CAP_PARAM_CHANGE 0x4000
-/**
- * Codec supports avctx->thread_count == 0 (auto).
- */
-#define CODEC_CAP_AUTO_THREADS 0x8000
-/**
- * Audio encoder supports receiving a different number of samples in each call.
- */
-#define CODEC_CAP_VARIABLE_FRAME_SIZE 0x10000
-
-//The following defines may change, don't expect compatibility if you use them.
-#define MB_TYPE_INTRA4x4 0x0001
-#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
-#define MB_TYPE_INTRA_PCM 0x0004 //FIXME H.264-specific
-#define MB_TYPE_16x16 0x0008
-#define MB_TYPE_16x8 0x0010
-#define MB_TYPE_8x16 0x0020
-#define MB_TYPE_8x8 0x0040
-#define MB_TYPE_INTERLACED 0x0080
-#define MB_TYPE_DIRECT2 0x0100 //FIXME
-#define MB_TYPE_ACPRED 0x0200
-#define MB_TYPE_GMC 0x0400
-#define MB_TYPE_SKIP 0x0800
-#define MB_TYPE_P0L0 0x1000
-#define MB_TYPE_P1L0 0x2000
-#define MB_TYPE_P0L1 0x4000
-#define MB_TYPE_P1L1 0x8000
-#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
-#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
-#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
-#define MB_TYPE_QUANT 0x00010000
-#define MB_TYPE_CBP 0x00020000
-//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
-
-/**
- * Pan Scan area.
- * This specifies the area which should be displayed.
- * Note there may be multiple such areas for one frame.
- */
-typedef struct AVPanScan{
- /**
- * id
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int id;
-
- /**
- * width and height in 1/16 pel
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int width;
- int height;
-
- /**
- * position of the top left corner in 1/16 pel for up to 3 fields/frames
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int16_t position[3][2];
-}AVPanScan;
-
-#define FF_QSCALE_TYPE_MPEG1 0
-#define FF_QSCALE_TYPE_MPEG2 1
-#define FF_QSCALE_TYPE_H264 2
-#define FF_QSCALE_TYPE_VP56 3
-
-#define FF_BUFFER_TYPE_INTERNAL 1
-#define FF_BUFFER_TYPE_USER 2 ///< direct rendering buffers (image is (de)allocated by user)
-#define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
-#define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
-
-#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore).
-#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer.
-#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content.
-#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update).
-
-/**
- * @defgroup lavc_packet AVPacket
- *
- * Types and functions for working with AVPacket.
- * @{
- */
-enum AVPacketSideDataType {
- 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,
-};
-
-typedef struct AVPacket {
- /**
- * 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.
- */
- int64_t pts;
- /**
- * 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.
- */
- int64_t dts;
- uint8_t *data;
- int size;
- int stream_index;
- /**
- * A combination of AV_PKT_FLAG values
- */
- int flags;
- /**
- * Additional packet data that can be provided by the container.
- * Packet can contain several types of side information.
- */
- struct {
- uint8_t *data;
- int size;
- enum AVPacketSideDataType type;
- } *side_data;
- int side_data_elems;
-
- /**
- * Duration of this packet in AVStream->time_base units, 0 if unknown.
- * Equals next_pts - this_pts in presentation order.
- */
- int duration;
- void (*destruct)(struct AVPacket *);
- void *priv;
- int64_t pos; ///< byte position in stream, -1 if unknown
-
- /**
- * 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 is not the display duration of the current packet.
- * 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.
- */
- int64_t convergence_duration;
-} AVPacket;
-#define AV_PKT_FLAG_KEY 0x0001 ///< The packet contains a keyframe
-#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
-
-enum AVSideDataParamChangeFlags {
- AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001,
- AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
- AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004,
- AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008,
-};
-/**
- * @}
- */
-
-/**
- * Audio Video Frame.
- * New fields can be added to the end of AVFRAME with minor version
- * bumps. Removal, reordering and changes to existing fields require
- * a major version bump.
- * sizeof(AVFrame) must not be used outside libav*.
- */
-typedef struct AVFrame {
-#define AV_NUM_DATA_POINTERS 8
- /**
- * 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()
- */
- uint8_t *data[AV_NUM_DATA_POINTERS];
-
- /**
- * 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()
- */
- int linesize[AV_NUM_DATA_POINTERS];
-
- /**
- * 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()
- */
- uint8_t **extended_data;
-
- /**
- * width and height of the video frame
- * - encoding: unused
- * - decoding: Read by user.
- */
- int width, height;
-
- /**
- * number of audio samples (per channel) described by this frame
- * - encoding: Set by user
- * - decoding: Set by libavcodec
- */
- int nb_samples;
-
- /**
- * 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.
- */
- int format;
-
- /**
- * 1 -> keyframe, 0-> not
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- */
- int key_frame;
-
- /**
- * 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.
- */
- enum AVPictureType pict_type;
-
- /**
- * 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:
- */
- uint8_t *base[AV_NUM_DATA_POINTERS];
-
- /**
- * sample aspect ratio for the video frame, 0/1 if unknown/unspecified
- * - encoding: unused
- * - decoding: Read by user.
- */
- AVRational sample_aspect_ratio;
-
- /**
- * 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.
- */
- int64_t pts;
-
- /**
- * reordered pts from the last AVPacket that has been input into the decoder
- * - encoding: unused
- * - decoding: Read by user.
- */
- int64_t pkt_pts;
-
- /**
- * dts from the last AVPacket that has been input into the decoder
- * - encoding: unused
- * - decoding: Read by user.
- */
- int64_t pkt_dts;
-
- /**
- * picture number in bitstream order
- * - encoding: set by
- * - decoding: Set by libavcodec.
- */
- int coded_picture_number;
- /**
- * picture number in display order
- * - encoding: set by
- * - decoding: Set by libavcodec.
- */
- int display_picture_number;
-
- /**
- * 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.
- */
- int quality;
-
- /**
- * 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)).
- */
- int reference;
-
- /**
- * QP table
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- int8_t *qscale_table;
- /**
- * QP store stride
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- int qstride;
-
- /**
- *
- */
- int qscale_type;
-
- /**
- * mbskip_table[mb]>=1 if MB didn't change
- * stride= mb_width = (width+15)>>4
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- uint8_t *mbskip_table;
-
- /**
- * 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];
-
- /**
- * macroblock type table
- * mb_type_base + mb_width + 2
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- uint32_t *mb_type;
-
- /**
- * DCT coefficients
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- short *dct_coeff;
-
- /**
- * motion reference frame index
- * the order in which these are stored can depend on the codec.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int8_t *ref_index[2];
-
- /**
- * for some private data of the user
- * - encoding: unused
- * - decoding: Set by user.
- */
- void *opaque;
-
- /**
- * error
- * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.
- * - decoding: unused
- */
- uint64_t error[AV_NUM_DATA_POINTERS];
-
- /**
- * 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.
- */
- int type;
-
- /**
- * When decoding, this signals how much the picture must be delayed.
- * extra_delay = repeat_pict / (2*fps)
- * - encoding: unused
- * - decoding: Set by libavcodec.
- */
- int repeat_pict;
-
- /**
- * The content of the picture is interlaced.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec. (default 0)
- */
- int interlaced_frame;
-
- /**
- * If the content is interlaced, is top field displayed first.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int top_field_first;
-
- /**
- * Tell user application that palette has changed from previous frame.
- * - encoding: ??? (no palette-enabled encoder yet)
- * - decoding: Set by libavcodec. (default 0).
- */
- int palette_has_changed;
-
- /**
- * codec suggestion on buffer type if != 0
- * - encoding: unused
- * - decoding: Set by libavcodec. (before get_buffer() call)).
- */
- int buffer_hints;
-
- /**
- * Pan scan.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- AVPanScan *pan_scan;
-
- /**
- * reordered opaque 64bit (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
- * - encoding: unused
- * - decoding: Read by user.
- */
- int64_t reordered_opaque;
-
- /**
- * hardware accelerator private data (Libav-allocated)
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- void *hwaccel_picture_private;
-
- /**
- * the AVCodecContext which ff_thread_get_buffer() was last called on
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- */
- struct AVCodecContext *owner;
-
- /**
- * used by multithreading to store frame-specific info
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- */
- void *thread_opaque;
-
- /**
- * 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.
- */
- uint8_t motion_subsample_log2;
-
- /**
- * Sample rate of the audio data.
- *
- * - encoding: unused
- * - decoding: set by get_buffer()
- */
- int sample_rate;
-
- /**
- * Channel layout of the audio data.
- *
- * - encoding: unused
- * - decoding: set by get_buffer()
- */
- uint64_t channel_layout;
-} AVFrame;
-
-struct AVCodecInternal;
-
-enum AVFieldOrder {
- 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.
- * sizeof(AVCodecContext) must not be used outside libav*.
- */
-typedef struct AVCodecContext {
- /**
- * information on struct for av_log
- * - set by avcodec_alloc_context3
- */
- const AVClass *av_class;
- int log_level_offset;
-
- enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
- const struct AVCodec *codec;
- char codec_name[32];
- enum AVCodecID codec_id; /* 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.
- */
- unsigned int codec_tag;
-
- /**
- * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
- * This is used to work around some encoder bugs.
- * - encoding: unused
- * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
- */
- unsigned int stream_codec_tag;
-
-#if FF_API_SUB_ID
- /**
- * @deprecated this field is unused
- */
- attribute_deprecated int sub_id;
-#endif
-
- void *priv_data;
-
- /**
- * Private context used for internal data.
- *
- * Unlike priv_data, this is not codec-specific. It is used in general
- * libavcodec functions.
- */
- struct AVCodecInternal *internal;
-
- /**
- * Private data of the user, can be used to carry app specific stuff.
- * - encoding: Set by user.
- * - decoding: Set by user.
- */
- void *opaque;
-
- /**
- * the average bitrate
- * - encoding: Set by user; unused for constant quantizer encoding.
- * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
- */
- int bit_rate;
-
- /**
- * 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
- */
- int bit_rate_tolerance;
-
- /**
- * 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
- */
- int global_quality;
-
- /**
- * - encoding: Set by user.
- * - decoding: unused
- */
- int compression_level;
-#define FF_COMPRESSION_DEFAULT -1
-
- /**
- * CODEC_FLAG_*.
- * - encoding: Set by user.
- * - decoding: Set by user.
- */
- int flags;
-
- /**
- * CODEC_FLAG2_*
- * - encoding: Set by user.
- * - decoding: Set by user.
- */
- int flags2;
-
- /**
- * some codecs need / can use extradata like Huffman tables.
- * mjpeg: Huffman tables
- * rv10: additional flags
- * mpeg4: global headers (they can be in the bitstream or here)
- * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
- * than extradata_size to avoid prolems 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.
- */
- uint8_t *extradata;
- int extradata_size;
-
- /**
- * 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.
- * - encoding: MUST be set by user.
- * - decoding: Set by libavcodec.
- */
- AVRational time_base;
-
- /**
- * 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.
- */
- int ticks_per_frame;
-
- /**
- * Encoder delay.
- *
- * Video:
- * Number of frames the decoded output will be delayed relative to the
- * encoded input.
- *
- * Audio:
- * For encoding, this is the number of "priming" samples added to the
- * beginning of the stream. The decoded output will be delayed by this
- * many samples relative to the input to the encoder. Note that this
- * field is purely informational and does not directly affect the pts
- * output by the encoder, which should always be based on the actual
- * presentation time, including any delay.
- * 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.
- */
- int delay;
-
-
- /* video only */
- /**
- * picture width / height.
- * - encoding: MUST be set by user.
- * - decoding: Set by libavcodec.
- * Note: For compatibility it is possible to set this instead of
- * coded_width/height before decoding.
- */
- int width, height;
-
- /**
- * Bitstream width / height, may be different from width/height.
- * - encoding: unused
- * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
- */
- int coded_width, coded_height;
-
-#define FF_ASPECT_EXTENDED 15
-
- /**
- * the number of pictures in a group of pictures, or 0 for intra_only
- * - encoding: Set by user.
- * - decoding: unused
- */
- int gop_size;
-
- /**
- * Pixel format, see AV_PIX_FMT_xxx.
- * May be set by the demuxer if known from headers.
- * May be overriden by the decoder if it knows better.
- * - encoding: Set by user.
- * - decoding: Set by user if known, overridden by libavcodec if known
- */
- enum AVPixelFormat pix_fmt;
-
- /**
- * Motion estimation algorithm used for video coding.
- * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
- * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
- * - encoding: MUST be set by user.
- * - decoding: unused
- */
- int me_method;
-
- /**
- * 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.
- * When multithreading is used, it may be called from multiple threads
- * at the same time; threads might draw different parts of the same AVFrame,
- * or multiple AVFrames, and there is no guarantee that slices will be drawn
- * in order.
- * 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
- */
- void (*draw_horiz_band)(struct AVCodecContext *s,
- const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],
- int y, int type, int height);
-
- /**
- * 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.
- * @return the chosen format
- * - encoding: unused
- * - decoding: Set by user, if not set the native format will be chosen.
- */
- enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
-
- /**
- * 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
- */
- int max_b_frames;
-
- /**
- * 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
- */
- float b_quant_factor;
-
- /** obsolete FIXME remove */
- int rc_strategy;
-#define FF_RC_STRATEGY_XVID 1
-
- int b_frame_strategy;
-
-#if FF_API_MPV_GLOBAL_OPTS
- /**
- * luma single coefficient elimination threshold
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated int luma_elim_threshold;
-
- /**
- * chroma single coeff elimination threshold
- * - encoding: Set by user.
- * - decoding: unused
- */
- attribute_deprecated int chroma_elim_threshold;
-#endif
-
- /**
- * qscale offset between IP and B-frames
- * - encoding: Set by user.
- * - decoding: unused
- */
- float b_quant_offset;
-
- /**
- * 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.
- */
- int has_b_frames;
-
- /**
- * 0-> h263 quant 1-> mpeg quant
- * - encoding: Set by user.
- * - decoding: unused
- */
- int mpeg_quant;
-
- /**
- * 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
- */
- float i_quant_factor;
-
- /**
- * qscale offset between P and I-frames
- * - encoding: Set by user.
- * - decoding: unused
- */
- float i_quant_offset;
-
- /**
- * luminance masking (0-> disabled)
- * - encoding: Set by user.
- * - decoding: unused
- */
- float lumi_masking;
-
- /**
- * temporary complexity masking (0-> disabled)
- * - encoding: Set by user.
- * - decoding: unused
- */
- float temporal_cplx_masking;
-
- /**
- * spatial complexity masking (0-> disabled)
- * - encoding: Set by user.
- * - decoding: unused
- */
- float spatial_cplx_masking;
-
- /**
- * p block masking (0-> disabled)
- * - encoding: Set by user.
- * - decoding: unused
- */
- float p_masking;
-
- /**
- * darkness masking (0-> disabled)
- * - encoding: Set by user.
- * - decoding: unused
- */
- float dark_masking;
-
- /**
- * slice count
- * - encoding: Set by libavcodec.
- * - decoding: Set by user (or 0).
- */
- int slice_count;
- /**
- * prediction method (needed for huffyuv)
- * - encoding: Set by user.
- * - decoding: unused
- */
- int prediction_method;
-#define FF_PRED_LEFT 0
-#define FF_PRED_PLANE 1
-#define FF_PRED_MEDIAN 2
-
- /**
- * slice offsets in the frame in bytes
- * - encoding: Set/allocated by libavcodec.
- * - decoding: Set/allocated by user (or NULL).
- */
- int *slice_offset;
-
- /**
- * 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.
- */
- AVRational sample_aspect_ratio;
-
- /**
- * motion estimation comparison function
- * - encoding: Set by user.
- * - decoding: unused
- */
- int me_cmp;
- /**
- * subpixel motion estimation comparison function
- * - encoding: Set by user.
- * - decoding: unused
- */
- int me_sub_cmp;
- /**
- * macroblock comparison function (not supported yet)
- * - encoding: Set by user.
- * - decoding: unused
- */
- int mb_cmp;
- /**
- * interlaced DCT comparison function
- * - encoding: Set by user.
- * - decoding: unused
- */
- int ildct_cmp;
-#define FF_CMP_SAD 0
-#define FF_CMP_SSE 1
-#define FF_CMP_SATD 2
-#define FF_CMP_DCT 3
-#define FF_CMP_PSNR 4
-#define FF_CMP_BIT 5
-#define FF_CMP_RD 6
-#define FF_CMP_ZERO 7
-#define FF_CMP_VSAD 8
-#define FF_CMP_VSSE 9
-#define FF_CMP_NSSE 10
-#define FF_CMP_W53 11
-#define FF_CMP_W97 12
-#define FF_CMP_DCTMAX 13
-#define FF_CMP_DCT264 14
-#define FF_CMP_CHROMA 256
-
- /**
- * ME diamond size & shape
- * - encoding: Set by user.
- * - decoding: unused
- */
- int dia_size;
-
- /**
- * amount of previous MV predictors (2a+1 x 2a+1 square)
- * - encoding: Set by user.
- * - decoding: unused
- */
- int last_predictor_count;
-
- /**
- * prepass for motion estimation
- * - encoding: Set by user.
- * - decoding: unused
- */
- int pre_me;
-
- /**
- * motion estimation prepass comparison function
- * - encoding: Set by user.
- * - decoding: unused
- */
- int me_pre_cmp;
-
- /**
- * ME prepass diamond size & shape
- * - encoding: Set by user.
- * - decoding: unused
- */
- int pre_dia_size;
-
- /**
- * subpel ME quality
- * - encoding: Set by user.
- * - decoding: unused
- */
- int me_subpel_quality;
-
- /**
- * 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.
- */
- int dtg_active_format;
-#define FF_DTG_AFD_SAME 8
-#define FF_DTG_AFD_4_3 9
-#define FF_DTG_AFD_16_9 10
-#define FF_DTG_AFD_14_9 11
-#define FF_DTG_AFD_4_3_SP_14_9 13
-#define FF_DTG_AFD_16_9_SP_14_9 14
-#define FF_DTG_AFD_SP_4_3 15
-
- /**
- * maximum motion estimation search range in subpel units
- * If 0 then no limit.
- *
- * - encoding: Set by user.
- * - decoding: unused
- */
- int me_range;
-
- /**
- * intra quantizer bias
- * - encoding: Set by user.
- * - decoding: unused
- */
- int intra_quant_bias;
-#define FF_DEFAULT_QUANT_BIAS 999999
-
- /**
- * inter quantizer bias
- * - encoding: Set by user.
- * - decoding: unused
- */
- int inter_quant_bias;
-
-#if FF_API_COLOR_TABLE_ID
- /**
- * color table ID
- * - encoding: unused
- * - decoding: Which clrtable should be used for 8bit RGB images.
- * Tables have to be stored somewhere. FIXME
- */
- attribute_deprecated int color_table_id;
-#endif
-
- /**
- * slice flags
- * - encoding: unused
- * - decoding: Set by user.
- */
- int slice_flags;
-#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
-#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
-#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
-
- /**
- * XVideo Motion Acceleration
- * - encoding: forbidden
- * - decoding: set by decoder
- */
- int xvmc_acceleration;
-
- /**
- * macroblock decision mode
- * - encoding: Set by user.
- * - decoding: unused
- */
- int mb_decision;
-#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
-#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
-#define FF_MB_DECISION_RD 2 ///< rate distortion
-
- /**
- * custom intra quantization matrix
- * - encoding: Set by user, can be NULL.
- * - decoding: Set by libavcodec.
- */
- uint16_t *intra_matrix;
-
- /**
- * custom inter quantization matrix
- * - encoding: Set by user, can be NULL.
- * - decoding: Set by libavcodec.
- */
- uint16_t *inter_matrix;
-
- /**
- * scene change detection threshold
- * 0 is default, larger means fewer detected scene changes.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int scenechange_threshold;
-
- /**
- * noise reduction strength
- * - encoding: Set by user.
- * - decoding: unused
- */
- int noise_reduction;
-
-#if FF_API_INTER_THRESHOLD
- /**
- * @deprecated this field is unused
- */
- attribute_deprecated int inter_threshold;
-#endif
-
-#if FF_API_MPV_GLOBAL_OPTS
- /**
- * @deprecated use mpegvideo private options instead
- */
- attribute_deprecated int quantizer_noise_shaping;
-#endif
-
- /**
- * Motion estimation threshold below which no motion estimation is
- * performed, but instead the user specified motion vectors are used.
- *
- * - encoding: Set by user.
- * - decoding: unused
- */
- int me_threshold;
-
- /**
- * Macroblock threshold below which the user specified macroblock types will be used.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int mb_threshold;
-
- /**
- * precision of the intra DC coefficient - 8
- * - encoding: Set by user.
- * - decoding: unused
- */
- int intra_dc_precision;
-
- /**
- * Number of macroblock rows at the top which are skipped.
- * - encoding: unused
- * - decoding: Set by user.
- */
- int skip_top;
-
- /**
- * Number of macroblock rows at the bottom which are skipped.
- * - encoding: unused
- * - decoding: Set by user.
- */
- int skip_bottom;
-
- /**
- * Border processing masking, raises the quantizer for mbs on the borders
- * of the picture.
- * - encoding: Set by user.
- * - decoding: unused
- */
- float border_masking;
-
- /**
- * minimum MB lagrange multipler
- * - encoding: Set by user.
- * - decoding: unused
- */
- int mb_lmin;
-
- /**
- * maximum MB lagrange multipler
- * - encoding: Set by user.
- * - decoding: unused
- */
- int mb_lmax;
-
- /**
- *
- * - encoding: Set by user.
- * - decoding: unused
- */
- int me_penalty_compensation;
-
- /**
- *
- * - encoding: Set by user.
- * - decoding: unused
- */
- int bidir_refine;
-
- /**
- *
- * - encoding: Set by user.
- * - decoding: unused
- */
- int brd_scale;
-
- /**
- * minimum GOP size
- * - encoding: Set by user.
- * - decoding: unused
- */
- int keyint_min;
-
- /**
- * number of reference frames
- * - encoding: Set by user.
- * - decoding: Set by lavc.
- */
- int refs;
-
- /**
- * chroma qp offset from luma
- * - encoding: Set by user.
- * - decoding: unused
- */
- int chromaoffset;
-
- /**
- * Multiplied by qscale for each frame and added to scene_change_score.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int scenechange_factor;
-
- /**
- *
- * Note: Value depends upon the compare function used for fullpel ME.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int mv0_threshold;
-
- /**
- * Adjust sensitivity of b_frame_strategy 1.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int b_sensitivity;
-
- /**
- * Chromaticity coordinates of the source primaries.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
- */
- enum AVColorPrimaries color_primaries;
-
- /**
- * Color Transfer Characteristic.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
- */
- enum AVColorTransferCharacteristic color_trc;
-
- /**
- * YUV colorspace type.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
- */
- enum AVColorSpace colorspace;
-
- /**
- * MPEG vs JPEG YUV range.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
- */
- enum AVColorRange color_range;
-
- /**
- * This defines the location of chroma samples.
- * - encoding: Set by user
- * - decoding: Set by libavcodec
- */
- enum AVChromaLocation chroma_sample_location;
-
- /**
- * Number of slices.
- * Indicates number of picture subdivisions. Used for parallelized
- * decoding.
- * - encoding: Set by user
- * - decoding: unused
- */
- int slices;
-
- /** Field order
- * - encoding: set by libavcodec
- * - decoding: Set by libavcodec
- */
- enum AVFieldOrder field_order;
-
- /* audio only */
- int sample_rate; ///< samples per second
- int channels; ///< number of audio channels
-
- /**
- * audio sample format
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- enum AVSampleFormat sample_fmt; ///< sample format
-
- /* The following data should not be initialized. */
- /**
- * Samples per packet, initialized when calling 'init'.
- */
- int frame_size;
-
- /**
- * 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.
- */
- int frame_number;
-
- /**
- * number of bytes per packet if constant and known or 0
- * Used by some WAV based audio codecs.
- */
- int block_align;
-
- /**
- * Audio cutoff bandwidth (0 means "automatic")
- * - encoding: Set by user.
- * - decoding: unused
- */
- int cutoff;
-
-#if 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.
- */
- int request_channels;
-#endif
-
- /**
- * Audio channel layout.
- * - encoding: set by user.
- * - decoding: set by libavcodec.
- */
- uint64_t channel_layout;
-
- /**
- * Request decoder to use this channel layout if it can (0 for default)
- * - encoding: unused
- * - decoding: Set by user.
- */
- uint64_t request_channel_layout;
-
- /**
- * Type of service that the audio stream conveys.
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- enum AVAudioServiceType audio_service_type;
-
- /**
- * Used to request a sample format from the decoder.
- * - encoding: unused.
- * - decoding: Set by user.
- */
- enum AVSampleFormat request_sample_fmt;
-
- /**
- * 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.
- *
- * 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.
- */
- int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
-
- /**
- * 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.
- * May be called from a different thread if frame multithreading is used,
- * but not by more than one thread at once, so does not need to be reentrant.
- * - encoding: unused
- * - decoding: Set by libavcodec, user can override.
- */
- void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
-
- /**
- * 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.
- */
- int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
-
-
- /* - encoding parameters */
- float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
- float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
-
- /**
- * minimum quantizer
- * - encoding: Set by user.
- * - decoding: unused
- */
- int qmin;
-
- /**
- * maximum quantizer
- * - encoding: Set by user.
- * - decoding: unused
- */
- int qmax;
-
- /**
- * maximum quantizer difference between frames
- * - encoding: Set by user.
- * - decoding: unused
- */
- int max_qdiff;
-
- /**
- * ratecontrol qmin qmax limiting method
- * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
- * - encoding: Set by user.
- * - decoding: unused
- */
- float rc_qsquish;
-
- float rc_qmod_amp;
- int rc_qmod_freq;
-
- /**
- * decoder bitstream buffer size
- * - encoding: Set by user.
- * - decoding: unused
- */
- int rc_buffer_size;
-
- /**
- * ratecontrol override, see RcOverride
- * - encoding: Allocated/set/freed by user.
- * - decoding: unused
- */
- int rc_override_count;
- RcOverride *rc_override;
-
- /**
- * rate control equation
- * - encoding: Set by user
- * - decoding: unused
- */
- const char *rc_eq;
-
- /**
- * maximum bitrate
- * - encoding: Set by user.
- * - decoding: unused
- */
- int rc_max_rate;
-
- /**
- * minimum bitrate
- * - encoding: Set by user.
- * - decoding: unused
- */
- int rc_min_rate;
-
- float rc_buffer_aggressivity;
-
- /**
- * initial complexity for pass1 ratecontrol
- * - encoding: Set by user.
- * - decoding: unused
- */
- float rc_initial_cplx;
-
- /**
- * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
- * - encoding: Set by user.
- * - decoding: unused.
- */
- float rc_max_available_vbv_use;
-
- /**
- * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
- * - encoding: Set by user.
- * - decoding: unused.
- */
- float rc_min_vbv_overflow_use;
-
- /**
- * Number of bits which should be loaded into the rc buffer before decoding starts.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int rc_initial_buffer_occupancy;
-
-#define FF_CODER_TYPE_VLC 0
-#define FF_CODER_TYPE_AC 1
-#define FF_CODER_TYPE_RAW 2
-#define FF_CODER_TYPE_RLE 3
-#define FF_CODER_TYPE_DEFLATE 4
- /**
- * coder type
- * - encoding: Set by user.
- * - decoding: unused
- */
- int coder_type;
-
- /**
- * context model
- * - encoding: Set by user.
- * - decoding: unused
- */
- int context_model;
-
- /**
- * minimum Lagrange multipler
- * - encoding: Set by user.
- * - decoding: unused
- */
- int lmin;
-
- /**
- * maximum Lagrange multipler
- * - encoding: Set by user.
- * - decoding: unused
- */
- int lmax;
-
- /**
- * frame skip threshold
- * - encoding: Set by user.
- * - decoding: unused
- */
- int frame_skip_threshold;
-
- /**
- * frame skip factor
- * - encoding: Set by user.
- * - decoding: unused
- */
- int frame_skip_factor;
-
- /**
- * frame skip exponent
- * - encoding: Set by user.
- * - decoding: unused
- */
- int frame_skip_exp;
-
- /**
- * frame skip comparison function
- * - encoding: Set by user.
- * - decoding: unused
- */
- int frame_skip_cmp;
-
- /**
- * trellis RD quantization
- * - encoding: Set by user.
- * - decoding: unused
- */
- int trellis;
-
- /**
- * - encoding: Set by user.
- * - decoding: unused
- */
- int min_prediction_order;
-
- /**
- * - encoding: Set by user.
- * - decoding: unused
- */
- int max_prediction_order;
-
- /**
- * GOP timecode frame start number, in non drop frame format
- * - encoding: Set by user.
- * - decoding: unused
- */
- int64_t timecode_frame_start;
-
- /* The RTP callback: This function is called */
- /* every time the encoder has a packet to send. */
- /* It 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. */
- void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
-
- int rtp_payload_size; /* The size of the RTP payload: the coder will */
- /* do its 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 transmitted RTP payload. */
-
- /* statistics, used for 2-pass encoding */
- int mv_bits;
- int header_bits;
- int i_tex_bits;
- int p_tex_bits;
- int i_count;
- int p_count;
- int skip_count;
- int misc_bits;
-
- /**
- * number of bits used for the previously encoded frame
- * - encoding: Set by libavcodec.
- * - decoding: unused
- */
- int frame_bits;
-
- /**
- * pass1 encoding statistics output buffer
- * - encoding: Set by libavcodec.
- * - decoding: unused
- */
- char *stats_out;
-
- /**
- * pass2 encoding statistics input buffer
- * Concatenated stuff from stats_out of pass1 should be placed here.
- * - encoding: Allocated/set/freed by user.
- * - decoding: unused
- */
- char *stats_in;
-
- /**
- * Work around bugs in encoders which sometimes cannot be detected automatically.
- * - encoding: Set by user
- * - decoding: Set by user
- */
- int workaround_bugs;
-#define FF_BUG_AUTODETECT 1 ///< autodetection
-#define FF_BUG_OLD_MSMPEG4 2
-#define FF_BUG_XVID_ILACE 4
-#define FF_BUG_UMP4 8
-#define FF_BUG_NO_PADDING 16
-#define FF_BUG_AMV 32
-#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default.
-#define FF_BUG_QPEL_CHROMA 64
-#define FF_BUG_STD_QPEL 128
-#define FF_BUG_QPEL_CHROMA2 256
-#define FF_BUG_DIRECT_BLOCKSIZE 512
-#define FF_BUG_EDGE 1024
-#define FF_BUG_HPEL_CHROMA 2048
-#define FF_BUG_DC_CLIP 4096
-#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders.
-#define FF_BUG_TRUNCATED 16384
-
- /**
- * strictly follow the standard (MPEG4, ...).
- * - 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)
- */
- int strict_std_compliance;
-#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to an older more strict version of the spec or reference software.
-#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences.
-#define FF_COMPLIANCE_NORMAL 0
-#define FF_COMPLIANCE_UNOFFICIAL -1 ///< Allow unofficial extensions
-#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
-
- /**
- * error concealment flags
- * - encoding: unused
- * - decoding: Set by user.
- */
- int error_concealment;
-#define FF_EC_GUESS_MVS 1
-#define FF_EC_DEBLOCK 2
-
- /**
- * debug
- * - encoding: Set by user.
- * - decoding: Set by user.
- */
- int debug;
-#define FF_DEBUG_PICT_INFO 1
-#define FF_DEBUG_RC 2
-#define FF_DEBUG_BITSTREAM 4
-#define FF_DEBUG_MB_TYPE 8
-#define FF_DEBUG_QP 16
-#define FF_DEBUG_MV 32
-#define FF_DEBUG_DCT_COEFF 0x00000040
-#define FF_DEBUG_SKIP 0x00000080
-#define FF_DEBUG_STARTCODE 0x00000100
-#define FF_DEBUG_PTS 0x00000200
-#define FF_DEBUG_ER 0x00000400
-#define FF_DEBUG_MMCO 0x00000800
-#define FF_DEBUG_BUGS 0x00001000
-#define FF_DEBUG_VIS_QP 0x00002000
-#define FF_DEBUG_VIS_MB_TYPE 0x00004000
-#define FF_DEBUG_BUFFERS 0x00008000
-#define FF_DEBUG_THREADS 0x00010000
-
- /**
- * debug
- * - encoding: Set by user.
- * - decoding: Set by user.
- */
- int debug_mv;
-#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
-#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
-#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
-
- /**
- * Error recognition; may misdetect some more or less valid parts as errors.
- * - encoding: unused
- * - decoding: Set by user.
- */
- int err_recognition;
-#define AV_EF_CRCCHECK (1<<0)
-#define AV_EF_BITSTREAM (1<<1)
-#define AV_EF_BUFFER (1<<2)
-#define AV_EF_EXPLODE (1<<3)
-
- /**
- * opaque 64bit number (generally a PTS) that will be reordered and
- * output in AVFrame.reordered_opaque
- * @deprecated in favor of pkt_pts
- * - encoding: unused
- * - decoding: Set by user.
- */
- int64_t reordered_opaque;
-
- /**
- * Hardware accelerator in use
- * - encoding: unused.
- * - decoding: Set by libavcodec
- */
- struct AVHWAccel *hwaccel;
-
- /**
- * 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 Libav cannot instantiate itself. Please refer to the
- * Libav 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
- */
- void *hwaccel_context;
-
- /**
- * error
- * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
- * - decoding: unused
- */
- uint64_t error[AV_NUM_DATA_POINTERS];
-
- /**
- * DCT algorithm, see FF_DCT_* below
- * - encoding: Set by user.
- * - decoding: unused
- */
- int dct_algo;
-#define FF_DCT_AUTO 0
-#define FF_DCT_FASTINT 1
-#define FF_DCT_INT 2
-#define FF_DCT_MMX 3
-#define FF_DCT_ALTIVEC 5
-#define FF_DCT_FAAN 6
-
- /**
- * IDCT algorithm, see FF_IDCT_* below.
- * - encoding: Set by user.
- * - decoding: Set by user.
- */
- int idct_algo;
-#define FF_IDCT_AUTO 0
-#define FF_IDCT_INT 1
-#define FF_IDCT_SIMPLE 2
-#define FF_IDCT_SIMPLEMMX 3
-#if FF_API_LIBMPEG2
-#define FF_IDCT_LIBMPEG2MMX 4
-#endif
-#if FF_API_MMI
-#define FF_IDCT_MMI 5
-#endif
-#define FF_IDCT_ARM 7
-#define FF_IDCT_ALTIVEC 8
-#define FF_IDCT_SH4 9
-#define FF_IDCT_SIMPLEARM 10
-#define FF_IDCT_H264 11
-#define FF_IDCT_VP3 12
-#define FF_IDCT_IPP 13
-#define FF_IDCT_XVIDMMX 14
-#define FF_IDCT_CAVS 15
-#define FF_IDCT_SIMPLEARMV5TE 16
-#define FF_IDCT_SIMPLEARMV6 17
-#define FF_IDCT_SIMPLEVIS 18
-#define FF_IDCT_WMV2 19
-#define FF_IDCT_FAAN 20
-#define FF_IDCT_EA 21
-#define FF_IDCT_SIMPLENEON 22
-#define FF_IDCT_SIMPLEALPHA 23
-#define FF_IDCT_BINK 24
-
-#if FF_API_DSP_MASK
- /**
- * Unused.
- * @deprecated use av_set_cpu_flags_mask() instead.
- */
- attribute_deprecated unsigned dsp_mask;
-#endif
-
- /**
- * bits per sample/pixel from the demuxer (needed for huffyuv).
- * - encoding: Set by libavcodec.
- * - decoding: Set by user.
- */
- int bits_per_coded_sample;
-
- /**
- * Bits per sample/pixel of internal libavcodec pixel/sample format.
- * - encoding: set by user.
- * - decoding: set by libavcodec.
- */
- int bits_per_raw_sample;
-
- /**
- * low resolution decoding, 1-> 1/2 size, 2->1/4 size
- * - encoding: unused
- * - decoding: Set by user.
- */
- attribute_deprecated int lowres;
-
- /**
- * the picture in the bitstream
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- */
- AVFrame *coded_frame;
-
- /**
- * thread count
- * is used to decide how many independent tasks should be passed to execute()
- * - encoding: Set by user.
- * - decoding: Set by user.
- */
- int thread_count;
-
- /**
- * 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.
- */
- int thread_type;
-#define FF_THREAD_FRAME 1 ///< Decode more than one frame at once
-#define FF_THREAD_SLICE 2 ///< Decode more than one part of a single frame at once
-
- /**
- * Which multithreading methods are in use by the codec.
- * - encoding: Set by libavcodec.
- * - decoding: Set by libavcodec.
- */
- int active_thread_type;
-
- /**
- * Set by the client if its custom get_buffer() callback can be called
- * synchronously 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.
- */
- int thread_safe_callbacks;
-
- /**
- * 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.
- */
- int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
-
- /**
- * 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.
- */
- int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
-
- /**
- * thread opaque
- * Can be used by execute() to store some per AVCodecContext stuff.
- * - encoding: set by execute()
- * - decoding: set by execute()
- */
- void *thread_opaque;
-
- /**
- * noise vs. sse weight for the nsse comparsion function
- * - encoding: Set by user.
- * - decoding: unused
- */
- int nsse_weight;
-
- /**
- * profile
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int profile;
-#define FF_PROFILE_UNKNOWN -99
-#define FF_PROFILE_RESERVED -100
-
-#define FF_PROFILE_AAC_MAIN 0
-#define FF_PROFILE_AAC_LOW 1
-#define FF_PROFILE_AAC_SSR 2
-#define FF_PROFILE_AAC_LTP 3
-#define FF_PROFILE_AAC_HE 4
-#define FF_PROFILE_AAC_HE_V2 28
-#define FF_PROFILE_AAC_LD 22
-#define FF_PROFILE_AAC_ELD 38
-
-#define FF_PROFILE_DTS 20
-#define FF_PROFILE_DTS_ES 30
-#define FF_PROFILE_DTS_96_24 40
-#define FF_PROFILE_DTS_HD_HRA 50
-#define FF_PROFILE_DTS_HD_MA 60
-
-#define FF_PROFILE_MPEG2_422 0
-#define FF_PROFILE_MPEG2_HIGH 1
-#define FF_PROFILE_MPEG2_SS 2
-#define FF_PROFILE_MPEG2_SNR_SCALABLE 3
-#define FF_PROFILE_MPEG2_MAIN 4
-#define FF_PROFILE_MPEG2_SIMPLE 5
-
-#define FF_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag
-#define FF_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag
-
-#define FF_PROFILE_H264_BASELINE 66
-#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
-#define FF_PROFILE_H264_MAIN 77
-#define FF_PROFILE_H264_EXTENDED 88
-#define FF_PROFILE_H264_HIGH 100
-#define FF_PROFILE_H264_HIGH_10 110
-#define FF_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA)
-#define FF_PROFILE_H264_HIGH_422 122
-#define FF_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA)
-#define FF_PROFILE_H264_HIGH_444 144
-#define FF_PROFILE_H264_HIGH_444_PREDICTIVE 244
-#define FF_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA)
-#define FF_PROFILE_H264_CAVLC_444 44
-
-#define FF_PROFILE_VC1_SIMPLE 0
-#define FF_PROFILE_VC1_MAIN 1
-#define FF_PROFILE_VC1_COMPLEX 2
-#define FF_PROFILE_VC1_ADVANCED 3
-
-#define FF_PROFILE_MPEG4_SIMPLE 0
-#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE 1
-#define FF_PROFILE_MPEG4_CORE 2
-#define FF_PROFILE_MPEG4_MAIN 3
-#define FF_PROFILE_MPEG4_N_BIT 4
-#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE 5
-#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6
-#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7
-#define FF_PROFILE_MPEG4_HYBRID 8
-#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME 9
-#define FF_PROFILE_MPEG4_CORE_SCALABLE 10
-#define FF_PROFILE_MPEG4_ADVANCED_CODING 11
-#define FF_PROFILE_MPEG4_ADVANCED_CORE 12
-#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
-#define FF_PROFILE_MPEG4_SIMPLE_STUDIO 14
-#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE 15
-
- /**
- * level
- * - encoding: Set by user.
- * - decoding: Set by libavcodec.
- */
- int level;
-#define FF_LEVEL_UNKNOWN -99
-
- /**
- *
- * - encoding: unused
- * - decoding: Set by user.
- */
- enum AVDiscard skip_loop_filter;
-
- /**
- *
- * - encoding: unused
- * - decoding: Set by user.
- */
- enum AVDiscard skip_idct;
-
- /**
- *
- * - encoding: unused
- * - decoding: Set by user.
- */
- enum AVDiscard skip_frame;
-
- /**
- * 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())
- */
- uint8_t *subtitle_header;
- int subtitle_header_size;
-
- /**
- * Simulates errors in the bitstream to test error concealment.
- * - encoding: Set by user.
- * - decoding: unused
- */
- int error_rate;
-
- /**
- * Current packet as passed into the decoder, to avoid having
- * to pass the packet into every function. Currently only valid
- * inside lavc and get/release_buffer callbacks.
- * - decoding: set by avcodec_decode_*, read by get_buffer() for setting pkt_pts
- * - encoding: unused
- */
- AVPacket *pkt;
-
- /**
- * 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.
- */
- uint64_t vbv_delay;
-} AVCodecContext;
-
-/**
- * AVProfile.
- */
-typedef struct AVProfile {
- int profile;
- const char *name; ///< short name for the profile
-} AVProfile;
-
-typedef struct AVCodecDefault AVCodecDefault;
-
-struct AVSubtitle;
-
-/**
- * AVCodec.
- */
-typedef struct AVCodec {
- /**
- * 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.
- */
- const char *name;
- /**
- * 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.
- */
- const char *long_name;
- enum AVMediaType type;
- enum AVCodecID id;
- /**
- * Codec capabilities.
- * see CODEC_CAP_*
- */
- int capabilities;
- const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
- const enum AVPixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
- const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
- const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
- const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
- attribute_deprecated uint8_t max_lowres; ///< maximum value for lowres supported by the decoder
- const AVClass *priv_class; ///< AVClass for the private context
- const AVProfile *profiles; ///< 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.
- *****************************************************************
- */
- int priv_data_size;
- struct AVCodec *next;
- /**
- * @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.
- */
- int (*init_thread_copy)(AVCodecContext *);
- /**
- * 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.
- */
- int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src);
- /** @} */
-
- /**
- * Private codec-specific defaults.
- */
- const AVCodecDefault *defaults;
-
- /**
- * Initialize codec static data, called from avcodec_register().
- */
- void (*init_static_data)(struct AVCodec *codec);
-
- int (*init)(AVCodecContext *);
- int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,
- const struct AVSubtitle *sub);
- /**
- * 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
- */
- int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,
- int *got_packet_ptr);
- int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
- int (*close)(AVCodecContext *);
- /**
- * Flush buffers.
- * Will be called when seeking
- */
- void (*flush)(AVCodecContext *);
-} AVCodec;
-
-/**
- * AVHWAccel.
- */
-typedef struct AVHWAccel {
- /**
- * 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).
- */
- const char *name;
-
- /**
- * Type of codec implemented by the hardware accelerator.
- *
- * See AVMEDIA_TYPE_xxx
- */
- enum AVMediaType type;
-
- /**
- * Codec implemented by the hardware accelerator.
- *
- * See AV_CODEC_ID_xxx
- */
- enum AVCodecID id;
-
- /**
- * Supported pixel format.
- *
- * Only hardware accelerated formats are supported here.
- */
- enum AVPixelFormat pix_fmt;
-
- /**
- * Hardware accelerated codec capabilities.
- * see FF_HWACCEL_CODEC_CAP_*
- */
- int capabilities;
-
- struct AVHWAccel *next;
-
- /**
- * 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.
- *
- * 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
- */
- int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
-
- /**
- * 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
- */
- int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
-
- /**
- * 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
- */
- int (*end_frame)(AVCodecContext *avctx);
-
- /**
- * Size of HW accelerator private data.
- *
- * Private data is allocated with av_mallocz() before
- * AVCodecContext.get_buffer() and deallocated after
- * AVCodecContext.release_buffer().
- */
- int priv_data_size;
-} AVHWAccel;
-
-/**
- * @defgroup lavc_picture AVPicture
- *
- * Functions for working with AVPicture
- * @{
- */
-
-/**
- * four components are given, that's all.
- * the last component is alpha
- */
-typedef struct AVPicture {
- uint8_t *data[AV_NUM_DATA_POINTERS];
- int linesize[AV_NUM_DATA_POINTERS]; ///< number of bytes per line
-} AVPicture;
-
-/**
- * @}
- */
-
-#define AVPALETTE_SIZE 1024
-#define AVPALETTE_COUNT 256
-
-enum AVSubtitleType {
- 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,
-};
-
-typedef struct AVSubtitleRect {
- int x; ///< top left corner of pict, undefined when pict is not set
- int y; ///< top left corner of pict, undefined when pict is not set
- int w; ///< width of pict, undefined when pict is not set
- int h; ///< height of pict, undefined when pict is not set
- int nb_colors; ///< number of colors in pict, undefined when pict is not set
-
- /**
- * data+linesize for the bitmap of this subtitle.
- * can be set for text/ass as well once they where rendered
- */
- AVPicture pict;
- enum AVSubtitleType type;
-
- char *text; ///< 0 terminated plain UTF-8 text
-
- /**
- * 0 terminated ASS/SSA compatible event line.
- * The pressentation of this is unaffected by the other values in this
- * struct.
- */
- char *ass;
-} AVSubtitleRect;
-
-typedef struct AVSubtitle {
- uint16_t format; /* 0 = graphics */
- uint32_t start_display_time; /* relative to packet pts, in ms */
- uint32_t end_display_time; /* relative to packet pts, in ms */
- unsigned num_rects;
- AVSubtitleRect **rects;
- int64_t pts; ///< Same as packet pts, in AV_TIME_BASE
-} AVSubtitle;
-
-/**
- * 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.
- */
-AVCodec *av_codec_next(const AVCodec *c);
-
-/**
- * Return the LIBAVCODEC_VERSION_INT constant.
- */
-unsigned avcodec_version(void);
-
-/**
- * Return the libavcodec build-time configuration.
- */
-const char *avcodec_configuration(void);
-
-/**
- * Return the libavcodec license.
- */
-const char *avcodec_license(void);
-
-/**
- * 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()
- */
-void avcodec_register(AVCodec *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 avcodec_register
- * @see av_register_codec_parser
- * @see av_register_bitstream_filter
- */
-void avcodec_register_all(void);
-
-/**
- * Allocate an AVCodecContext and set its fields to default values. The
- * resulting struct can be deallocated by calling avcodec_close() on it followed
- * by av_free().
- *
- * @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.
- * If NULL, then the codec-specific defaults won't be initialized,
- * which may result in suboptimal default settings (this is
- * important mainly for encoders, e.g. libx264).
- *
- * @return An AVCodecContext filled with default values or NULL on failure.
- * @see avcodec_get_context_defaults
- */
-AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
-
-/**
- * Set the fields of the given AVCodecContext to default values corresponding
- * to the given codec (defaults may be codec-dependent).
- *
- * Do not call this function if a non-NULL codec has been passed
- * to avcodec_alloc_context3() that allocated this AVCodecContext.
- * If codec is non-NULL, it is illegal to call avcodec_open2() with a
- * different codec on this AVCodecContext.
- */
-int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec);
-
-/**
- * Get the AVClass for AVCodecContext. It can be used in combination with
- * AV_OPT_SEARCH_FAKE_OBJ for examining options.
- *
- * @see av_opt_find().
- */
-const AVClass *avcodec_get_class(void);
-
-/**
- * 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
- */
-int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
-
-/**
- * Allocate an AVFrame and set its fields to default values. The resulting
- * struct must be freed using avcodec_free_frame().
- *
- * @return An AVFrame filled with default values or NULL on failure.
- * @see avcodec_get_frame_defaults
- */
-AVFrame *avcodec_alloc_frame(void);
-
-/**
- * Set the fields of the given AVFrame to default values.
- *
- * @param frame The AVFrame of which the fields should be set to default values.
- */
-void avcodec_get_frame_defaults(AVFrame *frame);
-
-/**
- * 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()).
- */
-void avcodec_free_frame(AVFrame **frame);
-
-/**
- * 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!
- *
- * @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
- * avcodec_get_context_defaults3() 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().
- */
-int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
-
-/**
- * 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() /
- * avcodec_get_context_defaults3() with a non-NULL codec. Subsequent calls will
- * do nothing.
- */
-int avcodec_close(AVCodecContext *avctx);
-
-/**
- * Free all allocated data in the given subtitle struct.
- *
- * @param sub AVSubtitle to free.
- */
-void avsubtitle_free(AVSubtitle *sub);
-
-/**
- * @}
- */
-
-/**
- * @addtogroup lavc_packet
- * @{
- */
-
-/**
- * Default packet destructor.
- */
-void av_destruct_packet(AVPacket *pkt);
-
-/**
- * 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
- */
-void av_init_packet(AVPacket *pkt);
-
-/**
- * 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
- */
-int av_new_packet(AVPacket *pkt, int size);
-
-/**
- * Reduce packet size, correctly zeroing padding
- *
- * @param pkt packet
- * @param size new size
- */
-void av_shrink_packet(AVPacket *pkt, int size);
-
-/**
- * Increase packet size, correctly zeroing padding
- *
- * @param pkt packet
- * @param grow_by number of bytes by which to increase the size of the packet
- */
-int av_grow_packet(AVPacket *pkt, int grow_by);
-
-/**
- * @warning This is a hack - the packet memory allocation stuff is broken. The
- * packet is allocated if it was not really allocated.
- */
-int av_dup_packet(AVPacket *pkt);
-
-/**
- * Free a packet.
- *
- * @param pkt packet to free
- */
-void av_free_packet(AVPacket *pkt);
-
-/**
- * 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
- */
-uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
- int size);
-
-/**
- * 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
- */
-int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
- int size);
-
-/**
- * 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
- */
-uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
- int *size);
-
-/**
- * @}
- */
-
-/**
- * @addtogroup lavc_decoding
- * @{
- */
-
-/**
- * Find a registered decoder with a matching codec ID.
- *
- * @param id AVCodecID of the requested decoder
- * @return A decoder if one was found, NULL otherwise.
- */
-AVCodec *avcodec_find_decoder(enum AVCodecID id);
-
-/**
- * Find a registered decoder with the specified name.
- *
- * @param name name of the requested decoder
- * @return A decoder if one was found, NULL otherwise.
- */
-AVCodec *avcodec_find_decoder_by_name(const char *name);
-
-int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
-void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
-int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
-
-/**
- * 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.
- */
-unsigned avcodec_get_edge_width(void);
-
-/**
- * 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 CODEC_CAP_DR1 has been opened.
- * If CODEC_FLAG_EMU_EDGE is not set, the dimensions must have been increased
- * according to avcodec_get_edge_width() before.
- */
-void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
-
-/**
- * Modify 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 CODEC_CAP_DR1 has been opened.
- * If CODEC_FLAG_EMU_EDGE is not set, the dimensions must have been increased
- * according to avcodec_get_edge_width() before.
- */
-void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
- int linesize_align[AV_NUM_DATA_POINTERS]);
-
-#if 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.
- */
-attribute_deprecated int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples,
- int *frame_size_ptr,
- AVPacket *avpkt);
-#endif
-
-/**
- * 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. 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.
- *
- * @warning The input buffer, avpkt->data 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.
- *
- * @note You might have to align the input buffer. The alignment requirements
- * depend on the CPU and the decoder.
- *
- * @param avctx the codec context
- * @param[out] frame The AVFrame in which to store decoded audio samples.
- * Decoders request a buffer of a particular size by setting
- * AVFrame.nb_samples prior to calling get_buffer(). The
- * decoder may, however, only utilize part of the buffer by
- * setting AVFrame.nb_samples to a smaller value in the
- * output frame.
- * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is
- * non-zero.
- * @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.
- */
-int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
- int *got_frame_ptr, AVPacket *avpkt);
-
-/**
- * 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 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 buf should be set to 0 to ensure that
- * no overreading happens for damaged MPEG streams.
- *
- * @note You might have to align the input buffer avpkt->data.
- * 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.
- *
- * @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] picture The AVFrame in which the decoded video frame will be stored.
- * Use avcodec_alloc_frame to get an AVFrame, the codec will
- * allocate memory for the actual bitmap.
- * with default get/release_buffer(), the decoder frees/reuses the bitmap as it sees fit.
- * with overridden get/release_buffer() (needs CODEC_CAP_DR1) the user decides into what buffer the decoder
- * decodes and the decoder tells the user once it does not need the data anymore,
- * the user app can at this point free/reuse/keep the memory as it sees fit.
- *
- * @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.
- */
-int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
- int *got_picture_ptr,
- AVPacket *avpkt);
-
-/**
- * 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 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.
- *
- * @param avctx the codec context
- * @param[out] sub The 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.
- */
-int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
- int *got_sub_ptr,
- AVPacket *avpkt);
-
-/**
- * @defgroup lavc_parsing Frame parsing
- * @{
- */
-
-typedef struct AVCodecParserContext {
- void *priv_data;
- struct AVCodecParser *parser;
- int64_t frame_offset; /* offset of the current frame */
- int64_t cur_offset; /* current offset
- (incremented by each av_parser_parse()) */
- int64_t next_frame_offset; /* offset of the next frame */
- /* video info */
- int pict_type; /* 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.
- */
- int repeat_pict; /* XXX: Put it back in AVCodecContext. */
- int64_t pts; /* pts of the current frame */
- int64_t dts; /* dts of the current frame */
-
- /* private data */
- int64_t last_pts;
- int64_t last_dts;
- int fetch_timestamp;
-
-#define AV_PARSER_PTS_NB 4
- int cur_frame_start_index;
- int64_t cur_frame_offset[AV_PARSER_PTS_NB];
- int64_t cur_frame_pts[AV_PARSER_PTS_NB];
- int64_t cur_frame_dts[AV_PARSER_PTS_NB];
-
- int flags;
-#define PARSER_FLAG_COMPLETE_FRAMES 0x0001
-#define PARSER_FLAG_ONCE 0x0002
-/// Set if the parser has a valid file offset
-#define PARSER_FLAG_FETCHED_OFFSET 0x0004
-
- int64_t offset; ///< byte offset from starting packet start
- int64_t cur_frame_end[AV_PARSER_PTS_NB];
-
- /**
- * 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 AV_PICTURE_TYPE_I picture type as key frames
- * will be used.
- */
- int key_frame;
-
- /**
- * 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 is not the display duration of the current frame.
- * 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.
- */
- int64_t convergence_duration;
-
- // 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.
- */
- int dts_sync_point;
-
- /**
- * 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.
- */
- int dts_ref_dts_delta;
-
- /**
- * 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.
- */
- int pts_dts_delta;
-
- /**
- * Position of the packet in file.
- *
- * Analogous to cur_frame_pts/dts
- */
- int64_t cur_frame_pos[AV_PARSER_PTS_NB];
-
- /**
- * Byte position of currently parsed frame in stream.
- */
- int64_t pos;
-
- /**
- * Previous frame byte position.
- */
- int64_t last_pos;
-
- /**
- * 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.
- */
- int duration;
-} AVCodecParserContext;
-
-typedef struct AVCodecParser {
- int codec_ids[5]; /* several codec IDs are permitted */
- int priv_data_size;
- int (*parser_init)(AVCodecParserContext *s);
- int (*parser_parse)(AVCodecParserContext *s,
- AVCodecContext *avctx,
- const uint8_t **poutbuf, int *poutbuf_size,
- const uint8_t *buf, int buf_size);
- void (*parser_close)(AVCodecParserContext *s);
- int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
- struct AVCodecParser *next;
-} AVCodecParser;
-
-AVCodecParser *av_parser_next(AVCodecParser *c);
-
-void av_register_codec_parser(AVCodecParser *parser);
-AVCodecParserContext *av_parser_init(int codec_id);
-
-/**
- * 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){
- * len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
- * in_data, in_len,
- * pts, dts, pos);
- * in_data += len;
- * in_len -= len;
- *
- * if(size)
- * decode_frame(data, size);
- * }
- * @endcode
- */
-int av_parser_parse2(AVCodecParserContext *s,
- AVCodecContext *avctx,
- uint8_t **poutbuf, int *poutbuf_size,
- const uint8_t *buf, int buf_size,
- int64_t pts, int64_t dts,
- int64_t pos);
-
-int av_parser_change(AVCodecParserContext *s,
- AVCodecContext *avctx,
- uint8_t **poutbuf, int *poutbuf_size,
- const uint8_t *buf, int buf_size, int keyframe);
-void av_parser_close(AVCodecParserContext *s);
-
-/**
- * @}
- * @}
- */
-
-/**
- * @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.
- */
-AVCodec *avcodec_find_encoder(enum AVCodecID id);
-
-/**
- * Find a registered encoder with the specified name.
- *
- * @param name name of the requested encoder
- * @return An encoder if one was found, NULL otherwise.
- */
-AVCodec *avcodec_find_encoder_by_name(const char *name);
-
-#if 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.
- */
-int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx,
- uint8_t *buf, int buf_size,
- const short *samples);
-#endif
-
-/**
- * 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. 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_free_packet() (i.e. avpkt->destruct will be
- * called to free the user supplied buffer).
- * @param[in] frame AVFrame containing the raw audio data to be encoded.
- * May be NULL when flushing an encoder that has the
- * CODEC_CAP_DELAY capability set.
- * If 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
- */
-int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
- const AVFrame *frame, int *got_packet_ptr);
-
-#if FF_API_OLD_ENCODE_VIDEO
-/**
- * @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.
- */
-attribute_deprecated
-int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
- const AVFrame *pict);
-#endif
-
-/**
- * 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_free_packet() (i.e. avpkt->destruct will be
- * called to free the user supplied buffer).
- * @param[in] frame AVFrame containing the raw video data to be encoded.
- * May be NULL when flushing an encoder that has the
- * 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
- */
-int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
- const AVFrame *frame, int *got_packet_ptr);
-
-int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
- const AVSubtitle *sub);
-
-
-/**
- * @}
- */
-
-#if FF_API_AVCODEC_RESAMPLE
-/**
- * @defgroup lavc_resample Audio resampling
- * @ingroup libavc
- * @deprecated use libavresample instead
- *
- * @{
- */
-struct ReSampleContext;
-struct AVResampleContext;
-
-typedef struct ReSampleContext ReSampleContext;
-
-/**
- * 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
- */
-attribute_deprecated
-ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
- int output_rate, int input_rate,
- enum AVSampleFormat sample_fmt_out,
- enum AVSampleFormat sample_fmt_in,
- int filter_length, int log2_phase_count,
- int linear, double cutoff);
-
-attribute_deprecated
-int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
-
-/**
- * Free resample context.
- *
- * @param s a non-NULL pointer to a resample context previously
- * created with av_audio_resample_init()
- */
-attribute_deprecated
-void audio_resample_close(ReSampleContext *s);
-
-
-/**
- * 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
- */
-attribute_deprecated
-struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
-
-/**
- * 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
- */
-attribute_deprecated
-int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
-
-
-/**
- * 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
- */
-attribute_deprecated
-void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
-attribute_deprecated
-void av_resample_close(struct AVResampleContext *c);
-
-/**
- * @}
- */
-#endif
-
-/**
- * @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
- */
-int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height);
-
-/**
- * Free a picture previously allocated by avpicture_alloc().
- * The data buffer used by the AVPicture is freed, but the AVPicture structure
- * itself is not.
- *
- * @param picture the AVPicture to be freed
- */
-void avpicture_free(AVPicture *picture);
-
-/**
- * Fill in the AVPicture fields.
- * The fields of the given AVPicture are filled in by using the 'ptr' address
- * which points to the image data buffer. Depending on the specified picture
- * format, one or multiple image data pointers and line sizes will be set.
- * If a planar format is specified, several pointers will be set pointing to
- * the different picture planes and the line sizes of the different planes
- * will be stored in the lines_sizes array.
- * Call with ptr == NULL to get the required size for the ptr buffer.
- *
- * To allocate the buffer and fill in the AVPicture fields in one call,
- * use avpicture_alloc().
- *
- * @param picture AVPicture whose fields are to be filled in
- * @param ptr Buffer which will contain or contains the actual image data
- * @param pix_fmt The format in which the picture data is stored.
- * @param width the width of the image in pixels
- * @param height the height of the image in pixels
- * @return size of the image data in bytes
- */
-int avpicture_fill(AVPicture *picture, uint8_t *ptr,
- enum AVPixelFormat pix_fmt, int width, int height);
-
-/**
- * Copy pixel data from an AVPicture into a buffer.
- * The data is stored compactly, without any gaps for alignment or padding
- * which may be applied by avpicture_fill().
- *
- * @see avpicture_get_size()
- *
- * @param[in] src AVPicture containing image data
- * @param[in] pix_fmt The format in which the picture data is stored.
- * @param[in] width the width of the image in pixels.
- * @param[in] height the height of the image in pixels.
- * @param[out] dest A buffer into which picture data will be copied.
- * @param[in] dest_size The size of 'dest'.
- * @return The number of bytes written to dest, or a negative value (error code) on error.
- */
-int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt,
- int width, int height,
- unsigned char *dest, int dest_size);
-
-/**
- * Calculate the size in bytes that a picture of the given width and height
- * would occupy if stored in the given picture format.
- * Note that this returns the size of a compact representation as generated
- * by avpicture_layout(), which can be smaller than the size required for e.g.
- * avpicture_fill().
- *
- * @param pix_fmt the given picture format
- * @param width the width of the image
- * @param height the height of the image
- * @return Image data size in bytes or -1 on error (e.g. too large dimensions).
- */
-int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
-
-/**
- * deinterlace - if not supported return -1
- */
-int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
- enum AVPixelFormat pix_fmt, int width, int height);
-/**
- * Copy image src to dst. Wraps av_picture_data_copy() above.
- */
-void av_picture_copy(AVPicture *dst, const AVPicture *src,
- enum AVPixelFormat pix_fmt, int width, int height);
-
-/**
- * Crop image top and left side.
- */
-int av_picture_crop(AVPicture *dst, const AVPicture *src,
- enum AVPixelFormat pix_fmt, int top_band, int left_band);
-
-/**
- * Pad image.
- */
-int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt,
- int padtop, int padbottom, int padleft, int padright, int *color);
-
-/**
- * @}
- */
-
-/**
- * @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.
- * @{
- */
-
-void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
-
-/**
- * Return a value representing the fourCC code associated to the
- * pixel format pix_fmt, or 0 if no associated fourCC code can be
- * found.
- */
-unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt);
-
-#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */
-#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */
-#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */
-#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */
-#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */
-#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
-
-/**
- * Compute what kind of losses will occur when converting from one specific
- * pixel format to another.
- * 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. These losses can involve loss of chroma, but also loss of
- * resolution, loss of color depth, loss due to the color space conversion, loss
- * of the alpha bits or loss due to color quantization.
- * avcodec_get_fix_fmt_loss() informs you about the various types of losses
- * which will occur when converting from one pixel format to another.
- *
- * @param[in] dst_pix_fmt destination pixel format
- * @param[in] src_pix_fmt source pixel format
- * @param[in] has_alpha Whether the source pixel format alpha channel is used.
- * @return Combination of flags informing you what kind of losses will occur.
- */
-int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
- int has_alpha);
-
-#if FF_API_FIND_BEST_PIX_FMT
-/**
- * @deprecated use avcodec_find_best_pix_fmt2() instead.
- *
- * 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() 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_mask parameter.
- *
- * @code
- * src_pix_fmt = AV_PIX_FMT_YUV420P;
- * pix_fmt_mask = (1 << AV_PIX_FMT_YUV422P) || (1 << AV_PIX_FMT_RGB24);
- * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss);
- * @endcode
- *
- * @param[in] pix_fmt_mask bitmask determining which pixel format 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.
- */
-attribute_deprecated
-enum AVPixelFormat avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, enum AVPixelFormat src_pix_fmt,
- int has_alpha, int *loss_ptr);
-#endif /* FF_API_FIND_BEST_PIX_FMT */
-
-/**
- * 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_fmt2() 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.
- */
-enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat *pix_fmt_list,
- enum AVPixelFormat src_pix_fmt,
- int has_alpha, int *loss_ptr);
-
-enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
-
-/**
- * @}
- */
-
-void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
-
-/**
- * Put a string representing the codec tag codec_tag in buf.
- *
- * @param buf_size size in bytes of buf
- * @return the length of the string that would have been generated if
- * enough space had been available, excluding the trailing null
- */
-size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag);
-
-void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
-
-/**
- * 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.
- */
-const char *av_get_profile_name(const AVCodec *codec, int profile);
-
-int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
-int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
-//FIXME func typedef
-
-/**
- * Fill audio frame data and linesize.
- * 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 (0 = default)
- * @return 0 on success, negative error code on failure
- */
-int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
- enum AVSampleFormat sample_fmt, const uint8_t *buf,
- int buf_size, int align);
-
-/**
- * Flush buffers, should be called when seeking or when switching to a different stream.
- */
-void avcodec_flush_buffers(AVCodecContext *avctx);
-
-void avcodec_default_free_buffers(AVCodecContext *s);
-
-/**
- * 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.
- */
-int av_get_bits_per_sample(enum AVCodecID codec_id);
-
-/**
- * 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.
- */
-int av_get_exact_bits_per_sample(enum AVCodecID codec_id);
-
-/**
- * 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.
- */
-int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);
-
-
-typedef struct AVBitStreamFilterContext {
- void *priv_data;
- struct AVBitStreamFilter *filter;
- AVCodecParserContext *parser;
- struct AVBitStreamFilterContext *next;
-} AVBitStreamFilterContext;
-
-
-typedef struct AVBitStreamFilter {
- const char *name;
- int priv_data_size;
- int (*filter)(AVBitStreamFilterContext *bsfc,
- AVCodecContext *avctx, const char *args,
- uint8_t **poutbuf, int *poutbuf_size,
- const uint8_t *buf, int buf_size, int keyframe);
- void (*close)(AVBitStreamFilterContext *bsfc);
- struct AVBitStreamFilter *next;
-} AVBitStreamFilter;
-
-void av_register_bitstream_filter(AVBitStreamFilter *bsf);
-AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
-int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
- AVCodecContext *avctx, const char *args,
- uint8_t **poutbuf, int *poutbuf_size,
- const uint8_t *buf, int buf_size, int keyframe);
-void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
-
-AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f);
-
-/* memory */
-
-/**
- * Reallocate the given block if it is not large enough, otherwise do nothing.
- *
- * @see av_realloc
- */
-void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size);
-
-/**
- * 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.
- */
-void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
-
-/**
- * Allocate a buffer with padding, reusing the given one if large enough.
- *
- * Same behaviour av_fast_malloc but the buffer has additional
- * FF_INPUT_PADDING_SIZE at the end which will always memset to 0.
- *
- */
-void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size);
-
-/**
- * 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.
- */
-unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
-
-/**
- * Log a generic warning message about a missing feature. This function is
- * intended to be used internally by Libav (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 verbage will be added to the log
- * message which tells the user how to report samples to the development
- * mailing list.
- */
-void av_log_missing_feature(void *avc, const char *feature, int want_sample);
-
-/**
- * Log a generic warning message asking for a sample. This function is
- * intended to be used internally by Libav (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
- */
-void av_log_ask_for_sample(void *avc, const char *msg, ...) av_printf_format(2, 3);
-
-/**
- * Register the hardware accelerator hwaccel.
- */
-void av_register_hwaccel(AVHWAccel *hwaccel);
-
-/**
- * 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.
- */
-AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel);
-
-
-/**
- * Lock operation used by lockmgr
- */
-enum AVLockOp {
- 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. mutex points to a (void *) where the
- * lockmgr should store/get a pointer to a user allocated mutex. It's
- * NULL upon AV_LOCK_CREATE and != NULL for all other ops.
- *
- * @param cb User defined callback. Note: Libav may invoke calls to this
- * callback during the call to av_lockmgr_register().
- * Thus, the application must be prepared to handle that.
- * If cb is set to NULL the lockmgr will be unregistered.
- * Also note that during unregistration the previously registered
- * lockmgr callback may also be invoked.
- */
-int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op));
-
-/**
- * Get the type of the given codec.
- */
-enum AVMediaType avcodec_get_type(enum AVCodecID codec_id);
-
-/**
- * @return a positive value if s is open (i.e. avcodec_open2() was called on it
- * with no corresponding avcodec_close()), 0 otherwise.
- */
-int avcodec_is_open(AVCodecContext *s);
-
-/**
- * @return a non-zero number if codec is an encoder, zero otherwise
- */
-int av_codec_is_encoder(const AVCodec *codec);
-
-/**
- * @return a non-zero number if codec is a decoder, zero otherwise
- */
-int av_codec_is_decoder(const AVCodec *codec);
-
-/**
- * @return descriptor for given codec ID or NULL if no descriptor exists.
- */
-const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id);
-
-/**
- * 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
- */
-const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev);
-
-/**
- * @return codec descriptor with the given name or NULL if no such descriptor
- * exists.
- */
-const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name);
-
-/**
- * @}
- */
-
-#endif /* AVCODEC_AVCODEC_H */
--- a/misc/winutils/include/libavcodec/avfft.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_AVFFT_H
-#define AVCODEC_AVFFT_H
-
-/**
- * @file
- * @ingroup lavc_fft
- * FFT functions
- */
-
-/**
- * @defgroup lavc_fft FFT functions
- * @ingroup lavc_misc
- *
- * @{
- */
-
-typedef float FFTSample;
-
-typedef struct FFTComplex {
- FFTSample re, im;
-} FFTComplex;
-
-typedef struct FFTContext FFTContext;
-
-/**
- * Set up a complex FFT.
- * @param nbits log2 of the length of the input array
- * @param inverse if 0 perform the forward transform, if 1 perform the inverse
- */
-FFTContext *av_fft_init(int nbits, int inverse);
-
-/**
- * Do the permutation needed BEFORE calling ff_fft_calc().
- */
-void av_fft_permute(FFTContext *s, FFTComplex *z);
-
-/**
- * Do a complex FFT with the parameters defined in av_fft_init(). The
- * input data must be permuted before. No 1.0/sqrt(n) normalization is done.
- */
-void av_fft_calc(FFTContext *s, FFTComplex *z);
-
-void av_fft_end(FFTContext *s);
-
-FFTContext *av_mdct_init(int nbits, int inverse, double scale);
-void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
-void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input);
-void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
-void av_mdct_end(FFTContext *s);
-
-/* Real Discrete Fourier Transform */
-
-enum RDFTransformType {
- DFT_R2C,
- IDFT_C2R,
- IDFT_R2C,
- DFT_C2R,
-};
-
-typedef struct RDFTContext RDFTContext;
-
-/**
- * Set up a real FFT.
- * @param nbits log2 of the length of the input array
- * @param trans the type of transform
- */
-RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans);
-void av_rdft_calc(RDFTContext *s, FFTSample *data);
-void av_rdft_end(RDFTContext *s);
-
-/* Discrete Cosine Transform */
-
-typedef struct DCTContext DCTContext;
-
-enum DCTTransformType {
- DCT_II = 0,
- DCT_III,
- DCT_I,
- DST_I,
-};
-
-/**
- * Set up DCT.
- * @param nbits size of the input array:
- * (1 << nbits) for DCT-II, DCT-III and DST-I
- * (1 << nbits) + 1 for DCT-I
- *
- * @note the first element of the input of DST-I is ignored
- */
-DCTContext *av_dct_init(int nbits, enum DCTTransformType type);
-void av_dct_calc(DCTContext *s, FFTSample *data);
-void av_dct_end (DCTContext *s);
-
-/**
- * @}
- */
-
-#endif /* AVCODEC_AVFFT_H */
--- a/misc/winutils/include/libavcodec/dxva2.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * DXVA2 HW acceleration
- *
- * copyright (c) 2009 Laurent Aimar
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_DXVA_H
-#define AVCODEC_DXVA_H
-
-/**
- * @file
- * @ingroup lavc_codec_hwaccel_dxva2
- * Public libavcodec DXVA2 header.
- */
-
-#include <stdint.h>
-
-#include <d3d9.h>
-#include <dxva2api.h>
-
-/**
- * @defgroup lavc_codec_hwaccel_dxva2 DXVA2
- * @ingroup lavc_codec_hwaccel
- *
- * @{
- */
-
-#define FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG 1 ///< Work around for DXVA2 and old UVD/UVD+ ATI video cards
-
-/**
- * This structure is used to provides the necessary configurations and data
- * to the DXVA2 Libav HWAccel implementation.
- *
- * The application must make it available as AVCodecContext.hwaccel_context.
- */
-struct dxva_context {
- /**
- * DXVA2 decoder object
- */
- IDirectXVideoDecoder *decoder;
-
- /**
- * DXVA2 configuration used to create the decoder
- */
- const DXVA2_ConfigPictureDecode *cfg;
-
- /**
- * The number of surface in the surface array
- */
- unsigned surface_count;
-
- /**
- * The array of Direct3D surfaces used to create the decoder
- */
- LPDIRECT3DSURFACE9 *surface;
-
- /**
- * A bit field configuring the workarounds needed for using the decoder
- */
- uint64_t workaround;
-
- /**
- * Private to the Libav AVHWAccel implementation
- */
- unsigned report_id;
-};
-
-/**
- * @}
- */
-
-#endif /* AVCODEC_DXVA_H */
--- a/misc/winutils/include/libavcodec/old_codec_ids.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,366 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_OLD_CODEC_IDS_H
-#define AVCODEC_OLD_CODEC_IDS_H
-
-/*
- * This header exists to prevent new codec IDs from being accidentally added to
- * the deprecated list.
- * Do not include it directly. It will be removed on next major bump
- *
- * Do not add new items to this list. Use the AVCodecID enum instead.
- */
-
- CODEC_ID_NONE = AV_CODEC_ID_NONE,
-
- /* video codecs */
- CODEC_ID_MPEG1VIDEO,
- CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
- CODEC_ID_MPEG2VIDEO_XVMC,
- CODEC_ID_H261,
- CODEC_ID_H263,
- CODEC_ID_RV10,
- CODEC_ID_RV20,
- CODEC_ID_MJPEG,
- CODEC_ID_MJPEGB,
- CODEC_ID_LJPEG,
- CODEC_ID_SP5X,
- CODEC_ID_JPEGLS,
- CODEC_ID_MPEG4,
- CODEC_ID_RAWVIDEO,
- CODEC_ID_MSMPEG4V1,
- CODEC_ID_MSMPEG4V2,
- CODEC_ID_MSMPEG4V3,
- CODEC_ID_WMV1,
- CODEC_ID_WMV2,
- CODEC_ID_H263P,
- CODEC_ID_H263I,
- CODEC_ID_FLV1,
- CODEC_ID_SVQ1,
- CODEC_ID_SVQ3,
- CODEC_ID_DVVIDEO,
- CODEC_ID_HUFFYUV,
- CODEC_ID_CYUV,
- CODEC_ID_H264,
- CODEC_ID_INDEO3,
- CODEC_ID_VP3,
- CODEC_ID_THEORA,
- CODEC_ID_ASV1,
- CODEC_ID_ASV2,
- CODEC_ID_FFV1,
- CODEC_ID_4XM,
- CODEC_ID_VCR1,
- CODEC_ID_CLJR,
- CODEC_ID_MDEC,
- CODEC_ID_ROQ,
- CODEC_ID_INTERPLAY_VIDEO,
- CODEC_ID_XAN_WC3,
- CODEC_ID_XAN_WC4,
- CODEC_ID_RPZA,
- CODEC_ID_CINEPAK,
- CODEC_ID_WS_VQA,
- CODEC_ID_MSRLE,
- CODEC_ID_MSVIDEO1,
- CODEC_ID_IDCIN,
- CODEC_ID_8BPS,
- CODEC_ID_SMC,
- CODEC_ID_FLIC,
- CODEC_ID_TRUEMOTION1,
- CODEC_ID_VMDVIDEO,
- CODEC_ID_MSZH,
- CODEC_ID_ZLIB,
- CODEC_ID_QTRLE,
- CODEC_ID_SNOW,
- CODEC_ID_TSCC,
- CODEC_ID_ULTI,
- CODEC_ID_QDRAW,
- CODEC_ID_VIXL,
- CODEC_ID_QPEG,
- CODEC_ID_PNG,
- CODEC_ID_PPM,
- CODEC_ID_PBM,
- CODEC_ID_PGM,
- CODEC_ID_PGMYUV,
- CODEC_ID_PAM,
- CODEC_ID_FFVHUFF,
- CODEC_ID_RV30,
- CODEC_ID_RV40,
- CODEC_ID_VC1,
- CODEC_ID_WMV3,
- CODEC_ID_LOCO,
- CODEC_ID_WNV1,
- CODEC_ID_AASC,
- CODEC_ID_INDEO2,
- CODEC_ID_FRAPS,
- CODEC_ID_TRUEMOTION2,
- CODEC_ID_BMP,
- CODEC_ID_CSCD,
- CODEC_ID_MMVIDEO,
- CODEC_ID_ZMBV,
- CODEC_ID_AVS,
- CODEC_ID_SMACKVIDEO,
- CODEC_ID_NUV,
- CODEC_ID_KMVC,
- CODEC_ID_FLASHSV,
- CODEC_ID_CAVS,
- CODEC_ID_JPEG2000,
- CODEC_ID_VMNC,
- CODEC_ID_VP5,
- CODEC_ID_VP6,
- CODEC_ID_VP6F,
- CODEC_ID_TARGA,
- CODEC_ID_DSICINVIDEO,
- CODEC_ID_TIERTEXSEQVIDEO,
- CODEC_ID_TIFF,
- CODEC_ID_GIF,
- CODEC_ID_DXA,
- CODEC_ID_DNXHD,
- CODEC_ID_THP,
- CODEC_ID_SGI,
- CODEC_ID_C93,
- CODEC_ID_BETHSOFTVID,
- CODEC_ID_PTX,
- CODEC_ID_TXD,
- CODEC_ID_VP6A,
- CODEC_ID_AMV,
- CODEC_ID_VB,
- CODEC_ID_PCX,
- CODEC_ID_SUNRAST,
- CODEC_ID_INDEO4,
- CODEC_ID_INDEO5,
- CODEC_ID_MIMIC,
- CODEC_ID_RL2,
- CODEC_ID_ESCAPE124,
- CODEC_ID_DIRAC,
- CODEC_ID_BFI,
- CODEC_ID_CMV,
- CODEC_ID_MOTIONPIXELS,
- CODEC_ID_TGV,
- CODEC_ID_TGQ,
- CODEC_ID_TQI,
- CODEC_ID_AURA,
- CODEC_ID_AURA2,
- CODEC_ID_V210X,
- CODEC_ID_TMV,
- CODEC_ID_V210,
- CODEC_ID_DPX,
- CODEC_ID_MAD,
- CODEC_ID_FRWU,
- CODEC_ID_FLASHSV2,
- CODEC_ID_CDGRAPHICS,
- CODEC_ID_R210,
- CODEC_ID_ANM,
- CODEC_ID_BINKVIDEO,
- CODEC_ID_IFF_ILBM,
- CODEC_ID_IFF_BYTERUN1,
- CODEC_ID_KGV1,
- CODEC_ID_YOP,
- CODEC_ID_VP8,
- CODEC_ID_PICTOR,
- CODEC_ID_ANSI,
- CODEC_ID_A64_MULTI,
- CODEC_ID_A64_MULTI5,
- CODEC_ID_R10K,
- CODEC_ID_MXPEG,
- CODEC_ID_LAGARITH,
- CODEC_ID_PRORES,
- CODEC_ID_JV,
- CODEC_ID_DFA,
- CODEC_ID_WMV3IMAGE,
- CODEC_ID_VC1IMAGE,
- CODEC_ID_UTVIDEO,
- CODEC_ID_BMV_VIDEO,
- CODEC_ID_VBLE,
- CODEC_ID_DXTORY,
- CODEC_ID_V410,
- CODEC_ID_XWD,
- CODEC_ID_CDXL,
- CODEC_ID_XBM,
- CODEC_ID_ZEROCODEC,
- CODEC_ID_MSS1,
- CODEC_ID_MSA1,
- CODEC_ID_TSCC2,
- CODEC_ID_MTS2,
- CODEC_ID_CLLC,
-
- /* various PCM "codecs" */
- CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
- CODEC_ID_PCM_S16LE = 0x10000,
- CODEC_ID_PCM_S16BE,
- CODEC_ID_PCM_U16LE,
- CODEC_ID_PCM_U16BE,
- CODEC_ID_PCM_S8,
- CODEC_ID_PCM_U8,
- CODEC_ID_PCM_MULAW,
- CODEC_ID_PCM_ALAW,
- CODEC_ID_PCM_S32LE,
- CODEC_ID_PCM_S32BE,
- CODEC_ID_PCM_U32LE,
- CODEC_ID_PCM_U32BE,
- CODEC_ID_PCM_S24LE,
- CODEC_ID_PCM_S24BE,
- CODEC_ID_PCM_U24LE,
- CODEC_ID_PCM_U24BE,
- CODEC_ID_PCM_S24DAUD,
- CODEC_ID_PCM_ZORK,
- CODEC_ID_PCM_S16LE_PLANAR,
- CODEC_ID_PCM_DVD,
- CODEC_ID_PCM_F32BE,
- CODEC_ID_PCM_F32LE,
- CODEC_ID_PCM_F64BE,
- CODEC_ID_PCM_F64LE,
- CODEC_ID_PCM_BLURAY,
- CODEC_ID_PCM_LXF,
- CODEC_ID_S302M,
- CODEC_ID_PCM_S8_PLANAR,
-
- /* various ADPCM codecs */
- CODEC_ID_ADPCM_IMA_QT = 0x11000,
- CODEC_ID_ADPCM_IMA_WAV,
- CODEC_ID_ADPCM_IMA_DK3,
- CODEC_ID_ADPCM_IMA_DK4,
- CODEC_ID_ADPCM_IMA_WS,
- CODEC_ID_ADPCM_IMA_SMJPEG,
- CODEC_ID_ADPCM_MS,
- CODEC_ID_ADPCM_4XM,
- CODEC_ID_ADPCM_XA,
- CODEC_ID_ADPCM_ADX,
- CODEC_ID_ADPCM_EA,
- CODEC_ID_ADPCM_G726,
- CODEC_ID_ADPCM_CT,
- CODEC_ID_ADPCM_SWF,
- CODEC_ID_ADPCM_YAMAHA,
- CODEC_ID_ADPCM_SBPRO_4,
- CODEC_ID_ADPCM_SBPRO_3,
- CODEC_ID_ADPCM_SBPRO_2,
- CODEC_ID_ADPCM_THP,
- CODEC_ID_ADPCM_IMA_AMV,
- CODEC_ID_ADPCM_EA_R1,
- CODEC_ID_ADPCM_EA_R3,
- CODEC_ID_ADPCM_EA_R2,
- CODEC_ID_ADPCM_IMA_EA_SEAD,
- CODEC_ID_ADPCM_IMA_EA_EACS,
- CODEC_ID_ADPCM_EA_XAS,
- CODEC_ID_ADPCM_EA_MAXIS_XA,
- CODEC_ID_ADPCM_IMA_ISS,
- CODEC_ID_ADPCM_G722,
- CODEC_ID_ADPCM_IMA_APC,
-
- /* AMR */
- CODEC_ID_AMR_NB = 0x12000,
- CODEC_ID_AMR_WB,
-
- /* RealAudio codecs*/
- CODEC_ID_RA_144 = 0x13000,
- CODEC_ID_RA_288,
-
- /* various DPCM codecs */
- CODEC_ID_ROQ_DPCM = 0x14000,
- CODEC_ID_INTERPLAY_DPCM,
- CODEC_ID_XAN_DPCM,
- CODEC_ID_SOL_DPCM,
-
- /* audio codecs */
- CODEC_ID_MP2 = 0x15000,
- CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
- CODEC_ID_AAC,
- CODEC_ID_AC3,
- CODEC_ID_DTS,
- CODEC_ID_VORBIS,
- CODEC_ID_DVAUDIO,
- CODEC_ID_WMAV1,
- CODEC_ID_WMAV2,
- CODEC_ID_MACE3,
- CODEC_ID_MACE6,
- CODEC_ID_VMDAUDIO,
- CODEC_ID_FLAC,
- CODEC_ID_MP3ADU,
- CODEC_ID_MP3ON4,
- CODEC_ID_SHORTEN,
- CODEC_ID_ALAC,
- CODEC_ID_WESTWOOD_SND1,
- CODEC_ID_GSM, ///< as in Berlin toast format
- CODEC_ID_QDM2,
- CODEC_ID_COOK,
- CODEC_ID_TRUESPEECH,
- CODEC_ID_TTA,
- CODEC_ID_SMACKAUDIO,
- CODEC_ID_QCELP,
- CODEC_ID_WAVPACK,
- CODEC_ID_DSICINAUDIO,
- CODEC_ID_IMC,
- CODEC_ID_MUSEPACK7,
- CODEC_ID_MLP,
- CODEC_ID_GSM_MS, /* as found in WAV */
- CODEC_ID_ATRAC3,
- CODEC_ID_VOXWARE,
- CODEC_ID_APE,
- CODEC_ID_NELLYMOSER,
- CODEC_ID_MUSEPACK8,
- CODEC_ID_SPEEX,
- CODEC_ID_WMAVOICE,
- CODEC_ID_WMAPRO,
- CODEC_ID_WMALOSSLESS,
- CODEC_ID_ATRAC3P,
- CODEC_ID_EAC3,
- CODEC_ID_SIPR,
- CODEC_ID_MP1,
- CODEC_ID_TWINVQ,
- CODEC_ID_TRUEHD,
- CODEC_ID_MP4ALS,
- CODEC_ID_ATRAC1,
- CODEC_ID_BINKAUDIO_RDFT,
- CODEC_ID_BINKAUDIO_DCT,
- CODEC_ID_AAC_LATM,
- CODEC_ID_QDMC,
- CODEC_ID_CELT,
- CODEC_ID_G723_1,
- CODEC_ID_G729,
- CODEC_ID_8SVX_EXP,
- CODEC_ID_8SVX_FIB,
- CODEC_ID_BMV_AUDIO,
- CODEC_ID_RALF,
- CODEC_ID_IAC,
- CODEC_ID_ILBC,
-
- /* subtitle codecs */
- CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
- CODEC_ID_DVD_SUBTITLE = 0x17000,
- CODEC_ID_DVB_SUBTITLE,
- CODEC_ID_TEXT, ///< raw UTF-8 text
- CODEC_ID_XSUB,
- CODEC_ID_SSA,
- CODEC_ID_MOV_TEXT,
- CODEC_ID_HDMV_PGS_SUBTITLE,
- CODEC_ID_DVB_TELETEXT,
- CODEC_ID_SRT,
-
- /* other specific kind of codecs (generally used for attachments) */
- CODEC_ID_FIRST_UNKNOWN = 0x18000, ///< A dummy ID pointing at the start of various fake codecs.
- CODEC_ID_TTF = 0x18000,
-
- CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it
-
- CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
- * stream (only used by libavformat) */
- CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
- * stream (only used by libavformat) */
- CODEC_ID_FFMETADATA = 0x21000, ///< Dummy codec for streams containing only metadata information.
-
-#endif /* AVCODEC_OLD_CODEC_IDS_H */
--- a/misc/winutils/include/libavcodec/vaapi.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-/*
- * Video Acceleration API (shared data between Libav and the video player)
- * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1
- *
- * Copyright (C) 2008-2009 Splitted-Desktop Systems
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_VAAPI_H
-#define AVCODEC_VAAPI_H
-
-/**
- * @file
- * @ingroup lavc_codec_hwaccel_vaapi
- * Public libavcodec VA API header.
- */
-
-#include <stdint.h>
-
-/**
- * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding
- * @ingroup lavc_codec_hwaccel
- * @{
- */
-
-/**
- * This structure is used to share data between the Libav library and
- * the client video application.
- * This shall be zero-allocated and available as
- * AVCodecContext.hwaccel_context. All user members can be set once
- * during initialization or through each AVCodecContext.get_buffer()
- * function call. In any case, they must be valid prior to calling
- * decoding functions.
- */
-struct vaapi_context {
- /**
- * Window system dependent data
- *
- * - encoding: unused
- * - decoding: Set by user
- */
- void *display;
-
- /**
- * Configuration ID
- *
- * - encoding: unused
- * - decoding: Set by user
- */
- uint32_t config_id;
-
- /**
- * Context ID (video decode pipeline)
- *
- * - encoding: unused
- * - decoding: Set by user
- */
- uint32_t context_id;
-
- /**
- * VAPictureParameterBuffer ID
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- uint32_t pic_param_buf_id;
-
- /**
- * VAIQMatrixBuffer ID
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- uint32_t iq_matrix_buf_id;
-
- /**
- * VABitPlaneBuffer ID (for VC-1 decoding)
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- uint32_t bitplane_buf_id;
-
- /**
- * Slice parameter/data buffer IDs
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- uint32_t *slice_buf_ids;
-
- /**
- * Number of effective slice buffer IDs to send to the HW
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- unsigned int n_slice_buf_ids;
-
- /**
- * Size of pre-allocated slice_buf_ids
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- unsigned int slice_buf_ids_alloc;
-
- /**
- * Pointer to VASliceParameterBuffers
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- void *slice_params;
-
- /**
- * Size of a VASliceParameterBuffer element
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- unsigned int slice_param_size;
-
- /**
- * Size of pre-allocated slice_params
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- unsigned int slice_params_alloc;
-
- /**
- * Number of slices currently filled in
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- unsigned int slice_count;
-
- /**
- * Pointer to slice data buffer base
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- const uint8_t *slice_data;
-
- /**
- * Current size of slice data
- *
- * - encoding: unused
- * - decoding: Set by libavcodec
- */
- uint32_t slice_data_size;
-};
-
-/* @} */
-
-#endif /* AVCODEC_VAAPI_H */
--- a/misc/winutils/include/libavcodec/vda.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,217 +0,0 @@
-/*
- * VDA HW acceleration
- *
- * copyright (c) 2011 Sebastien Zwickert
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_VDA_H
-#define AVCODEC_VDA_H
-
-/**
- * @file
- * @ingroup lavc_codec_hwaccel_vda
- * Public libavcodec VDA header.
- */
-
-#include "libavcodec/version.h"
-
-#if FF_API_VDA_ASYNC
-#include <pthread.h>
-#endif
-
-#include <stdint.h>
-
-// emmintrin.h is unable to compile with -std=c99 -Werror=missing-prototypes
-// http://openradar.appspot.com/8026390
-#undef __GNUC_STDC_INLINE__
-
-#define Picture QuickdrawPicture
-#include <VideoDecodeAcceleration/VDADecoder.h>
-#undef Picture
-
-/**
- * @defgroup lavc_codec_hwaccel_vda VDA
- * @ingroup lavc_codec_hwaccel
- *
- * @{
- */
-
-#if FF_API_VDA_ASYNC
-/**
- * This structure is used to store decoded frame information and data.
- *
- * @deprecated Use synchronous decoding mode.
- */
-typedef struct vda_frame {
- /**
- * The PTS of the frame.
- *
- * - encoding: unused
- * - decoding: Set/Unset by libavcodec.
- */
- int64_t pts;
-
- /**
- * The CoreVideo buffer that contains the decoded data.
- *
- * - encoding: unused
- * - decoding: Set/Unset by libavcodec.
- */
- CVPixelBufferRef cv_buffer;
-
- /**
- * A pointer to the next frame.
- *
- * - encoding: unused
- * - decoding: Set/Unset by libavcodec.
- */
- struct vda_frame *next_frame;
-} vda_frame;
-#endif
-
-/**
- * This structure is used to provide the necessary configurations and data
- * to the VDA Libav HWAccel implementation.
- *
- * The application must make it available as AVCodecContext.hwaccel_context.
- */
-struct vda_context {
- /**
- * VDA decoder object.
- *
- * - encoding: unused
- * - decoding: Set/Unset by libavcodec.
- */
- VDADecoder decoder;
-
- /**
- * The Core Video pixel buffer that contains the current image data.
- *
- * encoding: unused
- * decoding: Set by libavcodec. Unset by user.
- */
- CVPixelBufferRef cv_buffer;
-
- /**
- * Use the hardware decoder in synchronous mode.
- *
- * encoding: unused
- * decoding: Set by user.
- */
- int use_sync_decoding;
-
-#if FF_API_VDA_ASYNC
- /**
- * VDA frames queue ordered by presentation timestamp.
- *
- * @deprecated Use synchronous decoding mode.
- *
- * - encoding: unused
- * - decoding: Set/Unset by libavcodec.
- */
- vda_frame *queue;
-
- /**
- * Mutex for locking queue operations.
- *
- * @deprecated Use synchronous decoding mode.
- *
- * - encoding: unused
- * - decoding: Set/Unset by libavcodec.
- */
- pthread_mutex_t queue_mutex;
-#endif
-
- /**
- * The frame width.
- *
- * - encoding: unused
- * - decoding: Set/Unset by user.
- */
- int width;
-
- /**
- * The frame height.
- *
- * - encoding: unused
- * - decoding: Set/Unset by user.
- */
- int height;
-
- /**
- * The frame format.
- *
- * - encoding: unused
- * - decoding: Set/Unset by user.
- */
- int format;
-
- /**
- * The pixel format for output image buffers.
- *
- * - encoding: unused
- * - decoding: Set/Unset by user.
- */
- OSType cv_pix_fmt_type;
-
- /**
- * The current bitstream buffer.
- */
- uint8_t *priv_bitstream;
-
- /**
- * The current size of the bitstream.
- */
- int priv_bitstream_size;
-
- /**
- * The reference size used for fast reallocation.
- */
- int priv_allocated_size;
-};
-
-/** Create the video decoder. */
-int ff_vda_create_decoder(struct vda_context *vda_ctx,
- uint8_t *extradata,
- int extradata_size);
-
-/** Destroy the video decoder. */
-int ff_vda_destroy_decoder(struct vda_context *vda_ctx);
-
-#if FF_API_VDA_ASYNC
-/**
- * Return the top frame of the queue.
- *
- * @deprecated Use synchronous decoding mode.
- */
-vda_frame *ff_vda_queue_pop(struct vda_context *vda_ctx);
-
-/**
- * Release the given frame.
- *
- * @deprecated Use synchronous decoding mode.
- */
-void ff_vda_release_vda_frame(vda_frame *frame);
-#endif
-
-/**
- * @}
- */
-
-#endif /* AVCODEC_VDA_H */
--- a/misc/winutils/include/libavcodec/vdpau.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,0 @@
-/*
- * The Video Decode and Presentation API for UNIX (VDPAU) is used for
- * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1.
- *
- * Copyright (C) 2008 NVIDIA
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_VDPAU_H
-#define AVCODEC_VDPAU_H
-
-/**
- * @file
- * @ingroup lavc_codec_hwaccel_vdpau
- * Public libavcodec VDPAU header.
- */
-
-
-/**
- * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer
- * @ingroup lavc_codec_hwaccel
- *
- * VDPAU hardware acceleration has two modules
- * - VDPAU decoding
- * - VDPAU presentation
- *
- * The VDPAU decoding module parses all headers using Libav
- * parsing mechanisms and uses VDPAU for the actual decoding.
- *
- * As per the current implementation, the actual decoding
- * and rendering (API calls) are done as part of the VDPAU
- * presentation (vo_vdpau.c) module.
- *
- * @{
- */
-
-#include <vdpau/vdpau.h>
-#include <vdpau/vdpau_x11.h>
-
-/** @brief The videoSurface is used for rendering. */
-#define FF_VDPAU_STATE_USED_FOR_RENDER 1
-
-/**
- * @brief The videoSurface is needed for reference/prediction.
- * The codec manipulates this.
- */
-#define FF_VDPAU_STATE_USED_FOR_REFERENCE 2
-
-/**
- * @brief This structure is used as a callback between the Libav
- * decoder (vd_) and presentation (vo_) module.
- * This is used for defining a video frame containing surface,
- * picture parameter, bitstream information etc which are passed
- * between the Libav decoder and its clients.
- */
-struct vdpau_render_state {
- VdpVideoSurface surface; ///< Used as rendered surface, never changed.
-
- int state; ///< Holds FF_VDPAU_STATE_* values.
-
- /** picture parameter information for all supported codecs */
- union VdpPictureInfo {
- VdpPictureInfoH264 h264;
- VdpPictureInfoMPEG1Or2 mpeg;
- VdpPictureInfoVC1 vc1;
- VdpPictureInfoMPEG4Part2 mpeg4;
- } info;
-
- /** Describe size/location of the compressed video data.
- Set to 0 when freeing bitstream_buffers. */
- int bitstream_buffers_allocated;
- int bitstream_buffers_used;
- /** The user is responsible for freeing this buffer using av_freep(). */
- VdpBitstreamBuffer *bitstream_buffers;
-};
-
-/* @}*/
-
-#endif /* AVCODEC_VDPAU_H */
--- a/misc/winutils/include/libavcodec/version.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,95 +0,0 @@
-/*
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_VERSION_H
-#define AVCODEC_VERSION_H
-
-/**
- * @file
- * @ingroup libavc
- * Libavcodec version macros.
- */
-
-#define LIBAVCODEC_VERSION_MAJOR 54
-#define LIBAVCODEC_VERSION_MINOR 31
-#define LIBAVCODEC_VERSION_MICRO 0
-
-#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
- LIBAVCODEC_VERSION_MINOR, \
- LIBAVCODEC_VERSION_MICRO)
-#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \
- LIBAVCODEC_VERSION_MINOR, \
- LIBAVCODEC_VERSION_MICRO)
-#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT
-
-#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
-
-/**
- * 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_REQUEST_CHANNELS
-#define FF_API_REQUEST_CHANNELS (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_OLD_DECODE_AUDIO
-#define FF_API_OLD_DECODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_OLD_ENCODE_AUDIO
-#define FF_API_OLD_ENCODE_AUDIO (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_OLD_ENCODE_VIDEO
-#define FF_API_OLD_ENCODE_VIDEO (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_MPV_GLOBAL_OPTS
-#define FF_API_MPV_GLOBAL_OPTS (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_COLOR_TABLE_ID
-#define FF_API_COLOR_TABLE_ID (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_INTER_THRESHOLD
-#define FF_API_INTER_THRESHOLD (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_SUB_ID
-#define FF_API_SUB_ID (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_DSP_MASK
-#define FF_API_DSP_MASK (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_FIND_BEST_PIX_FMT
-#define FF_API_FIND_BEST_PIX_FMT (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_CODEC_ID
-#define FF_API_CODEC_ID (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_VDA_ASYNC
-#define FF_API_VDA_ASYNC (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_AVCODEC_RESAMPLE
-#define FF_API_AVCODEC_RESAMPLE (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_LIBMPEG2
-#define FF_API_LIBMPEG2 (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_MMI
-#define FF_API_MMI (LIBAVCODEC_VERSION_MAJOR < 55)
-#endif
-
-#endif /* AVCODEC_VERSION_H */
--- a/misc/winutils/include/libavcodec/xvmc.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,168 +0,0 @@
-/*
- * Copyright (C) 2003 Ivan Kalvachev
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVCODEC_XVMC_H
-#define AVCODEC_XVMC_H
-
-/**
- * @file
- * @ingroup lavc_codec_hwaccel_xvmc
- * Public libavcodec XvMC header.
- */
-
-#include <X11/extensions/XvMC.h>
-
-#include "avcodec.h"
-
-/**
- * @defgroup lavc_codec_hwaccel_xvmc XvMC
- * @ingroup lavc_codec_hwaccel
- *
- * @{
- */
-
-#define AV_XVMC_ID 0x1DC711C0 /**< special value to ensure that regular pixel routines haven't corrupted the struct
- the number is 1337 speak for the letters IDCT MCo (motion compensation) */
-
-struct xvmc_pix_fmt {
- /** The field contains the special constant value AV_XVMC_ID.
- It is used as a test that the application correctly uses the API,
- and that there is no corruption caused by pixel routines.
- - application - set during initialization
- - libavcodec - unchanged
- */
- int xvmc_id;
-
- /** Pointer to the block array allocated by XvMCCreateBlocks().
- The array has to be freed by XvMCDestroyBlocks().
- Each group of 64 values represents one data block of differential
- pixel information (in MoCo mode) or coefficients for IDCT.
- - application - set the pointer during initialization
- - libavcodec - fills coefficients/pixel data into the array
- */
- short* data_blocks;
-
- /** Pointer to the macroblock description array allocated by
- XvMCCreateMacroBlocks() and freed by XvMCDestroyMacroBlocks().
- - application - set the pointer during initialization
- - libavcodec - fills description data into the array
- */
- XvMCMacroBlock* mv_blocks;
-
- /** Number of macroblock descriptions that can be stored in the mv_blocks
- array.
- - application - set during initialization
- - libavcodec - unchanged
- */
- int allocated_mv_blocks;
-
- /** Number of blocks that can be stored at once in the data_blocks array.
- - application - set during initialization
- - libavcodec - unchanged
- */
- int allocated_data_blocks;
-
- /** Indicate that the hardware would interpret data_blocks as IDCT
- coefficients and perform IDCT on them.
- - application - set during initialization
- - libavcodec - unchanged
- */
- int idct;
-
- /** In MoCo mode it indicates that intra macroblocks are assumed to be in
- unsigned format; same as the XVMC_INTRA_UNSIGNED flag.
- - application - set during initialization
- - libavcodec - unchanged
- */
- int unsigned_intra;
-
- /** Pointer to the surface allocated by XvMCCreateSurface().
- It has to be freed by XvMCDestroySurface() on application exit.
- It identifies the frame and its state on the video hardware.
- - application - set during initialization
- - libavcodec - unchanged
- */
- XvMCSurface* p_surface;
-
-/** Set by the decoder before calling ff_draw_horiz_band(),
- needed by the XvMCRenderSurface function. */
-//@{
- /** Pointer to the surface used as past reference
- - application - unchanged
- - libavcodec - set
- */
- XvMCSurface* p_past_surface;
-
- /** Pointer to the surface used as future reference
- - application - unchanged
- - libavcodec - set
- */
- XvMCSurface* p_future_surface;
-
- /** top/bottom field or frame
- - application - unchanged
- - libavcodec - set
- */
- unsigned int picture_structure;
-
- /** XVMC_SECOND_FIELD - 1st or 2nd field in the sequence
- - application - unchanged
- - libavcodec - set
- */
- unsigned int flags;
-//}@
-
- /** Number of macroblock descriptions in the mv_blocks array
- that have already been passed to the hardware.
- - application - zeroes it on get_buffer().
- A successful ff_draw_horiz_band() may increment it
- with filled_mb_block_num or zero both.
- - libavcodec - unchanged
- */
- int start_mv_blocks_num;
-
- /** Number of new macroblock descriptions in the mv_blocks array (after
- start_mv_blocks_num) that are filled by libavcodec and have to be
- passed to the hardware.
- - application - zeroes it on get_buffer() or after successful
- ff_draw_horiz_band().
- - libavcodec - increment with one of each stored MB
- */
- int filled_mv_blocks_num;
-
- /** Number of the next free data block; one data block consists of
- 64 short values in the data_blocks array.
- All blocks before this one have already been claimed by placing their
- position into the corresponding block description structure field,
- that are part of the mv_blocks array.
- - application - zeroes it on get_buffer().
- A successful ff_draw_horiz_band() may zero it together
- with start_mb_blocks_num.
- - libavcodec - each decoded macroblock increases it by the number
- of coded blocks it contains.
- */
- int next_free_data_block_num;
-};
-
-/**
- * @}
- */
-
-#endif /* AVCODEC_XVMC_H */
--- a/misc/winutils/include/libavformat/avformat.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1740 +0,0 @@
-/*
- * copyright (c) 2001 Fabrice Bellard
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVFORMAT_AVFORMAT_H
-#define AVFORMAT_AVFORMAT_H
-
-/**
- * @file
- * @ingroup libavf
- * Main libavformat public API header
- */
-
-/**
- * @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 Libav 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
- * Lavf allows to configure 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.
- *
- * @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 or filename, which
- * is passed to avformat_open_input(), as in the following code:
- * @code
- * const char *url = "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_decode_video2(), avcodec_decode_audio4() 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.
- *
- * The packet data belongs to the demuxer and is invalid after the next call to
- * av_read_frame(). The user must free the packet with av_free_packet() before
- * calling av_read_frame() again or closing the file.
- *
- * @section lavf_decoding_seek Seeking
- * @}
- *
- * @defgroup lavf_encoding Muxing
- * @{
- * @}
- *
- * @defgroup lavf_io I/O Read/Write
- * @{
- * @}
- *
- * @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
- * @{
- * @}
- * @}
- *
- */
-
-#include <time.h>
-#include <stdio.h> /* FILE */
-#include "libavcodec/avcodec.h"
-#include "libavutil/dict.h"
-#include "libavutil/log.h"
-
-#include "avio.h"
-#include "libavformat/version.h"
-
-#if FF_API_AV_GETTIME
-#include "libavutil/time.h"
-#endif
-
-struct AVFormatContext;
-
-
-/**
- * @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 Libav,
- * 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 pkt packet
- * @param size desired payload size
- * @return >0 (read size) if OK, AVERROR_xxx otherwise
- */
-int av_get_packet(AVIOContext *s, AVPacket *pkt, int size);
-
-
-/**
- * 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 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.
- */
-int av_append_packet(AVIOContext *s, AVPacket *pkt, int size);
-
-/*************************************************/
-/* fractional numbers for exact pts handling */
-
-/**
- * The exact value of the fractional number is: 'val + num / den'.
- * num is assumed to be 0 <= num < den.
- */
-typedef struct AVFrac {
- int64_t val, num, den;
-} AVFrac;
-
-/*************************************************/
-/* input/output formats */
-
-struct AVCodecTag;
-
-/**
- * This structure contains the data a format has to probe a file.
- */
-typedef struct AVProbeData {
- const char *filename;
- unsigned char *buf; /**< Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero. */
- int buf_size; /**< Size of buf except extra allocated bytes */
-} AVProbeData;
-
-#define AVPROBE_SCORE_MAX 100 ///< maximum score, half of that is used for file-extension-based detection
-#define 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.
-#define AVFMT_NOFILE 0x0001
-#define AVFMT_NEEDNUMBER 0x0002 /**< Needs '%d' in filename. */
-#define AVFMT_SHOW_IDS 0x0008 /**< Show format stream IDs numbers. */
-#define AVFMT_RAWPICTURE 0x0020 /**< Format wants AVPicture structure for
- raw picture data. */
-#define AVFMT_GLOBALHEADER 0x0040 /**< Format wants global header. */
-#define AVFMT_NOTIMESTAMPS 0x0080 /**< Format does not need / have any timestamps. */
-#define AVFMT_GENERIC_INDEX 0x0100 /**< Use generic index building code. */
-#define AVFMT_TS_DISCONT 0x0200 /**< Format allows timestamp discontinuities. Note, muxers always require valid (monotone) timestamps */
-#define AVFMT_VARIABLE_FPS 0x0400 /**< Format allows variable fps. */
-#define AVFMT_NODIMENSIONS 0x0800 /**< Format does not need width/height */
-#define AVFMT_NOSTREAMS 0x1000 /**< Format does not require any streams */
-#define AVFMT_NOBINSEARCH 0x2000 /**< Format does not allow to fallback to binary search via read_timestamp */
-#define AVFMT_NOGENSEARCH 0x4000 /**< Format does not allow to fallback to generic search */
-#define AVFMT_NO_BYTE_SEEK 0x8000 /**< Format does not allow seeking by bytes */
-#define AVFMT_ALLOW_FLUSH 0x10000 /**< Format allows flushing. If not set, the muxer will not receive a NULL packet in the write_packet function. */
-#define AVFMT_TS_NONSTRICT 0x20000 /**< Format does not require strictly
- increasing timestamps, but they must
- still be monotonic */
-
-/**
- * @addtogroup lavf_encoding
- * @{
- */
-typedef struct AVOutputFormat {
- const char *name;
- /**
- * 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.
- */
- const char *long_name;
- const char *mime_type;
- const char *extensions; /**< comma-separated filename extensions */
- /* output support */
- enum AVCodecID audio_codec; /**< default audio codec */
- enum AVCodecID video_codec; /**< default video codec */
- enum AVCodecID subtitle_codec; /**< default subtitle codec */
- /**
- * can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_RAWPICTURE,
- * AVFMT_GLOBALHEADER, AVFMT_NOTIMESTAMPS, AVFMT_VARIABLE_FPS,
- * AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH,
- * AVFMT_TS_NONSTRICT
- */
- int flags;
-
- /**
- * List of supported codec_id-codec_tag pairs, ordered by "better
- * choice first". The arrays are all terminated by AV_CODEC_ID_NONE.
- */
- const struct AVCodecTag * const *codec_tag;
-
-
- const AVClass *priv_class; ///< 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.
- *****************************************************************
- */
- struct AVOutputFormat *next;
- /**
- * size of private data so that it can be allocated in the wrapper
- */
- int priv_data_size;
-
- int (*write_header)(struct AVFormatContext *);
- /**
- * 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.
- */
- int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
- int (*write_trailer)(struct AVFormatContext *);
- /**
- * Currently only used to set pixel format if not YUV420P.
- */
- int (*interleave_packet)(struct AVFormatContext *, AVPacket *out,
- AVPacket *in, int flush);
- /**
- * 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.
- */
- int (*query_codec)(enum AVCodecID id, int std_compliance);
-} AVOutputFormat;
-/**
- * @}
- */
-
-/**
- * @addtogroup lavf_decoding
- * @{
- */
-typedef struct AVInputFormat {
- /**
- * A comma separated list of short names for the format. New names
- * may be appended with a minor bump.
- */
- const char *name;
-
- /**
- * 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.
- */
- const char *long_name;
-
- /**
- * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS,
- * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH,
- * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK.
- */
- int flags;
-
- /**
- * If extensions are defined, then no probe is done. You should
- * usually not use extension format guessing because it is not
- * reliable enough
- */
- const char *extensions;
-
- const struct AVCodecTag * const *codec_tag;
-
- const AVClass *priv_class; ///< 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.
- *****************************************************************
- */
- struct AVInputFormat *next;
-
- /**
- * Raw demuxers store their codec ID here.
- */
- int raw_codec_id;
-
- /**
- * Size of private data so that it can be allocated in the wrapper.
- */
- int priv_data_size;
-
- /**
- * 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.
- */
- int (*read_probe)(AVProbeData *);
-
- /**
- * 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.
- */
- int (*read_header)(struct AVFormatContext *);
-
- /**
- * 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 and only in the calling thread (not in a
- * background thread).
- * @return 0 on success, < 0 on error.
- * When returning an error, pkt must not have been allocated
- * or must be freed before returning
- */
- int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);
-
- /**
- * Close the stream. The AVFormatContext and AVStreams are not
- * freed by this function
- */
- int (*read_close)(struct AVFormatContext *);
-
- /**
- * 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)
- */
- int (*read_seek)(struct AVFormatContext *,
- int stream_index, int64_t timestamp, int flags);
-
- /**
- * Get the next timestamp in stream[stream_index].time_base units.
- * @return the timestamp or AV_NOPTS_VALUE if an error occurred
- */
- int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index,
- int64_t *pos, int64_t pos_limit);
-
- /**
- * Start/resume playing - only meaningful if using a network-based format
- * (RTSP).
- */
- int (*read_play)(struct AVFormatContext *);
-
- /**
- * Pause playing - only meaningful if using a network-based format
- * (RTSP).
- */
- int (*read_pause)(struct AVFormatContext *);
-
- /**
- * 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.
- */
- int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
-} AVInputFormat;
-/**
- * @}
- */
-
-enum AVStreamParseType {
- 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 */
-};
-
-typedef struct AVIndexEntry {
- int64_t pos;
- int64_t timestamp;
-#define AVINDEX_KEYFRAME 0x0001
- 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).
- int min_distance; /**< Minimum distance between this and the previous keyframe, used to avoid unneeded searching. */
-} AVIndexEntry;
-
-#define AV_DISPOSITION_DEFAULT 0x0001
-#define AV_DISPOSITION_DUB 0x0002
-#define AV_DISPOSITION_ORIGINAL 0x0004
-#define AV_DISPOSITION_COMMENT 0x0008
-#define AV_DISPOSITION_LYRICS 0x0010
-#define AV_DISPOSITION_KARAOKE 0x0020
-
-/**
- * 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.
- */
-#define AV_DISPOSITION_FORCED 0x0040
-#define AV_DISPOSITION_HEARING_IMPAIRED 0x0080 /**< stream for hearing impaired audiences */
-#define AV_DISPOSITION_VISUAL_IMPAIRED 0x0100 /**< stream for visual impaired audiences */
-#define AV_DISPOSITION_CLEAN_EFFECTS 0x0200 /**< 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.
- */
-#define AV_DISPOSITION_ATTACHED_PIC 0x0400
-
-/**
- * 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*.
- */
-typedef struct AVStream {
- int index; /**< stream index in AVFormatContext */
- /**
- * Format-specific stream ID.
- * decoding: set by libavformat
- * encoding: set by the user
- */
- int id;
- /**
- * Codec context associated with this stream. Allocated and freed by
- * libavformat.
- *
- * - decoding: The demuxer exports codec information stored in the headers
- * here.
- * - encoding: The user sets codec information, the muxer writes it to the
- * output. Mandatory fields as specified in AVCodecContext
- * documentation must be set even if this AVCodecContext is
- * not actually used for encoding.
- */
- AVCodecContext *codec;
-#if FF_API_R_FRAME_RATE
- /**
- * 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.
- */
- AVRational r_frame_rate;
-#endif
- void *priv_data;
-
- /**
- * encoding: pts generation when outputting stream
- */
- struct AVFrac pts;
-
- /**
- * This is the fundamental unit of time (in seconds) in terms
- * of which frame timestamps are represented.
- *
- * decoding: set by libavformat
- * encoding: set by libavformat in avformat_write_header. The muxer may use the
- * user-provided value of @ref AVCodecContext.time_base "codec->time_base"
- * as a hint.
- */
- AVRational time_base;
-
- /**
- * Decoding: pts of the first frame of the stream, 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).
- */
- int64_t start_time;
-
- /**
- * 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.
- */
- int64_t duration;
-
- int64_t nb_frames; ///< number of frames in this stream if known or 0
-
- int disposition; /**< AV_DISPOSITION_* bit field */
-
- enum AVDiscard discard; ///< 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.
- */
- AVRational sample_aspect_ratio;
-
- AVDictionary *metadata;
-
- /**
- * Average framerate
- */
- AVRational avg_frame_rate;
-
- /**
- * 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
- */
- AVPacket attached_pic;
-
- /*****************************************************************
- * 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()
- */
-#define MAX_STD_TIMEBASES (60*12+5)
- struct {
-#if FF_API_R_FRAME_RATE
- int64_t last_dts;
- int64_t duration_gcd;
- int duration_count;
- double duration_error[MAX_STD_TIMEBASES];
-#endif
- int nb_decoded_frames;
- int found_decoder;
-
- /**
- * Those are used for average framerate estimation.
- */
- int64_t fps_first_dts;
- int fps_first_dts_idx;
- int64_t fps_last_dts;
- int fps_last_dts_idx;
-
- } *info;
-
- int pts_wrap_bits; /**< 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.
- */
- int64_t reference_dts;
- int64_t first_dts;
- int64_t cur_dts;
- int64_t last_IP_pts;
- int last_IP_duration;
-
- /**
- * Number of packets to buffer for codec probing
- */
-#define MAX_PROBE_PACKETS 2500
- int probe_packets;
-
- /**
- * Number of frames that have been demuxed during av_find_stream_info()
- */
- int codec_info_nb_frames;
-
- /* av_read_frame() support */
- enum AVStreamParseType need_parsing;
- struct AVCodecParserContext *parser;
-
- /**
- * last packet in packet_buffer for this stream when muxing.
- */
- struct AVPacketList *last_in_packet_buffer;
- AVProbeData probe_data;
-#define MAX_REORDER_DELAY 16
- int64_t pts_buffer[MAX_REORDER_DELAY+1];
-
- AVIndexEntry *index_entries; /**< Only used if the format does not
- support seeking natively. */
- int nb_index_entries;
- unsigned int index_entries_allocated_size;
-} AVStream;
-
-#define AV_PROGRAM_RUNNING 1
-
-/**
- * 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*.
- */
-typedef struct AVProgram {
- int id;
- int flags;
- enum AVDiscard discard; ///< selects which program to discard and which to feed to the caller
- unsigned int *stream_index;
- unsigned int nb_stream_indexes;
- AVDictionary *metadata;
-} AVProgram;
-
-#define AVFMTCTX_NOHEADER 0x0001 /**< signal that no header is present
- (streams are added dynamically) */
-
-typedef struct AVChapter {
- int id; ///< unique ID to identify the chapter
- AVRational time_base; ///< time base in which the start/end timestamps are specified
- int64_t start, end; ///< chapter start/end time in time_base units
- AVDictionary *metadata;
-} AVChapter;
-
-/**
- * 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.
- */
-typedef struct AVFormatContext {
- /**
- * A class for logging and AVOptions. Set by avformat_alloc_context().
- * Exports (de)muxer private options if they exist.
- */
- const AVClass *av_class;
-
- /**
- * Can only be iformat or oformat, not both at the same time.
- *
- * decoding: set by avformat_open_input().
- * encoding: set by the user.
- */
- struct AVInputFormat *iformat;
- struct AVOutputFormat *oformat;
-
- /**
- * Format private data. This is an AVOptions-enabled struct
- * if and only if iformat/oformat.priv_class is not NULL.
- */
- void *priv_data;
-
- /**
- * I/O context.
- *
- * decoding: either set by the user before avformat_open_input() (then
- * the user must close it manually) or set by avformat_open_input().
- * encoding: set by the user.
- *
- * 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.
- */
- AVIOContext *pb;
-
- /* stream info */
- int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */
-
- /**
- * A list of all streams in the file. New streams are created with
- * avformat_new_stream().
- *
- * decoding: 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().
- * encoding: streams are created by the user before avformat_write_header().
- */
- unsigned int nb_streams;
- AVStream **streams;
-
- char filename[1024]; /**< input or output filename */
-
- /**
- * Decoding: 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.
- */
- int64_t start_time;
-
- /**
- * Decoding: 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 do not set any of them. This is deduced from the
- * AVStream values if not set.
- */
- int64_t duration;
-
- /**
- * Decoding: total stream bitrate in bit/s, 0 if not
- * available. Never set it directly if the file_size and the
- * duration are known as Libav can compute it automatically.
- */
- int bit_rate;
-
- unsigned int packet_size;
- int max_delay;
-
- int flags;
-#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames.
-#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index.
-#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input.
-#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS
-#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container
-#define AVFMT_FLAG_NOPARSE 0x0020 ///< 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
-#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible
-#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.
-#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted
-
- /**
- * decoding: size of data to probe; encoding: unused.
- */
- unsigned int probesize;
-
- /**
- * decoding: maximum time (in AV_TIME_BASE units) during which the input should
- * be analyzed in avformat_find_stream_info().
- */
- int max_analyze_duration;
-
- const uint8_t *key;
- int keylen;
-
- unsigned int nb_programs;
- AVProgram **programs;
-
- /**
- * Forced video codec_id.
- * Demuxing: Set by user.
- */
- enum AVCodecID video_codec_id;
-
- /**
- * Forced audio codec_id.
- * Demuxing: Set by user.
- */
- enum AVCodecID audio_codec_id;
-
- /**
- * Forced subtitle codec_id.
- * Demuxing: Set by user.
- */
- enum AVCodecID subtitle_codec_id;
-
- /**
- * 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
- */
- unsigned int max_index_size;
-
- /**
- * Maximum amount of memory in bytes to use for buffering frames
- * obtained from realtime capture devices.
- */
- unsigned int max_picture_buffer;
-
- unsigned int nb_chapters;
- AVChapter **chapters;
-
- AVDictionary *metadata;
-
- /**
- * 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.
- * - encoding: Set by user.
- * - decoding: Unused.
- */
- int64_t start_time_realtime;
-
- /**
- * decoding: number of frames used to probe fps
- */
- int fps_probe_size;
-
- /**
- * Error recognition; higher values will detect more errors but may
- * misdetect some more or less valid parts as errors.
- * - encoding: unused
- * - decoding: Set by user.
- */
- int error_recognition;
-
- /**
- * Custom interrupt callbacks for the I/O layer.
- *
- * decoding: set by the user before avformat_open_input().
- * encoding: 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.
- */
- AVIOInterruptCB interrupt_callback;
-
- /**
- * Flags to enable debugging.
- */
- int debug;
-#define FF_FDEBUG_TS 0x0001
- /*****************************************************************
- * 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.
- *****************************************************************
- */
-
- /**
- * This buffer is only needed when packets were already buffered but
- * not decoded, for example to get the codec parameters in MPEG
- * streams.
- */
- struct AVPacketList *packet_buffer;
- struct AVPacketList *packet_buffer_end;
-
- /* av_seek_frame() support */
- int64_t data_offset; /**< offset of the first packet */
-
- /**
- * Raw packets from the demuxer, prior to parsing and decoding.
- * This buffer is used for buffering packets until the codec can
- * be identified, as parsing cannot be done without knowing the
- * codec.
- */
- struct AVPacketList *raw_packet_buffer;
- struct AVPacketList *raw_packet_buffer_end;
- /**
- * Packets split by the parser get queued here.
- */
- struct AVPacketList *parse_queue;
- struct AVPacketList *parse_queue_end;
- /**
- * Remaining size available for raw_packet_buffer, in bytes.
- */
-#define RAW_PACKET_BUFFER_SIZE 2500000
- int raw_packet_buffer_remaining_size;
-} AVFormatContext;
-
-typedef struct AVPacketList {
- AVPacket pkt;
- struct AVPacketList *next;
-} AVPacketList;
-
-
-/**
- * @defgroup lavf_core Core functions
- * @ingroup libavf
- *
- * Functions for querying libavformat capabilities, allocating core structures,
- * etc.
- * @{
- */
-
-/**
- * Return the LIBAVFORMAT_VERSION_INT constant.
- */
-unsigned avformat_version(void);
-
-/**
- * Return the libavformat build-time configuration.
- */
-const char *avformat_configuration(void);
-
-/**
- * Return the libavformat license.
- */
-const char *avformat_license(void);
-
-/**
- * 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()
- */
-void av_register_all(void);
-
-void av_register_input_format(AVInputFormat *format);
-void av_register_output_format(AVOutputFormat *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.
- */
-int avformat_network_init(void);
-
-/**
- * Undo the initialization done by avformat_network_init.
- */
-int avformat_network_deinit(void);
-
-/**
- * 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.
- */
-AVInputFormat *av_iformat_next(AVInputFormat *f);
-
-/**
- * If f is NULL, returns the first registered output format,
- * if f is non-NULL, returns the next registered output format after f
- * or NULL if f is the last one.
- */
-AVOutputFormat *av_oformat_next(AVOutputFormat *f);
-
-/**
- * Allocate an AVFormatContext.
- * avformat_free_context() can be used to free the context and everything
- * allocated by the framework within it.
- */
-AVFormatContext *avformat_alloc_context(void);
-
-/**
- * Free an AVFormatContext and all its streams.
- * @param s context to free
- */
-void avformat_free_context(AVFormatContext *s);
-
-/**
- * Get the AVClass for AVFormatContext. It can be used in combination with
- * AV_OPT_SEARCH_FAKE_OBJ for examining options.
- *
- * @see av_opt_find().
- */
-const AVClass *avformat_get_class(void);
-
-/**
- * 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().
- *
- * @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.
- */
-AVStream *avformat_new_stream(AVFormatContext *s, AVCodec *c);
-
-AVProgram *av_new_program(AVFormatContext *s, int id);
-
-/**
- * @}
- */
-
-
-/**
- * @addtogroup lavf_decoding
- * @{
- */
-
-/**
- * Find AVInputFormat based on the short name of the input format.
- */
-AVInputFormat *av_find_input_format(const char *short_name);
-
-/**
- * Guess the file format.
- *
- * @param is_opened Whether the file is already opened; determines whether
- * demuxers with or without AVFMT_NOFILE are probed.
- */
-AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened);
-
-/**
- * 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_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.
- */
-AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max);
-
-/**
- * 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 filename the filename 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
- */
-int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
- const char *filename, void *logctx,
- unsigned int offset, unsigned int max_probe_size);
-
-/**
- * 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 filename Name 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.
- */
-int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options);
-
-/**
- * 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.
- */
-int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
-
-/**
- * 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.
- */
-int av_find_best_stream(AVFormatContext *ic,
- enum AVMediaType type,
- int wanted_stream_nb,
- int related_stream,
- AVCodec **decoder_ret,
- int flags);
-
-#if FF_API_READ_PACKET
-/**
- * @deprecated use AVFMT_FLAG_NOFILLIN | AVFMT_FLAG_NOPARSE to read raw
- * unprocessed packets
- *
- * Read a transport packet from a media file.
- *
- * This function is obsolete and should never be used.
- * Use av_read_frame() instead.
- *
- * @param s media file handle
- * @param pkt is filled
- * @return 0 if OK, AVERROR_xxx on error
- */
-attribute_deprecated
-int av_read_packet(AVFormatContext *s, AVPacket *pkt);
-#endif
-
-/**
- * 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.
- *
- * The returned packet is valid
- * until the next av_read_frame() or until av_close_input_file() and
- * must be freed with av_free_packet. 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
- */
-int av_read_frame(AVFormatContext *s, AVPacket *pkt);
-
-/**
- * Seek to the keyframe at timestamp.
- * 'timestamp' in 'stream_index'.
- * @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
- */
-int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp,
- int flags);
-
-/**
- * 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).
- *
- * @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!
- */
-int avformat_seek_file(AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
-
-/**
- * Start playing a network-based stream (e.g. RTSP stream) at the
- * current position.
- */
-int av_read_play(AVFormatContext *s);
-
-/**
- * Pause a network-based stream (e.g. RTSP stream).
- *
- * Use av_read_play() to resume it.
- */
-int av_read_pause(AVFormatContext *s);
-
-#if FF_API_CLOSE_INPUT_FILE
-/**
- * @deprecated use avformat_close_input()
- * Close a media file (but not its codecs).
- *
- * @param s media file handle
- */
-attribute_deprecated
-void av_close_input_file(AVFormatContext *s);
-#endif
-
-/**
- * Close an opened input AVFormatContext. Free it and all its contents
- * and set *s to NULL.
- */
-void avformat_close_input(AVFormatContext **s);
-/**
- * @}
- */
-
-#define AVSEEK_FLAG_BACKWARD 1 ///< seek backward
-#define AVSEEK_FLAG_BYTE 2 ///< seeking based on position in bytes
-#define AVSEEK_FLAG_ANY 4 ///< seek to any frame, even non-keyframes
-#define AVSEEK_FLAG_FRAME 8 ///< seeking based on frame number
-
-/**
- * @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 openened 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.
- */
-int avformat_write_header(AVFormatContext *s, AVDictionary **options);
-
-/**
- * Write a packet to an output media file.
- *
- * The packet shall contain one audio or video frame.
- * The packet must be correctly interleaved according to the container
- * specification, if not then av_interleaved_write_frame must be used.
- *
- * @param s media file handle
- * @param pkt The packet, which contains the stream_index, buf/buf_size,
- * dts/pts, ...
- * This 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.
- * @return < 0 on error, = 0 if OK, 1 if flushed and there is no more data to flush
- */
-int av_write_frame(AVFormatContext *s, AVPacket *pkt);
-
-/**
- * Write a packet to an output media file ensuring correct interleaving.
- *
- * The packet must contain one audio or video frame.
- * If the packets are already correctly interleaved, the application should
- * call av_write_frame() instead as it is slightly faster. It is also important
- * to keep in mind that completely non-interleaved input will need huge amounts
- * of memory to interleave with this, so it is preferable to interleave at the
- * demuxer level.
- *
- * @param s media file handle
- * @param pkt The packet containing the data to be written. Libavformat takes
- * ownership of the data and will free it when it sees fit using the packet's
- * This can be NULL (at any time, not just at the end), to flush the
- * interleaving queues.
- * @ref AVPacket.destruct "destruct" field. The caller must not access the data
- * after this function returns, as it may already be freed.
- * 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.
- *
- * @return 0 on success, a negative AVERROR on error.
- */
-int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt);
-
-#if FF_API_INTERLEAVE_PACKET
-/**
- * @deprecated this function was never meant to be called by the user
- * programs.
- */
-attribute_deprecated
-int av_interleave_packet_per_dts(AVFormatContext *s, AVPacket *out,
- AVPacket *pkt, int flush);
-#endif
-
-/**
- * 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
- */
-int av_write_trailer(AVFormatContext *s);
-
-/**
- * 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
- */
-AVOutputFormat *av_guess_format(const char *short_name,
- const char *filename,
- const char *mime_type);
-
-/**
- * Guess the codec ID based upon muxer and filename.
- */
-enum AVCodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
- const char *filename, const char *mime_type,
- enum AVMediaType type);
-
-/**
- * @}
- */
-
-
-/**
- * @defgroup lavf_misc Utility functions
- * @ingroup libavf
- * @{
- *
- * Miscelaneous 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
- */
-void av_hex_dump(FILE *f, const uint8_t *buf, int size);
-
-/**
- * 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_dump2, av_pkt_dump_log2
- */
-void av_hex_dump_log(void *avcl, int level, const uint8_t *buf, int size);
-
-/**
- * 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
- */
-void av_pkt_dump2(FILE *f, AVPacket *pkt, int dump_payload, AVStream *st);
-
-
-/**
- * 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
- */
-void av_pkt_dump_log2(void *avcl, int level, AVPacket *pkt, int dump_payload,
- AVStream *st);
-
-/**
- * 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
- */
-enum AVCodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag);
-
-/**
- * Get the 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
- */
-unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum AVCodecID id);
-
-int av_find_default_stream_index(AVFormatContext *s);
-
-/**
- * Get the index for a specific timestamp.
- * @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
- */
-int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags);
-
-/**
- * Add an index entry into a sorted list. Update the entry if the list
- * already contains it.
- *
- * @param timestamp timestamp in the time base of the given stream
- */
-int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp,
- int size, int distance, int flags);
-
-
-/**
- * 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
- */
-void av_url_split(char *proto, int proto_size,
- char *authorization, int authorization_size,
- char *hostname, int hostname_size,
- int *port_ptr,
- char *path, int path_size,
- const char *url);
-
-
-void av_dump_format(AVFormatContext *ic,
- int index,
- const char *url,
- int is_output);
-
-/**
- * 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
- */
-int av_get_frame_filename(char *buf, int buf_size,
- const char *path, int number);
-
-/**
- * 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
- */
-int av_filename_number_test(const char *filename);
-
-/**
- * Generate an SDP for an RTP session.
- *
- * @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
- */
-int av_sdp_create(AVFormatContext *ac[], int n_files, char *buf, int size);
-
-/**
- * Return a positive value if the given filename has one of the given
- * extensions, 0 otherwise.
- *
- * @param extensions a comma-separated list of filename extensions
- */
-int av_match_ext(const char *filename, const char *extensions);
-
-/**
- * Test if the given container can store a codec.
- *
- * @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.
- */
-int avformat_query_codec(AVOutputFormat *ofmt, enum AVCodecID codec_id, int std_compliance);
-
-/**
- * @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.
- */
-const struct AVCodecTag *avformat_get_riff_video_tags(void);
-/**
- * @return the table mapping RIFF FourCCs for audio to AVCodecID.
- */
-const struct AVCodecTag *avformat_get_riff_audio_tags(void);
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-#endif /* AVFORMAT_AVFORMAT_H */
--- a/misc/winutils/include/libavformat/avio.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,433 +0,0 @@
-/*
- * copyright (c) 2001 Fabrice Bellard
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#ifndef AVFORMAT_AVIO_H
-#define AVFORMAT_AVIO_H
-
-/**
- * @file
- * @ingroup lavf_io
- * Buffered I/O operations
- */
-
-#include <stdint.h>
-
-#include "libavutil/common.h"
-#include "libavutil/dict.h"
-#include "libavutil/log.h"
-
-#include "libavformat/version.h"
-
-
-#define AVIO_SEEKABLE_NORMAL 0x0001 /**< Seeking works like for a local file */
-
-/**
- * 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.
- */
-typedef struct AVIOInterruptCB {
- int (*callback)(void*);
- void *opaque;
-} AVIOInterruptCB;
-
-/**
- * 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()
- */
-typedef struct AVIOContext {
- /**
- * 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.
- */
- const AVClass *av_class;
- unsigned char *buffer; /**< Start of the buffer. */
- int buffer_size; /**< Maximum buffer size */
- unsigned char *buf_ptr; /**< Current position in the buffer */
- unsigned char *buf_end; /**< 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. */
- void *opaque; /**< A private pointer, passed to the read/write/seek/...
- functions. */
- int (*read_packet)(void *opaque, uint8_t *buf, int buf_size);
- int (*write_packet)(void *opaque, uint8_t *buf, int buf_size);
- int64_t (*seek)(void *opaque, int64_t offset, int whence);
- int64_t pos; /**< position in the file of the current buffer */
- int must_flush; /**< true if the next seek should flush */
- int eof_reached; /**< true if eof reached */
- int write_flag; /**< true if open for writing */
- int max_packet_size;
- unsigned long checksum;
- unsigned char *checksum_ptr;
- unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size);
- int error; /**< contains the error code or 0 if no error happened */
- /**
- * Pause or resume playback for network streaming protocols - e.g. MMS.
- */
- int (*read_pause)(void *opaque, int pause);
- /**
- * 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.
- */
- int64_t (*read_seek)(void *opaque, int stream_index,
- int64_t timestamp, int flags);
- /**
- * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
- */
- int seekable;
-} AVIOContext;
-
-/* unbuffered I/O */
-
-/**
- * Return AVIO_FLAG_* 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.
- */
-int avio_check(const char *url, int flags);
-
-/**
- * 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.
- * @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.
- * @param seek A function for seeking to specified byte position, may be NULL.
- *
- * @return Allocated AVIOContext or NULL on failure.
- */
-AVIOContext *avio_alloc_context(
- unsigned char *buffer,
- int buffer_size,
- int write_flag,
- void *opaque,
- int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
- int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
- int64_t (*seek)(void *opaque, int64_t offset, int whence));
-
-void avio_w8(AVIOContext *s, int b);
-void avio_write(AVIOContext *s, const unsigned char *buf, int size);
-void avio_wl64(AVIOContext *s, uint64_t val);
-void avio_wb64(AVIOContext *s, uint64_t val);
-void avio_wl32(AVIOContext *s, unsigned int val);
-void avio_wb32(AVIOContext *s, unsigned int val);
-void avio_wl24(AVIOContext *s, unsigned int val);
-void avio_wb24(AVIOContext *s, unsigned int val);
-void avio_wl16(AVIOContext *s, unsigned int val);
-void avio_wb16(AVIOContext *s, unsigned int val);
-
-/**
- * Write a NULL-terminated string.
- * @return number of bytes written.
- */
-int avio_put_str(AVIOContext *s, const char *str);
-
-/**
- * Convert an UTF-8 string to UTF-16LE and write it.
- * @return number of bytes written.
- */
-int avio_put_str16le(AVIOContext *s, const char *str);
-
-/**
- * Passing 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.
- */
-#define AVSEEK_SIZE 0x10000
-
-/**
- * Oring 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 unreasonble
- * means that can be extreemly slow.
- * This may be ignored by the seek code.
- */
-#define AVSEEK_FORCE 0x20000
-
-/**
- * fseek() equivalent for AVIOContext.
- * @return new position or AVERROR.
- */
-int64_t avio_seek(AVIOContext *s, int64_t offset, int whence);
-
-/**
- * Skip given number of bytes forward
- * @return new position or AVERROR.
- */
-static av_always_inline int64_t avio_skip(AVIOContext *s, int64_t offset)
-{
- return avio_seek(s, offset, SEEK_CUR);
-}
-
-/**
- * ftell() equivalent for AVIOContext.
- * @return position or AVERROR.
- */
-static av_always_inline int64_t avio_tell(AVIOContext *s)
-{
- return avio_seek(s, 0, SEEK_CUR);
-}
-
-/**
- * Get the filesize.
- * @return filesize or AVERROR
- */
-int64_t avio_size(AVIOContext *s);
-
-/** @warning currently size is limited */
-int avio_printf(AVIOContext *s, const char *fmt, ...) av_printf_format(2, 3);
-
-void avio_flush(AVIOContext *s);
-
-
-/**
- * Read size bytes from AVIOContext into buf.
- * @return number of bytes read or AVERROR
- */
-int avio_read(AVIOContext *s, unsigned char *buf, int size);
-
-/**
- * @name Functions for reading from AVIOContext
- * @{
- *
- * @note return 0 if EOF, so you cannot use it if EOF handling is
- * necessary
- */
-int avio_r8 (AVIOContext *s);
-unsigned int avio_rl16(AVIOContext *s);
-unsigned int avio_rl24(AVIOContext *s);
-unsigned int avio_rl32(AVIOContext *s);
-uint64_t avio_rl64(AVIOContext *s);
-unsigned int avio_rb16(AVIOContext *s);
-unsigned int avio_rb24(AVIOContext *s);
-unsigned int avio_rb32(AVIOContext *s);
-uint64_t avio_rb64(AVIOContext *s);
-/**
- * @}
- */
-
-/**
- * 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.
- */
-int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen);
-
-/**
- * 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)
- */
-int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen);
-int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen);
-
-
-/**
- * @name URL open modes
- * The flags argument to avio_open must be one of the following
- * constants, optionally ORed with other flags.
- * @{
- */
-#define AVIO_FLAG_READ 1 /**< read-only */
-#define AVIO_FLAG_WRITE 2 /**< write-only */
-#define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) /**< read-write pseudo flag */
-/**
- * @}
- */
-
-/**
- * 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.
- */
-#define AVIO_FLAG_NONBLOCK 8
-
-/**
- * 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
- */
-int avio_open(AVIOContext **s, const char *url, int flags);
-
-/**
- * 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
- */
-int avio_open2(AVIOContext **s, const char *url, int flags,
- const AVIOInterruptCB *int_cb, AVDictionary **options);
-
-/**
- * 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_closep
- */
-int avio_close(AVIOContext *s);
-
-/**
- * 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
- */
-int avio_closep(AVIOContext **s);
-
-
-/**
- * Open a write only memory stream.
- *
- * @param s new IO context
- * @return zero if no error.
- */
-int avio_open_dyn_buf(AVIOContext **s);
-
-/**
- * Return the written size and a pointer to the buffer. The buffer
- * must be freed with av_free().
- * Padding of FF_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
- */
-int avio_close_dyn_buf(AVIOContext *s, uint8_t **pbuffer);
-
-/**
- * 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
- */
-const char *avio_enum_protocols(void **opaque, int output);
-
-/**
- * Pause and resume playing - only meaningful if using a network streaming
- * protocol (e.g. MMS).
- * @param pause 1 for pause, 0 for resume
- */
-int avio_pause(AVIOContext *h, int pause);
-
-/**
- * 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
- */
-int64_t avio_seek_time(AVIOContext *h, int stream_index,
- int64_t timestamp, int flags);
-
-#endif /* AVFORMAT_AVIO_H */
--- a/misc/winutils/include/libavformat/version.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-/*
- * Version macros.
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVFORMAT_VERSION_H
-#define AVFORMAT_VERSION_H
-
-/**
- * @file
- * @ingroup libavf
- * Libavformat version macros
- */
-
-#include "libavutil/avutil.h"
-
-#define LIBAVFORMAT_VERSION_MAJOR 54
-#define LIBAVFORMAT_VERSION_MINOR 19
-#define LIBAVFORMAT_VERSION_MICRO 0
-
-#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
- LIBAVFORMAT_VERSION_MINOR, \
- LIBAVFORMAT_VERSION_MICRO)
-#define LIBAVFORMAT_VERSION AV_VERSION(LIBAVFORMAT_VERSION_MAJOR, \
- LIBAVFORMAT_VERSION_MINOR, \
- LIBAVFORMAT_VERSION_MICRO)
-#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
-
-#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
-
-/**
- * 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_CLOSE_INPUT_FILE
-#define FF_API_CLOSE_INPUT_FILE (LIBAVFORMAT_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_APPLEHTTP_PROTO
-#define FF_API_APPLEHTTP_PROTO (LIBAVFORMAT_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_READ_PACKET
-#define FF_API_READ_PACKET (LIBAVFORMAT_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_INTERLEAVE_PACKET
-#define FF_API_INTERLEAVE_PACKET (LIBAVFORMAT_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_AV_GETTIME
-#define FF_API_AV_GETTIME (LIBAVFORMAT_VERSION_MAJOR < 55)
-#endif
-#ifndef FF_API_R_FRAME_RATE
-#define FF_API_R_FRAME_RATE (LIBAVFORMAT_VERSION_MAJOR < 55)
-#endif
-
-#endif /* AVFORMAT_VERSION_H */
--- a/misc/winutils/include/libavutil/adler32.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * copyright (c) 2006 Mans Rullgard
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_ADLER32_H
-#define AVUTIL_ADLER32_H
-
-#include <stdint.h>
-#include "attributes.h"
-
-/**
- * @ingroup lavu_crypto
- * Calculate the Adler32 checksum of a buffer.
- *
- * Passing the return value to a subsequent av_adler32_update() call
- * allows the checksum of multiple buffers to be calculated as though
- * they were concatenated.
- *
- * @param adler initial checksum value
- * @param buf pointer to input buffer
- * @param len size of input buffer
- * @return updated checksum
- */
-unsigned long av_adler32_update(unsigned long adler, const uint8_t *buf,
- unsigned int len) av_pure;
-
-#endif /* AVUTIL_ADLER32_H */
--- a/misc/winutils/include/libavutil/aes.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * copyright (c) 2007 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_AES_H
-#define AVUTIL_AES_H
-
-#include <stdint.h>
-
-#include "attributes.h"
-#include "version.h"
-
-/**
- * @defgroup lavu_aes AES
- * @ingroup lavu_crypto
- * @{
- */
-
-#if FF_API_CONTEXT_SIZE
-extern attribute_deprecated const int av_aes_size;
-#endif
-
-struct AVAES;
-
-/**
- * Allocate an AVAES context.
- */
-struct AVAES *av_aes_alloc(void);
-
-/**
- * Initialize an AVAES context.
- * @param key_bits 128, 192 or 256
- * @param decrypt 0 for encryption, 1 for decryption
- */
-int av_aes_init(struct AVAES *a, const uint8_t *key, int key_bits, int decrypt);
-
-/**
- * Encrypt or decrypt a buffer using a previously initialized context.
- * @param count number of 16 byte blocks
- * @param dst destination array, can be equal to src
- * @param src source array, can be equal to dst
- * @param iv initialization vector for CBC mode, if NULL then ECB will be used
- * @param decrypt 0 for encryption, 1 for decryption
- */
-void av_aes_crypt(struct AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_AES_H */
--- a/misc/winutils/include/libavutil/attributes.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,122 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * Macro definitions for various function/variable attributes
- */
-
-#ifndef AVUTIL_ATTRIBUTES_H
-#define AVUTIL_ATTRIBUTES_H
-
-#ifdef __GNUC__
-# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y)
-#else
-# define AV_GCC_VERSION_AT_LEAST(x,y) 0
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(3,1)
-# define av_always_inline __attribute__((always_inline)) inline
-#elif defined(_MSC_VER)
-# define av_always_inline __forceinline
-#else
-# define av_always_inline inline
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(3,1)
-# define av_noinline __attribute__((noinline))
-#else
-# define av_noinline
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(3,1)
-# define av_pure __attribute__((pure))
-#else
-# define av_pure
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(2,6)
-# define av_const __attribute__((const))
-#else
-# define av_const
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(4,3)
-# define av_cold __attribute__((cold))
-#else
-# define av_cold
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(4,1)
-# define av_flatten __attribute__((flatten))
-#else
-# define av_flatten
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(3,1)
-# define attribute_deprecated __attribute__((deprecated))
-#else
-# define attribute_deprecated
-#endif
-
-#if defined(__GNUC__)
-# define av_unused __attribute__((unused))
-#else
-# define av_unused
-#endif
-
-/**
- * Mark a variable as used and prevent the compiler from optimizing it
- * away. This is useful for variables accessed only from inline
- * assembler without the compiler being aware.
- */
-#if AV_GCC_VERSION_AT_LEAST(3,1)
-# define av_used __attribute__((used))
-#else
-# define av_used
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(3,3)
-# define av_alias __attribute__((may_alias))
-#else
-# define av_alias
-#endif
-
-#if defined(__GNUC__) && !defined(__ICC)
-# define av_uninit(x) x=x
-#else
-# define av_uninit(x) x
-#endif
-
-#ifdef __GNUC__
-# define av_builtin_constant_p __builtin_constant_p
-# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos)))
-#else
-# define av_builtin_constant_p(x) 0
-# define av_printf_format(fmtpos, attrpos)
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(2,5)
-# define av_noreturn __attribute__((noreturn))
-#else
-# define av_noreturn
-#endif
-
-#endif /* AVUTIL_ATTRIBUTES_H */
--- a/misc/winutils/include/libavutil/audio_fifo.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-/*
- * Audio FIFO
- * Copyright (c) 2012 Justin Ruggles <justin.ruggles@gmail.com>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * Audio FIFO Buffer
- */
-
-#ifndef AVUTIL_AUDIO_FIFO_H
-#define AVUTIL_AUDIO_FIFO_H
-
-#include "avutil.h"
-#include "fifo.h"
-#include "samplefmt.h"
-
-/**
- * @addtogroup lavu_audio
- * @{
- */
-
-/**
- * Context for an Audio FIFO Buffer.
- *
- * - Operates at the sample level rather than the byte level.
- * - Supports multiple channels with either planar or packed sample format.
- * - Automatic reallocation when writing to a full buffer.
- */
-typedef struct AVAudioFifo AVAudioFifo;
-
-/**
- * Free an AVAudioFifo.
- *
- * @param af AVAudioFifo to free
- */
-void av_audio_fifo_free(AVAudioFifo *af);
-
-/**
- * Allocate an AVAudioFifo.
- *
- * @param sample_fmt sample format
- * @param channels number of channels
- * @param nb_samples initial allocation size, in samples
- * @return newly allocated AVAudioFifo, or NULL on error
- */
-AVAudioFifo *av_audio_fifo_alloc(enum AVSampleFormat sample_fmt, int channels,
- int nb_samples);
-
-/**
- * Reallocate an AVAudioFifo.
- *
- * @param af AVAudioFifo to reallocate
- * @param nb_samples new allocation size, in samples
- * @return 0 if OK, or negative AVERROR code on failure
- */
-int av_audio_fifo_realloc(AVAudioFifo *af, int nb_samples);
-
-/**
- * Write data to an AVAudioFifo.
- *
- * The AVAudioFifo will be reallocated automatically if the available space
- * is less than nb_samples.
- *
- * @see enum AVSampleFormat
- * The documentation for AVSampleFormat describes the data layout.
- *
- * @param af AVAudioFifo to write to
- * @param data audio data plane pointers
- * @param nb_samples number of samples to write
- * @return number of samples actually written, or negative AVERROR
- * code on failure.
- */
-int av_audio_fifo_write(AVAudioFifo *af, void **data, int nb_samples);
-
-/**
- * Read data from an AVAudioFifo.
- *
- * @see enum AVSampleFormat
- * The documentation for AVSampleFormat describes the data layout.
- *
- * @param af AVAudioFifo to read from
- * @param data audio data plane pointers
- * @param nb_samples number of samples to read
- * @return number of samples actually read, or negative AVERROR code
- * on failure.
- */
-int av_audio_fifo_read(AVAudioFifo *af, void **data, int nb_samples);
-
-/**
- * Drain data from an AVAudioFifo.
- *
- * Removes the data without reading it.
- *
- * @param af AVAudioFifo to drain
- * @param nb_samples number of samples to drain
- * @return 0 if OK, or negative AVERROR code on failure
- */
-int av_audio_fifo_drain(AVAudioFifo *af, int nb_samples);
-
-/**
- * Reset the AVAudioFifo buffer.
- *
- * This empties all data in the buffer.
- *
- * @param af AVAudioFifo to reset
- */
-void av_audio_fifo_reset(AVAudioFifo *af);
-
-/**
- * Get the current number of samples in the AVAudioFifo available for reading.
- *
- * @param af the AVAudioFifo to query
- * @return number of samples available for reading
- */
-int av_audio_fifo_size(AVAudioFifo *af);
-
-/**
- * Get the current number of samples in the AVAudioFifo available for writing.
- *
- * @param af the AVAudioFifo to query
- * @return number of samples available for writing
- */
-int av_audio_fifo_space(AVAudioFifo *af);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_AUDIO_FIFO_H */
--- a/misc/winutils/include/libavutil/audioconvert.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,182 +0,0 @@
-/*
- * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (c) 2008 Peter Ross
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_AUDIOCONVERT_H
-#define AVUTIL_AUDIOCONVERT_H
-
-#include <stdint.h>
-
-/**
- * @file
- * audio conversion routines
- */
-
-/**
- * @addtogroup lavu_audio
- * @{
- */
-
-/**
- * @defgroup channel_masks Audio channel masks
- * @{
- */
-#define AV_CH_FRONT_LEFT 0x00000001
-#define AV_CH_FRONT_RIGHT 0x00000002
-#define AV_CH_FRONT_CENTER 0x00000004
-#define AV_CH_LOW_FREQUENCY 0x00000008
-#define AV_CH_BACK_LEFT 0x00000010
-#define AV_CH_BACK_RIGHT 0x00000020
-#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040
-#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080
-#define AV_CH_BACK_CENTER 0x00000100
-#define AV_CH_SIDE_LEFT 0x00000200
-#define AV_CH_SIDE_RIGHT 0x00000400
-#define AV_CH_TOP_CENTER 0x00000800
-#define AV_CH_TOP_FRONT_LEFT 0x00001000
-#define AV_CH_TOP_FRONT_CENTER 0x00002000
-#define AV_CH_TOP_FRONT_RIGHT 0x00004000
-#define AV_CH_TOP_BACK_LEFT 0x00008000
-#define AV_CH_TOP_BACK_CENTER 0x00010000
-#define AV_CH_TOP_BACK_RIGHT 0x00020000
-#define AV_CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
-#define AV_CH_STEREO_RIGHT 0x40000000 ///< See AV_CH_STEREO_LEFT.
-#define AV_CH_WIDE_LEFT 0x0000000080000000ULL
-#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL
-#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL
-#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL
-#define AV_CH_LOW_FREQUENCY_2 0x0000000800000000ULL
-
-/** 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. */
-#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL
-
-/**
- * @}
- * @defgroup channel_mask_c Audio channel convenience macros
- * @{
- * */
-#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER)
-#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
-#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)
-#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
-#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
-#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY)
-#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
-#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY)
-#define AV_CH_LAYOUT_2_2 (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
-#define AV_CH_LAYOUT_QUAD (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
-#define AV_CH_LAYOUT_5POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
-#define AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
-#define AV_CH_LAYOUT_5POINT0_BACK (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
-#define AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY)
-#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER)
-#define AV_CH_LAYOUT_6POINT0_FRONT (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
-#define AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER)
-#define AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER)
-#define AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER)
-#define AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY)
-#define AV_CH_LAYOUT_7POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
-#define AV_CH_LAYOUT_7POINT0_FRONT (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
-#define AV_CH_LAYOUT_7POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
-#define AV_CH_LAYOUT_7POINT1_WIDE (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
-#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
-#define AV_CH_LAYOUT_OCTAGONAL (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
-#define AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
-
-enum AVMatrixEncoding {
- AV_MATRIX_ENCODING_NONE,
- AV_MATRIX_ENCODING_DOLBY,
- AV_MATRIX_ENCODING_DPLII,
- 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"
- */
-uint64_t av_get_channel_layout(const char *name);
-
-/**
- * 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
- */
-void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout);
-
-/**
- * Return the number of channels in the channel layout.
- */
-int av_get_channel_layout_nb_channels(uint64_t channel_layout);
-
-/**
- * Return default channel layout for a given number of channels.
- */
-uint64_t av_get_default_channel_layout(int nb_channels);
-
-/**
- * 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.
- */
-int av_get_channel_layout_channel_index(uint64_t channel_layout,
- uint64_t channel);
-
-/**
- * Get the channel with the given index in channel_layout.
- */
-uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
-
-/**
- * Get the name of a given channel.
- *
- * @return channel name on success, NULL on error.
- */
-const char *av_get_channel_name(uint64_t channel);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_AUDIOCONVERT_H */
--- a/misc/winutils/include/libavutil/avassert.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * copyright (c) 2010 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * simple assert() macros that are a bit more flexible than ISO C assert().
- * @author Michael Niedermayer <michaelni@gmx.at>
- */
-
-#ifndef AVUTIL_AVASSERT_H
-#define AVUTIL_AVASSERT_H
-
-#include <stdlib.h>
-#include "avutil.h"
-#include "log.h"
-
-/**
- * assert() equivalent, that is always enabled.
- */
-#define av_assert0(cond) do { \
- if (!(cond)) { \
- av_log(NULL, AV_LOG_FATAL, "Assertion %s failed at %s:%d\n", \
- AV_STRINGIFY(cond), __FILE__, __LINE__); \
- abort(); \
- } \
-} while (0)
-
-
-/**
- * assert() equivalent, that does not lie in speed critical code.
- * These asserts() thus can be enabled without fearing speedloss.
- */
-#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 0
-#define av_assert1(cond) av_assert0(cond)
-#else
-#define av_assert1(cond) ((void)0)
-#endif
-
-
-/**
- * assert() equivalent, that does lie in speed critical code.
- */
-#if defined(ASSERT_LEVEL) && ASSERT_LEVEL > 1
-#define av_assert2(cond) av_assert0(cond)
-#else
-#define av_assert2(cond) ((void)0)
-#endif
-
-#endif /* AVUTIL_AVASSERT_H */
--- a/misc/winutils/include/libavutil/avconfig.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-/* Generated by ffconf */
-#ifndef AVUTIL_AVCONFIG_H
-#define AVUTIL_AVCONFIG_H
-#define AV_HAVE_BIGENDIAN 0
-#define AV_HAVE_FAST_UNALIGNED 1
-#endif /* AVUTIL_AVCONFIG_H */
--- a/misc/winutils/include/libavutil/avstring.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,175 +0,0 @@
-/*
- * Copyright (c) 2007 Mans Rullgard
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_AVSTRING_H
-#define AVUTIL_AVSTRING_H
-
-#include <stddef.h>
-#include "attributes.h"
-
-/**
- * @addtogroup lavu_string
- * @{
- */
-
-/**
- * Return non-zero if pfx is a prefix of str. If it is, *ptr is set to
- * the address of the first character in str after the prefix.
- *
- * @param str input string
- * @param pfx prefix to test
- * @param ptr updated if the prefix is matched inside str
- * @return non-zero if the prefix matches, zero otherwise
- */
-int av_strstart(const char *str, const char *pfx, const char **ptr);
-
-/**
- * Return non-zero if pfx is a prefix of str independent of case. If
- * it is, *ptr is set to the address of the first character in str
- * after the prefix.
- *
- * @param str input string
- * @param pfx prefix to test
- * @param ptr updated if the prefix is matched inside str
- * @return non-zero if the prefix matches, zero otherwise
- */
-int av_stristart(const char *str, const char *pfx, const char **ptr);
-
-/**
- * Locate the first case-independent occurrence in the string haystack
- * of the string needle. A zero-length string needle is considered to
- * match at the start of haystack.
- *
- * This function is a case-insensitive version of the standard strstr().
- *
- * @param haystack string to search in
- * @param needle string to search for
- * @return pointer to the located match within haystack
- * or a null pointer if no match
- */
-char *av_stristr(const char *haystack, const char *needle);
-
-/**
- * Copy the string src to dst, but no more than size - 1 bytes, and
- * null-terminate dst.
- *
- * This function is the same as BSD strlcpy().
- *
- * @param dst destination buffer
- * @param src source string
- * @param size size of destination buffer
- * @return the length of src
- *
- * @warning since the return value is the length of src, src absolutely
- * _must_ be a properly 0-terminated string, otherwise this will read beyond
- * the end of the buffer and possibly crash.
- */
-size_t av_strlcpy(char *dst, const char *src, size_t size);
-
-/**
- * Append the string src to the string dst, but to a total length of
- * no more than size - 1 bytes, and null-terminate dst.
- *
- * This function is similar to BSD strlcat(), but differs when
- * size <= strlen(dst).
- *
- * @param dst destination buffer
- * @param src source string
- * @param size size of destination buffer
- * @return the total length of src and dst
- *
- * @warning since the return value use the length of src and dst, these
- * absolutely _must_ be a properly 0-terminated strings, otherwise this
- * will read beyond the end of the buffer and possibly crash.
- */
-size_t av_strlcat(char *dst, const char *src, size_t size);
-
-/**
- * Append output to a string, according to a format. Never write out of
- * the destination buffer, and always put a terminating 0 within
- * the buffer.
- * @param dst destination buffer (string to which the output is
- * appended)
- * @param size total size of the destination buffer
- * @param fmt printf-compatible format string, specifying how the
- * following parameters are used
- * @return the length of the string that would have been generated
- * if enough space had been available
- */
-size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) av_printf_format(3, 4);
-
-/**
- * Convert a number to a av_malloced string.
- */
-char *av_d2str(double d);
-
-/**
- * Unescape the given string until a non escaped terminating char,
- * and return the token corresponding to the unescaped string.
- *
- * The normal \ and ' escaping is supported. Leading and trailing
- * whitespaces are removed, unless they are escaped with '\' or are
- * enclosed between ''.
- *
- * @param buf the buffer to parse, buf will be updated to point to the
- * terminating char
- * @param term a 0-terminated list of terminating chars
- * @return the malloced unescaped string, which must be av_freed by
- * the user, NULL in case of allocation failure
- */
-char *av_get_token(const char **buf, const char *term);
-
-/**
- * Locale-independent conversion of ASCII characters to uppercase.
- */
-static inline int av_toupper(int c)
-{
- if (c >= 'a' && c <= 'z')
- c ^= 0x20;
- return c;
-}
-
-/**
- * Locale-independent conversion of ASCII characters to lowercase.
- */
-static inline int av_tolower(int c)
-{
- if (c >= 'A' && c <= 'Z')
- c ^= 0x20;
- return c;
-}
-
-/*
- * Locale-independent case-insensitive compare.
- * @note This means only ASCII-range characters are case-insensitive
- */
-int av_strcasecmp(const char *a, const char *b);
-
-/**
- * Locale-independent case-insensitive compare.
- * @note This means only ASCII-range characters are case-insensitive
- */
-int av_strncasecmp(const char *a, const char *b, size_t n);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_AVSTRING_H */
--- a/misc/winutils/include/libavutil/avutil.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,274 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_AVUTIL_H
-#define AVUTIL_AVUTIL_H
-
-/**
- * @file
- * external API header
- */
-
-/**
- * @mainpage
- *
- * @section libav_intro Introduction
- *
- * This document describes the usage of the different libraries
- * provided by Libav.
- *
- * @li @ref libavc "libavcodec" encoding/decoding library
- * @li @subpage libavfilter graph based frame editing library
- * @li @ref libavf "libavformat" I/O and muxing/demuxing library
- * @li @ref lavd "libavdevice" special devices muxing/demuxing library
- * @li @ref lavu "libavutil" common utility library
- * @li @subpage libswscale color conversion and scaling library
- */
-
-/**
- * @defgroup lavu Common utility functions
- *
- * @brief
- * libavutil contains the code shared across all the other Libav
- * libraries
- *
- * @note In order to use the functions provided by avutil you must include
- * the specific header.
- *
- * @{
- *
- * @defgroup lavu_crypto Crypto and Hashing
- *
- * @{
- * @}
- *
- * @defgroup lavu_math Maths
- * @{
- *
- * @}
- *
- * @defgroup lavu_string String Manipulation
- *
- * @{
- *
- * @}
- *
- * @defgroup lavu_mem Memory Management
- *
- * @{
- *
- * @}
- *
- * @defgroup lavu_data Data Structures
- * @{
- *
- * @}
- *
- * @defgroup lavu_audio Audio related
- *
- * @{
- *
- * @}
- *
- * @defgroup lavu_error Error Codes
- *
- * @{
- *
- * @}
- *
- * @defgroup lavu_misc Other
- *
- * @{
- *
- * @defgroup lavu_internal Internal
- *
- * Not exported functions, for internal usage only
- *
- * @{
- *
- * @}
- */
-
-
-/**
- * @defgroup preproc_misc Preprocessor String Macros
- *
- * String manipulation macros
- *
- * @{
- */
-
-#define AV_STRINGIFY(s) AV_TOSTRING(s)
-#define AV_TOSTRING(s) #s
-
-#define AV_GLUE(a, b) a ## b
-#define AV_JOIN(a, b) AV_GLUE(a, b)
-
-#define AV_PRAGMA(s) _Pragma(#s)
-
-/**
- * @}
- */
-
-/**
- * @defgroup version_utils Library Version Macros
- *
- * Useful to check and match library version in order to maintain
- * backward compatibility.
- *
- * @{
- */
-
-#define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c)
-#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c
-#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
-
-/**
- * @}
- */
-
-/**
- * @addtogroup lavu_ver
- * @{
- */
-
-/**
- * Return the LIBAVUTIL_VERSION_INT constant.
- */
-unsigned avutil_version(void);
-
-/**
- * Return the libavutil build-time configuration.
- */
-const char *avutil_configuration(void);
-
-/**
- * Return the libavutil license.
- */
-const char *avutil_license(void);
-
-/**
- * @}
- */
-
-/**
- * @addtogroup lavu_media Media Type
- * @brief Media Type
- */
-
-enum AVMediaType {
- 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
-};
-
-/**
- * @defgroup lavu_const Constants
- * @{
- *
- * @defgroup lavu_enc Encoding specific
- *
- * @note those definition should move to avcodec
- * @{
- */
-
-#define FF_LAMBDA_SHIFT 7
-#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
-#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
-#define FF_LAMBDA_MAX (256*128-1)
-
-#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
-
-/**
- * @}
- * @defgroup lavu_time Timestamp specific
- *
- * Libav internal timebase and timestamp definitions
- *
- * @{
- */
-
-/**
- * @brief Undefined timestamp value
- *
- * Usually reported by demuxer that work on containers that do not provide
- * either pts or dts.
- */
-
-#define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
-
-/**
- * Internal time base represented as integer
- */
-
-#define AV_TIME_BASE 1000000
-
-/**
- * Internal time base represented as fractional value
- */
-
-#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
-
-/**
- * @}
- * @}
- * @defgroup lavu_picture Image related
- *
- * AVPicture types, pixel formats and basic image planes manipulation.
- *
- * @{
- */
-
-enum AVPictureType {
- AV_PICTURE_TYPE_I = 1, ///< Intra
- AV_PICTURE_TYPE_P, ///< Predicted
- AV_PICTURE_TYPE_B, ///< Bi-dir predicted
- AV_PICTURE_TYPE_S, ///< S(GMC)-VOP MPEG4
- 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
- */
-char av_get_picture_type_char(enum AVPictureType pict_type);
-
-/**
- * @}
- */
-
-#include "error.h"
-#include "version.h"
-
-/**
- * @}
- * @}
- */
-
-#endif /* AVUTIL_AVUTIL_H */
--- a/misc/winutils/include/libavutil/base64.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
- * Copyright (c) 2006 Ryan Martell. (rdm4@martellventures.com)
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_BASE64_H
-#define AVUTIL_BASE64_H
-
-#include <stdint.h>
-
-/**
- * @defgroup lavu_base64 Base64
- * @ingroup lavu_crypto
- * @{
- */
-
-
-/**
- * Decode a base64-encoded string.
- *
- * @param out buffer for decoded data
- * @param in null-terminated input string
- * @param out_size size in bytes of the out buffer, must be at
- * least 3/4 of the length of in
- * @return number of bytes written, or a negative value in case of
- * invalid input
- */
-int av_base64_decode(uint8_t *out, const char *in, int out_size);
-
-/**
- * Encode data to base64 and null-terminate.
- *
- * @param out buffer for encoded data
- * @param out_size size in bytes of the output buffer, must be at
- * least AV_BASE64_SIZE(in_size)
- * @param in_size size in bytes of the 'in' buffer
- * @return 'out' or NULL in case of error
- */
-char *av_base64_encode(char *out, int out_size, const uint8_t *in, int in_size);
-
-/**
- * Calculate the output size needed to base64-encode x bytes.
- */
-#define AV_BASE64_SIZE(x) (((x)+2) / 3 * 4 + 1)
-
- /**
- * @}
- */
-
-#endif /* AVUTIL_BASE64_H */
--- a/misc/winutils/include/libavutil/blowfish.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Blowfish algorithm
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_BLOWFISH_H
-#define AVUTIL_BLOWFISH_H
-
-#include <stdint.h>
-
-/**
- * @defgroup lavu_blowfish Blowfish
- * @ingroup lavu_crypto
- * @{
- */
-
-#define AV_BF_ROUNDS 16
-
-typedef struct AVBlowfish {
- uint32_t p[AV_BF_ROUNDS + 2];
- uint32_t s[4][256];
-} AVBlowfish;
-
-/**
- * Initialize an AVBlowfish context.
- *
- * @param ctx an AVBlowfish context
- * @param key a key
- * @param key_len length of the key
- */
-void av_blowfish_init(struct AVBlowfish *ctx, const uint8_t *key, int key_len);
-
-/**
- * Encrypt or decrypt a buffer using a previously initialized context.
- *
- * @param ctx an AVBlowfish context
- * @param xl left four bytes halves of input to be encrypted
- * @param xr right four bytes halves of input to be encrypted
- * @param decrypt 0 for encryption, 1 for decryption
- */
-void av_blowfish_crypt_ecb(struct AVBlowfish *ctx, uint32_t *xl, uint32_t *xr,
- int decrypt);
-
-/**
- * Encrypt or decrypt a buffer using a previously initialized context.
- *
- * @param ctx an AVBlowfish context
- * @param dst destination array, can be equal to src
- * @param src source array, can be equal to dst
- * @param count number of 8 byte blocks
- * @param iv initialization vector for CBC mode, if NULL ECB will be used
- * @param decrypt 0 for encryption, 1 for decryption
- */
-void av_blowfish_crypt(struct AVBlowfish *ctx, uint8_t *dst, const uint8_t *src,
- int count, uint8_t *iv, int decrypt);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_BLOWFISH_H */
--- a/misc/winutils/include/libavutil/bswap.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * byte swapping routines
- */
-
-#ifndef AVUTIL_BSWAP_H
-#define AVUTIL_BSWAP_H
-
-#include <stdint.h>
-#include "libavutil/avconfig.h"
-#include "attributes.h"
-
-#ifdef HAVE_AV_CONFIG_H
-
-#include "config.h"
-
-#if ARCH_ARM
-# include "arm/bswap.h"
-#elif ARCH_AVR32
-# include "avr32/bswap.h"
-#elif ARCH_BFIN
-# include "bfin/bswap.h"
-#elif ARCH_SH4
-# include "sh4/bswap.h"
-#elif ARCH_X86
-# include "x86/bswap.h"
-#endif
-
-#endif /* HAVE_AV_CONFIG_H */
-
-#define AV_BSWAP16C(x) (((x) << 8 & 0xff00) | ((x) >> 8 & 0x00ff))
-#define AV_BSWAP32C(x) (AV_BSWAP16C(x) << 16 | AV_BSWAP16C((x) >> 16))
-#define AV_BSWAP64C(x) (AV_BSWAP32C(x) << 32 | AV_BSWAP32C((x) >> 32))
-
-#define AV_BSWAPC(s, x) AV_BSWAP##s##C(x)
-
-#ifndef av_bswap16
-static av_always_inline av_const uint16_t av_bswap16(uint16_t x)
-{
- x= (x>>8) | (x<<8);
- return x;
-}
-#endif
-
-#ifndef av_bswap32
-static av_always_inline av_const uint32_t av_bswap32(uint32_t x)
-{
- return AV_BSWAP32C(x);
-}
-#endif
-
-#ifndef av_bswap64
-static inline uint64_t av_const av_bswap64(uint64_t x)
-{
- return (uint64_t)av_bswap32(x) << 32 | av_bswap32(x >> 32);
-}
-#endif
-
-// be2ne ... big-endian to native-endian
-// le2ne ... little-endian to native-endian
-
-#if AV_HAVE_BIGENDIAN
-#define av_be2ne16(x) (x)
-#define av_be2ne32(x) (x)
-#define av_be2ne64(x) (x)
-#define av_le2ne16(x) av_bswap16(x)
-#define av_le2ne32(x) av_bswap32(x)
-#define av_le2ne64(x) av_bswap64(x)
-#define AV_BE2NEC(s, x) (x)
-#define AV_LE2NEC(s, x) AV_BSWAPC(s, x)
-#else
-#define av_be2ne16(x) av_bswap16(x)
-#define av_be2ne32(x) av_bswap32(x)
-#define av_be2ne64(x) av_bswap64(x)
-#define av_le2ne16(x) (x)
-#define av_le2ne32(x) (x)
-#define av_le2ne64(x) (x)
-#define AV_BE2NEC(s, x) AV_BSWAPC(s, x)
-#define AV_LE2NEC(s, x) (x)
-#endif
-
-#define AV_BE2NE16C(x) AV_BE2NEC(16, x)
-#define AV_BE2NE32C(x) AV_BE2NEC(32, x)
-#define AV_BE2NE64C(x) AV_BE2NEC(64, x)
-#define AV_LE2NE16C(x) AV_LE2NEC(16, x)
-#define AV_LE2NE32C(x) AV_LE2NEC(32, x)
-#define AV_LE2NE64C(x) AV_LE2NEC(64, x)
-
-#endif /* AVUTIL_BSWAP_H */
--- a/misc/winutils/include/libavutil/common.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,405 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * common internal and external API header
- */
-
-#ifndef AVUTIL_COMMON_H
-#define AVUTIL_COMMON_H
-
-#include <ctype.h>
-#include <errno.h>
-#include <inttypes.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "attributes.h"
-#include "version.h"
-#include "libavutil/avconfig.h"
-
-#if AV_HAVE_BIGENDIAN
-# define AV_NE(be, le) (be)
-#else
-# define AV_NE(be, le) (le)
-#endif
-
-//rounded division & shift
-#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
-/* assume b>0 */
-#define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
-#define FFABS(a) ((a) >= 0 ? (a) : (-(a)))
-#define FFSIGN(a) ((a) > 0 ? 1 : -1)
-
-#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
-#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
-#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
-#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
-
-#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
-#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
-#define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1))
-
-/* misc math functions */
-
-#if FF_API_AV_REVERSE
-extern attribute_deprecated const uint8_t av_reverse[256];
-#endif
-
-#ifdef HAVE_AV_CONFIG_H
-# include "config.h"
-# include "intmath.h"
-#endif
-
-/* Pull in unguarded fallback defines at the end of this file. */
-#include "common.h"
-
-#ifndef av_log2
-av_const int av_log2(unsigned v);
-#endif
-
-#ifndef av_log2_16bit
-av_const int av_log2_16bit(unsigned v);
-#endif
-
-/**
- * Clip a signed integer value into the amin-amax range.
- * @param a value to clip
- * @param amin minimum value of the clip range
- * @param amax maximum value of the clip range
- * @return clipped value
- */
-static av_always_inline av_const int av_clip_c(int a, int amin, int amax)
-{
- if (a < amin) return amin;
- else if (a > amax) return amax;
- else return a;
-}
-
-/**
- * Clip a signed integer value into the 0-255 range.
- * @param a value to clip
- * @return clipped value
- */
-static av_always_inline av_const uint8_t av_clip_uint8_c(int a)
-{
- if (a&(~0xFF)) return (-a)>>31;
- else return a;
-}
-
-/**
- * Clip a signed integer value into the -128,127 range.
- * @param a value to clip
- * @return clipped value
- */
-static av_always_inline av_const int8_t av_clip_int8_c(int a)
-{
- if ((a+0x80) & ~0xFF) return (a>>31) ^ 0x7F;
- else return a;
-}
-
-/**
- * Clip a signed integer value into the 0-65535 range.
- * @param a value to clip
- * @return clipped value
- */
-static av_always_inline av_const uint16_t av_clip_uint16_c(int a)
-{
- if (a&(~0xFFFF)) return (-a)>>31;
- else return a;
-}
-
-/**
- * Clip a signed integer value into the -32768,32767 range.
- * @param a value to clip
- * @return clipped value
- */
-static av_always_inline av_const int16_t av_clip_int16_c(int a)
-{
- if ((a+0x8000) & ~0xFFFF) return (a>>31) ^ 0x7FFF;
- else return a;
-}
-
-/**
- * Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
- * @param a value to clip
- * @return clipped value
- */
-static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
-{
- if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (a>>63) ^ 0x7FFFFFFF;
- else return a;
-}
-
-/**
- * Clip a signed integer to an unsigned power of two range.
- * @param a value to clip
- * @param p bit position to clip at
- * @return clipped value
- */
-static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
-{
- if (a & ~((1<<p) - 1)) return -a >> 31 & ((1<<p) - 1);
- else return a;
-}
-
-/**
- * Add two signed 32-bit values with saturation.
- *
- * @param a one value
- * @param b another value
- * @return sum with signed saturation
- */
-static av_always_inline int av_sat_add32_c(int a, int b)
-{
- return av_clipl_int32((int64_t)a + b);
-}
-
-/**
- * Add a doubled value to another value with saturation at both stages.
- *
- * @param a first value
- * @param b value doubled and added to a
- * @return sum with signed saturation
- */
-static av_always_inline int av_sat_dadd32_c(int a, int b)
-{
- return av_sat_add32(a, av_sat_add32(b, b));
-}
-
-/**
- * Clip a float value into the amin-amax range.
- * @param a value to clip
- * @param amin minimum value of the clip range
- * @param amax maximum value of the clip range
- * @return clipped value
- */
-static av_always_inline av_const float av_clipf_c(float a, float amin, float amax)
-{
- if (a < amin) return amin;
- else if (a > amax) return amax;
- else return a;
-}
-
-/** Compute ceil(log2(x)).
- * @param x value used to compute ceil(log2(x))
- * @return computed ceiling of log2(x)
- */
-static av_always_inline av_const int av_ceil_log2_c(int x)
-{
- return av_log2((x - 1) << 1);
-}
-
-/**
- * Count number of bits set to one in x
- * @param x value to count bits of
- * @return the number of bits set to one in x
- */
-static av_always_inline av_const int av_popcount_c(uint32_t x)
-{
- x -= (x >> 1) & 0x55555555;
- x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
- x = (x + (x >> 4)) & 0x0F0F0F0F;
- x += x >> 8;
- return (x + (x >> 16)) & 0x3F;
-}
-
-/**
- * Count number of bits set to one in x
- * @param x value to count bits of
- * @return the number of bits set to one in x
- */
-static av_always_inline av_const int av_popcount64_c(uint64_t x)
-{
- return av_popcount(x) + av_popcount(x >> 32);
-}
-
-#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
-#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24))
-
-/**
- * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
- *
- * @param val Output value, must be an lvalue of type uint32_t.
- * @param GET_BYTE Expression reading one byte from the input.
- * Evaluated up to 7 times (4 for the currently
- * assigned Unicode range). With a memory buffer
- * input, this could be *ptr++.
- * @param ERROR Expression to be evaluated on invalid input,
- * typically a goto statement.
- */
-#define GET_UTF8(val, GET_BYTE, ERROR)\
- val= GET_BYTE;\
- {\
- int ones= 7 - av_log2(val ^ 255);\
- if(ones==1)\
- ERROR\
- val&= 127>>ones;\
- while(--ones > 0){\
- int tmp= GET_BYTE - 128;\
- if(tmp>>6)\
- ERROR\
- val= (val<<6) + tmp;\
- }\
- }
-
-/**
- * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
- *
- * @param val Output value, must be an lvalue of type uint32_t.
- * @param GET_16BIT Expression returning two bytes of UTF-16 data converted
- * to native byte order. Evaluated one or two times.
- * @param ERROR Expression to be evaluated on invalid input,
- * typically a goto statement.
- */
-#define GET_UTF16(val, GET_16BIT, ERROR)\
- val = GET_16BIT;\
- {\
- unsigned int hi = val - 0xD800;\
- if (hi < 0x800) {\
- val = GET_16BIT - 0xDC00;\
- if (val > 0x3FFU || hi > 0x3FFU)\
- ERROR\
- val += (hi<<10) + 0x10000;\
- }\
- }\
-
-/**
- * @def PUT_UTF8(val, tmp, PUT_BYTE)
- * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
- * @param val is an input-only argument and should be of type uint32_t. It holds
- * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
- * val is given as a function it is executed only once.
- * @param tmp is a temporary variable and should be of type uint8_t. It
- * represents an intermediate value during conversion that is to be
- * output by PUT_BYTE.
- * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
- * It could be a function or a statement, and uses tmp as the input byte.
- * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
- * executed up to 4 times for values in the valid UTF-8 range and up to
- * 7 times in the general case, depending on the length of the converted
- * Unicode character.
- */
-#define PUT_UTF8(val, tmp, PUT_BYTE)\
- {\
- int bytes, shift;\
- uint32_t in = val;\
- if (in < 0x80) {\
- tmp = in;\
- PUT_BYTE\
- } else {\
- bytes = (av_log2(in) + 4) / 5;\
- shift = (bytes - 1) * 6;\
- tmp = (256 - (256 >> bytes)) | (in >> shift);\
- PUT_BYTE\
- while (shift >= 6) {\
- shift -= 6;\
- tmp = 0x80 | ((in >> shift) & 0x3f);\
- PUT_BYTE\
- }\
- }\
- }
-
-/**
- * @def PUT_UTF16(val, tmp, PUT_16BIT)
- * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
- * @param val is an input-only argument and should be of type uint32_t. It holds
- * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
- * val is given as a function it is executed only once.
- * @param tmp is a temporary variable and should be of type uint16_t. It
- * represents an intermediate value during conversion that is to be
- * output by PUT_16BIT.
- * @param PUT_16BIT writes the converted UTF-16 data to any proper destination
- * in desired endianness. It could be a function or a statement, and uses tmp
- * as the input byte. For example, PUT_BYTE could be "*output++ = tmp;"
- * PUT_BYTE will be executed 1 or 2 times depending on input character.
- */
-#define PUT_UTF16(val, tmp, PUT_16BIT)\
- {\
- uint32_t in = val;\
- if (in < 0x10000) {\
- tmp = in;\
- PUT_16BIT\
- } else {\
- tmp = 0xD800 | ((in - 0x10000) >> 10);\
- PUT_16BIT\
- tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\
- PUT_16BIT\
- }\
- }\
-
-
-
-#include "mem.h"
-
-#ifdef HAVE_AV_CONFIG_H
-# include "internal.h"
-#endif /* HAVE_AV_CONFIG_H */
-
-#endif /* AVUTIL_COMMON_H */
-
-/*
- * The following definitions are outside the multiple inclusion guard
- * to ensure they are immediately available in intmath.h.
- */
-
-#ifndef av_ceil_log2
-# define av_ceil_log2 av_ceil_log2_c
-#endif
-#ifndef av_clip
-# define av_clip av_clip_c
-#endif
-#ifndef av_clip_uint8
-# define av_clip_uint8 av_clip_uint8_c
-#endif
-#ifndef av_clip_int8
-# define av_clip_int8 av_clip_int8_c
-#endif
-#ifndef av_clip_uint16
-# define av_clip_uint16 av_clip_uint16_c
-#endif
-#ifndef av_clip_int16
-# define av_clip_int16 av_clip_int16_c
-#endif
-#ifndef av_clipl_int32
-# define av_clipl_int32 av_clipl_int32_c
-#endif
-#ifndef av_clip_uintp2
-# define av_clip_uintp2 av_clip_uintp2_c
-#endif
-#ifndef av_sat_add32
-# define av_sat_add32 av_sat_add32_c
-#endif
-#ifndef av_sat_dadd32
-# define av_sat_dadd32 av_sat_dadd32_c
-#endif
-#ifndef av_clipf
-# define av_clipf av_clipf_c
-#endif
-#ifndef av_popcount
-# define av_popcount av_popcount_c
-#endif
-#ifndef av_popcount64
-# define av_popcount64 av_popcount64_c
-#endif
--- a/misc/winutils/include/libavutil/cpu.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-/*
- * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_CPU_H
-#define AVUTIL_CPU_H
-
-#include "version.h"
-
-#define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */
-
- /* lower 16 bits - CPU features */
-#define AV_CPU_FLAG_MMX 0x0001 ///< standard MMX
-#define AV_CPU_FLAG_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext
-#if LIBAVUTIL_VERSION_MAJOR < 52
-#define AV_CPU_FLAG_MMX2 0x0002 ///< SSE integer functions or AMD MMX ext
-#endif
-#define AV_CPU_FLAG_3DNOW 0x0004 ///< AMD 3DNOW
-#define AV_CPU_FLAG_SSE 0x0008 ///< SSE functions
-#define AV_CPU_FLAG_SSE2 0x0010 ///< PIV SSE2 functions
-#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster
-#define AV_CPU_FLAG_3DNOWEXT 0x0020 ///< AMD 3DNowExt
-#define AV_CPU_FLAG_SSE3 0x0040 ///< Prescott SSE3 functions
-#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster
-#define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions
-#define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower
-#define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions
-#define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions
-#define AV_CPU_FLAG_AVX 0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used
-#define AV_CPU_FLAG_XOP 0x0400 ///< Bulldozer XOP functions
-#define AV_CPU_FLAG_FMA4 0x0800 ///< Bulldozer FMA4 functions
-#define AV_CPU_FLAG_CMOV 0x1000 ///< i686 cmov
-
-#define AV_CPU_FLAG_ALTIVEC 0x0001 ///< standard
-
-#define AV_CPU_FLAG_ARMV5TE (1 << 0)
-#define AV_CPU_FLAG_ARMV6 (1 << 1)
-#define AV_CPU_FLAG_ARMV6T2 (1 << 2)
-#define AV_CPU_FLAG_VFP (1 << 3)
-#define AV_CPU_FLAG_VFPV3 (1 << 4)
-#define AV_CPU_FLAG_NEON (1 << 5)
-
-/**
- * Return the flags which specify extensions supported by the CPU.
- */
-int av_get_cpu_flags(void);
-
-/**
- * Set a mask on flags returned by av_get_cpu_flags().
- * This function is mainly useful for testing.
- *
- * @warning this function is not thread safe.
- */
-void av_set_cpu_flags_mask(int mask);
-
-/**
- * Parse CPU flags from a string.
- *
- * @return a combination of AV_CPU_* flags, negative on error.
- */
-int av_parse_cpu_flags(const char *s);
-
-/* The following CPU-specific functions shall not be called directly. */
-int ff_get_cpu_flags_arm(void);
-int ff_get_cpu_flags_ppc(void);
-int ff_get_cpu_flags_x86(void);
-
-#endif /* AVUTIL_CPU_H */
--- a/misc/winutils/include/libavutil/crc.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_CRC_H
-#define AVUTIL_CRC_H
-
-#include <stdint.h>
-#include <stddef.h>
-#include "attributes.h"
-
-typedef uint32_t AVCRC;
-
-typedef enum {
- AV_CRC_8_ATM,
- AV_CRC_16_ANSI,
- AV_CRC_16_CCITT,
- AV_CRC_32_IEEE,
- AV_CRC_32_IEEE_LE, /*< reversed bitorder version of AV_CRC_32_IEEE */
- AV_CRC_MAX, /*< Not part of public API! Do not use outside libavutil. */
-}AVCRCId;
-
-int av_crc_init(AVCRC *ctx, int le, int bits, uint32_t poly, int ctx_size);
-const AVCRC *av_crc_get_table(AVCRCId crc_id);
-uint32_t av_crc(const AVCRC *ctx, uint32_t start_crc, const uint8_t *buffer, size_t length) av_pure;
-
-#endif /* AVUTIL_CRC_H */
--- a/misc/winutils/include/libavutil/dict.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,129 +0,0 @@
-/*
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * Public dictionary API.
- */
-
-#ifndef AVUTIL_DICT_H
-#define AVUTIL_DICT_H
-
-/**
- * @addtogroup lavu_dict AVDictionary
- * @ingroup lavu_data
- *
- * @brief Simple key:value store
- *
- * @{
- * Dictionaries are used for storing key:value pairs. To create
- * an AVDictionary, simply pass an address of a NULL pointer to
- * av_dict_set(). NULL can be used as an empty dictionary wherever
- * a pointer to an AVDictionary is required.
- * Use av_dict_get() to retrieve an entry or iterate over all
- * entries and finally av_dict_free() to free the dictionary
- * and all its contents.
- *
- * @code
- * AVDictionary *d = NULL; // "create" an empty dictionary
- * av_dict_set(&d, "foo", "bar", 0); // add an entry
- *
- * char *k = av_strdup("key"); // if your strings are already allocated,
- * char *v = av_strdup("value"); // you can avoid copying them like this
- * av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);
- *
- * AVDictionaryEntry *t = NULL;
- * while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) {
- * <....> // iterate over all entries in d
- * }
- *
- * av_dict_free(&d);
- * @endcode
- *
- */
-
-#define AV_DICT_MATCH_CASE 1
-#define AV_DICT_IGNORE_SUFFIX 2
-#define AV_DICT_DONT_STRDUP_KEY 4 /**< Take ownership of a key that's been
- allocated with av_malloc() and children. */
-#define AV_DICT_DONT_STRDUP_VAL 8 /**< Take ownership of a value that's been
- allocated with av_malloc() and chilren. */
-#define AV_DICT_DONT_OVERWRITE 16 ///< Don't overwrite existing entries.
-#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no
- delimiter is added, the strings are simply concatenated. */
-
-typedef struct AVDictionaryEntry {
- char *key;
- char *value;
-} AVDictionaryEntry;
-
-typedef struct AVDictionary AVDictionary;
-
-/**
- * Get a dictionary entry with 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 Allows case as well as suffix-insensitive comparisons.
- * @return Found entry or NULL, changing key or value leads to undefined behavior.
- */
-AVDictionaryEntry *
-av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags);
-
-/**
- * Get number of entries in dictionary.
- *
- * @param m dictionary
- * @return number of entries in dictionary
- */
-int av_dict_count(const AVDictionary *m);
-
-/**
- * Set the given entry in *pm, overwriting an existing entry.
- *
- * @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 be av_strduped depending on flags)
- * @param value entry value to add to *pm (will be av_strduped depending on flags).
- * Passing a NULL value will cause an existing entry to be deleted.
- * @return >= 0 on success otherwise an error code <0
- */
-int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags);
-
-/**
- * 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
- */
-void av_dict_copy(AVDictionary **dst, AVDictionary *src, int flags);
-
-/**
- * Free all the memory allocated for an AVDictionary struct
- * and all keys and values.
- */
-void av_dict_free(AVDictionary **m);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_DICT_H */
--- a/misc/winutils/include/libavutil/error.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,83 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * error code definitions
- */
-
-#ifndef AVUTIL_ERROR_H
-#define AVUTIL_ERROR_H
-
-#include <errno.h>
-#include <stddef.h>
-#include "avutil.h"
-
-/**
- * @addtogroup lavu_error
- *
- * @{
- */
-
-
-/* error handling */
-#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
-
-#define AVERROR_BSF_NOT_FOUND (-0x39acbd08) ///< Bitstream filter not found
-#define AVERROR_DECODER_NOT_FOUND (-0x3cbabb08) ///< Decoder not found
-#define AVERROR_DEMUXER_NOT_FOUND (-0x32babb08) ///< Demuxer not found
-#define AVERROR_ENCODER_NOT_FOUND (-0x3cb1ba08) ///< Encoder not found
-#define AVERROR_EOF (-0x5fb9b0bb) ///< End of file
-#define AVERROR_EXIT (-0x2bb6a7bb) ///< Immediate exit was requested; the called function should not be restarted
-#define AVERROR_FILTER_NOT_FOUND (-0x33b6b908) ///< Filter not found
-#define AVERROR_INVALIDDATA (-0x3ebbb1b7) ///< Invalid data found when processing input
-#define AVERROR_MUXER_NOT_FOUND (-0x27aab208) ///< Muxer not found
-#define AVERROR_OPTION_NOT_FOUND (-0x2bafb008) ///< Option not found
-#define AVERROR_PATCHWELCOME (-0x3aa8beb0) ///< Not yet implemented in Libav, patches welcome
-#define AVERROR_PROTOCOL_NOT_FOUND (-0x30adaf08) ///< Protocol not found
-#define AVERROR_STREAM_NOT_FOUND (-0x2dabac08) ///< Stream not found
-#define AVERROR_BUG (-0x5fb8aabe) ///< Bug detected, please report the issue
-#define AVERROR_UNKNOWN (-0x31b4b1ab) ///< Unknown error, typically from an external library
-#define AVERROR_EXPERIMENTAL (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it.
-
-/**
- * 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
- */
-int av_strerror(int errnum, char *errbuf, size_t errbuf_size);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_ERROR_H */
--- a/misc/winutils/include/libavutil/eval.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-/*
- * Copyright (c) 2002 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * simple arithmetic expression evaluator
- */
-
-#ifndef AVUTIL_EVAL_H
-#define AVUTIL_EVAL_H
-
-#include "avutil.h"
-
-typedef struct AVExpr AVExpr;
-
-/**
- * Parse and evaluate an expression.
- * Note, this is significantly slower than av_expr_eval().
- *
- * @param res a pointer to a double where is put the result value of
- * the expression, or NAN in case of error
- * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)"
- * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0}
- * @param const_values a zero terminated array of values for the identifiers from const_names
- * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers
- * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument
- * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
- * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
- * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
- * @param log_ctx parent logging context
- * @return 0 in case of success, a negative value corresponding to an
- * AVERROR code otherwise
- */
-int av_expr_parse_and_eval(double *res, const char *s,
- const char * const *const_names, const double *const_values,
- const char * const *func1_names, double (* const *funcs1)(void *, double),
- const char * const *func2_names, double (* const *funcs2)(void *, double, double),
- void *opaque, int log_offset, void *log_ctx);
-
-/**
- * Parse an expression.
- *
- * @param expr a pointer where is put an AVExpr containing the parsed
- * value in case of successful parsing, or NULL otherwise.
- * The pointed to AVExpr must be freed with av_expr_free() by the user
- * when it is not needed anymore.
- * @param s expression as a zero terminated string, for example "1+2^3+5*5+sin(2/3)"
- * @param const_names NULL terminated array of zero terminated strings of constant identifiers, for example {"PI", "E", 0}
- * @param func1_names NULL terminated array of zero terminated strings of funcs1 identifiers
- * @param funcs1 NULL terminated array of function pointers for functions which take 1 argument
- * @param func2_names NULL terminated array of zero terminated strings of funcs2 identifiers
- * @param funcs2 NULL terminated array of function pointers for functions which take 2 arguments
- * @param log_ctx parent logging context
- * @return 0 in case of success, a negative value corresponding to an
- * AVERROR code otherwise
- */
-int av_expr_parse(AVExpr **expr, const char *s,
- const char * const *const_names,
- const char * const *func1_names, double (* const *funcs1)(void *, double),
- const char * const *func2_names, double (* const *funcs2)(void *, double, double),
- int log_offset, void *log_ctx);
-
-/**
- * Evaluate a previously parsed expression.
- *
- * @param const_values a zero terminated array of values for the identifiers from av_expr_parse() const_names
- * @param opaque a pointer which will be passed to all functions from funcs1 and funcs2
- * @return the value of the expression
- */
-double av_expr_eval(AVExpr *e, const double *const_values, void *opaque);
-
-/**
- * Free a parsed expression previously created with av_expr_parse().
- */
-void av_expr_free(AVExpr *e);
-
-/**
- * Parse the string in numstr and return its value as a double. If
- * the string is empty, contains only whitespaces, or does not contain
- * an initial substring that has the expected syntax for a
- * floating-point number, no conversion is performed. In this case,
- * returns a value of zero and the value returned in tail is the value
- * of numstr.
- *
- * @param numstr a string representing a number, may contain one of
- * the International System number postfixes, for example 'K', 'M',
- * 'G'. If 'i' is appended after the postfix, powers of 2 are used
- * instead of powers of 10. The 'B' postfix multiplies the value for
- * 8, and can be appended after another postfix or used alone. This
- * allows using for example 'KB', 'MiB', 'G' and 'B' as postfix.
- * @param tail if non-NULL puts here the pointer to the char next
- * after the last parsed character
- */
-double av_strtod(const char *numstr, char **tail);
-
-#endif /* AVUTIL_EVAL_H */
--- a/misc/winutils/include/libavutil/fifo.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * a very simple circular buffer FIFO implementation
- */
-
-#ifndef AVUTIL_FIFO_H
-#define AVUTIL_FIFO_H
-
-#include <stdint.h>
-#include "avutil.h"
-#include "attributes.h"
-
-typedef struct AVFifoBuffer {
- uint8_t *buffer;
- uint8_t *rptr, *wptr, *end;
- uint32_t rndx, wndx;
-} AVFifoBuffer;
-
-/**
- * Initialize an AVFifoBuffer.
- * @param size of FIFO
- * @return AVFifoBuffer or NULL in case of memory allocation failure
- */
-AVFifoBuffer *av_fifo_alloc(unsigned int size);
-
-/**
- * Free an AVFifoBuffer.
- * @param f AVFifoBuffer to free
- */
-void av_fifo_free(AVFifoBuffer *f);
-
-/**
- * Reset the AVFifoBuffer to the state right after av_fifo_alloc, in particular it is emptied.
- * @param f AVFifoBuffer to reset
- */
-void av_fifo_reset(AVFifoBuffer *f);
-
-/**
- * Return the amount of data in bytes in the AVFifoBuffer, that is the
- * amount of data you can read from it.
- * @param f AVFifoBuffer to read from
- * @return size
- */
-int av_fifo_size(AVFifoBuffer *f);
-
-/**
- * Return the amount of space in bytes in the AVFifoBuffer, that is the
- * amount of data you can write into it.
- * @param f AVFifoBuffer to write into
- * @return size
- */
-int av_fifo_space(AVFifoBuffer *f);
-
-/**
- * Feed data from an AVFifoBuffer to a user-supplied callback.
- * @param f AVFifoBuffer to read from
- * @param buf_size number of bytes to read
- * @param func generic read function
- * @param dest data destination
- */
-int av_fifo_generic_read(AVFifoBuffer *f, void *dest, int buf_size, void (*func)(void*, void*, int));
-
-/**
- * Feed data from a user-supplied callback to an AVFifoBuffer.
- * @param f AVFifoBuffer to write to
- * @param src data source; non-const since it may be used as a
- * modifiable context by the function defined in func
- * @param size number of bytes to write
- * @param func generic write function; the first parameter is src,
- * the second is dest_buf, the third is dest_buf_size.
- * func must return the number of bytes written to dest_buf, or <= 0 to
- * indicate no more data available to write.
- * If func is NULL, src is interpreted as a simple byte array for source data.
- * @return the number of bytes written to the FIFO
- */
-int av_fifo_generic_write(AVFifoBuffer *f, void *src, int size, int (*func)(void*, void*, int));
-
-/**
- * Resize an AVFifoBuffer.
- * @param f AVFifoBuffer to resize
- * @param size new AVFifoBuffer size in bytes
- * @return <0 for failure, >=0 otherwise
- */
-int av_fifo_realloc2(AVFifoBuffer *f, unsigned int size);
-
-/**
- * Read and discard the specified amount of data from an AVFifoBuffer.
- * @param f AVFifoBuffer to read from
- * @param size amount of data to read in bytes
- */
-void av_fifo_drain(AVFifoBuffer *f, int size);
-
-/**
- * Return a pointer to the data stored in a FIFO buffer at a certain offset.
- * The FIFO buffer is not modified.
- *
- * @param f AVFifoBuffer to peek at, f must be non-NULL
- * @param offs an offset in bytes, its absolute value must be less
- * than the used buffer size or the returned pointer will
- * point outside to the buffer data.
- * The used buffer size can be checked with av_fifo_size().
- */
-static inline uint8_t *av_fifo_peek2(const AVFifoBuffer *f, int offs)
-{
- uint8_t *ptr = f->rptr + offs;
- if (ptr >= f->end)
- ptr = f->buffer + (ptr - f->end);
- else if (ptr < f->buffer)
- ptr = f->end - (f->buffer - ptr);
- return ptr;
-}
-
-#if FF_API_AV_FIFO_PEEK
-/**
- * @deprecated Use av_fifo_peek2() instead.
- */
-attribute_deprecated
-static inline uint8_t av_fifo_peek(AVFifoBuffer *f, int offs)
-{
- return *av_fifo_peek2(f, offs);
-}
-#endif
-
-#endif /* AVUTIL_FIFO_H */
--- a/misc/winutils/include/libavutil/file.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_FILE_H
-#define AVUTIL_FILE_H
-
-#include <stdint.h>
-
-#include "avutil.h"
-
-/**
- * @file
- * Misc file utilities.
- */
-
-/**
- * Read the file with name filename, and put its content in a newly
- * allocated buffer or map it with mmap() when available.
- * In case of success set *bufptr to the read or mmapped buffer, and
- * *size to the size in bytes of the buffer in *bufptr.
- * The returned buffer must be released with av_file_unmap().
- *
- * @param log_offset loglevel offset used for logging
- * @param log_ctx context used for logging
- * @return a non negative number in case of success, a negative value
- * corresponding to an AVERROR error code in case of failure
- */
-int av_file_map(const char *filename, uint8_t **bufptr, size_t *size,
- int log_offset, void *log_ctx);
-
-/**
- * Unmap or free the buffer bufptr created by av_file_map().
- *
- * @param size size in bytes of bufptr, must be the same as returned
- * by av_file_map()
- */
-void av_file_unmap(uint8_t *bufptr, size_t size);
-
-#endif /* AVUTIL_FILE_H */
--- a/misc/winutils/include/libavutil/imgutils.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_IMGUTILS_H
-#define AVUTIL_IMGUTILS_H
-
-/**
- * @file
- * misc image utilities
- *
- * @addtogroup lavu_picture
- * @{
- */
-
-#include "avutil.h"
-#include "pixdesc.h"
-
-/**
- * Compute the max pixel step for each plane of an image with a
- * format described by pixdesc.
- *
- * The pixel step is the distance in bytes between the first byte of
- * the group of bytes which describe a pixel component and the first
- * byte of the successive group in the same plane for the same
- * component.
- *
- * @param max_pixsteps an array which is filled with the max pixel step
- * for each plane. Since a plane may contain different pixel
- * components, the computed max_pixsteps[plane] is relative to the
- * component in the plane with the max pixel step.
- * @param max_pixstep_comps an array which is filled with the component
- * for each plane which has the max pixel step. May be NULL.
- */
-void av_image_fill_max_pixsteps(int max_pixsteps[4], int max_pixstep_comps[4],
- const AVPixFmtDescriptor *pixdesc);
-
-/**
- * Compute the size of an image line with format pix_fmt and width
- * width for the plane plane.
- *
- * @return the computed size in bytes
- */
-int av_image_get_linesize(enum AVPixelFormat pix_fmt, int width, int plane);
-
-/**
- * Fill plane linesizes for an image with pixel format pix_fmt and
- * width width.
- *
- * @param linesizes array to be filled with the linesize for each plane
- * @return >= 0 in case of success, a negative error code otherwise
- */
-int av_image_fill_linesizes(int linesizes[4], enum AVPixelFormat pix_fmt, int width);
-
-/**
- * Fill plane data pointers for an image with pixel format pix_fmt and
- * height height.
- *
- * @param data pointers array to be filled with the pointer for each image plane
- * @param ptr the pointer to a buffer which will contain the image
- * @param linesizes the array containing the linesize for each
- * plane, should be filled by av_image_fill_linesizes()
- * @return the size in bytes required for the image buffer, a negative
- * error code in case of failure
- */
-int av_image_fill_pointers(uint8_t *data[4], enum AVPixelFormat pix_fmt, int height,
- uint8_t *ptr, const int linesizes[4]);
-
-/**
- * Allocate an image with size w and h and pixel format pix_fmt, and
- * fill pointers and linesizes accordingly.
- * The allocated image buffer has to be freed by using
- * av_freep(&pointers[0]).
- *
- * @param align the value to use for buffer size alignment
- * @return the size in bytes required for the image buffer, a negative
- * error code in case of failure
- */
-int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
- int w, int h, enum AVPixelFormat pix_fmt, int align);
-
-/**
- * Copy image plane from src to dst.
- * That is, copy "height" number of lines of "bytewidth" bytes each.
- * The first byte of each successive line is separated by *_linesize
- * bytes.
- *
- * @param dst_linesize linesize for the image plane in dst
- * @param src_linesize linesize for the image plane in src
- */
-void av_image_copy_plane(uint8_t *dst, int dst_linesize,
- const uint8_t *src, int src_linesize,
- int bytewidth, int height);
-
-/**
- * Copy image in src_data to dst_data.
- *
- * @param dst_linesizes linesizes for the image in dst_data
- * @param src_linesizes linesizes for the image in src_data
- */
-void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4],
- const uint8_t *src_data[4], const int src_linesizes[4],
- enum AVPixelFormat pix_fmt, int width, int height);
-
-/**
- * Check if the given dimension of an image is valid, meaning that all
- * bytes of the image can be addressed with a signed int.
- *
- * @param w the width of the picture
- * @param h the height of the picture
- * @param log_offset the offset to sum to the log level for logging with log_ctx
- * @param log_ctx the parent logging context, it may be NULL
- * @return >= 0 if valid, a negative error code otherwise
- */
-int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx);
-
-int avpriv_set_systematic_pal2(uint32_t pal[256], enum AVPixelFormat pix_fmt);
-
-/**
- * @}
- */
-
-
-#endif /* AVUTIL_IMGUTILS_H */
--- a/misc/winutils/include/libavutil/intfloat.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * Copyright (c) 2011 Mans Rullgard
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_INTFLOAT_H
-#define AVUTIL_INTFLOAT_H
-
-#include <stdint.h>
-#include "attributes.h"
-
-union av_intfloat32 {
- uint32_t i;
- float f;
-};
-
-union av_intfloat64 {
- uint64_t i;
- double f;
-};
-
-/**
- * Reinterpret a 32-bit integer as a float.
- */
-static av_always_inline float av_int2float(uint32_t i)
-{
- union av_intfloat32 v;
- v.i = i;
- return v.f;
-}
-
-/**
- * Reinterpret a float as a 32-bit integer.
- */
-static av_always_inline uint32_t av_float2int(float f)
-{
- union av_intfloat32 v;
- v.f = f;
- return v.i;
-}
-
-/**
- * Reinterpret a 64-bit integer as a double.
- */
-static av_always_inline double av_int2double(uint64_t i)
-{
- union av_intfloat64 v;
- v.i = i;
- return v.f;
-}
-
-/**
- * Reinterpret a double as a 64-bit integer.
- */
-static av_always_inline uint64_t av_double2int(double f)
-{
- union av_intfloat64 v;
- v.f = f;
- return v.i;
-}
-
-#endif /* AVUTIL_INTFLOAT_H */
--- a/misc/winutils/include/libavutil/intfloat_readwrite.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_INTFLOAT_READWRITE_H
-#define AVUTIL_INTFLOAT_READWRITE_H
-
-#include <stdint.h>
-#include "attributes.h"
-
-/* IEEE 80 bits extended float */
-typedef struct AVExtFloat {
- uint8_t exponent[2];
- uint8_t mantissa[8];
-} AVExtFloat;
-
-attribute_deprecated double av_int2dbl(int64_t v) av_const;
-attribute_deprecated float av_int2flt(int32_t v) av_const;
-attribute_deprecated double av_ext2dbl(const AVExtFloat ext) av_const;
-attribute_deprecated int64_t av_dbl2int(double d) av_const;
-attribute_deprecated int32_t av_flt2int(float d) av_const;
-attribute_deprecated AVExtFloat av_dbl2ext(double d) av_const;
-
-#endif /* AVUTIL_INTFLOAT_READWRITE_H */
--- a/misc/winutils/include/libavutil/intreadwrite.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,522 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_INTREADWRITE_H
-#define AVUTIL_INTREADWRITE_H
-
-#include <stdint.h>
-#include "libavutil/avconfig.h"
-#include "attributes.h"
-#include "bswap.h"
-
-typedef union {
- uint64_t u64;
- uint32_t u32[2];
- uint16_t u16[4];
- uint8_t u8 [8];
- double f64;
- float f32[2];
-} av_alias av_alias64;
-
-typedef union {
- uint32_t u32;
- uint16_t u16[2];
- uint8_t u8 [4];
- float f32;
-} av_alias av_alias32;
-
-typedef union {
- uint16_t u16;
- uint8_t u8 [2];
-} av_alias av_alias16;
-
-/*
- * Arch-specific headers can provide any combination of
- * AV_[RW][BLN](16|24|32|64) and AV_(COPY|SWAP|ZERO)(64|128) macros.
- * Preprocessor symbols must be defined, even if these are implemented
- * as inline functions.
- */
-
-#ifdef HAVE_AV_CONFIG_H
-
-#include "config.h"
-
-#if ARCH_ARM
-# include "arm/intreadwrite.h"
-#elif ARCH_AVR32
-# include "avr32/intreadwrite.h"
-#elif ARCH_MIPS
-# include "mips/intreadwrite.h"
-#elif ARCH_PPC
-# include "ppc/intreadwrite.h"
-#elif ARCH_TOMI
-# include "tomi/intreadwrite.h"
-#elif ARCH_X86
-# include "x86/intreadwrite.h"
-#endif
-
-#endif /* HAVE_AV_CONFIG_H */
-
-/*
- * Map AV_RNXX <-> AV_R[BL]XX for all variants provided by per-arch headers.
- */
-
-#if AV_HAVE_BIGENDIAN
-
-# if defined(AV_RN16) && !defined(AV_RB16)
-# define AV_RB16(p) AV_RN16(p)
-# elif !defined(AV_RN16) && defined(AV_RB16)
-# define AV_RN16(p) AV_RB16(p)
-# endif
-
-# if defined(AV_WN16) && !defined(AV_WB16)
-# define AV_WB16(p, v) AV_WN16(p, v)
-# elif !defined(AV_WN16) && defined(AV_WB16)
-# define AV_WN16(p, v) AV_WB16(p, v)
-# endif
-
-# if defined(AV_RN24) && !defined(AV_RB24)
-# define AV_RB24(p) AV_RN24(p)
-# elif !defined(AV_RN24) && defined(AV_RB24)
-# define AV_RN24(p) AV_RB24(p)
-# endif
-
-# if defined(AV_WN24) && !defined(AV_WB24)
-# define AV_WB24(p, v) AV_WN24(p, v)
-# elif !defined(AV_WN24) && defined(AV_WB24)
-# define AV_WN24(p, v) AV_WB24(p, v)
-# endif
-
-# if defined(AV_RN32) && !defined(AV_RB32)
-# define AV_RB32(p) AV_RN32(p)
-# elif !defined(AV_RN32) && defined(AV_RB32)
-# define AV_RN32(p) AV_RB32(p)
-# endif
-
-# if defined(AV_WN32) && !defined(AV_WB32)
-# define AV_WB32(p, v) AV_WN32(p, v)
-# elif !defined(AV_WN32) && defined(AV_WB32)
-# define AV_WN32(p, v) AV_WB32(p, v)
-# endif
-
-# if defined(AV_RN64) && !defined(AV_RB64)
-# define AV_RB64(p) AV_RN64(p)
-# elif !defined(AV_RN64) && defined(AV_RB64)
-# define AV_RN64(p) AV_RB64(p)
-# endif
-
-# if defined(AV_WN64) && !defined(AV_WB64)
-# define AV_WB64(p, v) AV_WN64(p, v)
-# elif !defined(AV_WN64) && defined(AV_WB64)
-# define AV_WN64(p, v) AV_WB64(p, v)
-# endif
-
-#else /* AV_HAVE_BIGENDIAN */
-
-# if defined(AV_RN16) && !defined(AV_RL16)
-# define AV_RL16(p) AV_RN16(p)
-# elif !defined(AV_RN16) && defined(AV_RL16)
-# define AV_RN16(p) AV_RL16(p)
-# endif
-
-# if defined(AV_WN16) && !defined(AV_WL16)
-# define AV_WL16(p, v) AV_WN16(p, v)
-# elif !defined(AV_WN16) && defined(AV_WL16)
-# define AV_WN16(p, v) AV_WL16(p, v)
-# endif
-
-# if defined(AV_RN24) && !defined(AV_RL24)
-# define AV_RL24(p) AV_RN24(p)
-# elif !defined(AV_RN24) && defined(AV_RL24)
-# define AV_RN24(p) AV_RL24(p)
-# endif
-
-# if defined(AV_WN24) && !defined(AV_WL24)
-# define AV_WL24(p, v) AV_WN24(p, v)
-# elif !defined(AV_WN24) && defined(AV_WL24)
-# define AV_WN24(p, v) AV_WL24(p, v)
-# endif
-
-# if defined(AV_RN32) && !defined(AV_RL32)
-# define AV_RL32(p) AV_RN32(p)
-# elif !defined(AV_RN32) && defined(AV_RL32)
-# define AV_RN32(p) AV_RL32(p)
-# endif
-
-# if defined(AV_WN32) && !defined(AV_WL32)
-# define AV_WL32(p, v) AV_WN32(p, v)
-# elif !defined(AV_WN32) && defined(AV_WL32)
-# define AV_WN32(p, v) AV_WL32(p, v)
-# endif
-
-# if defined(AV_RN64) && !defined(AV_RL64)
-# define AV_RL64(p) AV_RN64(p)
-# elif !defined(AV_RN64) && defined(AV_RL64)
-# define AV_RN64(p) AV_RL64(p)
-# endif
-
-# if defined(AV_WN64) && !defined(AV_WL64)
-# define AV_WL64(p, v) AV_WN64(p, v)
-# elif !defined(AV_WN64) && defined(AV_WL64)
-# define AV_WN64(p, v) AV_WL64(p, v)
-# endif
-
-#endif /* !AV_HAVE_BIGENDIAN */
-
-/*
- * Define AV_[RW]N helper macros to simplify definitions not provided
- * by per-arch headers.
- */
-
-#if defined(__GNUC__) && !defined(__TI_COMPILER_VERSION__)
-
-union unaligned_64 { uint64_t l; } __attribute__((packed)) av_alias;
-union unaligned_32 { uint32_t l; } __attribute__((packed)) av_alias;
-union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias;
-
-# define AV_RN(s, p) (((const union unaligned_##s *) (p))->l)
-# define AV_WN(s, p, v) ((((union unaligned_##s *) (p))->l) = (v))
-
-#elif defined(__DECC)
-
-# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p)))
-# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v))
-
-#elif AV_HAVE_FAST_UNALIGNED
-
-# define AV_RN(s, p) (((const av_alias##s*)(p))->u##s)
-# define AV_WN(s, p, v) (((av_alias##s*)(p))->u##s = (v))
-
-#else
-
-#ifndef AV_RB16
-# define AV_RB16(x) \
- ((((const uint8_t*)(x))[0] << 8) | \
- ((const uint8_t*)(x))[1])
-#endif
-#ifndef AV_WB16
-# define AV_WB16(p, d) do { \
- ((uint8_t*)(p))[1] = (d); \
- ((uint8_t*)(p))[0] = (d)>>8; \
- } while(0)
-#endif
-
-#ifndef AV_RL16
-# define AV_RL16(x) \
- ((((const uint8_t*)(x))[1] << 8) | \
- ((const uint8_t*)(x))[0])
-#endif
-#ifndef AV_WL16
-# define AV_WL16(p, d) do { \
- ((uint8_t*)(p))[0] = (d); \
- ((uint8_t*)(p))[1] = (d)>>8; \
- } while(0)
-#endif
-
-#ifndef AV_RB32
-# define AV_RB32(x) \
- (((uint32_t)((const uint8_t*)(x))[0] << 24) | \
- (((const uint8_t*)(x))[1] << 16) | \
- (((const uint8_t*)(x))[2] << 8) | \
- ((const uint8_t*)(x))[3])
-#endif
-#ifndef AV_WB32
-# define AV_WB32(p, d) do { \
- ((uint8_t*)(p))[3] = (d); \
- ((uint8_t*)(p))[2] = (d)>>8; \
- ((uint8_t*)(p))[1] = (d)>>16; \
- ((uint8_t*)(p))[0] = (d)>>24; \
- } while(0)
-#endif
-
-#ifndef AV_RL32
-# define AV_RL32(x) \
- (((uint32_t)((const uint8_t*)(x))[3] << 24) | \
- (((const uint8_t*)(x))[2] << 16) | \
- (((const uint8_t*)(x))[1] << 8) | \
- ((const uint8_t*)(x))[0])
-#endif
-#ifndef AV_WL32
-# define AV_WL32(p, d) do { \
- ((uint8_t*)(p))[0] = (d); \
- ((uint8_t*)(p))[1] = (d)>>8; \
- ((uint8_t*)(p))[2] = (d)>>16; \
- ((uint8_t*)(p))[3] = (d)>>24; \
- } while(0)
-#endif
-
-#ifndef AV_RB64
-# define AV_RB64(x) \
- (((uint64_t)((const uint8_t*)(x))[0] << 56) | \
- ((uint64_t)((const uint8_t*)(x))[1] << 48) | \
- ((uint64_t)((const uint8_t*)(x))[2] << 40) | \
- ((uint64_t)((const uint8_t*)(x))[3] << 32) | \
- ((uint64_t)((const uint8_t*)(x))[4] << 24) | \
- ((uint64_t)((const uint8_t*)(x))[5] << 16) | \
- ((uint64_t)((const uint8_t*)(x))[6] << 8) | \
- (uint64_t)((const uint8_t*)(x))[7])
-#endif
-#ifndef AV_WB64
-# define AV_WB64(p, d) do { \
- ((uint8_t*)(p))[7] = (d); \
- ((uint8_t*)(p))[6] = (d)>>8; \
- ((uint8_t*)(p))[5] = (d)>>16; \
- ((uint8_t*)(p))[4] = (d)>>24; \
- ((uint8_t*)(p))[3] = (d)>>32; \
- ((uint8_t*)(p))[2] = (d)>>40; \
- ((uint8_t*)(p))[1] = (d)>>48; \
- ((uint8_t*)(p))[0] = (d)>>56; \
- } while(0)
-#endif
-
-#ifndef AV_RL64
-# define AV_RL64(x) \
- (((uint64_t)((const uint8_t*)(x))[7] << 56) | \
- ((uint64_t)((const uint8_t*)(x))[6] << 48) | \
- ((uint64_t)((const uint8_t*)(x))[5] << 40) | \
- ((uint64_t)((const uint8_t*)(x))[4] << 32) | \
- ((uint64_t)((const uint8_t*)(x))[3] << 24) | \
- ((uint64_t)((const uint8_t*)(x))[2] << 16) | \
- ((uint64_t)((const uint8_t*)(x))[1] << 8) | \
- (uint64_t)((const uint8_t*)(x))[0])
-#endif
-#ifndef AV_WL64
-# define AV_WL64(p, d) do { \
- ((uint8_t*)(p))[0] = (d); \
- ((uint8_t*)(p))[1] = (d)>>8; \
- ((uint8_t*)(p))[2] = (d)>>16; \
- ((uint8_t*)(p))[3] = (d)>>24; \
- ((uint8_t*)(p))[4] = (d)>>32; \
- ((uint8_t*)(p))[5] = (d)>>40; \
- ((uint8_t*)(p))[6] = (d)>>48; \
- ((uint8_t*)(p))[7] = (d)>>56; \
- } while(0)
-#endif
-
-#if AV_HAVE_BIGENDIAN
-# define AV_RN(s, p) AV_RB##s(p)
-# define AV_WN(s, p, v) AV_WB##s(p, v)
-#else
-# define AV_RN(s, p) AV_RL##s(p)
-# define AV_WN(s, p, v) AV_WL##s(p, v)
-#endif
-
-#endif /* HAVE_FAST_UNALIGNED */
-
-#ifndef AV_RN16
-# define AV_RN16(p) AV_RN(16, p)
-#endif
-
-#ifndef AV_RN32
-# define AV_RN32(p) AV_RN(32, p)
-#endif
-
-#ifndef AV_RN64
-# define AV_RN64(p) AV_RN(64, p)
-#endif
-
-#ifndef AV_WN16
-# define AV_WN16(p, v) AV_WN(16, p, v)
-#endif
-
-#ifndef AV_WN32
-# define AV_WN32(p, v) AV_WN(32, p, v)
-#endif
-
-#ifndef AV_WN64
-# define AV_WN64(p, v) AV_WN(64, p, v)
-#endif
-
-#if AV_HAVE_BIGENDIAN
-# define AV_RB(s, p) AV_RN##s(p)
-# define AV_WB(s, p, v) AV_WN##s(p, v)
-# define AV_RL(s, p) av_bswap##s(AV_RN##s(p))
-# define AV_WL(s, p, v) AV_WN##s(p, av_bswap##s(v))
-#else
-# define AV_RB(s, p) av_bswap##s(AV_RN##s(p))
-# define AV_WB(s, p, v) AV_WN##s(p, av_bswap##s(v))
-# define AV_RL(s, p) AV_RN##s(p)
-# define AV_WL(s, p, v) AV_WN##s(p, v)
-#endif
-
-#define AV_RB8(x) (((const uint8_t*)(x))[0])
-#define AV_WB8(p, d) do { ((uint8_t*)(p))[0] = (d); } while(0)
-
-#define AV_RL8(x) AV_RB8(x)
-#define AV_WL8(p, d) AV_WB8(p, d)
-
-#ifndef AV_RB16
-# define AV_RB16(p) AV_RB(16, p)
-#endif
-#ifndef AV_WB16
-# define AV_WB16(p, v) AV_WB(16, p, v)
-#endif
-
-#ifndef AV_RL16
-# define AV_RL16(p) AV_RL(16, p)
-#endif
-#ifndef AV_WL16
-# define AV_WL16(p, v) AV_WL(16, p, v)
-#endif
-
-#ifndef AV_RB32
-# define AV_RB32(p) AV_RB(32, p)
-#endif
-#ifndef AV_WB32
-# define AV_WB32(p, v) AV_WB(32, p, v)
-#endif
-
-#ifndef AV_RL32
-# define AV_RL32(p) AV_RL(32, p)
-#endif
-#ifndef AV_WL32
-# define AV_WL32(p, v) AV_WL(32, p, v)
-#endif
-
-#ifndef AV_RB64
-# define AV_RB64(p) AV_RB(64, p)
-#endif
-#ifndef AV_WB64
-# define AV_WB64(p, v) AV_WB(64, p, v)
-#endif
-
-#ifndef AV_RL64
-# define AV_RL64(p) AV_RL(64, p)
-#endif
-#ifndef AV_WL64
-# define AV_WL64(p, v) AV_WL(64, p, v)
-#endif
-
-#ifndef AV_RB24
-# define AV_RB24(x) \
- ((((const uint8_t*)(x))[0] << 16) | \
- (((const uint8_t*)(x))[1] << 8) | \
- ((const uint8_t*)(x))[2])
-#endif
-#ifndef AV_WB24
-# define AV_WB24(p, d) do { \
- ((uint8_t*)(p))[2] = (d); \
- ((uint8_t*)(p))[1] = (d)>>8; \
- ((uint8_t*)(p))[0] = (d)>>16; \
- } while(0)
-#endif
-
-#ifndef AV_RL24
-# define AV_RL24(x) \
- ((((const uint8_t*)(x))[2] << 16) | \
- (((const uint8_t*)(x))[1] << 8) | \
- ((const uint8_t*)(x))[0])
-#endif
-#ifndef AV_WL24
-# define AV_WL24(p, d) do { \
- ((uint8_t*)(p))[0] = (d); \
- ((uint8_t*)(p))[1] = (d)>>8; \
- ((uint8_t*)(p))[2] = (d)>>16; \
- } while(0)
-#endif
-
-/*
- * The AV_[RW]NA macros access naturally aligned data
- * in a type-safe way.
- */
-
-#define AV_RNA(s, p) (((const av_alias##s*)(p))->u##s)
-#define AV_WNA(s, p, v) (((av_alias##s*)(p))->u##s = (v))
-
-#ifndef AV_RN16A
-# define AV_RN16A(p) AV_RNA(16, p)
-#endif
-
-#ifndef AV_RN32A
-# define AV_RN32A(p) AV_RNA(32, p)
-#endif
-
-#ifndef AV_RN64A
-# define AV_RN64A(p) AV_RNA(64, p)
-#endif
-
-#ifndef AV_WN16A
-# define AV_WN16A(p, v) AV_WNA(16, p, v)
-#endif
-
-#ifndef AV_WN32A
-# define AV_WN32A(p, v) AV_WNA(32, p, v)
-#endif
-
-#ifndef AV_WN64A
-# define AV_WN64A(p, v) AV_WNA(64, p, v)
-#endif
-
-/* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be
- * naturally aligned. They may be implemented using MMX,
- * so emms_c() must be called before using any float code
- * afterwards.
- */
-
-#define AV_COPY(n, d, s) \
- (((av_alias##n*)(d))->u##n = ((const av_alias##n*)(s))->u##n)
-
-#ifndef AV_COPY16
-# define AV_COPY16(d, s) AV_COPY(16, d, s)
-#endif
-
-#ifndef AV_COPY32
-# define AV_COPY32(d, s) AV_COPY(32, d, s)
-#endif
-
-#ifndef AV_COPY64
-# define AV_COPY64(d, s) AV_COPY(64, d, s)
-#endif
-
-#ifndef AV_COPY128
-# define AV_COPY128(d, s) \
- do { \
- AV_COPY64(d, s); \
- AV_COPY64((char*)(d)+8, (char*)(s)+8); \
- } while(0)
-#endif
-
-#define AV_SWAP(n, a, b) FFSWAP(av_alias##n, *(av_alias##n*)(a), *(av_alias##n*)(b))
-
-#ifndef AV_SWAP64
-# define AV_SWAP64(a, b) AV_SWAP(64, a, b)
-#endif
-
-#define AV_ZERO(n, d) (((av_alias##n*)(d))->u##n = 0)
-
-#ifndef AV_ZERO16
-# define AV_ZERO16(d) AV_ZERO(16, d)
-#endif
-
-#ifndef AV_ZERO32
-# define AV_ZERO32(d) AV_ZERO(32, d)
-#endif
-
-#ifndef AV_ZERO64
-# define AV_ZERO64(d) AV_ZERO(64, d)
-#endif
-
-#ifndef AV_ZERO128
-# define AV_ZERO128(d) \
- do { \
- AV_ZERO64(d); \
- AV_ZERO64((char*)(d)+8); \
- } while(0)
-#endif
-
-#endif /* AVUTIL_INTREADWRITE_H */
--- a/misc/winutils/include/libavutil/lfg.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-/*
- * Lagged Fibonacci PRNG
- * Copyright (c) 2008 Michael Niedermayer
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_LFG_H
-#define AVUTIL_LFG_H
-
-typedef struct AVLFG {
- unsigned int state[64];
- int index;
-} AVLFG;
-
-void av_lfg_init(AVLFG *c, unsigned int seed);
-
-/**
- * Get the next random unsigned 32-bit number using an ALFG.
- *
- * Please also consider a simple LCG like state= state*1664525+1013904223,
- * it may be good enough and faster for your specific use case.
- */
-static inline unsigned int av_lfg_get(AVLFG *c){
- c->state[c->index & 63] = c->state[(c->index-24) & 63] + c->state[(c->index-55) & 63];
- return c->state[c->index++ & 63];
-}
-
-/**
- * Get the next random unsigned 32-bit number using a MLFG.
- *
- * Please also consider av_lfg_get() above, it is faster.
- */
-static inline unsigned int av_mlfg_get(AVLFG *c){
- unsigned int a= c->state[(c->index-55) & 63];
- unsigned int b= c->state[(c->index-24) & 63];
- return c->state[c->index++ & 63] = 2*a*b+a+b;
-}
-
-/**
- * Get the next two numbers generated by a Box-Muller Gaussian
- * generator using the random numbers issued by lfg.
- *
- * @param out array where the two generated numbers are placed
- */
-void av_bmg_get(AVLFG *lfg, double out[2]);
-
-#endif /* AVUTIL_LFG_H */
--- a/misc/winutils/include/libavutil/log.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,172 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_LOG_H
-#define AVUTIL_LOG_H
-
-#include <stdarg.h>
-#include "avutil.h"
-#include "attributes.h"
-
-/**
- * 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.).
- */
-typedef struct AVClass {
- /**
- * The name of the class; usually it is the same name as the
- * context structure type to which the AVClass is associated.
- */
- const char* class_name;
-
- /**
- * A pointer to a function which returns the name of a context
- * instance ctx associated with the class.
- */
- const char* (*item_name)(void* ctx);
-
- /**
- * a pointer to the first option specified in the class if any or NULL
- *
- * @see av_set_default_options()
- */
- const struct AVOption *option;
-
- /**
- * LIBAVUTIL_VERSION with which this structure was created.
- * This is used to allow fields to be added without requiring major
- * version bumps everywhere.
- */
-
- int version;
-
- /**
- * Offset in the structure where log_level_offset is stored.
- * 0 means there is no such variable
- */
- int log_level_offset_offset;
-
- /**
- * Offset in the structure where a pointer to the parent context for loging is stored.
- * for example a decoder that uses eval.c could pass its AVCodecContext to eval as such
- * parent context. And a av_log() implementation could then display the parent context
- * can be NULL of course
- */
- int parent_log_context_offset;
-
- /**
- * Return next AVOptions-enabled child or NULL
- */
- void* (*child_next)(void *obj, void *prev);
-
- /**
- * Return an AVClass corresponding to 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.
- */
- const struct AVClass* (*child_class_next)(const struct AVClass *prev);
-} AVClass;
-
-/* av_log API */
-
-#define AV_LOG_QUIET -8
-
-/**
- * Something went really wrong and we will crash now.
- */
-#define 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.
- */
-#define AV_LOG_FATAL 8
-
-/**
- * Something went wrong and cannot losslessly be recovered.
- * However, not all future data is affected.
- */
-#define 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'.
- */
-#define AV_LOG_WARNING 24
-
-#define AV_LOG_INFO 32
-#define AV_LOG_VERBOSE 40
-
-/**
- * Stuff which is only useful for libav* developers.
- */
-#define AV_LOG_DEBUG 48
-
-/**
- * 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 av_vlog callback
- * function.
- *
- * @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 fmt The format string (printf-compatible) that specifies how
- * subsequent arguments are converted to output.
- * @see av_vlog
- */
-void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
-
-void av_vlog(void *avcl, int level, const char *fmt, va_list);
-int av_log_get_level(void);
-void av_log_set_level(int);
-void av_log_set_callback(void (*)(void*, int, const char*, va_list));
-void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl);
-const char* av_default_item_name(void* ctx);
-
-/**
- * av_dlog macros
- * Useful to print debug messages that shouldn't get compiled in normally.
- */
-
-#ifdef DEBUG
-# define av_dlog(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
-#else
-# define av_dlog(pctx, ...)
-#endif
-
-/**
- * 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, ""); at the end
- */
-#define AV_LOG_SKIP_REPEATED 1
-void av_log_set_flags(int arg);
-
-#endif /* AVUTIL_LOG_H */
--- a/misc/winutils/include/libavutil/lzo.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * LZO 1x decompression
- * copyright (c) 2006 Reimar Doeffinger
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_LZO_H
-#define AVUTIL_LZO_H
-
-/**
- * @defgroup lavu_lzo LZO
- * @ingroup lavu_crypto
- *
- * @{
- */
-
-#include <stdint.h>
-
-/** @name Error flags returned by av_lzo1x_decode
- * @{ */
-/// end of the input buffer reached before decoding finished
-#define AV_LZO_INPUT_DEPLETED 1
-/// decoded data did not fit into output buffer
-#define AV_LZO_OUTPUT_FULL 2
-/// a reference to previously decoded data was wrong
-#define AV_LZO_INVALID_BACKPTR 4
-/// a non-specific error in the compressed bitstream
-#define AV_LZO_ERROR 8
-/** @} */
-
-#define AV_LZO_INPUT_PADDING 8
-#define AV_LZO_OUTPUT_PADDING 12
-
-/**
- * @brief Decodes LZO 1x compressed data.
- * @param out output buffer
- * @param outlen size of output buffer, number of bytes left are returned here
- * @param in input buffer
- * @param inlen size of input buffer, number of bytes left are returned here
- * @return 0 on success, otherwise a combination of the error flags above
- *
- * Make sure all buffers are appropriately padded, in must provide
- * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes.
- */
-int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen);
-
-/**
- * @brief deliberately overlapping memcpy implementation
- * @param dst destination buffer; must be padded with 12 additional bytes
- * @param back how many bytes back we start (the initial size of the overlapping window)
- * @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.
- */
-void av_memcpy_backptr(uint8_t *dst, int back, int cnt);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_LZO_H */
--- a/misc/winutils/include/libavutil/mathematics.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
- * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_MATHEMATICS_H
-#define AVUTIL_MATHEMATICS_H
-
-#include <stdint.h>
-#include <math.h>
-#include "attributes.h"
-#include "rational.h"
-#include "intfloat.h"
-
-#ifndef M_LOG2_10
-#define M_LOG2_10 3.32192809488736234787 /* log_2 10 */
-#endif
-#ifndef M_PHI
-#define M_PHI 1.61803398874989484820 /* phi / golden ratio */
-#endif
-#ifndef NAN
-#define NAN av_int2float(0x7fc00000)
-#endif
-#ifndef INFINITY
-#define INFINITY av_int2float(0x7f800000)
-#endif
-
-/**
- * @addtogroup lavu_math
- * @{
- */
-
-
-enum AVRounding {
- 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.
-};
-
-/**
- * Return the greatest common divisor of a and b.
- * If both a and b are 0 or either or both are <0 then behavior is
- * undefined.
- */
-int64_t av_const av_gcd(int64_t a, int64_t b);
-
-/**
- * Rescale a 64-bit integer with rounding to nearest.
- * A simple a*b/c isn't possible as it can overflow.
- */
-int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const;
-
-/**
- * Rescale a 64-bit integer with specified rounding.
- * A simple a*b/c isn't possible as it can overflow.
- */
-int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding) av_const;
-
-/**
- * Rescale a 64-bit integer by 2 rational numbers.
- */
-int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;
-
-/**
- * Rescale a 64-bit integer by 2 rational numbers with specified rounding.
- */
-int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq,
- enum AVRounding) 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
- */
-int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b);
-
-/**
- * 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 positive value if a is greater than b
- * 0 if a equals b
- */
-int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_MATHEMATICS_H */
--- a/misc/winutils/include/libavutil/md5.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_MD5_H
-#define AVUTIL_MD5_H
-
-#include <stdint.h>
-
-#include "attributes.h"
-#include "version.h"
-
-/**
- * @defgroup lavu_md5 MD5
- * @ingroup lavu_crypto
- * @{
- */
-
-#if FF_API_CONTEXT_SIZE
-extern attribute_deprecated const int av_md5_size;
-#endif
-
-struct AVMD5;
-
-struct AVMD5 *av_md5_alloc(void);
-void av_md5_init(struct AVMD5 *ctx);
-void av_md5_update(struct AVMD5 *ctx, const uint8_t *src, const int len);
-void av_md5_final(struct AVMD5 *ctx, uint8_t *dst);
-void av_md5_sum(uint8_t *dst, const uint8_t *src, const int len);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_MD5_H */
--- a/misc/winutils/include/libavutil/mem.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * memory handling functions
- */
-
-#ifndef AVUTIL_MEM_H
-#define AVUTIL_MEM_H
-
-#include <limits.h>
-
-#include "attributes.h"
-#include "avutil.h"
-
-/**
- * @addtogroup lavu_mem
- * @{
- */
-
-
-#if defined(__ICC) && __ICC < 1200 || defined(__SUNPRO_C)
- #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
- #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v
-#elif defined(__TI_COMPILER_VERSION__)
- #define DECLARE_ALIGNED(n,t,v) \
- AV_PRAGMA(DATA_ALIGN(v,n)) \
- t __attribute__((aligned(n))) v
- #define DECLARE_ASM_CONST(n,t,v) \
- AV_PRAGMA(DATA_ALIGN(v,n)) \
- static const t __attribute__((aligned(n))) v
-#elif defined(__GNUC__)
- #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v
- #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v
-#elif defined(_MSC_VER)
- #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v
- #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v
-#else
- #define DECLARE_ALIGNED(n,t,v) t v
- #define DECLARE_ASM_CONST(n,t,v) static const t v
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(3,1)
- #define av_malloc_attrib __attribute__((__malloc__))
-#else
- #define av_malloc_attrib
-#endif
-
-#if AV_GCC_VERSION_AT_LEAST(4,3)
- #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__)))
-#else
- #define av_alloc_size(...)
-#endif
-
-/**
- * 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()
- */
-void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1);
-
-/**
- * Helper function to allocate a block of size * nmemb bytes with
- * using 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()
- */
-av_alloc_size(1, 2) static inline void *av_malloc_array(size_t nmemb, size_t size)
-{
- if (size <= 0 || nmemb >= INT_MAX / size)
- return NULL;
- return av_malloc(nmemb * size);
-}
-
-/**
- * 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_malloc(z)() or av_realloc() or NULL.
- * @param size Size in bytes for 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.
- * @see av_fast_realloc()
- */
-void *av_realloc(void *ptr, size_t size) av_alloc_size(2);
-
-/**
- * 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()
- */
-void av_free(void *ptr);
-
-/**
- * Allocate a block of size bytes 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, NULL if it cannot be allocated.
- * @see av_malloc()
- */
-void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1);
-
-/**
- * Helper function to allocate a block of size * nmemb bytes with
- * using 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()
- */
-av_alloc_size(1, 2) static inline void *av_mallocz_array(size_t nmemb, size_t size)
-{
- if (size <= 0 || nmemb >= INT_MAX / size)
- return NULL;
- return av_mallocz(nmemb * size);
-}
-
-/**
- * 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.
- */
-char *av_strdup(const char *s) av_malloc_attrib;
-
-/**
- * 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.
- * @see av_free()
- */
-void av_freep(void *ptr);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_MEM_H */
--- a/misc/winutils/include/libavutil/old_pix_fmts.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_OLD_PIX_FMTS_H
-#define AVUTIL_OLD_PIX_FMTS_H
-
-/*
- * This header exists to prevent new pixel formats from being accidentally added
- * to the deprecated list.
- * Do not include it directly. It will be removed on next major bump
- *
- * Do not add new items to this list. Use the AVPixelFormat enum instead.
- */
- PIX_FMT_NONE = AV_PIX_FMT_NONE,
- PIX_FMT_YUV420P, ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
- PIX_FMT_YUYV422, ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
- PIX_FMT_RGB24, ///< packed RGB 8:8:8, 24bpp, RGBRGB...
- PIX_FMT_BGR24, ///< packed RGB 8:8:8, 24bpp, BGRBGR...
- PIX_FMT_YUV422P, ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
- PIX_FMT_YUV444P, ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
- PIX_FMT_YUV410P, ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
- PIX_FMT_YUV411P, ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
- PIX_FMT_GRAY8, ///< Y , 8bpp
- PIX_FMT_MONOWHITE, ///< Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb
- PIX_FMT_MONOBLACK, ///< Y , 1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb
- PIX_FMT_PAL8, ///< 8 bit with PIX_FMT_RGB32 palette
- PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_range
- PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV422P and setting color_range
- PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV444P and setting color_range
- PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing
- PIX_FMT_XVMC_MPEG2_IDCT,
- PIX_FMT_UYVY422, ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
- PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
- PIX_FMT_BGR8, ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
- 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
- PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
- PIX_FMT_RGB8, ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
- 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
- PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
- 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)
- PIX_FMT_NV21, ///< as above, but U and V bytes are swapped
-
- PIX_FMT_ARGB, ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
- PIX_FMT_RGBA, ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
- PIX_FMT_ABGR, ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
- PIX_FMT_BGRA, ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
-
- PIX_FMT_GRAY16BE, ///< Y , 16bpp, big-endian
- PIX_FMT_GRAY16LE, ///< Y , 16bpp, little-endian
- PIX_FMT_YUV440P, ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
- PIX_FMT_YUVJ440P, ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of PIX_FMT_YUV440P and setting color_range
- PIX_FMT_YUVA420P, ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
- 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
- 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
- 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
- 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
- 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
- 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
- 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
-
- PIX_FMT_RGB565BE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), big-endian
- PIX_FMT_RGB565LE, ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), little-endian
- PIX_FMT_RGB555BE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0
- PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian, most significant bit to 0
-
- PIX_FMT_BGR565BE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), big-endian
- PIX_FMT_BGR565LE, ///< packed BGR 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), little-endian
- PIX_FMT_BGR555BE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1
- PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1
-
- 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
- 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
- PIX_FMT_VAAPI_VLD, ///< HW decoding through VA API, Picture.data[3] contains a vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
-
- PIX_FMT_YUV420P16LE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
- PIX_FMT_YUV420P16BE, ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
- PIX_FMT_YUV422P16LE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
- PIX_FMT_YUV422P16BE, ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
- PIX_FMT_YUV444P16LE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
- PIX_FMT_YUV444P16BE, ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
- PIX_FMT_VDPAU_MPEG4, ///< MPEG4 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
- PIX_FMT_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
-
- PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
- PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0
- PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1
- PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1
- PIX_FMT_Y400A, ///< 8bit gray, 8bit alpha
- 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
- 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
- PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
- PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
- PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
- PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
- PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
- PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
- PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
- PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
- PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
- PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
- PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
- PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
- PIX_FMT_VDA_VLD, ///< hardware decoding through VDA
- PIX_FMT_GBRP, ///< planar GBR 4:4:4 24bpp
- PIX_FMT_GBRP9BE, ///< planar GBR 4:4:4 27bpp, big endian
- PIX_FMT_GBRP9LE, ///< planar GBR 4:4:4 27bpp, little endian
- PIX_FMT_GBRP10BE, ///< planar GBR 4:4:4 30bpp, big endian
- PIX_FMT_GBRP10LE, ///< planar GBR 4:4:4 30bpp, little endian
- PIX_FMT_GBRP16BE, ///< planar GBR 4:4:4 48bpp, big endian
- PIX_FMT_GBRP16LE, ///< planar GBR 4:4:4 48bpp, little endian
- 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
-
-#endif /* AVUTIL_OLD_PIX_FMTS_H */
--- a/misc/winutils/include/libavutil/opt.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,592 +0,0 @@
-/*
- * AVOptions
- * copyright (c) 2005 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_OPT_H
-#define AVUTIL_OPT_H
-
-/**
- * @file
- * AVOptions
- */
-
-#include "rational.h"
-#include "avutil.h"
-#include "dict.h"
-#include "log.h"
-
-/**
- * @defgroup avoptions AVOptions
- * @ingroup lavu_data
- * @{
- * AVOptions provide a generic system to declare options on arbitrary structs
- * ("objects"). An option can have a help text, a type and a range of possible
- * values. Options may then be enumerated, read and written to.
- *
- * @section avoptions_implement Implementing AVOptions
- * This section describes how to add AVOptions capabilities to a struct.
- *
- * All AVOptions-related information is stored in an AVClass. Therefore
- * the first member of the struct must be a pointer to an AVClass describing it.
- * The option field of the AVClass must be set to a NULL-terminated static array
- * of AVOptions. Each AVOption must have a non-empty name, a type, a default
- * value and for number-type AVOptions also a range of allowed values. It must
- * also declare an offset in bytes from the start of the struct, where the field
- * associated with this AVOption is located. Other fields in the AVOption struct
- * should also be set when applicable, but are not required.
- *
- * The following example illustrates an AVOptions-enabled struct:
- * @code
- * typedef struct test_struct {
- * AVClass *class;
- * int int_opt;
- * char *str_opt;
- * uint8_t *bin_opt;
- * int bin_len;
- * } test_struct;
- *
- * static const AVOption options[] = {
- * { "test_int", "This is a test option of int type.", offsetof(test_struct, int_opt),
- * AV_OPT_TYPE_INT, { .i64 = -1 }, INT_MIN, INT_MAX },
- * { "test_str", "This is a test option of string type.", offsetof(test_struct, str_opt),
- * AV_OPT_TYPE_STRING },
- * { "test_bin", "This is a test option of binary type.", offsetof(test_struct, bin_opt),
- * AV_OPT_TYPE_BINARY },
- * { NULL },
- * };
- *
- * static const AVClass test_class = {
- * .class_name = "test class",
- * .item_name = av_default_item_name,
- * .option = options,
- * .version = LIBAVUTIL_VERSION_INT,
- * };
- * @endcode
- *
- * Next, when allocating your struct, you must ensure that the AVClass pointer
- * is set to the correct value. Then, av_opt_set_defaults() must be called to
- * initialize defaults. After that the struct is ready to be used with the
- * AVOptions API.
- *
- * When cleaning up, you may use the av_opt_free() function to automatically
- * free all the allocated string and binary options.
- *
- * Continuing with the above example:
- *
- * @code
- * test_struct *alloc_test_struct(void)
- * {
- * test_struct *ret = av_malloc(sizeof(*ret));
- * ret->class = &test_class;
- * av_opt_set_defaults(ret);
- * return ret;
- * }
- * void free_test_struct(test_struct **foo)
- * {
- * av_opt_free(*foo);
- * av_freep(foo);
- * }
- * @endcode
- *
- * @subsection avoptions_implement_nesting Nesting
- * It may happen that an AVOptions-enabled struct contains another
- * AVOptions-enabled struct as a member (e.g. AVCodecContext in
- * libavcodec exports generic options, while its priv_data field exports
- * codec-specific options). In such a case, it is possible to set up the
- * parent struct to export a child's options. To do that, simply
- * implement AVClass.child_next() and AVClass.child_class_next() in the
- * parent struct's AVClass.
- * Assuming that the test_struct from above now also contains a
- * child_struct field:
- *
- * @code
- * typedef struct child_struct {
- * AVClass *class;
- * int flags_opt;
- * } child_struct;
- * static const AVOption child_opts[] = {
- * { "test_flags", "This is a test option of flags type.",
- * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX },
- * { NULL },
- * };
- * static const AVClass child_class = {
- * .class_name = "child class",
- * .item_name = av_default_item_name,
- * .option = child_opts,
- * .version = LIBAVUTIL_VERSION_INT,
- * };
- *
- * void *child_next(void *obj, void *prev)
- * {
- * test_struct *t = obj;
- * if (!prev && t->child_struct)
- * return t->child_struct;
- * return NULL
- * }
- * const AVClass child_class_next(const AVClass *prev)
- * {
- * return prev ? NULL : &child_class;
- * }
- * @endcode
- * Putting child_next() and child_class_next() as defined above into
- * test_class will now make child_struct's options accessible through
- * test_struct (again, proper setup as described above needs to be done on
- * child_struct right after it is created).
- *
- * From the above example it might not be clear why both child_next()
- * and child_class_next() are needed. The distinction is that child_next()
- * iterates over actually existing objects, while child_class_next()
- * iterates over all possible child classes. E.g. if an AVCodecContext
- * was initialized to use a codec which has private options, then its
- * child_next() will return AVCodecContext.priv_data and finish
- * iterating. OTOH child_class_next() on AVCodecContext.av_class will
- * iterate over all available codecs with private options.
- *
- * @subsection avoptions_implement_named_constants Named constants
- * It is possible to create named constants for options. Simply set the unit
- * field of the option the constants should apply to to a string and
- * create the constants themselves as options of type AV_OPT_TYPE_CONST
- * with their unit field set to the same string.
- * Their default_val field should contain the value of the named
- * constant.
- * For example, to add some named constants for the test_flags option
- * above, put the following into the child_opts array:
- * @code
- * { "test_flags", "This is a test option of flags type.",
- * offsetof(child_struct, flags_opt), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, "test_unit" },
- * { "flag1", "This is a flag with value 16", 0, AV_OPT_TYPE_CONST, { .i64 = 16 }, 0, 0, "test_unit" },
- * @endcode
- *
- * @section avoptions_use Using AVOptions
- * This section deals with accessing options in an AVOptions-enabled struct.
- * Such structs in Libav are e.g. AVCodecContext in libavcodec or
- * AVFormatContext in libavformat.
- *
- * @subsection avoptions_use_examine Examining AVOptions
- * The basic functions for examining options are av_opt_next(), which iterates
- * over all options defined for one object, and av_opt_find(), which searches
- * for an option with the given name.
- *
- * The situation is more complicated with nesting. An AVOptions-enabled struct
- * may have AVOptions-enabled children. Passing the AV_OPT_SEARCH_CHILDREN flag
- * to av_opt_find() will make the function search children recursively.
- *
- * For enumerating there are basically two cases. The first is when you want to
- * get all options that may potentially exist on the struct and its children
- * (e.g. when constructing documentation). In that case you should call
- * av_opt_child_class_next() recursively on the parent struct's AVClass. The
- * second case is when you have an already initialized struct with all its
- * children and you want to get all options that can be actually written or read
- * from it. In that case you should call av_opt_child_next() recursively (and
- * av_opt_next() on each result).
- *
- * @subsection avoptions_use_get_set Reading and writing AVOptions
- * When setting options, you often have a string read directly from the
- * user. In such a case, simply passing it to av_opt_set() is enough. For
- * non-string type options, av_opt_set() will parse the string according to the
- * option type.
- *
- * Similarly av_opt_get() will read any option type and convert it to a string
- * which will be returned. Do not forget that the string is allocated, so you
- * have to free it with av_free().
- *
- * In some cases it may be more convenient to put all options into an
- * AVDictionary and call av_opt_set_dict() on it. A specific case of this
- * are the format/codec open functions in lavf/lavc which take a dictionary
- * filled with option as a parameter. This allows to set some options
- * that cannot be set otherwise, since e.g. the input file format is not known
- * before the file is actually opened.
- */
-
-enum AVOptionType{
- 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_CONST = 128,
-#if 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,
-#endif
-};
-
-/**
- * AVOption
- */
-typedef struct AVOption {
- const char *name;
-
- /**
- * short English help text
- * @todo What about other languages?
- */
- const char *help;
-
- /**
- * The offset relative to the context structure where the option
- * value is stored. It should be 0 for named constants.
- */
- int offset;
- enum AVOptionType type;
-
- /**
- * the default value for scalar options
- */
- union {
- int64_t i64;
- double dbl;
- const char *str;
- /* TODO those are unused now */
- AVRational q;
- } default_val;
- double min; ///< minimum valid value for the option
- double max; ///< maximum valid value for the option
-
- int flags;
-#define AV_OPT_FLAG_ENCODING_PARAM 1 ///< a generic parameter which can be set by the user for muxing or encoding
-#define AV_OPT_FLAG_DECODING_PARAM 2 ///< a generic parameter which can be set by the user for demuxing or decoding
-#define AV_OPT_FLAG_METADATA 4 ///< some data extracted or inserted into the file like title, comment, ...
-#define AV_OPT_FLAG_AUDIO_PARAM 8
-#define AV_OPT_FLAG_VIDEO_PARAM 16
-#define AV_OPT_FLAG_SUBTITLE_PARAM 32
-//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.
- */
- const char *unit;
-} AVOption;
-
-#if FF_API_FIND_OPT
-/**
- * Look for an option in obj. Look only for the options which
- * have the flags set as specified in mask and flags (that is,
- * for which it is the case that opt->flags & mask == flags).
- *
- * @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 the unit of the option to look for, or any if NULL
- * @return a pointer to the option found, or NULL if no option
- * has been found
- *
- * @deprecated use av_opt_find.
- */
-attribute_deprecated
-const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags);
-#endif
-
-#if 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 this parameter is currently ignored
- * @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()
- */
-attribute_deprecated
-int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out);
-
-attribute_deprecated const AVOption *av_set_double(void *obj, const char *name, double n);
-attribute_deprecated const AVOption *av_set_q(void *obj, const char *name, AVRational n);
-attribute_deprecated const AVOption *av_set_int(void *obj, const char *name, int64_t n);
-
-attribute_deprecated double av_get_double(void *obj, const char *name, const AVOption **o_out);
-attribute_deprecated AVRational av_get_q(void *obj, const char *name, const AVOption **o_out);
-attribute_deprecated int64_t av_get_int(void *obj, const char *name, const AVOption **o_out);
-attribute_deprecated const char *av_get_string(void *obj, const char *name, const AVOption **o_out, char *buf, int buf_len);
-attribute_deprecated const AVOption *av_next_option(void *obj, const AVOption *last);
-#endif
-
-/**
- * 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
- */
-int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags);
-
-/**
- * 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)
- */
-void av_opt_set_defaults(void *s);
-
-#if FF_API_OLD_AVOPTIONS
-attribute_deprecated
-void av_opt_set_defaults2(void *s, int mask, int flags);
-#endif
-
-/**
- * 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 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
- */
-int av_set_options_string(void *ctx, const char *opts,
- const char *key_val_sep, const char *pairs_sep);
-
-/**
- * Free all string and binary options in obj.
- */
-void av_opt_free(void *obj);
-
-/**
- * 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.
- */
-int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name);
-
-/*
- * 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()
- */
-int av_opt_set_dict(void *obj, struct AVDictionary **options);
-
-/**
- * @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.
- */
-int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out);
-int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out);
-int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out);
-int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out);
-int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out);
-int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out);
-/**
- * @}
- */
-
-#define AV_OPT_SEARCH_CHILDREN 0x0001 /**< 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.
- */
-#define AV_OPT_SEARCH_FAKE_OBJ 0x0002
-
-/**
- * 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_*.
- *
- * @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.
- */
-const AVOption *av_opt_find(void *obj, const char *name, const char *unit,
- int opt_flags, int search_flags);
-
-/**
- * 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.
- */
-const AVOption *av_opt_find2(void *obj, const char *name, const char *unit,
- int opt_flags, int search_flags, void **target_obj);
-
-/**
- * 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
- */
-const AVOption *av_opt_next(void *obj, const AVOption *prev);
-
-/**
- * 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
- */
-void *av_opt_child_next(void *obj, void *prev);
-
-/**
- * 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
- */
-const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev);
-
-/**
- * @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
- */
-int av_opt_set (void *obj, const char *name, const char *val, int search_flags);
-int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags);
-int av_opt_set_double(void *obj, const char *name, double val, int search_flags);
-int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags);
-int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_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 av_malloc()ed and must be av_free()ed by the caller
- */
-int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val);
-int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val);
-int av_opt_get_double(void *obj, const char *name, int search_flags, double *out_val);
-int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val);
-/**
- * @}
- * @}
- */
-
-#endif /* AVUTIL_OPT_H */
--- a/misc/winutils/include/libavutil/parseutils.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_PARSEUTILS_H
-#define AVUTIL_PARSEUTILS_H
-
-#include <time.h>
-
-#include "rational.h"
-
-/**
- * @file
- * misc parsing utilities
- */
-
-/**
- * Parse str and put in width_ptr and height_ptr the detected values.
- *
- * @param[in,out] width_ptr pointer to the variable which will contain the detected
- * width value
- * @param[in,out] height_ptr pointer to the variable which will contain the detected
- * height value
- * @param[in] str the string to parse: it has to be a string in the format
- * width x height or a valid video size abbreviation.
- * @return >= 0 on success, a negative error code otherwise
- */
-int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str);
-
-/**
- * Parse str and store the detected values in *rate.
- *
- * @param[in,out] rate pointer to the AVRational which will contain the detected
- * frame rate
- * @param[in] str the string to parse: it has to be a string in the format
- * rate_num / rate_den, a float number or a valid video rate abbreviation
- * @return >= 0 on success, a negative error code otherwise
- */
-int av_parse_video_rate(AVRational *rate, const char *str);
-
-/**
- * Put the RGBA values that correspond to color_string in rgba_color.
- *
- * @param color_string a string specifying a color. It can be the name of
- * a color (case insensitive match) or a [0x|#]RRGGBB[AA] sequence,
- * possibly followed by "@" and a string representing the alpha
- * component.
- * The alpha component may be a string composed by "0x" followed by an
- * hexadecimal number or a decimal number between 0.0 and 1.0, which
- * represents the opacity value (0x00/0.0 means completely transparent,
- * 0xff/1.0 completely opaque).
- * If the alpha component is not specified then 0xff is assumed.
- * The string "random" will result in a random color.
- * @param slen length of the initial part of color_string containing the
- * color. It can be set to -1 if color_string is a null terminated string
- * containing nothing else than the color.
- * @return >= 0 in case of success, a negative value in case of
- * failure (for example if color_string cannot be parsed).
- */
-int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen,
- void *log_ctx);
-
-/**
- * Parse timestr and return in *time a corresponding number of
- * microseconds.
- *
- * @param timeval puts here the number of microseconds corresponding
- * to the string in timestr. If the string represents a duration, it
- * is the number of microseconds contained in the time interval. If
- * the string is a date, is the number of microseconds since 1st of
- * January, 1970 up to the time of the parsed date. If timestr cannot
- * be successfully parsed, set *time to INT64_MIN.
-
- * @param timestr a string representing a date or a duration.
- * - If a date the syntax is:
- * @code
- * [{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH[:MM[:SS[.m...]]]}|{HH[MM[SS[.m...]]]}}[Z]
- * now
- * @endcode
- * If the value is "now" it takes the current time.
- * Time is local time unless Z is appended, in which case it is
- * interpreted as UTC.
- * If the year-month-day part is not specified it takes the current
- * year-month-day.
- * - If a duration the syntax is:
- * @code
- * [-]HH[:MM[:SS[.m...]]]
- * [-]S+[.m...]
- * @endcode
- * @param duration flag which tells how to interpret timestr, if not
- * zero timestr is interpreted as a duration, otherwise as a date
- * @return 0 in case of success, a negative value corresponding to an
- * AVERROR code otherwise
- */
-int av_parse_time(int64_t *timeval, const char *timestr, int duration);
-
-/**
- * Attempt to find a specific tag in a URL.
- *
- * syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done.
- * Return 1 if found.
- */
-int av_find_info_tag(char *arg, int arg_size, const char *tag1, const char *info);
-
-/**
- * Convert the decomposed UTC time in tm to a time_t value.
- */
-time_t av_timegm(struct tm *tm);
-
-#endif /* AVUTIL_PARSEUTILS_H */
--- a/misc/winutils/include/libavutil/pixdesc.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,206 +0,0 @@
-/*
- * pixel format descriptor
- * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_PIXDESC_H
-#define AVUTIL_PIXDESC_H
-
-#include <inttypes.h>
-#include "pixfmt.h"
-
-typedef struct AVComponentDescriptor{
- uint16_t plane :2; ///< which of the 4 planes contains the component
-
- /**
- * Number of elements between 2 horizontally consecutive pixels minus 1.
- * Elements are bits for bitstream formats, bytes otherwise.
- */
- uint16_t step_minus1 :3;
-
- /**
- * Number of elements before the component of the first pixel plus 1.
- * Elements are bits for bitstream formats, bytes otherwise.
- */
- uint16_t offset_plus1 :3;
- uint16_t shift :3; ///< number of least significant bits that must be shifted away to get the value
- uint16_t depth_minus1 :4; ///< number of bits in the component minus 1
-}AVComponentDescriptor;
-
-/**
- * Descriptor that unambiguously describes how the bits of a pixel are
- * stored in the up to 4 data planes of an image. It also stores the
- * subsampling factors and number of components.
- *
- * @note This is separate of the colorspace (RGB, YCbCr, YPbPr, JPEG-style YUV
- * and all the YUV variants) AVPixFmtDescriptor just stores how values
- * are stored not what these values represent.
- */
-typedef struct AVPixFmtDescriptor{
- const char *name;
- uint8_t nb_components; ///< The number of components each pixel has, (1-4)
-
- /**
- * Amount to shift the luma width right to find the chroma width.
- * For YV12 this is 1 for example.
- * chroma_width = -((-luma_width) >> log2_chroma_w)
- * The note above is needed to ensure rounding up.
- * This value only refers to the chroma components.
- */
- uint8_t log2_chroma_w; ///< chroma_width = -((-luma_width )>>log2_chroma_w)
-
- /**
- * Amount to shift the luma height right to find the chroma height.
- * For YV12 this is 1 for example.
- * chroma_height= -((-luma_height) >> log2_chroma_h)
- * The note above is needed to ensure rounding up.
- * This value only refers to the chroma components.
- */
- uint8_t log2_chroma_h;
- uint8_t flags;
-
- /**
- * Parameters that describe how pixels are packed. If the format
- * has chroma components, they must be stored in comp[1] and
- * comp[2].
- */
- AVComponentDescriptor comp[4];
-}AVPixFmtDescriptor;
-
-#define PIX_FMT_BE 1 ///< Pixel format is big-endian.
-#define PIX_FMT_PAL 2 ///< Pixel format has a palette in data[1], values are indexes in this palette.
-#define PIX_FMT_BITSTREAM 4 ///< All values of a component are bit-wise packed end to end.
-#define PIX_FMT_HWACCEL 8 ///< Pixel format is an HW accelerated format.
-#define PIX_FMT_PLANAR 16 ///< At least one pixel component is not in the first data plane
-#define PIX_FMT_RGB 32 ///< The pixel format contains RGB-like data (as opposed to YUV/grayscale)
-/**
- * The pixel format is "pseudo-paletted". This means that Libav treats it as
- * paletted internally, but the palette is generated by the decoder and is not
- * stored in the file.
- */
-#define PIX_FMT_PSEUDOPAL 64
-
-#if FF_API_PIX_FMT_DESC
-/**
- * The array of all the pixel format descriptors.
- */
-extern const AVPixFmtDescriptor av_pix_fmt_descriptors[];
-#endif
-
-/**
- * Read a line from an image, and write the values of the
- * pixel format component c to dst.
- *
- * @param data the array containing the pointers to the planes of the image
- * @param linesize the array containing the linesizes of the image
- * @param desc the pixel format descriptor for the image
- * @param x the horizontal coordinate of the first pixel to read
- * @param y the vertical coordinate of the first pixel to read
- * @param w the width of the line to read, that is the number of
- * values to write to dst
- * @param read_pal_component if not zero and the format is a paletted
- * format writes the values corresponding to the palette
- * component c in data[1] to dst, rather than the palette indexes in
- * data[0]. The behavior is undefined if the format is not paletted.
- */
-void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4],
- const AVPixFmtDescriptor *desc, int x, int y, int c, int w, int read_pal_component);
-
-/**
- * Write the values from src to the pixel format component c of an
- * image line.
- *
- * @param src array containing the values to write
- * @param data the array containing the pointers to the planes of the
- * image to write into. It is supposed to be zeroed.
- * @param linesize the array containing the linesizes of the image
- * @param desc the pixel format descriptor for the image
- * @param x the horizontal coordinate of the first pixel to write
- * @param y the vertical coordinate of the first pixel to write
- * @param w the width of the line to write, that is the number of
- * values to write to the image line
- */
-void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesize[4],
- const AVPixFmtDescriptor *desc, int x, int y, int c, int w);
-
-/**
- * Return the pixel format corresponding to name.
- *
- * If there is no pixel format with name name, then looks for a
- * pixel format with the name corresponding to the native endian
- * format of name.
- * For example in a little-endian system, first looks for "gray16",
- * then for "gray16le".
- *
- * Finally if no pixel format has been found, returns PIX_FMT_NONE.
- */
-enum AVPixelFormat av_get_pix_fmt(const char *name);
-
-/**
- * Return the short name for a pixel format, NULL in case pix_fmt is
- * unknown.
- *
- * @see av_get_pix_fmt(), av_get_pix_fmt_string()
- */
-const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt);
-
-/**
- * Print in buf the string corresponding to the pixel format with
- * number pix_fmt, or an header if pix_fmt is negative.
- *
- * @param buf the buffer where to write the string
- * @param buf_size the size of buf
- * @param pix_fmt the number of the pixel format to print the
- * corresponding info string, or a negative value to print the
- * corresponding header.
- */
-char *av_get_pix_fmt_string (char *buf, int buf_size, enum AVPixelFormat pix_fmt);
-
-/**
- * Return the number of bits per pixel used by the pixel format
- * described by pixdesc.
- *
- * The returned number of bits refers to the number of bits actually
- * used for storing the pixel information, that is padding bits are
- * not counted.
- */
-int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc);
-
-/**
- * @return a pixel format descriptor for provided pixel format or NULL if
- * this pixel format is unknown.
- */
-const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt);
-
-/**
- * Iterate over all pixel format descriptors known to libavutil.
- *
- * @param prev previous descriptor. NULL to get the first descriptor.
- *
- * @return next descriptor or NULL after the last descriptor
- */
-const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev);
-
-/**
- * @return an AVPixelFormat id described by desc, or AV_PIX_FMT_NONE if desc
- * is not a valid pointer to a pixel format descriptor.
- */
-enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc);
-
-#endif /* AVUTIL_PIXDESC_H */
--- a/misc/winutils/include/libavutil/pixfmt.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,240 +0,0 @@
-/*
- * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_PIXFMT_H
-#define AVUTIL_PIXFMT_H
-
-/**
- * @file
- * pixel format definitions
- *
- */
-
-#include "libavutil/avconfig.h"
-#include "libavutil/version.h"
-
-/**
- * Pixel format.
- *
- * @note
- * 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 RGB (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 PIX_FMT_RGB32 described above (i.e., it is
- * also endian-specific). Note also that the individual RGB 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 8bit 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.
- *
- * @note
- * make sure that all newly added big endian formats have pix_fmt&1==1
- * and that all newly added little endian formats have pix_fmt&1==0
- * this allows simpler detection of big vs little endian.
- */
-enum AVPixelFormat {
- 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 bit with PIX_FMT_RGB32 palette
- AV_PIX_FMT_YUVJ420P, ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV420P and setting color_range
- AV_PIX_FMT_YUVJ422P, ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV422P and setting color_range
- AV_PIX_FMT_YUVJ444P, ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of PIX_FMT_YUV444P and setting color_range
- AV_PIX_FMT_XVMC_MPEG2_MC,///< XVideo Motion Acceleration via common packet passing
- AV_PIX_FMT_XVMC_MPEG2_IDCT,
- 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 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)
- 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
- 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)1A 5R 5G 5B(lsb), big-endian, most significant bit to 0
- AV_PIX_FMT_RGB555LE, ///< packed RGB 5:5:5, 16bpp, (msb)1A 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)1A 5B 5G 5R(lsb), big-endian, most significant bit to 1
- AV_PIX_FMT_BGR555LE, ///< packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian, most significant bit to 1
-
- 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 vaapi_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
-
- 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
- AV_PIX_FMT_VDPAU_MPEG4, ///< MPEG4 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_DXVA2_VLD, ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
-
- AV_PIX_FMT_RGB444LE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian, most significant bits to 0
- AV_PIX_FMT_RGB444BE, ///< packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian, most significant bits to 0
- AV_PIX_FMT_BGR444LE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian, most significant bits to 1
- AV_PIX_FMT_BGR444BE, ///< packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian, most significant bits to 1
- AV_PIX_FMT_Y400A, ///< 8bit gray, 8bit alpha
- 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
- 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_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
-
-#if FF_API_PIX_FMT
-#include "old_pix_fmts.h"
-#endif
-};
-
-#if AV_HAVE_BIGENDIAN
-# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be
-#else
-# define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le
-#endif
-
-#define AV_PIX_FMT_RGB32 AV_PIX_FMT_NE(ARGB, BGRA)
-#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR)
-#define AV_PIX_FMT_BGR32 AV_PIX_FMT_NE(ABGR, RGBA)
-#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB)
-
-#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE)
-#define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE)
-#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE)
-#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE)
-#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE)
-#define AV_PIX_FMT_BGR48 AV_PIX_FMT_NE(BGR48BE, BGR48LE)
-#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE)
-#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE)
-#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE)
-
-#define AV_PIX_FMT_YUV420P9 AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE)
-#define AV_PIX_FMT_YUV422P9 AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE)
-#define AV_PIX_FMT_YUV444P9 AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE)
-#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE)
-#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE)
-#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE)
-#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE)
-#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE)
-#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE)
-
-#define AV_PIX_FMT_GBRP9 AV_PIX_FMT_NE(GBRP9BE , GBRP9LE)
-#define AV_PIX_FMT_GBRP10 AV_PIX_FMT_NE(GBRP10BE, GBRP10LE)
-#define AV_PIX_FMT_GBRP16 AV_PIX_FMT_NE(GBRP16BE, GBRP16LE)
-
-#if FF_API_PIX_FMT
-#define PixelFormat AVPixelFormat
-
-#define PIX_FMT_NE(be, le) AV_PIX_FMT_NE(be, le)
-
-#define PIX_FMT_RGB32 AV_PIX_FMT_RGB32
-#define PIX_FMT_RGB32_1 AV_PIX_FMT_RGB32_1
-#define PIX_FMT_BGR32 AV_PIX_FMT_BGR32
-#define PIX_FMT_BGR32_1 AV_PIX_FMT_BGR32_1
-
-#define PIX_FMT_GRAY16 AV_PIX_FMT_GRAY16
-#define PIX_FMT_RGB48 AV_PIX_FMT_RGB48
-#define PIX_FMT_RGB565 AV_PIX_FMT_RGB565
-#define PIX_FMT_RGB555 AV_PIX_FMT_RGB555
-#define PIX_FMT_RGB444 AV_PIX_FMT_RGB444
-#define PIX_FMT_BGR48 AV_PIX_FMT_BGR48
-#define PIX_FMT_BGR565 AV_PIX_FMT_BGR565
-#define PIX_FMT_BGR555 AV_PIX_FMT_BGR555
-#define PIX_FMT_BGR444 AV_PIX_FMT_BGR444
-
-#define PIX_FMT_YUV420P9 AV_PIX_FMT_YUV420P9
-#define PIX_FMT_YUV422P9 AV_PIX_FMT_YUV422P9
-#define PIX_FMT_YUV444P9 AV_PIX_FMT_YUV444P9
-#define PIX_FMT_YUV420P10 AV_PIX_FMT_YUV420P10
-#define PIX_FMT_YUV422P10 AV_PIX_FMT_YUV422P10
-#define PIX_FMT_YUV444P10 AV_PIX_FMT_YUV444P10
-#define PIX_FMT_YUV420P16 AV_PIX_FMT_YUV420P16
-#define PIX_FMT_YUV422P16 AV_PIX_FMT_YUV422P16
-#define PIX_FMT_YUV444P16 AV_PIX_FMT_YUV444P16
-
-#define PIX_FMT_GBRP9 AV_PIX_FMT_GBRP9
-#define PIX_FMT_GBRP10 AV_PIX_FMT_GBRP10
-#define PIX_FMT_GBRP16 AV_PIX_FMT_GBRP16
-#endif
-
-#endif /* AVUTIL_PIXFMT_H */
--- a/misc/winutils/include/libavutil/random_seed.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2009 Baptiste Coudurier <baptiste.coudurier@gmail.com>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_RANDOM_SEED_H
-#define AVUTIL_RANDOM_SEED_H
-
-#include <stdint.h>
-/**
- * @addtogroup lavu_crypto
- * @{
- */
-
-/**
- * Get random data.
- *
- * This function can be called repeatedly to generate more random bits
- * as needed. It is generally quite slow, and usually used to seed a
- * PRNG. As it uses /dev/urandom and /dev/random, the quality of the
- * returned random data depends on the platform.
- */
-uint32_t av_get_random_seed(void);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_RANDOM_SEED_H */
--- a/misc/winutils/include/libavutil/rational.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,155 +0,0 @@
-/*
- * rational numbers
- * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * rational numbers
- * @author Michael Niedermayer <michaelni@gmx.at>
- */
-
-#ifndef AVUTIL_RATIONAL_H
-#define AVUTIL_RATIONAL_H
-
-#include <stdint.h>
-#include <limits.h>
-#include "attributes.h"
-
-/**
- * @addtogroup lavu_math
- * @{
- */
-
-/**
- * rational number numerator/denominator
- */
-typedef struct AVRational{
- int num; ///< numerator
- int den; ///< denominator
-} AVRational;
-
-/**
- * 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
- */
-static inline int av_cmp_q(AVRational a, AVRational b){
- const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
-
- 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;
-}
-
-/**
- * Convert rational to double.
- * @param a rational to convert
- * @return (double) a
- */
-static inline double av_q2d(AVRational a){
- return a.num / (double) a.den;
-}
-
-/**
- * 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
- */
-int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max);
-
-/**
- * Multiply two rationals.
- * @param b first rational
- * @param c second rational
- * @return b*c
- */
-AVRational av_mul_q(AVRational b, AVRational c) av_const;
-
-/**
- * Divide one rational by another.
- * @param b first rational
- * @param c second rational
- * @return b/c
- */
-AVRational av_div_q(AVRational b, AVRational c) av_const;
-
-/**
- * Add two rationals.
- * @param b first rational
- * @param c second rational
- * @return b+c
- */
-AVRational av_add_q(AVRational b, AVRational c) av_const;
-
-/**
- * Subtract one rational from another.
- * @param b first rational
- * @param c second rational
- * @return b-c
- */
-AVRational av_sub_q(AVRational b, AVRational c) av_const;
-
-/**
- * Invert a rational.
- * @param q value
- * @return 1 / q
- */
-static av_always_inline AVRational av_inv_q(AVRational q)
-{
- AVRational r = { q.den, q.num };
- return r;
-}
-
-/**
- * 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
- */
-AVRational av_d2q(double d, int max) 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.
- */
-int av_nearer_q(AVRational q, AVRational q1, AVRational q2);
-
-/**
- * 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
- */
-int av_find_nearest_q_idx(AVRational q, const AVRational* q_list);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_RATIONAL_H */
--- a/misc/winutils/include/libavutil/samplefmt.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_SAMPLEFMT_H
-#define AVUTIL_SAMPLEFMT_H
-
-#include <stdint.h>
-
-#include "avutil.h"
-#include "attributes.h"
-
-/**
- * Audio Sample Formats
- *
- * @par
- * 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.
- *
- * @par
- * 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.
- *
- * @par
- * The data layout as used in av_samples_fill_arrays() and elsewhere in Libav
- * (such as AVFrame in libavcodec) is as follows:
- *
- * 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.
- */
-enum AVSampleFormat {
- 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
-};
-
-/**
- * Return the name of sample_fmt, or NULL if sample_fmt is not
- * recognized.
- */
-const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt);
-
-/**
- * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE
- * on error.
- */
-enum AVSampleFormat av_get_sample_fmt(const char *name);
-
-/**
- * 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.
- */
-enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt);
-
-/**
- * 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.
- */
-enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt);
-
-/**
- * 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
- */
-char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt);
-
-#if FF_API_GET_BITS_PER_SAMPLE_FMT
-/**
- * @deprecated Use av_get_bytes_per_sample() instead.
- */
-attribute_deprecated
-int av_get_bits_per_sample_fmt(enum AVSampleFormat sample_fmt);
-#endif
-
-/**
- * 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
- */
-int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt);
-
-/**
- * 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
- */
-int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt);
-
-/**
- * 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
- */
-int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples,
- enum AVSampleFormat sample_fmt, int align);
-
-/**
- * Fill channel data pointers and linesize for samples with sample
- * format sample_fmt.
- *
- * The pointers array is filled with the pointers to the samples data:
- * 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 linesize array is filled with the aligned size of each channel's data
- * buffer for planar layout, or the aligned size of the buffer for all channels
- * for packed layout.
- *
- * @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
- */
-int av_samples_fill_arrays(uint8_t **audio_data, int *linesize,
- const uint8_t *buf,
- int nb_channels, int nb_samples,
- enum AVSampleFormat sample_fmt, int align);
-
-/**
- * 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])
- * Allocated data will be initialized to silence.
- *
- * @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
- * @see av_samples_fill_arrays()
- */
-int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels,
- int nb_samples, enum AVSampleFormat sample_fmt, int align);
-
-/**
- * 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
- */
-int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset,
- int src_offset, int nb_samples, int nb_channels,
- enum AVSampleFormat sample_fmt);
-
-/**
- * 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
- */
-int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples,
- int nb_channels, enum AVSampleFormat sample_fmt);
-
-#endif /* AVUTIL_SAMPLEFMT_H */
--- a/misc/winutils/include/libavutil/sha.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Copyright (C) 2007 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_SHA_H
-#define AVUTIL_SHA_H
-
-#include <stdint.h>
-
-#include "attributes.h"
-#include "version.h"
-
-/**
- * @defgroup lavu_sha SHA
- * @ingroup lavu_crypto
- * @{
- */
-
-#if FF_API_CONTEXT_SIZE
-extern attribute_deprecated const int av_sha_size;
-#endif
-
-struct AVSHA;
-
-/**
- * Allocate an AVSHA context.
- */
-struct AVSHA *av_sha_alloc(void);
-
-/**
- * Initialize SHA-1 or SHA-2 hashing.
- *
- * @param context pointer to the function context (of size av_sha_size)
- * @param bits number of bits in digest (SHA-1 - 160 bits, SHA-2 224 or 256 bits)
- * @return zero if initialization succeeded, -1 otherwise
- */
-int av_sha_init(struct AVSHA* context, int bits);
-
-/**
- * Update hash value.
- *
- * @param context hash function context
- * @param data input data to update hash with
- * @param len input data length
- */
-void av_sha_update(struct AVSHA* context, const uint8_t* data, unsigned int len);
-
-/**
- * Finish hashing and output digest value.
- *
- * @param context hash function context
- * @param digest buffer where output digest value is stored
- */
-void av_sha_final(struct AVSHA* context, uint8_t *digest);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_SHA_H */
--- a/misc/winutils/include/libavutil/time.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_TIME_H
-#define AVUTIL_TIME_H
-
-#include <stdint.h>
-
-/**
- * Get the current time in microseconds.
- */
-int64_t av_gettime(void);
-
-/**
- * Sleep for a period of time. Although the duration is expressed in
- * microseconds, the actual delay may be rounded to the precision of the
- * system timer.
- *
- * @param usec Number of microseconds to sleep.
- * @return zero on success or (negative) error code.
- */
-int av_usleep(unsigned usec);
-
-#endif /* AVUTIL_TIME_H */
--- a/misc/winutils/include/libavutil/version.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,93 +0,0 @@
-/*
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_VERSION_H
-#define AVUTIL_VERSION_H
-
-#include "avutil.h"
-
-/**
- * @file
- * @ingroup lavu
- * Libavutil version macros
- */
-
-/**
- * @defgroup lavu_ver Version and Build diagnostics
- *
- * Macros and function useful to check at compiletime and at runtime
- * which version of libavutil is in use.
- *
- * @{
- */
-
-#define LIBAVUTIL_VERSION_MAJOR 51
-#define LIBAVUTIL_VERSION_MINOR 45
-#define LIBAVUTIL_VERSION_MICRO 0
-
-#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
- LIBAVUTIL_VERSION_MINOR, \
- LIBAVUTIL_VERSION_MICRO)
-#define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \
- LIBAVUTIL_VERSION_MINOR, \
- LIBAVUTIL_VERSION_MICRO)
-#define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT
-
-#define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION)
-
-/**
- * @}
- *
- * @defgroup depr_guards Deprecation guards
- * 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_GET_BITS_PER_SAMPLE_FMT
-#define FF_API_GET_BITS_PER_SAMPLE_FMT (LIBAVUTIL_VERSION_MAJOR < 52)
-#endif
-#ifndef FF_API_FIND_OPT
-#define FF_API_FIND_OPT (LIBAVUTIL_VERSION_MAJOR < 52)
-#endif
-#ifndef FF_API_AV_FIFO_PEEK
-#define FF_API_AV_FIFO_PEEK (LIBAVUTIL_VERSION_MAJOR < 52)
-#endif
-#ifndef FF_API_OLD_AVOPTIONS
-#define FF_API_OLD_AVOPTIONS (LIBAVUTIL_VERSION_MAJOR < 52)
-#endif
-#ifndef FF_API_PIX_FMT
-#define FF_API_PIX_FMT (LIBAVUTIL_VERSION_MAJOR < 52)
-#endif
-#ifndef FF_API_CONTEXT_SIZE
-#define FF_API_CONTEXT_SIZE (LIBAVUTIL_VERSION_MAJOR < 52)
-#endif
-#ifndef FF_API_PIX_FMT_DESC
-#define FF_API_PIX_FMT_DESC (LIBAVUTIL_VERSION_MAJOR < 52)
-#endif
-#ifndef FF_API_AV_REVERSE
-#define FF_API_AV_REVERSE (LIBAVUTIL_VERSION_MAJOR < 52)
-#endif
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_VERSION_H */
--- a/misc/winutils/include/libavutil/xtea.h Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-/*
- * A 32-bit implementation of the XTEA algorithm
- *
- * This file is part of Libav.
- *
- * Libav 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.
- *
- * Libav is distributed in the hope that 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 Libav; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef AVUTIL_XTEA_H
-#define AVUTIL_XTEA_H
-
-#include <stdint.h>
-
-/**
- * @defgroup lavu_xtea XTEA
- * @ingroup lavu_crypto
- * @{
- */
-
-typedef struct AVXTEA {
- uint32_t key[16];
-} AVXTEA;
-
-/**
- * Initialize an AVXTEA context.
- *
- * @param ctx an AVXTEA context
- * @param key a key of 16 bytes used for encryption/decryption
- */
-void av_xtea_init(struct AVXTEA *ctx, const uint8_t key[16]);
-
-/**
- * Encrypt or decrypt a buffer using a previously initialized context.
- *
- * @param ctx an AVXTEA context
- * @param dst destination array, can be equal to src
- * @param src source array, can be equal to dst
- * @param count number of 8 byte blocks
- * @param iv initialization vector for CBC mode, if NULL then ECB will be used
- * @param decrypt 0 for encryption, 1 for decryption
- */
-void av_xtea_crypt(struct AVXTEA *ctx, uint8_t *dst, const uint8_t *src,
- int count, uint8_t *iv, int decrypt);
-
-/**
- * @}
- */
-
-#endif /* AVUTIL_XTEA_H */
Binary file misc/winutils/lib/libavcodec.dll.a has changed
Binary file misc/winutils/lib/libavformat.dll.a has changed
Binary file misc/winutils/lib/libavutil.dll.a has changed
--- a/project_files/hwc/CMakeLists.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/project_files/hwc/CMakeLists.txt Fri Jul 03 23:51:47 2020 +0200
@@ -1,6 +1,5 @@
#the usual set of dependencies
find_package(OpenGL REQUIRED)
-find_package(GLEW REQUIRED)
find_package(SDL2 REQUIRED)
find_package(SDL2_mixer 2 REQUIRED)
find_package(SDL2_net 2 REQUIRED)
@@ -8,7 +7,6 @@
find_package(SDL2_ttf 2 REQUIRED)
#compile our rtl implementation
-include_directories(${GLEW_INCLUDE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/rtl)
include_directories(${PHYSFS_INCLUDE_DIR})
include_directories(${PHYSLAYER_INCLUDE_DIR})
@@ -74,6 +72,9 @@
if(GL2)
set(pas2c_args ${pas2c_args} -d GL2)
endif()
+if(APPLE)
+ set(pas2c_args ${pas2c_args} -d DARWIN)
+endif()
if(LIBAV_FOUND)
add_subdirectory(${CMAKE_SOURCE_DIR}/hedgewars/avwrapper ${CMAKE_CURRENT_BINARY_DIR}/avwrapper)
@@ -115,7 +116,6 @@
${SDL2_NET_LIBRARIES}
${SDL2_IMAGE_LIBRARIES}
${SDL2_TTF_LIBRARIES}
- ${GLEW_LIBRARY}
physfs
physlayer
m
--- a/project_files/hwc/rtl/CMakeLists.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/project_files/hwc/rtl/CMakeLists.txt Fri Jul 03 23:51:47 2020 +0200
@@ -1,5 +1,3 @@
-
-include_directories(${GLEW_INCLUDE_DIR})
file(GLOB fpcrtl_src *.c)
--- a/project_files/hwc/rtl/GL.h Wed Jul 31 23:14:27 2019 +0200
+++ b/project_files/hwc/rtl/GL.h Fri Jul 03 23:51:47 2020 +0200
@@ -33,5 +33,6 @@
void glGetShaderiv(GLuint shader, GLenum pname, GLint *params);
GLuint glCreateShader(GLenum shaderType);
void glCompileShader(GLuint shader);
-void glShaderSource(GLuint shader, GLsizei count,/* const dropped for pas2c compat */ GLchar **string, const GLint *length);
+//void glShaderSource(GLuint shader, GLsizei count,/* const dropped for pas2c compat */ GLchar **string, const GLint *length);
+void glShaderSource(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
#endif
--- a/project_files/hwc/rtl/fpcrtl.h Wed Jul 31 23:14:27 2019 +0200
+++ b/project_files/hwc/rtl/fpcrtl.h Fri Jul 03 23:51:47 2020 +0200
@@ -13,10 +13,6 @@
#include "fileio.h"
#include "pmath.h"
-#ifndef EMSCRIPTEN
-#include "GL/glew.h"
-#endif
-
#define fpcrtl_memcpy memcpy
#define luapas_lua_gettop lua_gettop
--- a/project_files/hwc/rtl/misc.c Wed Jul 31 23:14:27 2019 +0200
+++ b/project_files/hwc/rtl/misc.c Fri Jul 03 23:51:47 2020 +0200
@@ -219,9 +219,6 @@
return &s->s[1];
}
-#ifdef EMSCRIPTEN
-GLenum glewInit()
-{
- return GLEW_OK;
+void fpcrtl_glShaderSource(GLuint shader, GLsizei count,/* const dropped for pas2c compat */ GLchar **string, const GLint *length) {
+ glShaderSource(shader, count, (const char * const *)string, length);
}
-#endif
--- a/project_files/hwc/rtl/misc.h Wed Jul 31 23:14:27 2019 +0200
+++ b/project_files/hwc/rtl/misc.h Fri Jul 03 23:51:47 2020 +0200
@@ -5,11 +5,7 @@
#include <assert.h>
#include <stdbool.h>
-#ifdef EMSCRIPTEN
-#include <GL/gl.h>
-#else
-#include <GL/glew.h>
-#endif
+#include "GL.h"
#define VA_NUM_ARGS(...) VA_NUM_ARGS_IMPL(__VA_ARGS__, 5,4,3,2,1)
#define VA_NUM_ARGS_IMPL(_1,_2,_3,_4,_5,N,...) N
@@ -59,9 +55,4 @@
string255 fpcrtl_astr2str(const astring s);
#define fpcrtl_TypeInfo sizeof // dummy
-#ifdef EMSCRIPTEN
-#define GLEW_OK 1
-GLenum glewInit();
#endif
-
-#endif
--- a/rust/hedgewars-engine-messages/Cargo.toml Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-engine-messages/Cargo.toml Fri Jul 03 23:51:47 2020 +0200
@@ -7,3 +7,4 @@
[dependencies]
nom = "4.1"
byteorder = "1.2"
+queues = "1.1"
--- a/rust/hedgewars-engine-messages/src/lib.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-engine-messages/src/lib.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,2 +1,3 @@
pub mod messages;
pub mod parser;
+pub mod queue;
--- a/rust/hedgewars-engine-messages/src/parser.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-engine-messages/src/parser.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,10 +1,9 @@
-use nom::{Err::Error, *};
-use std::str;
-
-use super::messages::{
+use crate::messages::{
ConfigEngineMessage::*, EngineMessage::*, KeystrokeAction::*, SyncedEngineMessage::*,
UnorderedEngineMessage::*, *,
};
+use nom::{Err::Error, *};
+use std::str;
macro_rules! eof_slice (
($i:expr,) => (
@@ -129,62 +128,74 @@
let consumed = buf.len() - tail.len();
Some((consumed, msg))
- },
+ }
Err(Err::Incomplete(_)) => None,
Err(Err::Error(_)) | Err(Err::Failure(_)) => unreachable!(),
}
}
-#[test]
-fn parse_length() {
- assert_eq!(length_specifier(b"\x01"), Ok((&b""[..], 1)));
- assert_eq!(length_specifier(b"\x00"), Ok((&b""[..], 0)));
- assert_eq!(length_specifier(b"\x3f"), Ok((&b""[..], 63)));
- assert_eq!(length_specifier(b"\x40\x00"), Ok((&b""[..], 64)));
- assert_eq!(
- length_specifier(b"\xff\xff"),
- Ok((&b""[..], EngineMessage::MAX_LEN))
- );
-}
+#[cfg(test)]
+mod tests {
+ use crate::messages::UnsyncedEngineMessage::*;
+ use crate::parser::*;
-#[test]
-fn parse_synced_messages() {
- assert_eq!(
- message(b"\x03L\x01\x02"),
- Ok((&b""[..], Synced(Left(Press), 258)))
- );
+ #[test]
+ fn parse_length() {
+ assert_eq!(length_specifier(b"\x01"), Ok((&b""[..], 1)));
+ assert_eq!(length_specifier(b"\x00"), Ok((&b""[..], 0)));
+ assert_eq!(length_specifier(b"\x3f"), Ok((&b""[..], 63)));
+ assert_eq!(length_specifier(b"\x40\x00"), Ok((&b""[..], 64)));
+ assert_eq!(
+ length_specifier(b"\xff\xff"),
+ Ok((&b""[..], EngineMessage::MAX_LEN))
+ );
+ }
- assert_eq!(message(b"\x01#"), Ok((&b""[..], Synced(TimeWrap, 65535))));
+ #[test]
+ fn parse_synced_messages() {
+ assert_eq!(
+ message(b"\x03L\x01\x02"),
+ Ok((&b""[..], Synced(Left(Press), 258)))
+ );
- assert_eq!(message(&vec![9, b'p', 255, 133, 151, 1, 0, 2, 0, 0]), Ok((&b""[..], Synced(Put(-31337, 65538), 0))));
-}
+ assert_eq!(message(b"\x01#"), Ok((&b""[..], Synced(TimeWrap, 65535))));
+
+ assert_eq!(
+ message(&vec![9, b'p', 255, 133, 151, 1, 0, 2, 0, 0]),
+ Ok((&b""[..], Synced(Put(-31337, 65538), 0)))
+ );
+ }
-#[test]
-fn parse_unsynced_messages() {
- assert_eq!(
- message(b"\x06shello"),
- Ok((&b""[..], Unordered(ChatMessage(String::from("hello")))))
- );
-}
+ #[test]
+ fn parse_unsynced_messages() {
+ assert_eq!(
+ message(b"\x06shello"),
+ Ok((&b""[..], Unsynced(ChatMessage(String::from("hello")))))
+ );
+ }
-#[test]
-fn parse_incorrect_messages() {
- assert_eq!(message(b"\x00"), Ok((&b""[..], Empty)));
- assert_eq!(message(b"\x01\x00"), Ok((&b""[..], Unknown)));
+ #[test]
+ fn parse_incorrect_messages() {
+ assert_eq!(message(b"\x00"), Ok((&b""[..], Empty)));
+ assert_eq!(message(b"\x01\x00"), Ok((&b""[..], Unknown)));
+
+ // garbage after correct message
+ assert_eq!(message(b"\x04La\x01\x02"), Ok((&b""[..], Unknown)));
+ }
- // garbage after correct message
- assert_eq!(message(b"\x04La\x01\x02"), Ok((&b""[..], Unknown)));
-}
+ #[test]
+ fn parse_config_messages() {
+ assert_eq!(message(b"\x01C"), Ok((&b""[..], Config(ConfigRequest))));
+ }
-#[test]
-fn parse_config_messages() {
- assert_eq!(message(b"\x01C"), Ok((&b""[..], Config(ConfigRequest))));
+ #[test]
+ fn parse_test_general() {
+ assert_eq!(string_tail(b"abc"), Ok((&b""[..], String::from("abc"))));
+
+ assert_eq!(extract_message(b"\x02#"), None);
+ assert_eq!(
+ extract_message(b"\x01#"),
+ Some((2, Synced(TimeWrap, 65535)))
+ );
+ }
}
-
-#[test]
-fn parse_test_general() {
- assert_eq!(string_tail(b"abc"), Ok((&b""[..], String::from("abc"))));
-
- assert_eq!(extract_message(b"\x02#"), None);
- assert_eq!(extract_message(b"\x01#"), Some((2, Synced(TimeWrap, 65535))));
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-engine-messages/src/queue.rs Fri Jul 03 23:51:47 2020 +0200
@@ -0,0 +1,112 @@
+use crate::messages::{EngineMessage::*, SyncedEngineMessage::*, UnsyncedEngineMessage::*, *};
+use queues::*;
+
+#[derive(PartialEq)]
+pub enum QueueChatStrategy {
+ NetworkGame,
+ LocalGame,
+}
+
+pub struct MessagesQueue {
+ strategy: QueueChatStrategy,
+ hi_ticks: u32,
+ unordered: Queue<EngineMessage>,
+ ordered: Queue<EngineMessage>,
+}
+
+impl MessagesQueue {
+ pub fn new(strategy: QueueChatStrategy) -> Self {
+ MessagesQueue {
+ strategy,
+ hi_ticks: 0,
+ unordered: queue![],
+ ordered: queue![],
+ }
+ }
+
+ fn is_unordered(&self, message: &EngineMessage) -> bool {
+ match message {
+ Unordered(_) => true,
+ Unsynced(HogSay(_)) | Unsynced(ChatMessage(_)) | Unsynced(TeamMessage(_)) => {
+ self.strategy == QueueChatStrategy::NetworkGame
+ }
+ _ => false,
+ }
+ }
+
+ pub fn push(&mut self, engine_message: EngineMessage) {
+ if self.is_unordered(&engine_message) {
+ self.unordered.add(engine_message).unwrap();
+ } else if let Synced(TimeWrap, timestamp) = engine_message {
+ self.ordered
+ .add(Synced(TimeWrap, timestamp + self.hi_ticks))
+ .unwrap();
+ self.hi_ticks += 65536;
+ } else if let Synced(message, timestamp) = engine_message {
+ self.ordered
+ .add(Synced(message, timestamp + self.hi_ticks))
+ .unwrap();
+ } else {
+ self.ordered.add(engine_message).unwrap();
+ }
+ }
+
+ pub fn pop(&mut self, timestamp: u32) -> Option<EngineMessage> {
+ if let Ok(message) = self.unordered.remove() {
+ Some(message)
+ } else if let Ok(Synced(_, message_timestamp)) = self.ordered.peek() {
+ if message_timestamp == timestamp {
+ self.ordered.remove().ok()
+ } else {
+ None
+ }
+ } else {
+ self.ordered.remove().ok()
+ }
+ }
+
+ pub fn iter(&mut self, timestamp: u32) -> MessagesQueueIterator {
+ MessagesQueueIterator {
+ timestamp,
+ queue: self,
+ }
+ }
+}
+
+pub struct MessagesQueueIterator<'a> {
+ timestamp: u32,
+ queue: &'a mut MessagesQueue,
+}
+
+impl<'a> Iterator for MessagesQueueIterator<'a> {
+ type Item = EngineMessage;
+
+ fn next(&mut self) -> Option<EngineMessage> {
+ self.queue.pop(self.timestamp)
+ }
+}
+
+#[test]
+fn queue_order() {
+ use crate::messages::UnorderedEngineMessage::*;
+
+ let mut queue = MessagesQueue::new(QueueChatStrategy::LocalGame);
+
+ queue.push(Synced(Skip, 1));
+ queue.push(Unsynced(ChatMessage("hi".to_string())));
+ queue.push(Synced(TimeWrap, 65535));
+ queue.push(Unordered(Ping));
+ queue.push(Synced(Skip, 2));
+
+ let zero_tick: Vec<EngineMessage> = queue.iter(0).collect();
+ assert_eq!(zero_tick, vec![Unordered(Ping)]);
+ assert_eq!(queue.pop(1), Some(Synced(Skip, 1)));
+ assert_eq!(queue.pop(1), Some(Unsynced(ChatMessage("hi".to_string()))));
+ assert_eq!(queue.pop(1), None);
+ assert_eq!(queue.pop(2), None);
+ assert_eq!(queue.pop(65535), Some(Synced(TimeWrap, 65535)));
+ assert_eq!(queue.pop(65535), None);
+ assert_eq!(queue.pop(65538), Some(Synced(Skip, 65538)));
+ assert_eq!(queue.pop(65538), None);
+ assert_eq!(queue.pop(65539), None);
+}
--- a/rust/hedgewars-server/src/core/indexslab.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-server/src/core/indexslab.rs Fri Jul 03 23:51:47 2020 +0200
@@ -19,6 +19,14 @@
}
}
+ pub fn get(&self, index: usize) -> Option<&T> {
+ self.data[index].as_ref()
+ }
+
+ pub fn get_mut(&mut self, index: usize) -> Option<&mut T> {
+ self.data[index].as_mut()
+ }
+
pub fn insert(&mut self, index: usize, value: T) {
if index >= self.data.len() {
self.data.reserve(index - self.data.len() + 1);
@@ -41,7 +49,7 @@
}
}
- pub fn iter(&self) -> impl Iterator<Item = (usize, &T)> {
+ pub fn iter(&self) -> impl Iterator<Item = (usize, &T)> + Clone {
self.data
.iter()
.enumerate()
--- a/rust/hedgewars-server/src/core/server.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-server/src/core/server.rs Fri Jul 03 23:51:47 2020 +0200
@@ -2,23 +2,46 @@
client::HwClient,
indexslab::IndexSlab,
room::HwRoom,
- types::{ClientId, RoomId},
+ types::{ClientId, RoomId, ServerVar},
};
use crate::{protocol::messages::HwProtocolMessage::Greeting, utils};
+use crate::core::server::JoinRoomError::WrongProtocol;
use bitflags::*;
use log::*;
use slab;
-use std::{borrow::BorrowMut, iter, num::NonZeroU16};
+use std::{borrow::BorrowMut, collections::HashSet, iter, num::NonZeroU16};
type Slab<T> = slab::Slab<T>;
+#[derive(Debug)]
+pub enum CreateRoomError {
+ InvalidName,
+ AlreadyExists,
+}
+
+#[derive(Debug)]
+pub enum JoinRoomError {
+ DoesntExist,
+ WrongProtocol,
+ Full,
+ Restricted,
+}
+
+#[derive(Debug)]
+pub struct UninitializedError();
+#[derive(Debug)]
+pub struct AccessError();
+
pub struct HwAnteClient {
pub nick: Option<String>,
pub protocol_number: Option<NonZeroU16>,
pub server_salt: String,
pub is_checker: bool,
pub is_local_admin: bool,
+ pub is_registered: bool,
+ pub is_admin: bool,
+ pub is_contributor: bool,
}
pub struct HwAnteroom {
@@ -38,12 +61,15 @@
server_salt: salt,
is_checker: false,
is_local_admin,
+ is_registered: false,
+ is_admin: false,
+ is_contributor: false,
};
self.clients.insert(client_id, client);
}
pub fn remove_client(&mut self, client_id: ClientId) -> Option<HwAnteClient> {
- let mut client = self.clients.remove(client_id);
+ let client = self.clients.remove(client_id);
client
}
}
@@ -91,6 +117,34 @@
}
}
+ #[inline]
+ pub fn client(&self, client_id: ClientId) -> &HwClient {
+ &self.clients[client_id]
+ }
+
+ #[inline]
+ pub fn client_mut(&mut self, client_id: ClientId) -> &mut HwClient {
+ &mut self.clients[client_id]
+ }
+
+ #[inline]
+ pub fn room(&self, room_id: RoomId) -> &HwRoom {
+ &self.rooms[room_id]
+ }
+
+ #[inline]
+ pub fn room_mut(&mut self, room_id: RoomId) -> &mut HwRoom {
+ &mut self.rooms[room_id]
+ }
+
+ #[inline]
+ pub fn is_admin(&self, client_id: ClientId) -> bool {
+ self.clients
+ .get(client_id)
+ .map(|c| c.is_admin())
+ .unwrap_or(false)
+ }
+
pub fn add_client(&mut self, client_id: ClientId, data: HwAnteClient) {
if let (Some(protocol), Some(nick)) = (data.protocol_number, data.nick) {
let mut client = HwClient::new(client_id, protocol.get(), nick);
@@ -98,6 +152,13 @@
#[cfg(not(feature = "official-server"))]
client.set_is_admin(data.is_local_admin);
+ #[cfg(feature = "official-server")]
+ {
+ client.set_is_registered(info.is_registered);
+ client.set_is_admin(info.is_admin);
+ client.set_is_contributor(info.is_contributor);
+ }
+
self.clients.insert(client_id, client);
}
}
@@ -106,8 +167,8 @@
self.clients.remove(client_id);
}
- pub fn get_greetings(&self, client_id: ClientId) -> &str {
- if self.clients[client_id].protocol_number < self.latest_protocol {
+ pub fn get_greetings(&self, client: &HwClient) -> &str {
+ if client.protocol_number < self.latest_protocol {
&self.greetings.for_old_protocols
} else {
&self.greetings.for_latest_protocol
@@ -115,29 +176,123 @@
}
#[inline]
+ pub fn get_client_nick(&self, client_id: ClientId) -> &str {
+ &self.clients[client_id].nick
+ }
+
+ #[inline]
pub fn create_room(
&mut self,
creator_id: ClientId,
name: String,
password: Option<String>,
- ) -> RoomId {
- create_room(
- &mut self.clients[creator_id],
- &mut self.rooms,
- name,
- password,
- )
+ ) -> Result<(&HwClient, &HwRoom), CreateRoomError> {
+ use CreateRoomError::*;
+ if utils::is_name_illegal(&name) {
+ Err(InvalidName)
+ } else if self.has_room(&name) {
+ Err(AlreadyExists)
+ } else {
+ Ok(create_room(
+ &mut self.clients[creator_id],
+ &mut self.rooms,
+ name,
+ password,
+ ))
+ }
+ }
+
+ pub fn join_room(
+ &mut self,
+ client_id: ClientId,
+ room_id: RoomId,
+ ) -> Result<(&HwClient, &HwRoom, impl Iterator<Item = &HwClient> + Clone), JoinRoomError> {
+ use JoinRoomError::*;
+ let room = &mut self.rooms[room_id];
+ let client = &mut self.clients[client_id];
+
+ if client.protocol_number != room.protocol_number {
+ Err(WrongProtocol)
+ } else if room.is_join_restricted() {
+ Err(Restricted)
+ } else if room.players_number == u8::max_value() {
+ Err(Full)
+ } else {
+ move_to_room(client, room);
+ let room_id = room.id;
+ Ok((
+ &self.clients[client_id],
+ &self.rooms[room_id],
+ self.clients.iter().map(|(_, c)| c),
+ ))
+ }
}
#[inline]
- pub fn move_to_room(&mut self, client_id: ClientId, room_id: RoomId) {
- move_to_room(&mut self.clients[client_id], &mut self.rooms[room_id])
+ pub fn join_room_by_name(
+ &mut self,
+ client_id: ClientId,
+ room_name: &str,
+ ) -> Result<(&HwClient, &HwRoom, impl Iterator<Item = &HwClient> + Clone), JoinRoomError> {
+ use JoinRoomError::*;
+ let room = self.rooms.iter().find(|(_, r)| r.name == room_name);
+ if let Some((_, room)) = room {
+ let room_id = room.id;
+ self.join_room(client_id, room_id)
+ } else {
+ Err(DoesntExist)
+ }
+ }
+
+ #[inline]
+ pub fn set_var(&mut self, client_id: ClientId, var: ServerVar) -> Result<(), AccessError> {
+ if self.clients[client_id].is_admin() {
+ match var {
+ ServerVar::MOTDNew(msg) => self.greetings.for_latest_protocol = msg,
+ ServerVar::MOTDOld(msg) => self.greetings.for_old_protocols = msg,
+ ServerVar::LatestProto(n) => self.latest_protocol = n,
+ }
+ Ok(())
+ } else {
+ Err(AccessError())
+ }
}
+ #[inline]
+ pub fn get_vars(&self, client_id: ClientId) -> Result<[ServerVar; 3], AccessError> {
+ if self.clients[client_id].is_admin() {
+ Ok([
+ ServerVar::MOTDNew(self.greetings.for_latest_protocol.clone()),
+ ServerVar::MOTDOld(self.greetings.for_old_protocols.clone()),
+ ServerVar::LatestProto(self.latest_protocol),
+ ])
+ } else {
+ Err(AccessError())
+ }
+ }
+
+ pub fn get_used_protocols(&self, client_id: ClientId) -> Result<Vec<u16>, AccessError> {
+ if self.clients[client_id].is_admin() {
+ let mut protocols: HashSet<_> = self
+ .clients
+ .iter()
+ .map(|(_, c)| c.protocol_number)
+ .chain(self.rooms.iter().map(|(_, r)| r.protocol_number))
+ .collect();
+ let mut protocols: Vec<_> = protocols.drain().collect();
+ protocols.sort();
+ Ok(protocols)
+ } else {
+ Err(AccessError())
+ }
+ }
+
+ #[inline]
pub fn has_room(&self, name: &str) -> bool {
self.find_room(name).is_some()
}
+ #[inline]
pub fn find_room(&self, name: &str) -> Option<&HwRoom> {
self.rooms
.iter()
@@ -234,12 +389,12 @@
entry.insert(room)
}
-fn create_room(
- client: &mut HwClient,
- rooms: &mut Slab<HwRoom>,
+fn create_room<'a, 'b>(
+ client: &'a mut HwClient,
+ rooms: &'b mut Slab<HwRoom>,
name: String,
password: Option<String>,
-) -> RoomId {
+) -> (&'a HwClient, &'b HwRoom) {
let room = allocate_room(rooms);
room.master_id = Some(client.id);
@@ -255,7 +410,7 @@
client.set_is_ready(true);
client.set_is_joined_mid_game(false);
- room.id
+ (client, room)
}
fn move_to_room(client: &mut HwClient, room: &mut HwRoom) {
--- a/rust/hedgewars-server/src/handlers.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-server/src/handlers.rs Fri Jul 03 23:51:47 2020 +0200
@@ -9,6 +9,7 @@
use self::{
actions::{Destination, DestinationGroup, PendingMessage},
inanteroom::LoginResult,
+ strings::*,
};
use crate::{
core::{
@@ -32,6 +33,7 @@
mod inanteroom;
mod inlobby;
mod inroom;
+mod strings;
#[derive(PartialEq, Debug)]
pub struct Sha1Digest([u8; 20]);
@@ -160,6 +162,16 @@
}
#[inline]
+ pub fn warn(&mut self, message: &str) {
+ self.add(Warning(message.to_string()).send_self());
+ }
+
+ #[inline]
+ pub fn error(&mut self, message: &str) {
+ self.add(Error(message.to_string()).send_self());
+ }
+
+ #[inline]
pub fn request_io(&mut self, task: IoTask) {
self.io_tasks.push(task)
}
@@ -240,7 +252,7 @@
LoginResult::Complete => {
if let Some(client) = server.anteroom.remove_client(client_id) {
server.add_client(client_id, client);
- common::join_lobby(server, response);
+ common::get_lobby_join_data(server, response);
}
}
LoginResult::Exit => {
@@ -262,7 +274,7 @@
let master_sign = if client.is_master() { "+" } else { "" };
let room_info = match client.room_id {
Some(room_id) => {
- let room = &server.rooms[room_id];
+ let room = server.room(room_id);
let status = match room.game_info {
Some(_) if client.teams_in_game == 0 => "(spectating)",
Some(_) => "(playing)",
@@ -284,37 +296,36 @@
];
response.add(Info(info).send_self())
} else {
- response
- .add(server_chat("Player is not online.".to_string()).send_self())
+ response.add(server_chat(USER_OFFLINE.to_string()).send_self())
}
}
HwProtocolMessage::ToggleServerRegisteredOnly => {
- if !server.clients[client_id].is_admin() {
- response.add(Warning("Access denied.".to_string()).send_self());
+ if !server.is_admin(client_id) {
+ response.warn(ACCESS_DENIED);
} else {
- server.set_is_registered_only(server.is_registered_only());
+ server.set_is_registered_only(!server.is_registered_only());
let msg = if server.is_registered_only() {
- "This server no longer allows unregistered players to join."
+ REGISTERED_ONLY_ENABLED
} else {
- "This server now allows unregistered players to join."
+ REGISTERED_ONLY_DISABLED
};
response.add(server_chat(msg.to_string()).send_all());
}
}
HwProtocolMessage::Global(msg) => {
- if !server.clients[client_id].is_admin() {
- response.add(Warning("Access denied.".to_string()).send_self());
+ if !server.is_admin(client_id) {
+ response.warn(ACCESS_DENIED);
} else {
response.add(global_chat(msg).send_all())
}
}
HwProtocolMessage::SuperPower => {
- if !server.clients[client_id].is_admin() {
- response.add(Warning("Access denied.".to_string()).send_self());
+ let client = server.client_mut(client_id);
+ if !client.is_admin() {
+ response.warn(ACCESS_DENIED);
} else {
- server.clients[client_id].set_has_super_power(true);
- response
- .add(server_chat("Super power activated.".to_string()).send_self())
+ client.set_has_super_power(true);
+ response.add(server_chat(SUPER_POWER.to_string()).send_self())
}
}
HwProtocolMessage::Watch(id) => {
@@ -325,13 +336,10 @@
#[cfg(not(feature = "official-server"))]
{
- response.add(
- Warning("This server does not support replays!".to_string())
- .send_self(),
- );
+ response.warn(REPLAY_NOT_SUPPORTED);
}
}
- _ => match server.clients[client_id].room_id {
+ _ => match server.client(client_id).room_id {
None => inlobby::handle(server, client_id, response, message),
Some(room_id) => {
inroom::handle(server, client_id, response, room_id, message)
@@ -374,38 +382,35 @@
match io_result {
IoResult::AccountRegistered(is_registered) => {
if !is_registered && server.is_registered_only() {
- response.add(
- Bye("This server only allows registered users to join.".to_string())
- .send_self(),
- );
+ response.add(Bye(REGISTRATION_REQUIRED.to_string()).send_self());
response.remove_client(client_id);
} else if is_registered {
let salt = server.anteroom.clients[client_id].server_salt.clone();
response.add(AskPassword(salt).send_self());
} else if let Some(client) = server.anteroom.remove_client(client_id) {
server.add_client(client_id, client);
- common::join_lobby(server, response);
+ common::get_lobby_join_data(server, response);
}
}
IoResult::Account(Some(info)) => {
response.add(ServerAuth(format!("{:x}", info.server_hash)).send_self());
- if let Some(client) = server.anteroom.remove_client(client_id) {
+ if let Some(mut client) = server.anteroom.remove_client(client_id) {
+ client.is_registered = info.is_registered;
+ client.is_admin = info.is_admin;
+ client.is_contributor = info.is_contributor;
server.add_client(client_id, client);
- let client = &mut server.clients[client_id];
- client.set_is_registered(info.is_registered);
- client.set_is_admin(info.is_admin);
- client.set_is_contributor(info.is_contributor);
- common::join_lobby(server, response);
+ common::get_lobby_join_data(server, response);
}
}
IoResult::Account(None) => {
- response.add(Error("Authentication failed.".to_string()).send_self());
+ response.error(AUTHENTICATION_FAILED);
response.remove_client(client_id);
}
IoResult::Replay(Some(replay)) => {
- let protocol = server.clients[client_id].protocol_number;
+ let client = server.client(client_id);
+ let protocol = client.protocol_number;
let start_msg = if protocol < 58 {
- RoomJoined(vec![server.clients[client_id].nick.clone()])
+ RoomJoined(vec![client.nick.clone()])
} else {
ReplayStart
};
@@ -421,32 +426,27 @@
}
}
IoResult::Replay(None) => {
- response.add(Warning("Could't load the replay".to_string()).send_self())
+ response.warn(REPLAY_LOAD_FAILED);
}
IoResult::SaveRoom(_, true) => {
- response.add(server_chat("Room configs saved successfully.".to_string()).send_self());
+ response.add(server_chat(ROOM_CONFIG_SAVED.to_string()).send_self());
}
IoResult::SaveRoom(_, false) => {
- response.add(Warning("Unable to save the room configs.".to_string()).send_self());
+ response.warn(ROOM_CONFIG_SAVE_FAILED);
}
IoResult::LoadRoom(room_id, Some(contents)) => {
if let Some(ref mut room) = server.rooms.get_mut(room_id) {
match room.set_saves(&contents) {
- Ok(_) => response.add(
- server_chat("Room configs loaded successfully.".to_string()).send_self(),
- ),
+ Ok(_) => response.add(server_chat(ROOM_CONFIG_LOADED.to_string()).send_self()),
Err(e) => {
warn!("Error while deserializing the room configs: {}", e);
- response.add(
- Warning("Unable to deserialize the room configs.".to_string())
- .send_self(),
- );
+ response.warn(ROOM_CONFIG_DESERIALIZE_FAILED);
}
}
}
}
IoResult::LoadRoom(_, None) => {
- response.add(Warning("Unable to load the room configs.".to_string()).send_self());
+ response.warn(ROOM_CONFIG_LOAD_FAILED);
}
}
}
--- a/rust/hedgewars-server/src/handlers/common.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-server/src/handlers/common.rs Fri Jul 03 23:51:47 2020 +0200
@@ -2,7 +2,7 @@
core::{
client::HwClient,
room::HwRoom,
- server::HwServer,
+ server::{HwServer, JoinRoomError},
types::{ClientId, GameCfg, RoomId, TeamInfo, Vote, VoteType},
},
protocol::messages::{
@@ -35,10 +35,10 @@
}
}
-pub fn join_lobby(server: &mut HwServer, response: &mut Response) {
+pub fn get_lobby_join_data(server: &HwServer, response: &mut Response) {
let client_id = response.client_id();
- let client = &server.clients[client_id];
+ let client = server.client(client_id);
let nick = vec![client.nick.clone()];
let mut flags = vec![];
if client.is_registered() {
@@ -69,7 +69,7 @@
),
];
- let server_msg = ServerMessage(server.get_greetings(client_id).to_string());
+ let server_msg = ServerMessage(server.get_greetings(client).to_string());
let rooms_msg = Rooms(
server
@@ -227,32 +227,43 @@
);
}
-pub fn enter_room(
- server: &mut HwServer,
- client_id: ClientId,
- room_id: RoomId,
+pub fn get_room_join_data<'a, I: Iterator<Item = &'a HwClient> + Clone>(
+ client: &HwClient,
+ room: &HwRoom,
+ room_clients: I,
response: &mut Response,
) {
- let nick = server.clients[client_id].nick.clone();
- server.move_to_room(client_id, room_id);
+ #[inline]
+ fn collect_nicks<'a, I, F>(clients: I, f: F) -> Vec<String>
+ where
+ I: Iterator<Item = &'a HwClient>,
+ F: Fn(&&'a HwClient) -> bool,
+ {
+ clients.filter(f).map(|c| &c.nick).cloned().collect()
+ }
- response.add(RoomJoined(vec![nick.clone()]).send_all().in_room(room_id));
+ let nick = client.nick.clone();
+ response.add(RoomJoined(vec![nick.clone()]).send_all().in_room(room.id));
response.add(ClientFlags(add_flags(&[Flags::InRoom]), vec![nick]).send_all());
- let nicks = server.collect_nicks(|(_, c)| c.room_id == Some(room_id));
+ let nicks = collect_nicks(room_clients.clone(), |c| c.room_id == Some(room.id));
response.add(RoomJoined(nicks).send_self());
- get_room_teams(server, room_id, client_id, response);
-
- let room = &server.rooms[room_id];
- get_room_config(room, client_id, response);
+ get_room_teams(room, client.id, response);
+ get_room_config(room, client.id, response);
let mut flag_selectors = [
(
Flags::RoomMaster,
- server.collect_nicks(|(_, c)| c.is_master()),
+ collect_nicks(room_clients.clone(), |c| c.is_master()),
),
- (Flags::Ready, server.collect_nicks(|(_, c)| c.is_ready())),
- (Flags::InGame, server.collect_nicks(|(_, c)| c.is_in_game())),
+ (
+ Flags::Ready,
+ collect_nicks(room_clients.clone(), |c| c.is_ready()),
+ ),
+ (
+ Flags::InGame,
+ collect_nicks(room_clients.clone(), |c| c.is_in_game()),
+ ),
];
for (flag, nicks) in &mut flag_selectors {
@@ -270,6 +281,16 @@
}
}
+pub fn get_room_join_error(error: JoinRoomError, response: &mut Response) {
+ use super::strings::*;
+ match error {
+ JoinRoomError::DoesntExist => response.warn(NO_ROOM),
+ JoinRoomError::WrongProtocol => response.warn(WRONG_PROTOCOL),
+ JoinRoomError::Full => response.warn(ROOM_FULL),
+ JoinRoomError::Restricted => response.warn(ROOM_JOIN_RESTRICTED),
+ }
+}
+
pub fn exit_room(server: &mut HwServer, client_id: ClientId, response: &mut Response, msg: &str) {
let client = &mut server.clients[client_id];
@@ -317,8 +338,8 @@
server.remove_client(client_id);
- response.add(LobbyLeft(nick, msg.to_string()).send_all());
- response.add(Bye("User quit: ".to_string() + &msg).send_self());
+ response.add(LobbyLeft(nick, msg.clone()).send_all());
+ response.add(Bye(msg).send_self());
response.remove_client(client_id);
}
@@ -354,13 +375,7 @@
}
}
-pub fn get_room_teams(
- server: &HwServer,
- room_id: RoomId,
- to_client: ClientId,
- response: &mut Response,
-) {
- let room = &server.rooms[room_id];
+pub fn get_room_teams(room: &HwRoom, to_client: ClientId, response: &mut Response) {
let current_teams = match room.game_info {
Some(ref info) => &info.teams_at_start,
None => &room.teams,
--- a/rust/hedgewars-server/src/handlers/inlobby.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-server/src/handlers/inlobby.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,10 +1,10 @@
use mio;
-use super::common::rnd_reply;
+use super::{common::rnd_reply, strings::*};
use crate::{
core::{
client::HwClient,
- server::HwServer,
+ server::{AccessError, CreateRoomError, HwServer, JoinRoomError},
types::{ClientId, ServerVar},
},
protocol::messages::{
@@ -23,41 +23,34 @@
message: HwProtocolMessage,
) {
use crate::protocol::messages::HwProtocolMessage::*;
+
match message {
- CreateRoom(name, password) => {
- if is_name_illegal(&name) {
- response.add(Warning("Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}".to_string()).send_self());
- } else if server.has_room(&name) {
- response.add(
- Warning("A room with the same name already exists.".to_string()).send_self(),
- );
- } else {
- let flags_msg = ClientFlags(
- add_flags(&[Flags::RoomMaster, Flags::Ready]),
- vec![server.clients[client_id].nick.clone()],
- );
-
- let room_id = server.create_room(client_id, name, password);
- let room = &server.rooms[room_id];
- let client = &server.clients[client_id];
-
+ CreateRoom(name, password) => match server.create_room(client_id, name, password) {
+ Err(CreateRoomError::InvalidName) => response.warn(ILLEGAL_ROOM_NAME),
+ Err(CreateRoomError::AlreadyExists) => response.warn(ROOM_EXISTS),
+ Ok((client, room)) => {
response.add(
RoomAdd(room.info(Some(&client)))
.send_all()
.with_protocol(room.protocol_number),
);
response.add(RoomJoined(vec![client.nick.clone()]).send_self());
- response.add(flags_msg.send_self());
-
+ response.add(
+ ClientFlags(
+ add_flags(&[Flags::RoomMaster, Flags::Ready]),
+ vec![client.nick.clone()],
+ )
+ .send_self(),
+ );
response.add(
ClientFlags(add_flags(&[Flags::InRoom]), vec![client.nick.clone()]).send_self(),
);
- };
- }
+ }
+ },
Chat(msg) => {
response.add(
ChatMsg {
- nick: server.clients[client_id].nick.clone(),
+ nick: server.get_client_nick(client_id).to_string(),
msg,
}
.send_all()
@@ -65,99 +58,62 @@
.but_self(),
);
}
- JoinRoom(name, _password) => {
- let room = server.rooms.iter().find(|(_, r)| r.name == name);
- let room_id = room.map(|(_, r)| r.id);
-
- let client = &mut server.clients[client_id];
-
- if let Some((_, room)) = room {
- if client.protocol_number != room.protocol_number {
- response.add(
- Warning("Room version incompatible to your Hedgewars version!".to_string())
- .send_self(),
- );
- } else if room.is_join_restricted() {
- response.add(
- Warning(
- "Access denied. This room currently doesn't allow joining.".to_string(),
- )
- .send_self(),
- );
- } else if room.players_number == u8::max_value() {
- response.add(Warning("This room is already full".to_string()).send_self());
- } else if let Some(room_id) = room_id {
- super::common::enter_room(server, client_id, room_id, response);
+ JoinRoom(name, _password) => match server.join_room_by_name(client_id, &name) {
+ Err(error) => super::common::get_room_join_error(error, response),
+ Ok((client, room, room_clients)) => {
+ super::common::get_room_join_data(client, room, room_clients, response)
+ }
+ },
+ Follow(nick) => {
+ if let Some(client) = server.find_client(&nick) {
+ if let Some(room_id) = client.room_id {
+ match server.join_room(client_id, room_id) {
+ Err(error) => super::common::get_room_join_error(error, response),
+ Ok((client, room, room_clients)) => {
+ super::common::get_room_join_data(client, room, room_clients, response)
+ }
+ }
+ } else {
+ response.warn(NO_ROOM);
}
} else {
- response.add(Warning("No such room.".to_string()).send_self());
+ response.warn(NO_USER);
}
}
- Follow(nick) => {
- if let Some(HwClient {
- room_id: Some(room_id),
- ..
- }) = server.find_client(&nick)
- {
- let room = &server.rooms[*room_id];
- response.add(Joining(room.name.clone()).send_self());
- super::common::enter_room(server, client_id, *room_id, response);
+ SetServerVar(var) => match server.set_var(client_id, var) {
+ Err(AccessError()) => response.warn(ACCESS_DENIED),
+ Ok(()) => response.add(server_chat(VARIABLE_UPDATED.to_string()).send_self()),
+ },
+ GetServerVar => match server.get_vars(client_id) {
+ Err(AccessError()) => response.warn(ACCESS_DENIED),
+ Ok(vars) => {
+ response.add(
+ ServerVars(vars.iter().flat_map(|v| v.to_protocol()).collect()).send_self(),
+ );
}
- }
- SetServerVar(var) => {
- if !server.clients[client_id].is_admin() {
- response.add(Warning("Access denied.".to_string()).send_self());
- } else {
- match var {
- ServerVar::MOTDNew(msg) => server.greetings.for_latest_protocol = msg,
- ServerVar::MOTDOld(msg) => server.greetings.for_old_protocols = msg,
- ServerVar::LatestProto(n) => server.latest_protocol = n,
- }
- }
- }
- GetServerVar => {
- if !server.clients[client_id].is_admin() {
- response.add(Warning("Access denied.".to_string()).send_self());
- } else {
- let vars: Vec<_> = [
- ServerVar::MOTDNew(server.greetings.for_latest_protocol.clone()),
- ServerVar::MOTDOld(server.greetings.for_old_protocols.clone()),
- ServerVar::LatestProto(server.latest_protocol),
- ]
- .iter()
- .flat_map(|v| v.to_protocol())
- .collect();
- response.add(ServerVars(vars).send_self());
- }
- }
+ },
Rnd(v) => {
response.add(rnd_reply(&v).send_self());
}
- Stats => {
- let mut protocols: HashSet<_> = server
- .clients
- .iter()
- .map(|(_, c)| c.protocol_number)
- .chain(server.rooms.iter().map(|(_, r)| r.protocol_number))
- .collect();
- let mut protocols: Vec<_> = protocols.drain().collect();
- protocols.sort();
-
- let mut html = Vec::with_capacity(protocols.len() + 2);
+ Stats => match server.get_used_protocols(client_id) {
+ Err(AccessError()) => response.warn(ACCESS_DENIED),
+ Ok(protocols) => {
+ let mut html = Vec::with_capacity(protocols.len() + 2);
- html.push("<table>".to_string());
- for protocol in protocols {
- html.push(format!(
- "<tr><td>{}</td><td>{}</td><td>{}</td></tr>",
- super::utils::protocol_version_string(protocol),
- server.protocol_clients(protocol).count(),
- server.protocol_rooms(protocol).count()
- ));
+ html.push("<table>".to_string());
+ for protocol in protocols {
+ html.push(format!(
+ "<tr><td>{}</td><td>{}</td><td>{}</td></tr>",
+ super::utils::protocol_version_string(protocol),
+ server.protocol_clients(protocol).count(),
+ server.protocol_rooms(protocol).count()
+ ));
+ }
+ html.push("</table>".to_string());
+
+ response.add(Warning(html.join("")).send_self());
}
- html.push("</table>".to_string());
-
- response.add(Warning(html.join("")).send_self());
- }
+ },
List => warn!("Deprecated LIST message received"),
_ => warn!("Incorrect command in lobby state"),
}
--- a/rust/hedgewars-server/src/handlers/inroom.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-server/src/handlers/inroom.rs Fri Jul 03 23:51:47 2020 +0200
@@ -49,10 +49,10 @@
#[cfg(canhazslicepatterns)]
fn is_msg_valid(msg: &[u8], team_indices: &[u8]) -> bool {
match msg {
- [size, typ, body..] => {
+ [size, typ, body..MAX] => {
VALID_MESSAGES.contains(typ)
&& match body {
- [1...MAX_HEDGEHOGS_PER_TEAM, team, ..] if *typ == b'h' => {
+ [1..=MAX_HEDGEHOGS_PER_TEAM, team, ..] if *typ == b'h' => {
team_indices.contains(team)
}
_ => *typ != b'h',
@@ -272,12 +272,8 @@
Some((_, name)) => {
client.teams_in_game -= 1;
client.clan = room.find_team_color(client.id);
- super::common::remove_teams(
- room,
- vec![name.to_string()],
- client.is_in_game(),
- response,
- );
+ let names = vec![name.to_string()];
+ super::common::remove_teams(room, names, client.is_in_game(), response);
match room.game_info {
Some(ref info) if info.teams_in_game == 0 => {
@@ -438,7 +434,7 @@
}
VoteType::NewSeed => None,
VoteType::HedgehogsPerTeam(number) => match number {
- 1...MAX_HEDGEHOGS_PER_TEAM => None,
+ 1..=MAX_HEDGEHOGS_PER_TEAM => None,
_ => Some("/callvote hedgehogs: Specify number from 1 to 8.".to_string()),
},
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hedgewars-server/src/handlers/strings.rs Fri Jul 03 23:51:47 2020 +0200
@@ -0,0 +1,23 @@
+pub const ACCESS_DENIED: &str = "Access denied.";
+pub const AUTHENTICATION_FAILED: &str = "Authentication failed.";
+pub const ILLEGAL_ROOM_NAME: &str = "Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}";
+pub const NO_ROOM: &str = "No such room.";
+pub const NO_USER: &str = "No such user.";
+pub const REPLAY_LOAD_FAILED: &str = "Could't load the replay";
+pub const REPLAY_NOT_SUPPORTED: &str = "This server does not support replays!";
+pub const REGISTRATION_REQUIRED: &str = "This server only allows registered users to join.";
+pub const REGISTERED_ONLY_ENABLED: &str =
+ "This server no longer allows unregistered players to join.";
+pub const REGISTERED_ONLY_DISABLED: &str = "This server now allows unregistered players to join.";
+pub const ROOM_CONFIG_SAVE_FAILED: &str = "Unable to save the room configs.";
+pub const ROOM_CONFIG_LOAD_FAILED: &str = "Unable to load the room configs.";
+pub const ROOM_CONFIG_DESERIALIZE_FAILED: &str = "Unable to deserialize the room configs.";
+pub const ROOM_CONFIG_LOADED: &str = "Room configs loaded successfully.";
+pub const ROOM_CONFIG_SAVED: &str = "Room configs saved successfully.";
+pub const ROOM_EXISTS: &str = "A room with the same name already exists.";
+pub const ROOM_FULL: &str = "This room is already full.";
+pub const ROOM_JOIN_RESTRICTED: &str = "Access denied. This room currently doesn't allow joining.";
+pub const SUPER_POWER: &str = "Super power activated.";
+pub const USER_OFFLINE: &str = "Player is not online.";
+pub const VARIABLE_UPDATED: &str = "Server variable has been updated.";
+pub const WRONG_PROTOCOL: &str = "Room version incompatible to your Hedgewars version!";
--- a/rust/hedgewars-server/src/protocol.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-server/src/protocol.rs Fri Jul 03 23:51:47 2020 +0200
@@ -24,7 +24,8 @@
fn recover(&mut self) -> bool {
self.is_recovering = match parser::malformed_message(&self.buf[..]) {
Ok((tail, ())) => {
- self.buf.consume(self.buf.len() - tail.len());
+ let length = tail.len();
+ self.buf.consume(self.buf.len() - length);
false
}
_ => {
@@ -50,7 +51,8 @@
match parser::message(&self.buf[..]) {
Ok((tail, message)) => {
messages.push(message);
- self.buf.consume(self.buf.len() - tail.len());
+ let length = tail.len();
+ self.buf.consume(self.buf.len() - length);
}
Err(nom::Err::Incomplete(_)) => break,
Err(nom::Err::Failure(e)) | Err(nom::Err::Error(e)) => {
--- a/rust/hedgewars-server/src/utils.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hedgewars-server/src/utils.rs Fri Jul 03 23:51:47 2020 +0200
@@ -69,6 +69,8 @@
56 => "0.9.25-dev",
57 => "0.9.25",
58 => "1.0.0-dev",
+ 59 => "1.0.0",
+ 60 => "1.0.1-dev",
_ => "Unknown",
}
}
--- a/rust/hwphysics/src/collision.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hwphysics/src/collision.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,13 +1,9 @@
use std::ops::RangeInclusive;
-use crate::{
- common::{GearData, GearDataProcessor, GearId},
- grid::Grid,
- physics::PhysicsData,
-};
+use crate::{common::GearId, data::GearDataManager, grid::Grid};
use fpnum::*;
-use integral_geometry::{GridIndex, Point, Size};
+use integral_geometry::{Point, Size};
use land2d::Land2D;
pub fn fppoint_round(point: &FPPoint) -> Point {
@@ -38,16 +34,12 @@
pub bounds: CircleBounds,
}
-impl GearData for CollisionData {}
-
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub struct ContactData {
pub elasticity: FPNum,
pub friction: FPNum,
}
-impl GearData for ContactData {}
-
struct EnabledCollisionsCollection {
gear_ids: Vec<GearId>,
collisions: Vec<CollisionData>,
@@ -108,6 +100,11 @@
}
impl CollisionProcessor {
+ pub fn register_components(data: &mut GearDataManager) {
+ data.register::<CollisionData>();
+ data.register::<ContactData>();
+ }
+
pub fn new(size: Size) -> Self {
Self {
grid: Grid::new(size),
@@ -116,6 +113,18 @@
}
}
+ pub fn add(&mut self, gear_id: GearId, gear_data: CollisionData) {
+ self.grid.insert_static(gear_id, &gear_data.bounds);
+ }
+
+ pub fn remove(&mut self, gear_id: GearId) {
+ self.grid.remove(gear_id);
+ }
+
+ pub fn get(&mut self, gear_id: GearId) -> Option<CollisionData> {
+ None
+ }
+
pub fn process(
&mut self,
land: &Land2D<u32>,
@@ -142,13 +151,3 @@
&self.detected_collisions
}
}
-
-impl GearDataProcessor<CollisionData> for CollisionProcessor {
- fn add(&mut self, gear_id: GearId, gear_data: CollisionData) {
- self.grid.insert_static(gear_id, &gear_data.bounds);
- }
-
- fn remove(&mut self, gear_id: GearId) {
- self.grid.remove(gear_id);
- }
-}
--- a/rust/hwphysics/src/common.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hwphysics/src/common.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,10 +1,10 @@
-use fpnum::{fp, FPNum};
+use fpnum::FPNum;
use std::{collections::BinaryHeap, num::NonZeroU16, ops::Add};
pub type GearId = NonZeroU16;
-pub trait GearData {}
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug)]
+#[repr(transparent)]
pub struct Millis(u32);
impl Millis {
@@ -20,7 +20,7 @@
#[inline]
pub fn to_fixed(self) -> FPNum {
- FPNum::new(self.0 as i32, 1000)
+ FPNum::new(self.0 as i32, 1)
}
}
@@ -32,15 +32,6 @@
}
}
-pub trait GearDataProcessor<T: GearData> {
- fn add(&mut self, gear_id: GearId, gear_data: T);
- fn remove(&mut self, gear_id: GearId);
-}
-
-pub trait GearDataAggregator<T: GearData> {
- fn find_processor(&mut self) -> &mut GearDataProcessor<T>;
-}
-
pub struct GearAllocator {
max_id: u16,
free_ids: BinaryHeap<GearId>,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rust/hwphysics/src/data.rs Fri Jul 03 23:51:47 2020 +0200
@@ -0,0 +1,661 @@
+use super::common::GearId;
+use std::{
+ any::TypeId,
+ fmt::{Debug, Error, Formatter},
+ marker::PhantomData,
+ mem::{align_of, size_of, MaybeUninit},
+ num::NonZeroU16,
+ ptr::{copy_nonoverlapping, null_mut, NonNull},
+ slice,
+};
+
+pub trait TypeTuple: Sized {
+ fn get_types(types: &mut Vec<TypeId>);
+}
+
+impl TypeTuple for () {
+ fn get_types(_types: &mut Vec<TypeId>) {}
+}
+
+impl<T: 'static> TypeTuple for &T {
+ fn get_types(types: &mut Vec<TypeId>) {
+ types.push(TypeId::of::<T>());
+ }
+}
+
+pub trait TypeIter: TypeTuple {
+ unsafe fn iter<F: FnMut(GearId, Self)>(slices: &[*mut u8], count: usize, f: F);
+}
+
+macro_rules! type_tuple_impl {
+ ($($n: literal: $t: ident),+) => {
+ impl<$($t: 'static),+> TypeTuple for ($(&$t),+,) {
+ fn get_types(types: &mut Vec<TypeId>) {
+ $(types.push(TypeId::of::<$t>()));+
+ }
+ }
+
+ impl<$($t: 'static),+> TypeIter for ($(&$t),+,) {
+ unsafe fn iter<F: FnMut(GearId, Self)>(slices: &[*mut u8], count: usize, mut f: F) {
+ for i in 0..count {
+ f(*(*slices.get_unchecked(0) as *const GearId).add(i),
+ ($(&*(*slices.get_unchecked($n + 1) as *mut $t).add(i)),+,));
+ }
+ }
+ }
+
+ impl<$($t: 'static),+> TypeTuple for ($(&mut $t),+,) {
+ fn get_types(types: &mut Vec<TypeId>) {
+ $(types.push(TypeId::of::<$t>()));+
+ }
+ }
+
+ impl<$($t: 'static),+> TypeIter for ($(&mut $t),+,) {
+ unsafe fn iter<F: FnMut(GearId, Self)>(slices: &[*mut u8], count: usize, mut f: F) {
+ for i in 0..count {
+ f(*(*slices.get_unchecked(0) as *const GearId).add(i),
+ ($(&mut *(*slices.get_unchecked($n + 1) as *mut $t).add(i)),+,));
+ }
+ }
+ }
+ }
+}
+
+type_tuple_impl!(0: A);
+type_tuple_impl!(0: A, 1: B);
+type_tuple_impl!(0: A, 1: B, 2: C);
+type_tuple_impl!(0: A, 1: B, 2: C, 3: D);
+type_tuple_impl!(0: A, 1: B, 2: C, 3: D, 4: E);
+
+const BLOCK_SIZE: usize = 32768;
+
+struct DataBlock {
+ max_elements: u16,
+ elements_count: u16,
+ data: Box<[u8; BLOCK_SIZE]>,
+ component_blocks: [Option<NonNull<u8>>; 64],
+ element_sizes: Box<[u16]>,
+}
+
+impl Unpin for DataBlock {}
+
+impl Debug for DataBlock {
+ fn fmt(&self, f: &mut Formatter) -> Result<(), Error> {
+ write!(
+ f,
+ "Block ({}/{}) {{\n",
+ self.elements_count, self.max_elements
+ )?;
+ write!(f, "\tIDs: [")?;
+ let id_slice = unsafe {
+ slice::from_raw_parts(
+ self.data.as_ptr() as *const GearId,
+ self.elements_count as usize,
+ )
+ };
+ for gear_id in id_slice {
+ write!(f, "{}, ", gear_id)?;
+ }
+ write!(f, "]\n")?;
+ for type_index in 0..self.element_sizes.len() {
+ if let Some(ptr) = self.component_blocks[type_index] {
+ write!(f, "\tC{}: [", type_index)?;
+ let slice = unsafe {
+ slice::from_raw_parts(
+ ptr.as_ptr(),
+ (self.elements_count * self.element_sizes[type_index]) as usize,
+ )
+ };
+ for byte in slice {
+ write!(f, "{}, ", byte)?;
+ }
+ write!(f, "]\n")?;
+ }
+ }
+ write!(f, "}}\n")
+ }
+}
+
+impl DataBlock {
+ fn new(mask: u64, element_sizes: &[u16], element_alignments: &[u8]) -> Self {
+ let total_padding: usize = element_alignments.iter().map(|x| *x as usize).sum();
+ let total_size: u16 = element_sizes
+ .iter()
+ .enumerate()
+ .filter(|(i, _)| mask & (1 << *i as u64) != 0)
+ .map(|(_, size)| *size)
+ .sum();
+ let max_elements =
+ ((BLOCK_SIZE - total_padding) / (total_size as usize + size_of::<GearId>())) as u16;
+
+ //ensure the block memory is aligned to GearId
+ let tmp_data: Box<[GearId; BLOCK_SIZE / size_of::<GearId>()]> =
+ Box::new(unsafe { MaybeUninit::uninit().assume_init() });
+ let mut data: Box<[u8; BLOCK_SIZE]> =
+ unsafe { Box::from_raw(Box::into_raw(tmp_data) as *mut [u8; BLOCK_SIZE]) };
+
+ let mut blocks = [None; 64];
+ let mut address = unsafe {
+ data.as_mut_ptr()
+ .add(size_of::<GearId>() * max_elements as usize)
+ };
+
+ for i in 0..element_sizes.len() {
+ if mask & (1 << i as u64) != 0 {
+ unsafe {
+ address = address.add(address.align_offset(element_alignments[i] as usize));
+ blocks[i] = Some(NonNull::new_unchecked(address));
+ address = address.add(element_sizes[i] as usize * max_elements as usize)
+ };
+ }
+ }
+
+ Self {
+ elements_count: 0,
+ max_elements,
+ data,
+ component_blocks: blocks,
+ element_sizes: Box::from(element_sizes),
+ }
+ }
+
+ fn gear_ids(&self) -> &[GearId] {
+ unsafe {
+ slice::from_raw_parts(
+ self.data.as_ptr() as *const GearId,
+ self.max_elements as usize,
+ )
+ }
+ }
+
+ fn gear_ids_mut(&mut self) -> &mut [GearId] {
+ unsafe {
+ slice::from_raw_parts_mut(
+ self.data.as_mut_ptr() as *mut GearId,
+ self.max_elements as usize,
+ )
+ }
+ }
+
+ fn is_full(&self) -> bool {
+ self.elements_count == self.max_elements
+ }
+}
+
+#[derive(Clone, Copy, Debug, Default)]
+struct LookupEntry {
+ index: Option<NonZeroU16>,
+ block_index: u16,
+}
+
+impl LookupEntry {
+ fn new(block_index: u16, index: u16) -> Self {
+ Self {
+ index: unsafe { Some(NonZeroU16::new_unchecked(index + 1)) },
+ block_index,
+ }
+ }
+}
+
+#[derive(Copy, Clone, Eq, PartialEq, Debug)]
+struct BlockMask {
+ type_mask: u64,
+ tag_mask: u64,
+}
+
+impl BlockMask {
+ #[inline]
+ fn new(type_mask: u64, tag_mask: u64) -> Self {
+ Self {
+ type_mask,
+ tag_mask,
+ }
+ }
+
+ #[inline]
+ fn with_type(&self, type_bit: u64) -> Self {
+ Self::new(self.type_mask | type_bit, self.tag_mask)
+ }
+
+ #[inline]
+ fn with_tag(&self, tag_bit: u64) -> Self {
+ Self::new(self.type_mask, self.tag_mask | tag_bit)
+ }
+}
+
+pub struct GearDataManager {
+ types: Vec<TypeId>,
+ tags: Vec<TypeId>,
+ blocks: Vec<DataBlock>,
+ block_masks: Vec<BlockMask>,
+ element_sizes: Box<[u16; 64]>,
+ element_alignments: Box<[u8; 64]>,
+ lookup: Box<[LookupEntry]>,
+}
+
+impl GearDataManager {
+ pub fn new() -> Self {
+ Self {
+ types: Vec::with_capacity(64),
+ tags: Vec::with_capacity(64),
+ blocks: vec![],
+ block_masks: vec![],
+ element_sizes: Box::new([0; 64]),
+ element_alignments: Box::new([0; 64]),
+ lookup: vec![LookupEntry::default(); u16::max_value() as usize].into_boxed_slice(),
+ }
+ }
+
+ #[inline]
+ fn get_type_index<T: 'static>(&self) -> Option<usize> {
+ let type_id = TypeId::of::<T>();
+ self.types.iter().position(|id| *id == type_id)
+ }
+
+ #[inline]
+ fn get_tag_index<T: 'static>(&self) -> Option<usize> {
+ let type_id = TypeId::of::<T>();
+ self.tags.iter().position(|id| *id == type_id)
+ }
+
+ fn move_between_blocks(
+ &mut self,
+ src_block_index: u16,
+ src_index: u16,
+ dest_block_index: u16,
+ ) -> u16 {
+ debug_assert!(src_block_index != dest_block_index);
+ let src_mask = self.block_masks[src_block_index as usize];
+ let dest_mask = self.block_masks[dest_block_index as usize];
+ debug_assert!(src_mask.type_mask & dest_mask.type_mask == src_mask.type_mask);
+
+ let src_block = &self.blocks[src_block_index as usize];
+ let dest_block = &self.blocks[dest_block_index as usize];
+ debug_assert!(src_index < src_block.elements_count);
+ debug_assert!(!dest_block.is_full());
+
+ let dest_index = dest_block.elements_count;
+ for i in 0..self.types.len() {
+ if src_mask.type_mask & (1 << i as u64) != 0 {
+ let size = self.element_sizes[i];
+ let src_ptr = src_block.component_blocks[i].unwrap().as_ptr();
+ let dest_ptr = dest_block.component_blocks[i].unwrap().as_ptr();
+ unsafe {
+ copy_nonoverlapping(
+ src_ptr.add((src_index * size) as usize),
+ dest_ptr.add((dest_index * size) as usize),
+ size as usize,
+ );
+ if src_index < src_block.elements_count - 1 {
+ copy_nonoverlapping(
+ src_ptr.add((size * (src_block.elements_count - 1)) as usize),
+ src_ptr.add((size * src_index) as usize),
+ size as usize,
+ );
+ }
+ }
+ }
+ }
+
+ let src_block = &mut self.blocks[src_block_index as usize];
+ let gear_id = src_block.gear_ids()[src_index as usize];
+
+ if src_index < src_block.elements_count - 1 {
+ let relocated_index = src_block.elements_count as usize - 1;
+ let gear_ids = src_block.gear_ids_mut();
+ let relocated_id = gear_ids[relocated_index];
+
+ gear_ids[src_index as usize] = relocated_id;
+ self.lookup[relocated_id.get() as usize - 1] =
+ LookupEntry::new(src_block_index, src_index);
+ }
+ src_block.elements_count -= 1;
+
+ let dest_block = &mut self.blocks[dest_block_index as usize];
+ let dest_index = dest_block.elements_count;
+
+ dest_block.gear_ids_mut()[dest_index as usize] = gear_id;
+ self.lookup[gear_id.get() as usize - 1] = LookupEntry::new(dest_block_index, dest_index);
+ dest_block.elements_count += 1;
+ dest_block.elements_count - 1
+ }
+
+ fn add_to_block<T: Clone>(&mut self, gear_id: GearId, block_index: u16, value: &T) {
+ debug_assert!(
+ self.block_masks[block_index as usize]
+ .type_mask
+ .count_ones()
+ == 1
+ );
+
+ let block = &mut self.blocks[block_index as usize];
+ debug_assert!(block.elements_count < block.max_elements);
+
+ unsafe {
+ *(block.component_blocks[0].unwrap().as_ptr() as *mut T)
+ .add(block.elements_count as usize) = value.clone();
+ };
+
+ let index = block.elements_count;
+ self.lookup[gear_id.get() as usize - 1] = LookupEntry::new(block_index, index);
+ block.gear_ids_mut()[index as usize] = gear_id;
+ block.elements_count += 1;
+ }
+
+ fn remove_from_block(&mut self, block_index: u16, index: u16) {
+ let block = &mut self.blocks[block_index as usize];
+ debug_assert!(index < block.elements_count);
+
+ for (i, size) in self.element_sizes.iter().cloned().enumerate() {
+ if index < block.elements_count - 1 {
+ if let Some(ptr) = block.component_blocks[i] {
+ unsafe {
+ copy_nonoverlapping(
+ ptr.as_ptr()
+ .add((size * (block.elements_count - 1)) as usize),
+ ptr.as_ptr().add((size * index) as usize),
+ size as usize,
+ );
+ }
+ }
+ }
+ }
+
+ self.lookup[block.gear_ids()[index as usize].get() as usize - 1] = LookupEntry::default();
+ if index < block.elements_count - 1 {
+ let relocated_index = block.elements_count as usize - 1;
+ let gear_ids = block.gear_ids_mut();
+
+ gear_ids[index as usize] = gear_ids[relocated_index];
+ self.lookup[gear_ids[relocated_index].get() as usize - 1] =
+ LookupEntry::new(block_index, index);
+ }
+ block.elements_count -= 1;
+ }
+
+ fn write_component<T: Clone>(
+ &mut self,
+ block_index: u16,
+ index: u16,
+ type_index: usize,
+ value: &T,
+ ) {
+ debug_assert!(type_index < self.types.len());
+ let block = &mut self.blocks[block_index as usize];
+ debug_assert!(index < block.elements_count);
+
+ unsafe {
+ *(block.component_blocks[type_index].unwrap().as_ptr() as *mut T).add(index as usize) =
+ value.clone();
+ };
+ }
+
+ #[inline]
+ fn ensure_block(&mut self, mask: BlockMask) -> u16 {
+ if let Some(index) = self
+ .block_masks
+ .iter()
+ .enumerate()
+ .position(|(i, m)| *m == mask && !self.blocks[i].is_full())
+ {
+ index as u16
+ } else {
+ self.blocks.push(DataBlock::new(
+ mask.type_mask,
+ &self.element_sizes[0..self.types.len()],
+ &self.element_alignments[0..self.types.len()],
+ ));
+ self.block_masks.push(mask);
+ (self.blocks.len() - 1) as u16
+ }
+ }
+
+ pub fn add<T: Clone + 'static>(&mut self, gear_id: GearId, value: &T) {
+ if let Some(type_index) = self.get_type_index::<T>() {
+ let type_bit = 1 << type_index as u64;
+ let entry = self.lookup[gear_id.get() as usize - 1];
+
+ if let Some(index) = entry.index {
+ let mask = self.block_masks[entry.block_index as usize];
+ let new_mask = mask.with_type(type_bit);
+
+ if new_mask != mask {
+ let dest_block_index = self.ensure_block(new_mask);
+ let dest_index = self.move_between_blocks(
+ entry.block_index,
+ index.get() - 1,
+ dest_block_index,
+ );
+ self.write_component(dest_block_index, dest_index, type_index, value);
+ }
+ } else {
+ let dest_block_index = self.ensure_block(BlockMask::new(type_bit, 0));
+ self.add_to_block(gear_id, dest_block_index, value);
+ }
+ } else {
+ panic!("Unregistered type")
+ }
+ }
+
+ pub fn add_tag<T: 'static>(&mut self, gear_id: GearId) {
+ if let Some(tag_index) = self.get_tag_index::<T>() {
+ let tag_bit = 1 << tag_index as u64;
+ let entry = self.lookup[gear_id.get() as usize - 1];
+
+ if let Some(index) = entry.index {
+ let mask = self.block_masks[entry.block_index as usize];
+ let new_mask = mask.with_tag(tag_bit);
+
+ if new_mask != mask {
+ let dest_block_index = self.ensure_block(new_mask);
+ self.move_between_blocks(entry.block_index, index.get() - 1, dest_block_index);
+ }
+ } else {
+ panic!("Cannot tag a gear with no data")
+ }
+ } else {
+ panic!("Unregistered tag")
+ }
+ }
+
+ pub fn remove<T: 'static>(&mut self, gear_id: GearId) {
+ if let Some(type_index) = self.get_type_index::<T>() {
+ let entry = self.lookup[gear_id.get() as usize - 1];
+ if let Some(index) = entry.index {
+ let mut dest_mask = self.block_masks[entry.block_index as usize];
+ dest_mask.type_mask &= !(1 << type_index as u64);
+
+ if dest_mask.type_mask == 0 {
+ self.remove_from_block(entry.block_index, index.get() - 1);
+ } else {
+ let dest_block_index = self.ensure_block(dest_mask);
+ self.move_between_blocks(entry.block_index, index.get() - 1, dest_block_index);
+ }
+ }
+ } else {
+ panic!("Unregistered type")
+ }
+ }
+
+ pub fn remove_all(&mut self, gear_id: GearId) {
+ let entry = self.lookup[gear_id.get() as usize - 1];
+ if let Some(index) = entry.index {
+ self.remove_from_block(entry.block_index, index.get() - 1);
+ }
+ }
+
+ pub fn register<T: 'static>(&mut self) {
+ debug_assert!(!std::mem::needs_drop::<T>());
+ debug_assert!(size_of::<T>() <= u16::max_value() as usize);
+
+ let id = TypeId::of::<T>();
+ if size_of::<T>() == 0 {
+ if !self.tags.contains(&id) {
+ debug_assert!(self.tags.len() <= 64);
+ self.tags.push(id)
+ }
+ } else {
+ if !self.types.contains(&id) {
+ debug_assert!(self.types.len() <= 64);
+ self.element_sizes[self.types.len()] = size_of::<T>() as u16;
+ self.element_alignments[self.types.len()] = align_of::<T>() as u8;
+ self.types.push(id);
+ }
+ }
+ }
+
+ fn run_impl<T: TypeIter + 'static, F: FnMut(GearId, T)>(
+ &mut self,
+ type_selector: u64,
+ included_tags: u64,
+ type_indices: &[i8],
+ mut f: F,
+ ) {
+ let mut slices = vec![null_mut(); type_indices.len() + 1];
+
+ for (block_index, mask) in self.block_masks.iter().enumerate() {
+ if mask.type_mask & type_selector == type_selector
+ && mask.tag_mask & included_tags == included_tags
+ {
+ let block = &mut self.blocks[block_index];
+ slices[0] = block.data.as_mut_ptr();
+
+ for (arg_index, type_index) in type_indices.iter().cloned().enumerate() {
+ slices[arg_index as usize + 1] = block.component_blocks[type_index as usize]
+ .unwrap()
+ .as_ptr()
+ }
+
+ unsafe {
+ T::iter(&slices[..], block.elements_count as usize, |id, x| f(id, x));
+ }
+ }
+ }
+ }
+
+ pub fn iter<T: TypeIter + 'static>(&mut self) -> DataIterator<T> {
+ let mut arg_types = Vec::with_capacity(64);
+ T::get_types(&mut arg_types);
+ let mut type_indices = vec![-1i8; arg_types.len()];
+ let mut selector = 0u64;
+
+ for (arg_index, type_id) in arg_types.iter().enumerate() {
+ match self.types.iter().position(|t| t == type_id) {
+ Some(i) if selector & (1 << i as u64) != 0 => panic!("Duplicate type"),
+ Some(i) => {
+ type_indices[arg_index] = i as i8;
+ selector |= 1 << i as u64;
+ }
+ None => panic!("Unregistered type"),
+ }
+ }
+ DataIterator::new(self, selector, type_indices)
+ }
+}
+
+pub struct DataIterator<'a, T> {
+ data: &'a mut GearDataManager,
+ types: u64,
+ type_indices: Vec<i8>,
+ tags: u64,
+ phantom_types: PhantomData<T>,
+}
+
+impl<'a, T: TypeIter + 'static> DataIterator<'a, T> {
+ fn new(
+ data: &'a mut GearDataManager,
+ types: u64,
+ type_indices: Vec<i8>,
+ ) -> DataIterator<'a, T> {
+ Self {
+ data,
+ types,
+ type_indices,
+ tags: 0,
+ phantom_types: PhantomData,
+ }
+ }
+
+ pub fn with_tags<U: TypeTuple + 'static>(self) -> Self {
+ let mut tag_types = Vec::with_capacity(64);
+ U::get_types(&mut tag_types);
+ let mut tags = 0;
+
+ for (i, tag) in self.data.tags.iter().enumerate() {
+ if tag_types.contains(tag) {
+ tags |= 1 << i as u64;
+ }
+ }
+ Self { tags, ..self }
+ }
+
+ #[inline]
+ pub fn run<F: FnMut(T)>(&mut self, mut f: F) {
+ self.run_id(|_, x| f(x))
+ }
+
+ #[inline]
+ pub fn run_id<F: FnMut(GearId, T)>(&mut self, f: F) {
+ self.data
+ .run_impl(self.types, self.tags, &self.type_indices, f);
+ }
+}
+
+#[cfg(test)]
+mod test {
+ use super::{super::common::GearId, GearDataManager};
+
+ #[derive(Clone)]
+ struct Datum {
+ value: u32,
+ }
+
+ #[derive(Clone)]
+ struct Tag;
+
+ #[test]
+ fn single_component_iteration() {
+ let mut manager = GearDataManager::new();
+ manager.register::<Datum>();
+ for i in 1..=5 {
+ manager.add(GearId::new(i as u16).unwrap(), &Datum { value: i });
+ }
+
+ let mut sum = 0;
+ manager.iter().run(|(d,): (&Datum,)| sum += d.value);
+ assert_eq!(sum, 15);
+
+ manager.iter().run(|(d,): (&mut Datum,)| d.value += 1);
+ manager.iter().run(|(d,): (&Datum,)| sum += d.value);
+ assert_eq!(sum, 35);
+ }
+
+ #[test]
+ fn tagged_component_iteration() {
+ let mut manager = GearDataManager::new();
+ manager.register::<Datum>();
+ manager.register::<Tag>();
+ for i in 1..=10 {
+ let gear_id = GearId::new(i as u16).unwrap();
+ manager.add(gear_id, &Datum { value: i });
+ }
+
+ for i in 1..=10 {
+ let gear_id = GearId::new(i as u16).unwrap();
+ if i & 1 == 0 {
+ manager.add_tag::<Tag>(gear_id);
+ }
+ }
+
+ let mut sum = 0;
+ manager.iter().run(|(d,): (&Datum,)| sum += d.value);
+ assert_eq!(sum, 55);
+
+ let mut tag_sum = 0;
+ manager
+ .iter()
+ .with_tags::<&Tag>()
+ .run(|(d,): (&Datum,)| tag_sum += d.value);
+ assert_eq!(tag_sum, 30);
+ }
+}
--- a/rust/hwphysics/src/lib.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hwphysics/src/lib.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,50 +1,37 @@
pub mod collision;
pub mod common;
+mod data;
mod grid;
pub mod physics;
pub mod time;
-use fpnum::FPNum;
use integral_geometry::Size;
use land2d::Land2D;
use crate::{
- collision::{CollisionData, CollisionProcessor, ContactData},
- common::{GearAllocator, GearData, GearDataAggregator, GearDataProcessor, GearId, Millis},
- physics::{PhysicsData, PhysicsProcessor},
+ collision::CollisionProcessor,
+ common::{GearAllocator, GearId, Millis},
+ data::GearDataManager,
+ physics::PhysicsProcessor,
time::TimeProcessor,
};
-pub struct JoinedData {
- gear_id: GearId,
- physics: PhysicsData,
- collision: CollisionData,
- contact: ContactData,
-}
-
pub struct World {
allocator: GearAllocator,
+ data: GearDataManager,
physics: PhysicsProcessor,
collision: CollisionProcessor,
time: TimeProcessor,
}
-macro_rules! processor_map {
- ( $data_type: ident => $field: ident ) => {
- impl GearDataAggregator<$data_type> for World {
- fn find_processor(&mut self) -> &mut GearDataProcessor<$data_type> {
- &mut self.$field
- }
- }
- };
-}
-
-processor_map!(PhysicsData => physics);
-processor_map!(CollisionData => collision);
-
impl World {
pub fn new(world_size: Size) -> Self {
+ let mut data = GearDataManager::new();
+ PhysicsProcessor::register_components(&mut data);
+ CollisionProcessor::register_components(&mut data);
+
Self {
+ data,
allocator: GearAllocator::new(),
physics: PhysicsProcessor::new(),
collision: CollisionProcessor::new(world_size),
@@ -59,24 +46,26 @@
#[inline]
pub fn delete_gear(&mut self, gear_id: GearId) {
- self.physics.remove(gear_id);
+ self.data.remove_all(gear_id);
self.collision.remove(gear_id);
self.time.cancel(gear_id);
self.allocator.free(gear_id)
}
pub fn step(&mut self, time_step: Millis, land: &Land2D<u32>) {
- let updates = self.physics.process(time_step);
- let collision = self.collision.process(land, &updates);
+ let updates = if time_step == Millis::new(1) {
+ self.physics.process_single_tick(&mut self.data)
+ } else {
+ self.physics
+ .process_multiple_ticks(&mut self.data, time_step)
+ };
+ let collisions = self.collision.process(land, &updates);
let events = self.time.process(time_step);
}
- pub fn add_gear_data<T>(&mut self, gear_id: GearId, data: T)
- where
- T: GearData,
- Self: GearDataAggregator<T>,
- {
- self.find_processor().add(gear_id, data);
+ #[inline]
+ pub fn add_gear_data<T: Clone + 'static>(&mut self, gear_id: GearId, data: &T) {
+ self.data.add(gear_id, data);
}
}
@@ -84,7 +73,8 @@
mod tests {
use crate::{
collision::{CircleBounds, CollisionData},
- physics::PhysicsData,
+ common::Millis,
+ physics::{PositionData, VelocityData},
World,
};
use fpnum::{fp, FPNum, FPPoint};
@@ -96,19 +86,14 @@
let world_size = Size::new(2048, 2048);
let mut world = World::new(world_size);
- let gear_id = 46631;
+ let gear_id = world.new_gear().unwrap();
+
+ world.add_gear_data(gear_id, &PositionData(FPPoint::zero()));
+ world.add_gear_data(gear_id, &VelocityData(FPPoint::unit_y()));
world.add_gear_data(
gear_id,
- PhysicsData {
- position: FPPoint::zero(),
- velocity: FPPoint::unit_y(),
- },
- );
-
- world.add_gear_data(
- gear_id,
- CollisionData {
+ &CollisionData {
bounds: CircleBounds {
center: FPPoint::zero(),
radius: fp!(10),
@@ -118,6 +103,6 @@
let land = Land2D::new(Size::new(world_size.width - 2, world_size.height - 2), 0);
- world.step(fp!(1), &land);
+ world.step(Millis::new(1), &land);
}
}
--- a/rust/hwphysics/src/physics.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hwphysics/src/physics.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,95 +1,18 @@
-use crate::common::{GearData, GearDataProcessor, GearId, Millis};
+use crate::{
+ common::{GearId, Millis},
+ data::GearDataManager,
+};
use fpnum::*;
-use integral_geometry::{GridIndex, Point, Size};
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
-pub struct PhysicsData {
- pub position: FPPoint,
- pub velocity: FPPoint,
-}
-
-impl GearData for PhysicsData {}
-
-impl PhysicsData {
- pub fn new(position: FPPoint, velocity: FPPoint) -> Self {
- Self { position, velocity }
- }
-}
-
-pub struct DynamicPhysicsCollection {
- gear_ids: Vec<GearId>,
- positions: Vec<FPPoint>,
- velocities: Vec<FPPoint>,
-}
-
-impl DynamicPhysicsCollection {
- fn new() -> Self {
- Self {
- gear_ids: Vec::new(),
- positions: Vec::new(),
- velocities: Vec::new(),
- }
- }
-
- fn len(&self) -> usize {
- self.gear_ids.len()
- }
-
- fn push(&mut self, gear_id: GearId, physics: PhysicsData) {
- self.gear_ids.push(gear_id);
- self.positions.push(physics.position);
- self.velocities.push(physics.velocity);
- }
+#[repr(transparent)]
+pub struct PositionData(pub FPPoint);
- fn remove(&mut self, gear_id: GearId) {
- if let Some(index) = self.gear_ids.iter().position(|id| *id == gear_id) {
- self.gear_ids.swap_remove(index);
- self.positions.swap_remove(index);
- self.velocities.swap_remove(index);
- }
- }
-
- fn iter_pos_update(&mut self) -> impl Iterator<Item = (GearId, (&mut FPPoint, &FPPoint))> {
- self.gear_ids
- .iter()
- .cloned()
- .zip(self.positions.iter_mut().zip(self.velocities.iter()))
- }
-}
-
-pub struct StaticPhysicsCollection {
- gear_ids: Vec<GearId>,
- positions: Vec<FPPoint>,
-}
+#[derive(PartialEq, Eq, Clone, Copy, Debug)]
+#[repr(transparent)]
+pub struct VelocityData(pub FPPoint);
-impl StaticPhysicsCollection {
- fn new() -> Self {
- Self {
- gear_ids: Vec::new(),
- positions: Vec::new(),
- }
- }
-
- fn push(&mut self, gear_id: GearId, physics: PhysicsData) {
- self.gear_ids.push(gear_id);
- self.positions.push(physics.position);
- }
-
- fn remove(&mut self, gear_id: GearId) {
- if let Some(index) = self.gear_ids.iter().position(|id| *id == gear_id) {
- self.gear_ids.swap_remove(index);
- self.positions.swap_remove(index);
- }
- }
-}
-
-pub struct PhysicsProcessor {
- dynamic_physics: DynamicPhysicsCollection,
- static_physics: StaticPhysicsCollection,
-
- physics_cleanup: Vec<GearId>,
- position_updates: PositionUpdates,
-}
+pub struct AffectedByWind;
pub struct PositionUpdates {
pub gear_ids: Vec<GearId>,
@@ -123,51 +46,77 @@
}
}
+pub struct PhysicsProcessor {
+ gravity: FPNum,
+ wind: FPNum,
+ position_updates: PositionUpdates,
+}
+
impl PhysicsProcessor {
+ pub fn register_components(data: &mut GearDataManager) {
+ data.register::<PositionData>();
+ data.register::<VelocityData>();
+ data.register::<AffectedByWind>();
+ }
+
pub fn new() -> Self {
Self {
- dynamic_physics: DynamicPhysicsCollection::new(),
- static_physics: StaticPhysicsCollection::new(),
- physics_cleanup: Vec::new(),
- position_updates: PositionUpdates::new(0),
+ gravity: fp!(1 / 10),
+ wind: fp!(0),
+ position_updates: PositionUpdates::new(64),
}
}
- pub fn process(&mut self, time_step: Millis) -> &PositionUpdates {
- let fp_step = time_step.to_fixed();
+ pub fn process_single_tick(&mut self, data: &mut GearDataManager) -> &PositionUpdates {
+ let gravity = FPPoint::unit_y() * self.gravity;
+ let wind = FPPoint::unit_x() * self.wind;
+
self.position_updates.clear();
- for (gear_id, (pos, vel)) in self.dynamic_physics.iter_pos_update() {
- let old_pos = *pos;
- *pos += *vel * fp_step;
- if !vel.is_zero() {
- self.position_updates.push(gear_id, &old_pos, pos)
- } else {
- self.physics_cleanup.push(gear_id)
- }
- }
+
+ data.iter()
+ .with_tags::<&AffectedByWind>()
+ .run(|(vel,): (&mut VelocityData,)| {
+ vel.0 += wind;
+ });
+
+ data.iter().run_id(
+ |gear_id, (pos, vel): (&mut PositionData, &mut VelocityData)| {
+ let old_pos = pos.0;
+ vel.0 += gravity;
+ pos.0 += vel.0;
+ self.position_updates.push(gear_id, &old_pos, &pos.0)
+ },
+ );
+
&self.position_updates
}
- pub fn push(&mut self, gear_id: GearId, physics_data: PhysicsData) {
- if physics_data.velocity.is_zero() {
- self.static_physics.push(gear_id, physics_data);
- } else {
- self.dynamic_physics.push(gear_id, physics_data);
- }
+ pub fn process_multiple_ticks(
+ &mut self,
+ data: &mut GearDataManager,
+ time_step: Millis,
+ ) -> &PositionUpdates {
+ let fp_step = time_step.to_fixed();
+ let gravity = FPPoint::unit_y() * (self.gravity * fp_step);
+ let wind = FPPoint::unit_x() * (self.wind * fp_step);
+
+ self.position_updates.clear();
+
+ data.iter()
+ .with_tags::<&AffectedByWind>()
+ .run(|(vel,): (&mut VelocityData,)| {
+ vel.0 += wind;
+ });
+
+ data.iter().run_id(
+ |gear_id, (pos, vel): (&mut PositionData, &mut VelocityData)| {
+ let old_pos = pos.0;
+ vel.0 += gravity;
+ pos.0 += vel.0 * fp_step;
+ self.position_updates.push(gear_id, &old_pos, &pos.0)
+ },
+ );
+
+ &self.position_updates
}
}
-
-impl GearDataProcessor<PhysicsData> for PhysicsProcessor {
- fn add(&mut self, gear_id: GearId, gear_data: PhysicsData) {
- if gear_data.velocity.is_zero() {
- self.static_physics.push(gear_id, gear_data);
- } else {
- self.dynamic_physics.push(gear_id, gear_data);
- }
- }
-
- fn remove(&mut self, gear_id: GearId) {
- self.static_physics.remove(gear_id);
- self.dynamic_physics.remove(gear_id)
- }
-}
--- a/rust/hwphysics/src/time.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/hwphysics/src/time.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,4 +1,4 @@
-use crate::common::{GearDataProcessor, GearId, Millis};
+use crate::common::{GearId, Millis};
use std::{
cmp::{Eq, Ord, Ordering, PartialEq, PartialOrd},
collections::BinaryHeap,
--- a/rust/integral-geometry/src/lib.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/integral-geometry/src/lib.rs Fri Jul 03 23:51:47 2020 +0200
@@ -45,7 +45,7 @@
#[inline]
pub fn integral_norm(self) -> u32 {
- let sqr = (self.x as u64).pow(2) + (self.y as u64).pow(2);
+ let sqr = (self.x as u64).wrapping_pow(2) + (self.y as u64).wrapping_pow(2);
integral_sqrt(sqr) as u32
}
@@ -171,6 +171,14 @@
pub fn contains(&self, other: Self) -> bool {
self.width >= other.width && self.height >= other.height
}
+
+ #[inline]
+ pub fn join(&self, other: Self) -> Self {
+ Self {
+ width: max(self.width, other.width),
+ height: max(self.height, other.height)
+ }
+ }
}
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
--- a/rust/lib-hedgewars-engine/Cargo.toml Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/lib-hedgewars-engine/Cargo.toml Fri Jul 03 23:51:47 2020 +0200
@@ -9,7 +9,6 @@
netbuf = "0.4"
itertools = "0.8"
png = "0.13"
-queues = "1.1"
fpnum = { path = "../fpnum" }
land2d = { path = "../land2d" }
--- a/rust/lib-hedgewars-engine/src/instance.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/lib-hedgewars-engine/src/instance.rs Fri Jul 03 23:51:47 2020 +0200
@@ -2,6 +2,7 @@
ConfigEngineMessage::*, EngineMessage::*, KeystrokeAction::*, SyncedEngineMessage::*,
UnorderedEngineMessage::*, UnsyncedEngineMessage::*, *,
};
+use hedgewars_engine_messages::queue::*;
use integral_geometry::{Point, Rect, Size};
use landgen::outline_template::OutlineTemplate;
--- a/rust/lib-hedgewars-engine/src/ipc.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/lib-hedgewars-engine/src/ipc.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,5 +1,3 @@
mod channel;
-mod queue;
pub use self::channel::*;
-pub use self::queue::*;
--- a/rust/lib-hedgewars-engine/src/ipc/queue.rs Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-use hedgewars_engine_messages::{
- messages::EngineMessage::*, messages::SyncedEngineMessage::*,
- messages::UnsyncedEngineMessage::*, messages::*,
-};
-use queues::*;
-
-#[derive(PartialEq)]
-pub enum QueueChatStrategy {
- NetworkGame,
- LocalGame,
-}
-
-pub struct MessagesQueue {
- strategy: QueueChatStrategy,
- hi_ticks: u32,
- unordered: Queue<EngineMessage>,
- ordered: Queue<EngineMessage>,
-}
-
-impl MessagesQueue {
- pub fn new(strategy: QueueChatStrategy) -> Self {
- MessagesQueue {
- strategy,
- hi_ticks: 0,
- unordered: queue![],
- ordered: queue![],
- }
- }
-
- fn is_unordered(&self, message: &EngineMessage) -> bool {
- match message {
- Unordered(_) => true,
- Unsynced(HogSay(_)) | Unsynced(ChatMessage(_)) | Unsynced(TeamMessage(_)) => {
- self.strategy == QueueChatStrategy::NetworkGame
- }
- _ => false,
- }
- }
-
- pub fn push(&mut self, engine_message: EngineMessage) {
- if self.is_unordered(&engine_message) {
- self.unordered.add(engine_message).unwrap();
- } else if let Synced(TimeWrap, timestamp) = engine_message {
- self.ordered
- .add(Synced(TimeWrap, timestamp + self.hi_ticks))
- .unwrap();
- self.hi_ticks += 65536;
- } else if let Synced(message, timestamp) = engine_message {
- self.ordered
- .add(Synced(message, timestamp + self.hi_ticks))
- .unwrap();
- } else {
- self.ordered.add(engine_message).unwrap();
- }
- }
-
- pub fn pop(&mut self, timestamp: u32) -> Option<EngineMessage> {
- if let Ok(message) = self.unordered.remove() {
- Some(message)
- } else if let Ok(Synced(_, message_timestamp)) = self.ordered.peek() {
- if message_timestamp == timestamp {
- self.ordered.remove().ok()
- } else {
- None
- }
- } else {
- self.ordered.remove().ok()
- }
- }
-
- pub fn iter(&mut self, timestamp: u32) -> MessagesQueueIterator {
- MessagesQueueIterator {
- timestamp,
- queue: self,
- }
- }
-}
-
-pub struct MessagesQueueIterator<'a> {
- timestamp: u32,
- queue: &'a mut MessagesQueue,
-}
-
-impl<'a> Iterator for MessagesQueueIterator<'a> {
- type Item = EngineMessage;
-
- fn next(&mut self) -> Option<EngineMessage> {
- self.queue.pop(self.timestamp)
- }
-}
-
-#[test]
-fn queue_order() {
- use hedgewars_engine_messages::messages::UnorderedEngineMessage::*;
-
- let mut queue = MessagesQueue::new(QueueChatStrategy::LocalGame);
-
- queue.push(Synced(Skip, 1));
- queue.push(Unsynced(ChatMessage("hi".to_string())));
- queue.push(Synced(TimeWrap, 65535));
- queue.push(Unordered(Ping));
- queue.push(Synced(Skip, 2));
-
- let zero_tick: Vec<EngineMessage> = queue.iter(0).collect();
- assert_eq!(zero_tick, vec![Unordered(Ping)]);
- assert_eq!(queue.pop(1), Some(Synced(Skip, 1)));
- assert_eq!(queue.pop(1), Some(Unsynced(ChatMessage("hi".to_string()))));
- assert_eq!(queue.pop(1), None);
- assert_eq!(queue.pop(2), None);
- assert_eq!(queue.pop(65535), Some(Synced(TimeWrap, 65535)));
- assert_eq!(queue.pop(65535), None);
- assert_eq!(queue.pop(65538), Some(Synced(Skip, 65538)));
- assert_eq!(queue.pop(65538), None);
- assert_eq!(queue.pop(65539), None);
-}
--- a/rust/lib-hedgewars-engine/src/render/atlas.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/lib-hedgewars-engine/src/render/atlas.rs Fri Jul 03 23:51:47 2020 +0200
@@ -250,6 +250,10 @@
}
}
+ pub fn get_rect(&self, index: SpriteIndex) -> Option<(u32, Rect)> {
+ self.rects.get(index as usize).cloned()
+ }
+
pub fn used_space(&self) -> String {
self.atlases
.iter()
--- a/rust/lib-hedgewars-engine/src/render/gear.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/lib-hedgewars-engine/src/render/gear.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,10 +1,14 @@
-use super::atlas::AtlasCollection;
+use super::{atlas::AtlasCollection, gl::Texture2D};
use crate::render::camera::Camera;
-use integral_geometry::Size;
+use integral_geometry::{Rect, Size};
+use crate::render::atlas::SpriteIndex;
use png::{ColorType, Decoder, DecodingError};
+use std::path::PathBuf;
use std::{
+ collections::HashMap,
+ ffi::OsString,
fs::{read_dir, File},
io,
io::BufReader,
@@ -15,21 +19,57 @@
atlas: AtlasCollection,
}
-const ATLAS_SIZE: Size = Size::square(1024);
+struct SpriteData {
+ size: Size,
+ filename: PathBuf,
+}
+
+const ATLAS_SIZE: Size = Size::square(2048);
impl GearRenderer {
pub fn new() -> Self {
+ let mut lookup = Vec::with_capacity(2048);
+
let mut atlas = AtlasCollection::new(ATLAS_SIZE);
- let sprites = load_sprites(Path::new("../../share/hedgewars/Data/Graphics/"))
+ let mut sprites = load_sprites(Path::new("../../share/hedgewars/Data/Graphics/"))
.expect("Unable to load Graphics");
- for sprite in &sprites {
- atlas.insert_sprite(*sprite);
+ let max_size = sprites
+ .iter()
+ .fold(Size::EMPTY, |size, sprite| size.join(sprite.size));
+ for sprite in sprites.drain(..) {
+ lookup.push((sprite.filename, atlas.insert_sprite(sprite.size).unwrap()));
}
+
println!(
"Filled atlas with {} sprites:\n{}",
sprites.len(),
atlas.used_space()
);
+
+ let texture = Texture2D::new(ATLAS_SIZE, gl::RGBA8, gl::LINEAR);
+
+ let mut pixels = vec![0; max_size.area()].into_boxed_slice();
+ let mut pixels_transposed = vec![0; max_size.area()].into_boxed_slice();
+
+ for (path, sprite_index) in lookup.drain(..) {
+ if let Some((atlas_index, rect)) = atlas.get_rect(sprite_index) {
+ let size = load_sprite_pixels(&path, mapgen::theme::slice_u32_to_u8_mut(&mut pixels[..])).expect("Unable to load Graphics");
+
+ let used_pixels = if size.width != rect.width() {
+ for y in 0..rect.height() {
+ for x in 0..rect.width() {
+ pixels_transposed[y * rect.width() + x] = pixels[x * rect.height() + y];
+ }
+ }
+ &mut pixels_transposed[..]
+ } else {
+ &mut pixels[..]
+ };
+
+ texture.update(rect, mapgen::theme::slice_u32_to_u8_mut(used_pixels), 0, gl::RGBA, gl::UNSIGNED_BYTE);
+ }
+ }
+
Self { atlas }
}
@@ -38,7 +78,16 @@
}
}
-fn load_sprite(path: &Path) -> io::Result<Size> {
+fn load_sprite_pixels(path: &Path, buffer: &mut [u8]) -> io::Result<Size> {
+ let decoder = Decoder::new(BufReader::new(File::open(path)?));
+ let (info, mut reader) = decoder.read_info()?;
+
+ let size = Size::new(info.width as usize, info.height as usize);
+ reader.next_frame(buffer)?;
+ Ok(size)
+}
+
+fn load_sprite_size(path: &Path) -> io::Result<Size> {
let decoder = Decoder::new(BufReader::new(File::open(path)?));
let (info, mut reader) = decoder.read_info()?;
@@ -46,14 +95,18 @@
Ok(size)
}
-fn load_sprites(path: &Path) -> io::Result<Vec<Size>> {
+fn load_sprites(path: &Path) -> io::Result<Vec<SpriteData>> {
let mut result = vec![];
for file in read_dir(path)? {
let file = file?;
if let Some(extension) = file.path().extension() {
if extension == "png" {
- let sprite = load_sprite(&file.path())?;
- result.push(sprite);
+ let path = file.path();
+ let sprite = load_sprite_size(&path)?;
+ result.push(SpriteData {
+ size: sprite,
+ filename: path,
+ });
}
}
}
--- a/rust/lib-hedgewars-engine/src/render/gl.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/lib-hedgewars-engine/src/render/gl.rs Fri Jul 03 23:51:47 2020 +0200
@@ -1,6 +1,6 @@
-use integral_geometry::Rect;
+use integral_geometry::{Rect, Size};
-use std::{ffi, ffi::CString, mem, ptr, slice};
+use std::{ffi, ffi::CString, mem, num::NonZeroU32, ptr, slice};
#[derive(Default)]
pub struct PipelineState {
@@ -32,73 +32,130 @@
#[derive(Debug)]
pub struct Texture2D {
- pub handle: u32,
+ pub handle: Option<NonZeroU32>,
}
impl Drop for Texture2D {
fn drop(&mut self) {
- if self.handle != 0 {
+ if let Some(handle) = self.handle {
unsafe {
- gl::DeleteTextures(1, &self.handle);
+ gl::DeleteTextures(1, &handle.get());
}
}
}
}
+fn new_texture() -> Option<NonZeroU32> {
+ let mut handle = 0;
+ unsafe {
+ gl::GenTextures(1, &mut handle);
+ }
+ NonZeroU32::new(handle)
+}
+
+fn tex_params(filter: u32) {
+ unsafe {
+ gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_WRAP_S, gl::CLAMP_TO_EDGE as i32);
+ gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_WRAP_T, gl::CLAMP_TO_EDGE as i32);
+ gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, filter as i32);
+ gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, filter as i32);
+ }
+}
+
impl Texture2D {
+ pub fn new(size: Size, internal_format: u32, filter: u32) -> Self {
+ if let Some(handle) = new_texture() {
+ unsafe {
+ gl::BindTexture(gl::TEXTURE_2D, handle.get());
+ gl::TexImage2D(
+ gl::TEXTURE_2D,
+ 0,
+ internal_format as i32,
+ size.width as i32,
+ size.height as i32,
+ 0,
+ gl::RGBA,
+ gl::UNSIGNED_BYTE,
+ std::ptr::null(),
+ )
+ }
+
+ tex_params(filter);
+ Self {
+ handle: Some(handle),
+ }
+ } else {
+ Self { handle: None }
+ }
+ }
+
pub fn with_data(
data: &[u8],
data_stride: u32,
- width: u32,
- height: u32,
+ size: Size,
internal_format: u32,
format: u32,
ty: u32,
filter: u32,
) -> Self {
- let mut handle = 0;
-
- unsafe {
- gl::GenTextures(1, &mut handle);
+ if let Some(handle) = new_texture() {
+ unsafe {
+ gl::BindTexture(gl::TEXTURE_2D, handle.get());
+ gl::PixelStorei(gl::UNPACK_ROW_LENGTH, data_stride as i32);
+ gl::TexImage2D(
+ gl::TEXTURE_2D,
+ 0,
+ internal_format as i32,
+ size.width as i32,
+ size.height as i32,
+ 0,
+ format as u32,
+ ty,
+ data.as_ptr() as *const _,
+ )
+ }
- gl::BindTexture(gl::TEXTURE_2D, handle);
- gl::PixelStorei(gl::UNPACK_ROW_LENGTH, data_stride as i32);
- gl::TexImage2D(
- gl::TEXTURE_2D,
- 0,
- internal_format as i32,
- width as i32,
- height as i32,
- 0,
- format as u32,
- ty,
- data.as_ptr() as *const _,
- );
-
- gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_WRAP_S, gl::CLAMP_TO_EDGE as i32);
- gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_WRAP_T, gl::CLAMP_TO_EDGE as i32);
- gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, filter as i32);
- gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, filter as i32);
+ tex_params(filter);
+ Self {
+ handle: Some(handle),
+ }
+ } else {
+ Self { handle: None }
}
-
- Texture2D { handle }
}
pub fn update(&self, region: Rect, data: &[u8], data_stride: u32, format: u32, ty: u32) {
- unsafe {
- gl::BindTexture(gl::TEXTURE_2D, self.handle);
- gl::PixelStorei(gl::UNPACK_ROW_LENGTH, data_stride as i32);
- gl::TexSubImage2D(
- gl::TEXTURE_2D,
- 0, // texture level
- region.left(), // texture region
- region.top(),
- region.width() as i32 - 1,
- region.height() as i32 - 1,
- format, // data format
- ty, // data type
- data.as_ptr() as *const _, // data ptr
- );
+ if let Some(handle) = self.handle {
+ unsafe {
+ gl::BindTexture(gl::TEXTURE_2D, handle.get());
+ gl::PixelStorei(gl::UNPACK_ROW_LENGTH, data_stride as i32);
+ gl::TexSubImage2D(
+ gl::TEXTURE_2D,
+ 0, // texture level
+ region.left(), // texture region
+ region.top(),
+ region.width() as i32,
+ region.height() as i32,
+ format, // data format
+ ty, // data type
+ data.as_ptr() as *const _, // data ptr
+ );
+ }
+ }
+ }
+
+ pub fn retrieve(&self, data: &mut [u8]) {
+ if let Some(handle) = self.handle {
+ unsafe {
+ gl::BindTexture(gl::TEXTURE_2D, handle.get());
+ gl::GetTexImage(
+ gl::TEXTURE_2D,
+ 0, // texture level
+ gl::RGBA, // data format
+ gl::UNSIGNED_BYTE, // data type
+ data.as_mut_ptr() as *mut _, // data ptr
+ );
+ }
}
}
}
@@ -352,9 +409,11 @@
pub fn bind_texture_2d(&self, index: u32, texture: &Texture2D) {
self.bind();
- unsafe {
- gl::ActiveTexture(gl::TEXTURE0 + index);
- gl::BindTexture(gl::TEXTURE_2D, texture.handle);
+ if let Some(handle) = texture.handle {
+ unsafe {
+ gl::ActiveTexture(gl::TEXTURE0 + index);
+ gl::BindTexture(gl::TEXTURE_2D, handle.get());
+ }
}
}
}
--- a/rust/lib-hedgewars-engine/src/render/map.rs Wed Jul 31 23:14:27 2019 +0200
+++ b/rust/lib-hedgewars-engine/src/render/map.rs Fri Jul 03 23:51:47 2020 +0200
@@ -171,8 +171,7 @@
let texture = Texture2D::with_data(
data,
stride,
- self.tile_size.width as u32,
- self.tile_size.height as u32,
+ self.tile_size,
gl::RGBA8,
gl::RGBA,
gl::UNSIGNED_BYTE,
--- a/share/CMakeLists.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/share/CMakeLists.txt Fri Jul 03 23:51:47 2020 +0200
@@ -7,11 +7,6 @@
#CFBundleVersion is HEDGEWARS_REVISION
#CFBundleShortVersionString is HEDGEWARS_VERSION
- #libav/ffmpeg always brings in VideoDecoderAcceleration, avaible only from 10.6.3
- if(LIBAV_FOUND AND ${minimum_macosx_version} VERSION_EQUAL "10.6")
- set(minimum_macosx_version "10.6.3")
- endif()
-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in
${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
#path here should be Hedgewars.app/Contents/MacOS
Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_base.png has changed
Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw_base.png has changed
Binary file share/hedgewars/Data/Graphics/Hats/zoo_crocodile.png has changed
Binary file share/hedgewars/Data/Graphics/Switch.png has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Graphics/Switch.svg Fri Jul 03 23:51:47 2020 +0200
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="100%" height="100%" version="1.1" style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality; fill-rule:evenodd; clip-rule:evenodd"
+viewBox="0 0 213 213"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+ <defs>
+ <style type="text/css">
+ <![CDATA[
+ .fil1 {fill:red}
+ .fil0 {fill:black;fill-rule:nonzero}
+ ]]>
+ </style>
+ </defs>
+ <g id="Background">
+ <path class="fil0" d="M118 44l16 17c1,1 2,2 3,3l0 1c0,1 0,2 0,3 0,2 0,3 0,4 -1,2 -2,3 -3,4l-17 16c-1,2 -2,3 -4,3 -1,1 -3,1 -5,0l-1 0c-1,0 -3,-1 -4,-2l0 0c-1,-1 -2,-2 -3,-4l-1 -1c-2,1 -5,2 -7,5 -4,3 -6,8 -6,14 0,1 0,2 0,3 1,1 1,2 1,3 2,5 0,10 -5,11l-18 6c-5,1 -9,-1 -11,-5l0 -1c-1,-2 -1,-5 -2,-8 0,-3 -1,-6 -1,-9 0,-16 6,-29 16,-39 9,-9 20,-15 32,-17 1,-1 1,-2 2,-3l1 -2c0,-1 1,-2 2,-3l1 -1c1,0 3,-1 4,-1l0 0c2,0 4,0 5,0 2,1 3,2 5,3l0 0zm-22 125l-17 -16c-1,-1 -2,-2 -2,-4l-1 0c0,-2 0,-3 0,-4 0,-1 0,-3 1,-4 0,-1 1,-2 2,-3l17 -17c1,-1 3,-2 4,-3 2,0 4,0 5,0l2 0c1,1 2,1 3,2l0 0c1,1 2,2 3,4l1 2c3,-1 5,-3 7,-5 4,-4 6,-9 6,-14 0,-2 0,-3 0,-4 0,-1 -1,-2 -1,-3 -2,-4 1,-9 5,-11l19 -6c4,-1 9,1 10,6l0 0c1,3 2,6 2,8 1,4 1,7 1,10 0,15 -6,29 -16,39 -8,8 -20,14 -32,16 -1,1 -1,2 -2,4l0 1c-1,1 -2,2 -3,3l-1 1c-1,1 -2,1 -4,1l0 0c-1,1 -3,1 -5,0 -1,0 -3,-1 -4,-3l0 0z"/>
+ </g>
+ <g id="Foreground">
+ <path class="fil1" d="M112 50l16 16c1,1 1,1 1,2 0,1 0,1 -1,2 -5,5 -11,11 -16,17 -1,0 -2,0 -2,0 -1,0 -2,0 -2,-1 -1,-3 -2,-4 -3,-8 -15,1 -27,13 -27,29 0,3 0,6 2,9l-19 6c-1,-5 -2,-10 -2,-15 0,-26 20,-47 46,-48 1,-4 2,-6 3,-9 0,0 1,-1 2,-1 0,0 1,0 2,1zm-10 114l-17 -17c-1,-1 -1,-1 -1,-2 0,0 0,-1 1,-1 6,-6 11,-12 17,-17 0,-1 1,-1 2,-1 1,0 1,1 2,1 1,3 2,4 2,8 15,0 27,-13 27,-28 0,-4 0,-7 -1,-10l18 -6c2,5 3,10 3,16 0,26 -21,47 -47,47 0,5 -1,6 -2,9 -1,1 -1,1 -2,1 -1,0 -2,0 -2,0z"/>
+ </g>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Graphics/SwitchBackOld.svg Fri Jul 03 23:51:47 2020 +0200
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ height="40"
+ viewBox="0 0 38.717269 40.141553"
+ width="40"
+ version="1.1"
+ id="svg846">
+ <defs
+ id="defs850" />
+ <metadata
+ id="metadata834">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <cc:license
+ rdf:resource="" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.42808867;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers"
+ d="m 15.507879,4.1897282 -0.0059,4.850169 A 11.890786,11.890786 0 0 0 7.4827571,20.269221 11.890786,11.890786 0 0 0 15.86032,31.616276 l 7.299998,4.686695 0.0029,-4.77443 A 11.890786,11.890786 0 0 0 31.264178,20.269221 11.890786,11.890786 0 0 0 20.861213,8.4872412 Z m 5.725269,8.8777268 a 7.3191032,7.3191032 0 0 1 5.471063,7.072038 7.3191032,7.3191032 0 0 1 -3.538642,6.259176 l 0.0014,-2.284857 -4.378497,3.31518 a 7.3191032,7.3191032 0 0 1 -6.722553,-7.289499 7.3191032,7.3191032 0 0 1 3.429162,-6.195438 l -0.0037,2.86376 z"
+ id="path1168" />
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Graphics/SwitchOld.svg Fri Jul 03 23:51:47 2020 +0200
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ id="svg846"
+ version="1.1"
+ width="40"
+ viewBox="0 0 38.717269 40.141553"
+ height="40">
+ <defs
+ id="defs850" />
+ <metadata
+ id="metadata834">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <cc:license
+ rdf:resource="" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <path
+ id="path1168"
+ d="m 15.507879,4.1897282 -0.0059,4.850169 A 11.890786,11.890786 0 0 0 7.4827571,20.269221 11.890786,11.890786 0 0 0 15.86032,31.616276 l 7.299998,4.686695 0.0029,-4.77443 A 11.890786,11.890786 0 0 0 31.264178,20.269221 11.890786,11.890786 0 0 0 20.861213,8.4872412 Z m 5.725269,8.8777268 a 7.3191032,7.3191032 0 0 1 5.471063,7.072038 7.3191032,7.3191032 0 0 1 -3.538642,6.259176 l 0.0014,-2.284857 -4.378497,3.31518 a 7.3191032,7.3191032 0 0 1 -6.722553,-7.289499 7.3191032,7.3191032 0 0 1 3.429162,-6.195438 l -0.0037,2.86376 z"
+ style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.42808867;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke fill markers" />
+</svg>
--- a/share/hedgewars/Data/Locale/hedgewars_de.ts Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_de.ts Fri Jul 03 23:51:47 2020 +0200
@@ -5187,6 +5187,10 @@
<translation>Griechisch</translation>
</message>
<message>
+ <source>Hungarian</source>
+ <translation>Ungarisch</translation>
+ </message>
+ <message>
<source>Italian</source>
<translation>Italienisch</translation>
</message>
--- a/share/hedgewars/Data/Locale/hedgewars_hu.ts Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_hu.ts Fri Jul 03 23:51:47 2020 +0200
@@ -1,233 +1,233 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="2.1" language="hu">
+<TS version="2.0" language="hu">
<context>
<name>About</name>
<message>
<source>Unknown Compiler</source>
- <translation type="unfinished"></translation>
+ <translation>Ismeretlen fordító</translation>
</message>
<message>
<source>Hedgewars %1</source>
<extracomment>%1 contains Hedgewars' version number</extracomment>
- <translation type="unfinished">Hedgewars %1</translation>
+ <translation>Hedgewars %1</translation>
</message>
<message>
<source>Revision %1 (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>Revízió %1 (%2)</translation>
</message>
<message>
<source>Visit our homepage: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Látogasd meg honlapunkat: %1</translation>
</message>
<message>
<source>This program is distributed under the %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a program a %1 feltételei szerint terjeszthető.</translation>
</message>
<message>
<source>GNU GPL v2</source>
<extracomment>Short for “GNU General Public License version 2”</extracomment>
- <translation type="unfinished"></translation>
+ <translation>GNU GPL v2</translation>
</message>
<message>
<source>Dependency versions:</source>
<extracomment>For the version numbers of Hedgewars' software dependencies</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Függőségek verziói:</translation>
</message>
<message>
<source><a href="https://gcc.gnu.org">GCC</a>: %1</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://gcc.gnu.org">GCC</a>: %1</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.qt.io/developers/">Qt</a>: %1</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.qt.io/developers/">Qt</a>: %1</translation>
</message>
<message>
<source><a href="https://libav.org">libavcodec</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://libav.org">libavcodec</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://libav.org">libavformat</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://libav.org">libavformat</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://libav.org">libavutil</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://libav.org">libavutil</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</translation>
</message>
<message>
<source>Credits</source>
- <translation type="unfinished"></translation>
+ <translation>Közreműködők</translation>
</message>
<message>
<source>Other people</source>
- <translation type="unfinished"></translation>
+ <translation>További személyek</translation>
</message>
<message>
<source>%1 (alias %2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 (alias %2)</translation>
</message>
<message>
<source>%1 &lt;%2&gt;</source>
<extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1 &lt;%2&gt;</translation>
</message>
<message>
<source>%1: %2</source>
<extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1: %2</translation>
</message>
<message>
<source>%1: %2 &lt;%3&gt;</source>
<extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1: %2 &lt;%3&gt;</translation>
</message>
<message>
<source>Extended Credits</source>
- <translation type="unfinished"></translation>
+ <translation>A közreműködők bővebb listája</translation>
</message>
<message>
<source>An extended credits list can be found in the CREDITS text file.</source>
- <translation type="unfinished"></translation>
+ <translation>A közreműködők bővebb listája a CREDITS nevű szövegfájlban olvasható.</translation>
</message>
<message>
<source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://visualstudio.microsoft.com">VC++</a>: %1</translation>
</message>
<message>
<source>Unknown Compiler: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Ismeretlen fordító: %1</translation>
</message>
</context>
<context>
<name>AbstractPage</name>
<message>
<source>Go back</source>
- <translation type="unfinished"></translation>
+ <translation>Vissza</translation>
</message>
</context>
<context>
<name>BanDialog</name>
<message>
<source>IP</source>
- <translation type="unfinished">IP</translation>
+ <translation>IP</translation>
</message>
<message>
<source>Nick</source>
- <translation type="unfinished"></translation>
+ <translation>Becenév</translation>
</message>
<message>
<source>IP/Nick</source>
- <translation type="unfinished"></translation>
+ <translation>IP/Becenév</translation>
</message>
<message>
<source>Reason</source>
- <translation type="unfinished"></translation>
+ <translation>Indok</translation>
</message>
<message>
<source>Duration</source>
- <translation type="unfinished"></translation>
+ <translation>Időtartam</translation>
</message>
<message>
<source>Ok</source>
- <translation type="unfinished"></translation>
+ <translation>OK</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Mégse</translation>
+ <translation>Mégse</translation>
</message>
<message>
<source>you know why</source>
- <translation type="unfinished"></translation>
+ <translation>tudod te, miért</translation>
</message>
<message>
<source>Warning</source>
- <translation type="unfinished"></translation>
+ <translation>Figyelmeztetés</translation>
</message>
<message>
<source>permanent</source>
- <translation type="unfinished"></translation>
+ <translation>végleges</translation>
</message>
<message>
<source>Ban player</source>
- <translation type="unfinished"></translation>
+ <translation>Játékos kitiltása</translation>
</message>
<message>
<source>Please specify an IP address.</source>
- <translation type="unfinished"></translation>
+ <translation>Kérjük, adj meg egy IP címet.</translation>
</message>
<message>
<source>Please specify a nickname.</source>
- <translation type="unfinished"></translation>
+ <translation>Kérjük, adj meg egy becenevet.</translation>
</message>
</context>
<context>
<name>DataManager</name>
<message>
<source>Use Default</source>
- <translation type="unfinished"></translation>
+ <translation>Alapértelmezés használata</translation>
</message>
</context>
<context>
<name>FeedbackDialog</name>
<message>
<source>View</source>
- <translation type="unfinished"></translation>
+ <translation>Megtekintés</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Mégse</translation>
+ <translation>Mégse</translation>
</message>
<message>
<source>Send Feedback</source>
- <translation type="unfinished"></translation>
+ <translation>Visszajelzés küldése</translation>
</message>
<message>
<source>We are always happy about suggestions, ideas, or bug reports.</source>
- <translation type="unfinished"></translation>
+ <translation>Minden javaslatnak, ötletnek, hibajelzésnek örülünk.</translation>
</message>
<message>
<source>Send us feedback!</source>
- <translation type="unfinished"></translation>
+ <translation>Küldj visszajelzést!</translation>
</message>
<message>
<source>If you found a bug, you can see if it's already been reported here: </source>
- <translation type="unfinished"></translation>
+ <translation>Ha hibát találtál, itt megnézheted, jelentették-e már: </translation>
</message>
<message>
<source>Your email address is optional, but necessary if you want us to get back at you.</source>
- <translation type="unfinished"></translation>
+ <translation>Az e-mail cím nem kötelező, de csak akkor tudunk válaszolni, ha megadod. </translation>
</message>
<message>
<source>Feedback</source>
- <translation type="unfinished"></translation>
+ <translation>Visszajelzés</translation>
</message>
<message>
<source>This is optional, but this information might help us to resolve bugs and other technical problems.</source>
- <translation type="unfinished"></translation>
+ <translation>Nem kötelező, de hasznos lehet nekünk a hibák és más technikai problémák megoldásához.</translation>
</message>
</context>
<context>
@@ -239,7 +239,7 @@
<message numerus="yes">
<source>Every %1 turn</source>
<translation>
- <numerusform>Minden %1 körben</numerusform>
+ <numerusform>Minden %1. körben</numerusform>
</translation>
</message>
</context>
@@ -255,15 +255,15 @@
</message>
<message>
<source>Game scheme will auto-select a weapon</source>
- <translation type="unfinished"></translation>
+ <translation>A játékséma automatikusan választ fegyvert</translation>
</message>
<message>
<source>Map</source>
- <translation type="unfinished">Pálya</translation>
+ <translation>Pálya</translation>
</message>
<message>
<source>Game options</source>
- <translation type="unfinished"></translation>
+ <translation>Játékbeállítások</translation>
</message>
</context>
<context>
@@ -274,202 +274,205 @@
</message>
<message>
<source>New</source>
- <translation type="unfinished">Új</translation>
+ <translation>Új</translation>
</message>
<message>
<source>Copy of %1</source>
- <translation type="unfinished"></translation>
+ <translation>%1 másolata</translation>
</message>
<message>
<source>New (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>Új (%1)</translation>
</message>
<message>
<source>Copy of %1 (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 másolata (%2)</translation>
</message>
</context>
<context>
<name>GameUIConfig</name>
<message>
<source>Guest</source>
- <translation type="unfinished"></translation>
+ <translation>Vendég</translation>
</message>
</context>
<context>
<name>HWApplication</name>
<message numerus="yes">
<source>%1 minutes</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 perc</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%1 hour</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 óra</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%1 hours</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 óra</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%1 day</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 nap</numerusform>
</translation>
</message>
<message numerus="yes">
<source>%1 days</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 nap</numerusform>
</translation>
</message>
<message>
<source>Scheme '%1' not supported</source>
- <translation type="unfinished"></translation>
+ <translation>A(z) %1 séma nem támogatott</translation>
</message>
<message>
<source>Cannot create directory %1</source>
- <translation type="unfinished">Nem sikerült létrehozni %1</translation>
+ <translation>Nem sikerült létrehozni a(z) %1 könyvtárat</translation>
</message>
<message>
<source>Failed to open data directory:
%1
Please check your installation!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült a következő adatkönyvtár megnyitása:
+%1
+
+Kérjük, ellenőrizd a telepítésedet!</translation>
</message>
<message>
<source>Usage</source>
<comment>command-line</comment>
<extracomment>“Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Használat</translation>
</message>
<message>
<source>OPTION</source>
<comment>command-line</comment>
<extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option”</extracomment>
- <translation type="unfinished"></translation>
+ <translation>KAPCSOLÓ</translation>
</message>
<message>
<source>CONNECTSTRING</source>
<comment>command-line</comment>
<extracomment>Name of a command-line argument, shown when running “hedgewars --help” in command-line</extracomment>
- <translation type="unfinished"></translation>
+ <translation>KAPCSOLATSZTRING</translation>
</message>
<message>
<source>Options</source>
<comment>command-line</comment>
<extracomment>“Options” as in “command-line options”</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Kapcsolók</translation>
</message>
<message>
<source>Display this help</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
+ <translation>Ezen súgó megjelenítése</translation>
</message>
<message>
<source>Custom path for configuration data and user data</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
+ <translation>Saját útvonal megadása beállításokhoz és felhasználói adatokhoz</translation>
</message>
<message>
<source>Custom path to the game data folder</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
+ <translation>Saját útvonal megadása a játék adatkönyvtárához</translation>
</message>
<message>
<source>Hedgewars can use a %1 (e.g. "%2") to connect on start.</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
+ <translation>A Hedgewarsnak megadható egy %1 (pl. "%2"), hogy indításkor oda csatlakozzon.</translation>
</message>
<message>
<source>Malformed option argument: %1</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
+ <translation>Hibásan megadott kapcsolóargumentum: %1</translation>
</message>
<message>
<source>Unknown option argument: %1</source>
<comment>command-line</comment>
- <translation type="unfinished"></translation>
+ <translation>Ismeretlen kapcsolóargumentum: %1</translation>
</message>
</context>
<context>
<name>HWAskQuitDialog</name>
<message>
<source>Do you really want to quit?</source>
- <translation type="unfinished"></translation>
+ <translation>Tényleg ki akarsz lépni?</translation>
</message>
</context>
<context>
<name>HWChatWidget</name>
<message>
<source>%1 has been removed from your ignore list</source>
- <translation type="unfinished"></translation>
+ <translation>%1 immár nincs a mellőzési listádon</translation>
</message>
<message>
<source>%1 has been added to your ignore list</source>
- <translation type="unfinished"></translation>
+ <translation>%1 a mellőzési listádra került</translation>
</message>
<message>
<source>%1 has been removed from your friends list</source>
- <translation type="unfinished"></translation>
+ <translation>%1 immár nincs a barátlistádon</translation>
</message>
<message>
<source>%1 has been added to your friends list</source>
- <translation type="unfinished"></translation>
+ <translation>%1 a barátlistádra került</translation>
</message>
<message>
<source>Stylesheet imported from %1</source>
- <translation type="unfinished"></translation>
+ <translation>Stíluslap importálva innen: %1</translation>
</message>
<message>
<source>Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset!</source>
- <translation type="unfinished"></translation>
+ <translation>Ha ezt a stíluslapot szeretnéd használni a jövőben, üsd ezt: %1, visszaállításhoz üsd ezt: %2!</translation>
</message>
<message>
<source>Couldn't read %1</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült olvasni ezt: %1</translation>
</message>
<message>
<source>StyleSheet discarded</source>
- <translation type="unfinished"></translation>
+ <translation>Stíluslap elvetve</translation>
</message>
<message>
<source>StyleSheet saved to %1</source>
- <translation type="unfinished"></translation>
+ <translation>A stíluslapot mentettük ide: %1</translation>
</message>
<message>
<source>Failed to save StyleSheet to %1</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült a stíluslap mentése ide: %1</translation>
</message>
<message>
<source>%1 has joined</source>
- <translation type="unfinished"></translation>
+ <translation>%1 csatlakozott</translation>
</message>
<message>
<source>%1 has left</source>
- <translation type="unfinished"></translation>
+ <translation>%1 kilépett</translation>
</message>
<message>
<source>%1 has left (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 kilépett (%2)</translation>
</message>
<message>
<source>Chat log</source>
- <translation type="unfinished"></translation>
+ <translation>Csevegési napló</translation>
</message>
<message>
<source>Enter chat messages here and send them with [Enter]</source>
- <translation type="unfinished"></translation>
+ <translation>Ide írd a csevegési üzeneteket, Enterrel küldheted el őket</translation>
</message>
<message>
<source>List of players</source>
- <translation type="unfinished"></translation>
+ <translation>Játékosok listája</translation>
</message>
</context>
<context>
@@ -481,45 +484,46 @@
<message>
<source>Hedgewars Demo File</source>
<comment>File Types</comment>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars bemutatófájl</translation>
</message>
<message>
<source>Hedgewars Save File</source>
<comment>File Types</comment>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars mentésfájl</translation>
</message>
<message>
<source>Demo name</source>
- <translation type="unfinished"></translation>
+ <translation>Bemutató neve</translation>
</message>
<message>
<source>Demo name:</source>
- <translation type="unfinished"></translation>
+ <translation>Bemutató neve:</translation>
</message>
<message>
<source>Game aborted</source>
- <translation type="unfinished"></translation>
+ <translation>Játék leállítva</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">Becenév</translation>
+ <translation>Becenév</translation>
</message>
<message>
<source>No nickname supplied.</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs becenév megadva.</translation>
</message>
<message>
<source>Someone already uses your nickname %1 on the server.
Please pick another nickname:</source>
- <translation type="unfinished"></translation>
+ <translation>Valaki már használja a becenevedet (%1) a kiszolgálón.
+Kérjük, válassz másik becenevet:</translation>
</message>
<message>
<source>%1's Team</source>
- <translation type="unfinished"></translation>
+ <translation>%1 csapata</translation>
</message>
<message>
<source>Hedgewars - Nick registered</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Becenév regisztrálva</translation>
</message>
<message>
<source>This nick is registered, and you haven't specified a password.
@@ -527,79 +531,89 @@
If this nick isn't yours, please register your own nick at www.hedgewars.org
Password:</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a becenév regisztrált, és nem adtál meg jelszót.
+
+Ha ez nem a te beceneved, kérjük regisztrálj sajátot a www.hedgewars.org címen.
+
+Jelszó:</translation>
</message>
<message>
<source>Your nickname is not registered.
To prevent someone else from using it,
please register it at www.hedgewars.org</source>
- <translation type="unfinished"></translation>
+ <translation>A beceneved nincs regisztrálva.
+Nehogy más is használja, kérjük,
+regisztráld a www.hedgewars.org címen</translation>
</message>
<message>
<source>
Your password wasn't saved either.</source>
- <translation type="unfinished"></translation>
+ <translation>
+
+A jelszavad sem lett mentve.</translation>
</message>
<message>
<source>Hedgewars - Empty nickname</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Üres becenév</translation>
</message>
<message>
<source>Hedgewars - Wrong password</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Rossz jelszó</translation>
</message>
<message>
<source>You entered a wrong password.</source>
- <translation type="unfinished"></translation>
+ <translation>Rossz jelszót írtál be.</translation>
</message>
<message>
<source>Try Again</source>
- <translation type="unfinished"></translation>
+ <translation>Próbáld újra</translation>
</message>
<message>
<source>Hedgewars - Connection error</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Csatlakozási hiba</translation>
</message>
<message>
<source>You reconnected too fast.
Please wait a few seconds and try again.</source>
- <translation type="unfinished"></translation>
+ <translation>Túl gyorsan csatlakoztál újra.
+Kérjük, várj pár másodpercet, és próbáld újra.</translation>
</message>
<message>
<source>Room password</source>
- <translation type="unfinished"></translation>
+ <translation>Szoba jelszava</translation>
</message>
<message>
<source>The room is protected with password.
Please, enter the password:</source>
- <translation type="unfinished"></translation>
+ <translation>A szoba jelszóval védett.
+Kérjük, add meg a jelszót:</translation>
</message>
<message>
<source>Team 1</source>
- <translation type="unfinished"></translation>
+ <translation>Csapat 1</translation>
</message>
<message>
<source>Team %1</source>
<extracomment>Default team name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Csapat %1</translation>
</message>
<message>
<source>Computer %1</source>
<extracomment>Default computer team name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Számítógép %1 </translation>
</message>
<message>
<source>Unknown network error (possibly missing SSL library).</source>
- <translation type="unfinished"></translation>
+ <translation>Ismeretlen hálózati hiba (talán hiányzó SSL könyvtár).</translation>
</message>
<message>
<source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a lehetőség internetkapcsolatot kíván, de úgy tűnik, nem vagy online (hibakód: %1).</translation>
</message>
<message>
<source>Internal error: Reply object is invalid.</source>
- <translation type="unfinished"></translation>
+ <translation>Belső hiba: Érvénytelen válaszobjektum.</translation>
</message>
</context>
<context>
@@ -611,7 +625,7 @@
</message>
<message>
<source>Cannot open demofile %1</source>
- <translation>Nem sikerült megnyitni a %1 demót</translation>
+ <translation>Nem sikerült megnyitni a(z) %1 bemutatót</translation>
</message>
<message>
<source>A fatal ERROR occured! The game engine had to stop.
@@ -622,14 +636,21 @@
Last engine message:
%1</source>
- <translation type="unfinished"></translation>
+ <translation>Végzetes HIBA történt! A játékmotort le kellett állítani.
+
+Nagyon sajnáljuk a kellemetlenséget. :-(
+
+Ha újra meg újra ez történik, kérjük, kattints a főmenü „Visszajelzés” gombjára!
+
+A játékmotor utolsó üzenete:
+%1</translation>
</message>
</context>
<context>
<name>HWHostPortDialog</name>
<message>
<source>Connect to server</source>
- <translation type="unfinished"></translation>
+ <translation>Csatlakozás kiszolgálóhoz</translation>
</message>
</context>
<context>
@@ -669,163 +690,163 @@
<message>
<source>Seed</source>
<extracomment>Refers to the "random seed"; the source of randomness in the game</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Mag</translation>
</message>
<message>
<source>Map type:</source>
- <translation type="unfinished"></translation>
+ <translation>Pálya típusa:</translation>
</message>
<message>
<source>Image map</source>
- <translation type="unfinished"></translation>
+ <translation>Kép-pálya</translation>
</message>
<message>
<source>Mission map</source>
- <translation type="unfinished"></translation>
+ <translation>Küldetéspálya</translation>
</message>
<message>
<source>Hand-drawn</source>
- <translation type="unfinished"></translation>
+ <translation>Kézzel rajzolt</translation>
</message>
<message>
<source>Randomly generated</source>
- <translation type="unfinished"></translation>
+ <translation>Véletlenszerű</translation>
</message>
<message>
<source>Random maze</source>
- <translation type="unfinished"></translation>
+ <translation>Véletlen útvesztő</translation>
</message>
<message>
<source>Random</source>
- <translation type="unfinished">Véletlen</translation>
+ <translation>Véletlen</translation>
</message>
<message>
<source>Map preview:</source>
- <translation type="unfinished"></translation>
+ <translation>Pálya előnézete:</translation>
</message>
<message>
<source>Load map drawing</source>
- <translation type="unfinished"></translation>
+ <translation>Pályarajz betöltése</translation>
</message>
<message>
<source>Edit map drawing</source>
- <translation type="unfinished"></translation>
+ <translation>Pályarajz szerkesztése</translation>
</message>
<message>
<source>Small islands</source>
- <translation type="unfinished"></translation>
+ <translation>Kis szigetek</translation>
</message>
<message>
<source>Medium islands</source>
- <translation type="unfinished"></translation>
+ <translation>Közepes szigetek</translation>
</message>
<message>
<source>Large islands</source>
- <translation type="unfinished"></translation>
+ <translation>Nagy szigetek</translation>
</message>
<message>
<source>Map size:</source>
- <translation type="unfinished"></translation>
+ <translation>Pálya mérete:</translation>
</message>
<message>
<source>Maze style:</source>
- <translation type="unfinished"></translation>
+ <translation>Útvesztő stílusa:</translation>
</message>
<message>
<source>Mission:</source>
- <translation type="unfinished"></translation>
+ <translation>Küldetés:</translation>
</message>
<message>
<source>Map:</source>
- <translation type="unfinished"></translation>
+ <translation>Pálya:</translation>
</message>
<message>
<source>Load drawn map</source>
- <translation type="unfinished"></translation>
+ <translation>Megrajzolt pálya betöltése</translation>
</message>
<message>
<source>Drawn Maps</source>
- <translation type="unfinished"></translation>
+ <translation>Megrajzolt pályák</translation>
</message>
<message>
<source>All files</source>
- <translation type="unfinished"></translation>
+ <translation>Minden fájl</translation>
</message>
<message>
<source>Large tunnels</source>
- <translation type="unfinished"></translation>
+ <translation>Nagy alagutak</translation>
</message>
<message>
<source>Theme: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Téma: %1</translation>
</message>
<message>
<source>Random perlin</source>
- <translation type="unfinished"></translation>
+ <translation>Véletlen Perlin</translation>
</message>
<message>
<source>Style:</source>
- <translation type="unfinished"></translation>
+ <translation>Stílus:</translation>
</message>
<message>
<source>Forts</source>
- <translation type="unfinished"></translation>
+ <translation>Várak</translation>
</message>
<message>
<source>View and edit the seed, the source of randomness in the game</source>
- <translation type="unfinished"></translation>
+ <translation>A mag megtekintése és szerkesztése. Ez a játékbeli véletlenszerűség forrása</translation>
</message>
<message>
<source>Randomize the theme</source>
- <translation type="unfinished"></translation>
+ <translation>Téma találomra</translation>
</message>
<message>
<source>Choose a theme</source>
- <translation type="unfinished"></translation>
+ <translation>Válassz témát</translation>
</message>
<message>
<source>Randomize the map, theme and seed</source>
- <translation type="unfinished"></translation>
+ <translation>Pálya, téma és mag találomra</translation>
</message>
<message>
<source>Randomize the theme and seed</source>
- <translation type="unfinished"></translation>
+ <translation>Téma és mag találomra</translation>
</message>
<message>
<source>Randomize the seed</source>
- <translation type="unfinished"></translation>
+ <translation>Mag találomra</translation>
</message>
<message>
<source>Click to randomize the map, theme and seed</source>
- <translation type="unfinished"></translation>
+ <translation>Kattints a pálya, téma és mag véletlenszerű generálásához</translation>
</message>
<message>
<source>Click to randomize the theme and seed</source>
- <translation type="unfinished"></translation>
+ <translation>Kattints a téma és a mag véletlenszerű generálásához</translation>
</message>
<message>
<source>Adjust the complexity of the generated map</source>
- <translation type="unfinished"></translation>
+ <translation>A generált pálya összetettségének állítása</translation>
</message>
<message>
<source>Adjust the distance between forts</source>
- <translation type="unfinished"></translation>
+ <translation>A várak közötti távolság állítása</translation>
</message>
<message>
<source>Click to edit</source>
- <translation type="unfinished"></translation>
+ <translation>Kattints a szerkesztéshez</translation>
</message>
<message>
<source>Scale size of the drawn map</source>
- <translation type="unfinished"></translation>
+ <translation>A rajzolt pálya méretarányának állítása</translation>
</message>
<message>
<source>Load</source>
- <translation type="unfinished">Betöltés</translation>
+ <translation>Betöltés</translation>
</message>
<message>
<source>Edit</source>
- <translation type="unfinished"></translation>
+ <translation>Szerkesztés</translation>
</message>
</context>
<context>
@@ -853,7 +874,7 @@
</message>
<message>
<source>Connection refused</source>
- <translation type="vanished">Kapcsolat visszautasítva</translation>
+ <translation>Kapcsolat visszautasítva</translation>
</message>
<message>
<source>Room destroyed</source>
@@ -861,7 +882,7 @@
</message>
<message>
<source>Quit reason: </source>
- <translation type="vanished">Kilépés oka:</translation>
+ <translation>Kilépés oka:</translation>
</message>
<message>
<source>You got kicked</source>
@@ -877,31 +898,31 @@
</message>
<message>
<source>%1 *** %2 has left (%3)</source>
- <translation>%1 *** %2 távozott (%3)</translation>
+ <translation>%1 *** %2 kilépett (%3)</translation>
</message>
<message>
<source>%1 *** %2 has left</source>
- <translation>%1 *** %2 távozott</translation>
+ <translation>%1 *** %2 kilépett</translation>
</message>
<message>
<source>Remote host has closed connection</source>
- <translation type="unfinished"></translation>
+ <translation>A távoli gép lezárta a kapcsolatot</translation>
</message>
<message>
<source>The server is too old. Disconnecting now.</source>
- <translation type="unfinished"></translation>
+ <translation>A kiszolgáló túl régi. Kapcsolat bontása.</translation>
</message>
<message>
<source>Server authentication error</source>
- <translation type="unfinished"></translation>
+ <translation>Kiszolgálói hitelesítési hiba</translation>
</message>
<message>
<source>Reason:</source>
- <translation type="unfinished"></translation>
+ <translation>Indok:</translation>
</message>
<message>
<source>The connection was refused by the official server or timed out. Something seems to be wrong with the official server at the moment. This might be a temporary problem. Please try again later.</source>
- <translation type="unfinished"></translation>
+ <translation>A hivatalos kiszolgáló elutasította a kapcsolatot, vagy túl sokáig nem válaszolt. Úgy tűnik, most éppen valami gond van a hivatalos kiszolgálóval. A probléma talán csak átmeneti. Kérjük, később próbáld újra.</translation>
</message>
<message>
<source>The connection was refused by the host or timed out. This might have one of the following reasons:
@@ -910,33 +931,41 @@
- There is a temporary network problem
Please check the host name and port settings and/or try again later.</source>
- <translation type="unfinished"></translation>
+ <translation>A távoli számítógép elutasította a kapcsolatot, vagy túl sokáig nem válaszolt. Ennek az alábbi okai lehetnek:
+– A Hedgewars Szerver program most nem fut a másik gépen.
+– A megadott portszám nem megfelelő.
+– Átmeneti hálózati hiba lépett fel.
+
+Kérjük, ellenőrizd a gép nevét és portbeállításait, és/vagy próbálkozz újra később.</translation>
</message>
</context>
<context>
<name>HWPasswordDialog</name>
<message>
<source>Login</source>
- <translation type="unfinished"></translation>
+ <translation>Bejelentkezés</translation>
</message>
<message>
<source>To connect to the server, please log in.
If you don't have an account on www.hedgewars.org,
just enter your nickname.</source>
- <translation type="unfinished"></translation>
+ <translation>Kérjük, jelentkezz be a szerverhez való kapcsolódáshoz.
+
+Ha nincs felhasználói fiókod a www.hedgewars.org oldalon,
+csak írd be a becenevedet.</translation>
</message>
<message>
<source>Nickname:</source>
- <translation type="unfinished"></translation>
+ <translation>Becenév:</translation>
</message>
<message>
<source>Password:</source>
- <translation type="unfinished"></translation>
+ <translation>Jelszó:</translation>
</message>
<message>
<source>New Account</source>
- <translation type="unfinished"></translation>
+ <translation>Új fiók</translation>
</message>
</context>
<context>
@@ -950,33 +979,40 @@
Last engine message:
%1</source>
- <translation type="unfinished"></translation>
+ <translation>Végzetes HIBA történt a videofelvétel feldolgozása közben! A videót nem sikerült menteni.
+
+Átmeneti megoldásként megpróbálhatod visszaállítani a Hedgewars videorögzítő beállításait az alapértelmezésekre.
+
+A hiba jelentéséhez kérjük, kattints a „Visszajelzés” gombra a főmenüben!
+
+A motor utolsó üzenete:
+%1</translation>
</message>
</context>
<context>
<name>HatButton</name>
<message>
<source>Change hat (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>Fejfedő megváltoztatása (%1)</translation>
</message>
</context>
<context>
<name>HatPrompt</name>
<message>
<source>Cancel</source>
- <translation type="unfinished">Mégse</translation>
+ <translation>Mégse</translation>
</message>
<message>
<source>Use selected hat</source>
- <translation type="unfinished"></translation>
+ <translation>Választott fejfedő használata</translation>
</message>
<message>
<source>Search for a hat:</source>
- <translation type="unfinished"></translation>
+ <translation>Fejfedő keresése:</translation>
</message>
<message>
<source>Choose a hat</source>
- <translation type="unfinished"></translation>
+ <translation>Fejfedő választása</translation>
</message>
</context>
<context>
@@ -990,73 +1026,73 @@
<name>KeyBinder</name>
<message>
<source>Category</source>
- <translation type="unfinished"></translation>
+ <translation>Kategória</translation>
</message>
<message>
<source>Warning: The same key is assigned multiple times!</source>
- <translation type="unfinished"></translation>
+ <translation>Figyelem: Ugyanaz a gomb több mindenhez van rendelve!</translation>
</message>
</context>
<context>
<name>LibavInteraction</name>
<message>
<source>Audio: </source>
- <translation type="unfinished"></translation>
+ <translation>Hang:</translation>
</message>
<message>
<source>unknown</source>
- <translation type="unfinished"></translation>
+ <translation>ismeretlen</translation>
</message>
<message>
<source>Duration: %1min %2s</source>
<extracomment>Duration in minutes and seconds (SI units)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Hossz: %1 p %2 mp</translation>
</message>
<message>
<source>Video: %1x%2, %3 FPS, %4</source>
<extracomment>Video metadata. %1 = video width, %2 = video height, %3 = frames per second = %4 = decoder name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Video: %1×%2, %3 FPS, %4</translation>
</message>
<message>
<source>Video: %1x%2, %3</source>
<extracomment>Video metadata. %1 = video width, %2 = video height, %3 = decoder name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Video: %1×%2, %3</translation>
</message>
<message>
<source>Player: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Játékos: %1</translation>
</message>
<message>
<source>Theme: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Téma: %1</translation>
</message>
<message>
<source>Map: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Pálya: %1</translation>
</message>
<message>
<source>Record: %1</source>
<extracomment>As in ‘recording’</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Felvétel: %1</translation>
</message>
</context>
<context>
<name>MapModel</name>
<message>
<source>No description available.</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs elérhető leírás.</translation>
</message>
</context>
<context>
<name>MinesTimeSpinBox</name>
<message>
<source>Random</source>
- <translation type="unfinished">Véletlen</translation>
+ <translation>Véletlen</translation>
</message>
<message numerus="yes">
<source>%1 seconds</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 másodperc</numerusform>
</translation>
</message>
</context>
@@ -1064,11 +1100,11 @@
<name>PageAdmin</name>
<message>
<source>Clear Accounts Cache</source>
- <translation>Accounts Cache kiürítése</translation>
+ <translation>Fiókgyorsítótár törlése</translation>
</message>
<message>
<source>Fetch data</source>
- <translation>Adatszerzés</translation>
+ <translation>Adatok letöltése</translation>
</message>
<message>
<source>Server message for latest version:</source>
@@ -1093,147 +1129,147 @@
</message>
<message>
<source>General</source>
- <translation type="unfinished">Általános</translation>
+ <translation>Általános</translation>
</message>
<message>
<source>Bans</source>
- <translation type="unfinished"></translation>
+ <translation>Tiltások</translation>
</message>
<message>
<source>IP/Nick</source>
- <translation type="unfinished"></translation>
+ <translation>IP/Becenév</translation>
</message>
<message>
<source>Expiration</source>
- <translation type="unfinished"></translation>
+ <translation>Lejárat</translation>
</message>
<message>
<source>Reason</source>
- <translation type="unfinished"></translation>
+ <translation>Indok</translation>
</message>
<message>
<source>Refresh</source>
- <translation type="unfinished"></translation>
+ <translation>Frissítés</translation>
</message>
<message>
<source>Add</source>
- <translation type="unfinished"></translation>
+ <translation>Hozzáadás</translation>
</message>
<message>
<source>Remove</source>
- <translation type="unfinished"></translation>
+ <translation>Eltávolítás</translation>
</message>
</context>
<context>
<name>PageCampaign</name>
<message>
<source>Team</source>
- <translation type="unfinished"></translation>
+ <translation>Csapat</translation>
</message>
<message>
<source>Campaign</source>
- <translation type="unfinished"></translation>
+ <translation>Hadjárat</translation>
</message>
<message>
<source>Mission</source>
- <translation type="unfinished"></translation>
+ <translation>Küldetés</translation>
</message>
<message>
<source>Start fighting</source>
- <translation type="unfinished"></translation>
+ <translation>Harc indítása</translation>
</message>
</context>
<context>
<name>PageConnecting</name>
<message>
<source>Connecting...</source>
- <translation>Csatlakozás...</translation>
+ <translation>Csatlakozás…</translation>
</message>
</context>
<context>
<name>PageDataDownload</name>
<message>
<source>Loading, please wait.</source>
- <translation type="unfinished"></translation>
+ <translation>Betöltés, kis türelmet.</translation>
</message>
<message>
<source>Open packages directory</source>
- <translation type="unfinished"></translation>
+ <translation>Csomagok könyvtárának megnyitása</translation>
</message>
<message>
<source>Load the start page</source>
- <translation type="unfinished"></translation>
+ <translation>Kezdőoldal betöltése</translation>
</message>
<message>
<source>Unknown network error (possibly missing SSL library).</source>
- <translation type="unfinished"></translation>
+ <translation>Ismeretlen hálózati hiba (talán hiányzó SSL könyvtár).</translation>
</message>
<message>
<source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a lehetőség internetkapcsolatot kíván, de úgy tűnik, nem vagy online (hibakód: %1).</translation>
</message>
<message>
<source>Internal error: Reply object is invalid.</source>
- <translation type="unfinished"></translation>
+ <translation>Belső hiba: Érvénytelen válaszobjektum.</translation>
</message>
</context>
<context>
<name>PageDrawMap</name>
<message>
<source>Undo</source>
- <translation type="unfinished"></translation>
+ <translation>Visszavonás</translation>
</message>
<message>
<source>Clear</source>
- <translation type="unfinished">Törlés</translation>
+ <translation>Törlés</translation>
</message>
<message>
<source>Load</source>
- <translation type="unfinished">Betöltés</translation>
+ <translation>Betöltés</translation>
</message>
<message>
<source>Save</source>
- <translation type="unfinished"></translation>
+ <translation>Mentés</translation>
</message>
<message>
<source>Load drawn map</source>
- <translation type="unfinished"></translation>
+ <translation>Rajzolt pálya betöltése</translation>
</message>
<message>
<source>Save drawn map</source>
- <translation type="unfinished"></translation>
+ <translation>Rajzolt pálya mentése</translation>
</message>
<message>
<source>Drawn Maps</source>
- <translation type="unfinished"></translation>
+ <translation>Rajzolt pályák</translation>
</message>
<message>
<source>All files</source>
- <translation type="unfinished"></translation>
+ <translation>Minden fájl</translation>
</message>
<message>
<source>Eraser</source>
- <translation type="unfinished"></translation>
+ <translation>Radír</translation>
</message>
<message>
<source>Polyline</source>
- <translation type="unfinished"></translation>
+ <translation>Vonal</translation>
</message>
<message>
<source>Rectangle</source>
- <translation type="unfinished"></translation>
+ <translation>Téglalap</translation>
</message>
<message>
<source>Ellipse</source>
- <translation type="unfinished"></translation>
+ <translation>Ellipszis</translation>
</message>
<message>
<source>Optimize</source>
- <translation type="unfinished"></translation>
+ <translation>Optimalizálás</translation>
</message>
<message>
<source>Brush size</source>
- <translation type="unfinished"></translation>
+ <translation>Ecset mérete</translation>
</message>
</context>
<context>
@@ -1244,176 +1280,176 @@
</message>
<message>
<source>Select an action to choose a custom key bind for this team</source>
- <translation type="unfinished"></translation>
+ <translation>Válassz műveletet a saját csapatbillentyű hozzárendeléséhez</translation>
</message>
<message>
<source>Use my default</source>
- <translation type="unfinished"></translation>
+ <translation>Alapértelmezésem használata</translation>
</message>
<message>
<source>Reset all binds</source>
- <translation type="unfinished"></translation>
+ <translation>Minden hozzárendelés visszaállítása</translation>
</message>
<message>
<source>Custom Controls</source>
- <translation type="unfinished"></translation>
+ <translation>Egyedi irányítási beállítások</translation>
</message>
<message>
<source>Hat</source>
- <translation type="unfinished">Kalap</translation>
+ <translation>Fejfedő</translation>
</message>
<message>
<source>Name</source>
- <translation type="unfinished">Név</translation>
+ <translation>Név</translation>
</message>
<message>
<source>This hedgehog's name</source>
- <translation type="unfinished"></translation>
+ <translation>Ennek a sünnek a neve</translation>
</message>
<message>
<source>Randomize this hedgehog's name</source>
- <translation type="unfinished"></translation>
+ <translation>Sünnév találomra</translation>
</message>
<message>
<source>Random Team</source>
- <translation type="unfinished">Véletlen csapat</translation>
+ <translation>Véletlen csapat</translation>
</message>
<message>
<source>Play a random example of this voice</source>
- <translation type="unfinished"></translation>
+ <translation>Példa lejátszása ebből a beszédkészletből</translation>
</message>
<message>
<source>Random Hats</source>
- <translation type="unfinished"></translation>
+ <translation>Fejfedők találomra</translation>
</message>
<message>
<source>Random Names</source>
- <translation type="unfinished"></translation>
+ <translation>Nevek találomra</translation>
</message>
<message>
<source>Randomize the team name</source>
- <translation type="unfinished"></translation>
+ <translation>Csapatnév találomra</translation>
</message>
<message>
<source>Randomize the grave</source>
- <translation type="unfinished"></translation>
+ <translation>Sír találomra</translation>
</message>
<message>
<source>Randomize the flag</source>
- <translation type="unfinished"></translation>
+ <translation>Zászló találomra</translation>
</message>
<message>
<source>Randomize the voice</source>
- <translation type="unfinished"></translation>
+ <translation>Hang találomra</translation>
</message>
<message>
<source>Randomize the fort</source>
- <translation type="unfinished"></translation>
+ <translation>Erőd találomra</translation>
</message>
<message>
<source>CPU %1</source>
<extracomment>Name of a flag for computer-controlled enemies. %1 is replaced with the computer level</extracomment>
- <translation type="unfinished"></translation>
+ <translation>CPU %1</translation>
</message>
<message>
<source>%1 (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 (%2)</translation>
</message>
</context>
<context>
<name>PageGameStats</name>
<message>
<source>Details</source>
- <translation type="unfinished"></translation>
+ <translation>Részletek</translation>
</message>
<message>
<source>Health graph</source>
- <translation type="unfinished"></translation>
+ <translation>Életerő-grafikon</translation>
</message>
<message>
<source>Ranking</source>
- <translation type="unfinished"></translation>
+ <translation>Helyezések</translation>
</message>
<message numerus="yes">
<source>The best shot award was won by <b>%1</b> with <b>%2</b> pts.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>A legjobb lövés díját <b>%1</b> nyerte <b>%2</b> ponttal.</numerusform>
</translation>
</message>
<message numerus="yes">
<source>The best killer is <b>%1</b> with <b>%2</b> kills in a turn.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>A legnagyobb gyilkos <b>%1</b>, <b>%2</b> élet szárad a lelkén. </numerusform>
</translation>
</message>
<message numerus="yes">
<source>A total of <b>%1</b> hedgehog(s) were killed during this round.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>Összesen <b>%1</b> sünt öltek meg ebben a körben.</numerusform>
</translation>
</message>
<message numerus="yes">
<source>(%1 kill)</source>
<extracomment>Number of kills in stats screen, written after the team name</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 gyilkosság)</numerusform>
</translation>
</message>
<message numerus="yes">
<source><b>%1</b> was scared and skipped turn <b>%2</b> times.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform><b>%1</b> félt, és <b>%2</b> kört hagyott ki.</numerusform>
</translation>
</message>
<message>
<source>Play again</source>
- <translation type="unfinished"></translation>
+ <translation>Újrajátszás</translation>
</message>
<message>
<source>Save</source>
- <translation type="unfinished"></translation>
+ <translation>Mentés</translation>
</message>
<message numerus="yes">
<source>(%1 %2)</source>
<extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 %2)</numerusform>
</translation>
</message>
<message numerus="yes">
<source><b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform><b>%1</b> jó mókának találta saját tagjait lövöldözni, <b>%2</b> pont erejéig.</numerusform>
</translation>
</message>
<message numerus="yes">
<source><b>%1</b> killed <b>%2</b> of their own hedgehogs.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform><b>%1</b> megölte <b>%2</b> saját tagját.</numerusform>
</translation>
</message>
<message>
<source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
- <translation type="unfinished"></translation>
+ <translation>Mivel mindenki ugyanabba a színű klánba tartozott, nem volt értelme harcolni. Így a sünik békében éltek boldogan, míg meg nem haltak.</translation>
</message>
<message numerus="yes">
<source>(%1 point(s))</source>
<extracomment>Number of points in stats screen, written after the team name</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 pont)</numerusform>
</translation>
</message>
<message numerus="yes">
<source>(%L1 second(s))</source>
<extracomment>Time in seconds</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%L1 másodperc)</numerusform>
</translation>
</message>
<message numerus="yes">
<source>(%1 crate(s))</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 csomag)</numerusform>
</translation>
</message>
</context>
@@ -1421,77 +1457,77 @@
<name>PageInGame</name>
<message>
<source>In game...</source>
- <translation type="unfinished"></translation>
+ <translation>Játékban vagyunk…</translation>
</message>
</context>
<context>
<name>PageInfo</name>
<message>
<source>Open the snapshot folder</source>
- <translation type="unfinished"></translation>
+ <translation>Képernyőképek könyvtárának megnyitása</translation>
</message>
</context>
<context>
<name>PageMain</name>
<message>
<source>Downloadable Content</source>
- <translation type="unfinished"></translation>
+ <translation>Letölthető tartalom</translation>
</message>
<message>
<source>Play a game on a single computer</source>
- <translation type="unfinished"></translation>
+ <translation>Játék a helyi számítógépen</translation>
</message>
<message>
<source>Play a game across a network</source>
- <translation type="unfinished"></translation>
+ <translation>Játék hálózaton keresztül</translation>
</message>
<message>
<source>Read about who is behind the Hedgewars Project</source>
- <translation type="unfinished"></translation>
+ <translation>Itt olvashatod, kik állnak a Hedgewars Projekt mögött</translation>
</message>
<message>
<source>Leave a feedback here reporting issues, suggesting features or just saying how you like Hedgewars</source>
- <translation type="unfinished"></translation>
+ <translation>Itt üzenheted meg nekünk a hibákat, javaslataidat, vagy akár azt, hogy tetszik a Hedgewars</translation>
</message>
<message>
<source>Access the user created content downloadable from our website</source>
- <translation type="unfinished"></translation>
+ <translation>A weboldalunkról letölthető felhasználói tartalmak elérése</translation>
</message>
<message>
<source>Exit game</source>
- <translation type="unfinished"></translation>
+ <translation>Kilépés a játékból</translation>
</message>
<message>
<source>Manage videos recorded from game</source>
- <translation type="unfinished"></translation>
+ <translation>A játékban rögzített videók kezelése</translation>
</message>
<message>
<source>Edit game preferences</source>
- <translation type="unfinished"></translation>
+ <translation>A játék beállításainak szerkesztése</translation>
</message>
<message>
<source>Play a game across a local area network</source>
- <translation type="unfinished"></translation>
+ <translation>Játék helyi hálózaton keresztül</translation>
</message>
<message>
<source>Play a game on an official server</source>
- <translation type="unfinished"></translation>
+ <translation>Játék egy hivatalos kiszolgálón</translation>
</message>
<message>
<source>Feedback</source>
- <translation type="unfinished"></translation>
+ <translation>Visszajelzés</translation>
</message>
<message>
<source>Play local network game</source>
- <translation type="unfinished"></translation>
+ <translation>Helyi hálózati játék</translation>
</message>
<message>
<source>Play official network game</source>
- <translation type="unfinished"></translation>
+ <translation>Hivatalos hálózati játék</translation>
</message>
<message>
<source>Open the Hedgewars online game manual in your web browser</source>
- <translation type="unfinished"></translation>
+ <translation>A Hedgewars online kézikönyvének megnyitása a webböngésződben</translation>
</message>
</context>
<context>
@@ -1502,30 +1538,30 @@
</message>
<message>
<source>Edit game preferences</source>
- <translation type="unfinished"></translation>
+ <translation>Játékbeállítások szerkesztése</translation>
</message>
<message>
<source>Start fighting (requires at least 2 teams)</source>
- <translation type="unfinished"></translation>
+ <translation>Harc indítása (legalább 2 csapat kell)</translation>
</message>
</context>
<context>
<name>PageNet</name>
<message>
<source>Connect to the selected server</source>
- <translation type="unfinished"></translation>
+ <translation>Csatlakozás a kiválasztott kiszolgálóhoz</translation>
</message>
<message>
<source>Update the list of servers</source>
- <translation type="unfinished"></translation>
+ <translation>Kiszolgálók listájának frissítése</translation>
</message>
<message>
<source>Specify the address and port number of a known server and connect to it directly</source>
- <translation type="unfinished"></translation>
+ <translation>Egy ismert kiszolgáló címének és portszámának közvetlen megadása, és közvetlen csatlakozás </translation>
</message>
<message>
<source>Start private server</source>
- <translation type="unfinished"></translation>
+ <translation>Saját kiszolgáló indítása</translation>
</message>
</context>
<context>
@@ -1536,46 +1572,46 @@
</message>
<message>
<source>Edit game preferences</source>
- <translation type="unfinished"></translation>
+ <translation>Játékbeállítások szerkesztése</translation>
</message>
<message>
<source>Start</source>
- <translation type="unfinished">Start</translation>
+ <translation>Indítás</translation>
</message>
<message>
<source>Update</source>
- <translation type="unfinished">Frissítés</translation>
+ <translation>Frissítés</translation>
</message>
<message>
<source>Room controls</source>
- <translation type="unfinished"></translation>
+ <translation>Szoba vezérlői</translation>
</message>
<message>
<source>Room name</source>
- <translation type="unfinished"></translation>
+ <translation>Szoba neve</translation>
</message>
<message>
<source>Update the room name</source>
- <translation type="unfinished"></translation>
+ <translation>Szobanév frissítése</translation>
</message>
<message>
<source>Turn on the lightbulb to show the other players when you're ready to fight</source>
- <translation type="unfinished"></translation>
+ <translation>A villanykörte felkapcsolásával jelezheted a többi játékosnak, ha készen állsz a harcra</translation>
</message>
<message>
<source>Start fighting (requires at least 2 teams)</source>
- <translation type="unfinished"></translation>
+ <translation>Harc indítása (legalább 2 csapat kell)</translation>
</message>
</context>
<context>
<name>PageNetServer</name>
<message>
<source>Click here for details</source>
- <translation type="unfinished"></translation>
+ <translation>Kattints ide a részletekért</translation>
</message>
<message>
<source>Insert your address here</source>
- <translation type="unfinished"></translation>
+ <translation>Írd be a címedet ide</translation>
</message>
</context>
<context>
@@ -1594,181 +1630,181 @@
</message>
<message>
<source>You can't edit teams from team selection. Go back to main menu to add, edit or delete teams.</source>
- <translation type="unfinished"></translation>
+ <translation>Nem szerkesztheted a csapatokat a csapatok kiválasztásakor. Menj vissza a főmenübe csapatok hozzáadásához, szerkesztéséhez vagy törléséhez.</translation>
</message>
<message>
<source>New scheme</source>
- <translation type="unfinished"></translation>
+ <translation>Új séma</translation>
</message>
<message>
<source>Edit scheme</source>
- <translation type="unfinished"></translation>
+ <translation>Séma szerkesztése</translation>
</message>
<message>
<source>Delete scheme</source>
- <translation type="unfinished"></translation>
+ <translation>Séma törlése</translation>
</message>
<message>
<source>New weapon set</source>
- <translation type="unfinished"></translation>
+ <translation>Új fegyverkészlet</translation>
</message>
<message>
<source>Edit weapon set</source>
- <translation type="unfinished"></translation>
+ <translation>Fegyverkészlet szerkesztése</translation>
</message>
<message>
<source>Delete weapon set</source>
- <translation type="unfinished"></translation>
+ <translation>Fegyverkészlet törlése</translation>
</message>
<message>
<source>Advanced</source>
- <translation type="unfinished">Haladó</translation>
+ <translation>Haladó</translation>
</message>
<message>
<source>Reset to default colors</source>
- <translation type="unfinished"></translation>
+ <translation>Alapértelmezett színek visszaállítása</translation>
</message>
<message>
<source>Proxy host</source>
- <translation type="unfinished"></translation>
+ <translation>Proxy címe</translation>
</message>
<message>
<source>Proxy port</source>
- <translation type="unfinished"></translation>
+ <translation>Proxy portja</translation>
</message>
<message>
<source>Proxy login</source>
- <translation type="unfinished"></translation>
+ <translation>Proxy felhasználóneve</translation>
</message>
<message>
<source>Proxy password</source>
- <translation type="unfinished"></translation>
+ <translation>Proxy jelszava</translation>
</message>
<message>
<source>No proxy</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs proxy</translation>
</message>
<message>
<source>Socks5 proxy</source>
- <translation type="unfinished"></translation>
+ <translation>Socks5 proxy</translation>
</message>
<message>
<source>HTTP proxy</source>
- <translation type="unfinished"></translation>
+ <translation>HTTP proxy</translation>
</message>
<message>
<source>System proxy settings</source>
- <translation type="unfinished"></translation>
+ <translation>Rendszer proxybeállításai</translation>
</message>
<message>
<source>Select an action to change what key controls it</source>
- <translation type="unfinished"></translation>
+ <translation>Válassz ki egy műveletet, hogy megadhasd, milyen gomb végezze</translation>
</message>
<message>
<source>Reset to default</source>
- <translation type="unfinished"></translation>
+ <translation>Alapértelmezés visszaállítása</translation>
</message>
<message>
<source>Reset all binds</source>
- <translation type="unfinished"></translation>
+ <translation>Minden hozzárendelés visszaállítása</translation>
</message>
<message>
<source>Game</source>
- <translation type="unfinished"></translation>
+ <translation>Játék</translation>
</message>
<message>
<source>Graphics</source>
- <translation type="unfinished"></translation>
+ <translation>Grafika</translation>
</message>
<message>
<source>Audio</source>
- <translation type="unfinished"></translation>
+ <translation>Hang</translation>
</message>
<message>
<source>Controls</source>
- <translation type="unfinished"></translation>
+ <translation>Vezérlés</translation>
</message>
<message>
<source>Video Recording</source>
- <translation type="unfinished"></translation>
+ <translation>Videorögzítés</translation>
</message>
<message>
<source>Network</source>
- <translation type="unfinished"></translation>
+ <translation>Hálózat</translation>
</message>
<message>
<source>Teams</source>
- <translation type="unfinished">Csapatok</translation>
+ <translation>Csapatok</translation>
</message>
<message>
<source>Schemes</source>
- <translation type="unfinished"></translation>
+ <translation>Sémák</translation>
</message>
<message>
<source>Weapons</source>
- <translation type="unfinished">Fegyverek</translation>
+ <translation>Fegyverek</translation>
</message>
<message>
<source>Frontend</source>
- <translation type="unfinished"></translation>
+ <translation>Felület</translation>
</message>
<message>
<source>Custom colors</source>
- <translation type="unfinished"></translation>
+ <translation>Egyedi színek</translation>
</message>
<message>
<source>Game audio</source>
- <translation type="unfinished"></translation>
+ <translation>Játékbeli hangok</translation>
</message>
<message>
<source>Frontend audio</source>
- <translation type="unfinished"></translation>
+ <translation>Menübeli hangok</translation>
</message>
<message>
<source>Account</source>
- <translation type="unfinished"></translation>
+ <translation>Fiók</translation>
</message>
<message>
<source>Proxy settings</source>
- <translation type="unfinished"></translation>
+ <translation>Proxybeállítások</translation>
</message>
<message>
<source>Miscellaneous</source>
- <translation type="unfinished"></translation>
+ <translation>Egyebek</translation>
</message>
<message>
<source>Updates</source>
- <translation type="unfinished"></translation>
+ <translation>Frissítések</translation>
</message>
<message>
<source>Check for updates</source>
- <translation type="unfinished"></translation>
+ <translation>Frissítések keresése</translation>
</message>
<message>
<source>Video recording options</source>
- <translation type="unfinished"></translation>
+ <translation>Videorögzítés beállításai</translation>
</message>
<message>
<source>x</source>
<extracomment>Multiplication sign, to be used between two numbers. Note the “x” is only a dummy character, we recommend to use “×” if your language permits it</extracomment>
- <translation type="unfinished"></translation>
+ <translation>×</translation>
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
<extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
- <translation type="unfinished"></translation>
+ <translation>HIÁNYZÓ NYELVNÉV [%1]</translation>
</message>
<message>
<source>Check now</source>
- <translation type="unfinished"></translation>
+ <translation>Ellenőrzés most</translation>
</message>
<message>
<source>Can't delete last team</source>
- <translation type="unfinished"></translation>
+ <translation>Nem törölhető az utolsó csapat</translation>
</message>
<message>
<source>You can't delete the last team!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem törölheted a legutolsó csapatot!</translation>
</message>
</context>
<context>
@@ -1783,15 +1819,15 @@
</message>
<message>
<source>Play demo</source>
- <translation type="unfinished">Demo lejátszása</translation>
+ <translation>Bemutató lejátszása</translation>
</message>
<message>
<source>Play the selected demo</source>
- <translation type="unfinished"></translation>
+ <translation>A kiválasztott bemutató lejátszása</translation>
</message>
<message>
<source>Load the selected game</source>
- <translation type="unfinished"></translation>
+ <translation>A kiválasztott játék betöltése</translation>
</message>
</context>
<context>
@@ -1818,29 +1854,29 @@
</message>
<message numerus="yes">
<source>%1 players online</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 játékos online</numerusform>
</translation>
</message>
<message>
<source>Search for a room:</source>
- <translation type="unfinished"></translation>
+ <translation>Szoba keresése:</translation>
</message>
<message>
<source>Create room</source>
- <translation type="unfinished"></translation>
+ <translation>Szoba készítése</translation>
</message>
<message>
<source>Join room</source>
- <translation type="unfinished"></translation>
+ <translation>Belépés szobába</translation>
</message>
<message>
<source>Room state</source>
- <translation type="unfinished"></translation>
+ <translation>Szoba állapota</translation>
</message>
<message>
<source>Open server administration page</source>
- <translation type="unfinished"></translation>
+ <translation>Kiszolgáló beállítófelületének megnyitása</translation>
</message>
</context>
<context>
@@ -1855,7 +1891,7 @@
</message>
<message>
<source>Land can not be destroyed!</source>
- <translation type="vanished">A talajt nem lehet elpusztítani!</translation>
+ <translation>A talajt nem lehet elpusztítani!</translation>
</message>
<message>
<source>Lower gravity</source>
@@ -1875,11 +1911,11 @@
</message>
<message>
<source>Share your opponents pain, share their damage</source>
- <translation>Megosztod ellenfeled fájdalmát, ahogy a sérülésüket is</translation>
+ <translation>Osztozol ellenfeled fájdalmában, sérülésében</translation>
</message>
<message>
<source>Your hogs are unable to move, put your artillery skills to the test</source>
- <translation>A sünik nem tudnak mozogni, próbára téve a célzóképességed</translation>
+ <translation>A sünik nem tudnak mozogni, próbára téve a célzókészséged</translation>
</message>
<message>
<source>Random</source>
@@ -1923,39 +1959,39 @@
</message>
<message>
<source>All (living) hedgehogs are fully restored at the end of turn</source>
- <translation type="unfinished"></translation>
+ <translation>Minden (élő) sün teljesen meggyógyul a kör végén</translation>
</message>
<message>
<source>AI respawns on death.</source>
- <translation type="unfinished"></translation>
+ <translation>Az MI feltámad a halálból.</translation>
</message>
<message>
<source>Attacking does not end your turn.</source>
- <translation type="unfinished"></translation>
+ <translation>A támadással nem ér véget a köröd.</translation>
</message>
<message>
<source>Weapons are reset to starting values each turn.</source>
- <translation type="unfinished"></translation>
+ <translation>A fegyverek száma minden kör elején visszáll.</translation>
</message>
<message>
<source>Each hedgehog has its own ammo. It does not share with the team.</source>
- <translation type="unfinished"></translation>
+ <translation>Minden sünnek saját fegyvertára van. Nem osztja meg csapatával.</translation>
</message>
<message>
<source>You will not have to worry about wind anymore.</source>
- <translation type="unfinished"></translation>
+ <translation>Nem kell többé aggódnod a szél miatt.</translation>
</message>
<message>
<source>Wind will affect almost everything.</source>
- <translation type="unfinished"></translation>
+ <translation>A szél szinte mindent el fog fújni.</translation>
</message>
<message>
<source>Copy</source>
- <translation type="unfinished"></translation>
+ <translation>Másolás</translation>
</message>
<message>
<source>Teams in each clan take successive turns sharing their turn time.</source>
- <translation type="unfinished"></translation>
+ <translation>A klán csapatai felváltva következnek, megosztva köridejüket.</translation>
</message>
<message>
<source>Add an indestructible border around the terrain</source>
@@ -1963,123 +1999,123 @@
</message>
<message>
<source>Add an indestructible border along the bottom</source>
- <translation type="unfinished"></translation>
+ <translation>A pálya alá egy sérthetetlen keret kerül</translation>
</message>
<message>
<source>None (Default)</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs (alapértelmezés)</translation>
</message>
<message>
<source>Wrap (World wraps)</source>
- <translation type="unfinished"></translation>
+ <translation>Összeérnek (végtelenített)</translation>
</message>
<message>
<source>Bounce (Edges reflect)</source>
- <translation type="unfinished"></translation>
+ <translation>Pattanás (a szélek visszavernek)</translation>
</message>
<message>
<source>Sea (Edges connect to sea)</source>
- <translation type="unfinished"></translation>
+ <translation>Tenger (víz a széleken is)</translation>
</message>
<message>
<source>Each clan starts in its own part of the terrain.</source>
- <translation type="unfinished"></translation>
+ <translation>Minden klán a pálya neki kijelölt részén kezd.</translation>
</message>
<message>
<source>Overall damage and knockback in percent</source>
<extracomment>Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Teljes sebzés és visszaütés százalékban</translation>
</message>
<message>
<source>Turn time in seconds</source>
- <translation type="unfinished"></translation>
+ <translation>Köridő másodpercben</translation>
</message>
<message>
<source>Initial health of hedgehogs</source>
- <translation type="unfinished"></translation>
+ <translation>A sünök kezdő életpontszáma</translation>
</message>
<message>
<source>How many rounds have to be played before Sudden Death begins</source>
- <translation type="unfinished"></translation>
+ <translation>Hány kört kell játszani a hirtelen halál kezdete előtt</translation>
</message>
<message>
<source>How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death.</source>
- <translation type="unfinished"></translation>
+ <translation>Mennyit emelkedjen a víz körönként a hirtelen halál idején. A „Hirtelen halál életpontcsökkenés”-t és ezt 0-ra állítva a hirtelen halál kikapcsolható.</translation>
</message>
<message>
<source>How much health hedgehogs lose per turn while in Sudden Death, down to 1 health. Set to 0 along with Sudden Death Water Rise to disable Sudden Death.</source>
- <translation type="unfinished"></translation>
+ <translation>Hány pontot veszítenek a sünök körönként hirtelen halál alatt. A „Hirtelen halál vízemelkedés”-t és ezt 0-ra állítva a hirtelen halál kikapcsolható.</translation>
</message>
<message>
<source>Maximum rope length in percent</source>
- <translation type="unfinished"></translation>
+ <translation>A kötél maximális hossza százalékban</translation>
</message>
<message>
<source>Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates.</source>
- <translation type="unfinished"></translation>
+ <translation>Annak a valószínűsége, hogy a ledobott csomag egészségügyi. Minden más csomag fegyvert vagy eszközt tartalmaz.</translation>
</message>
<message>
<source>Likelihood of a crate dropping before a turn</source>
- <translation type="unfinished"></translation>
+ <translation>Csomag érkezésének valószínűsége a kör elején</translation>
</message>
<message>
<source>Health bonus for collecting a health crate</source>
- <translation type="unfinished"></translation>
+ <translation>Az egészségügyi csomag megszerzésével járó életpontok száma</translation>
</message>
<message>
<source>Detonation timer of mines. The random timer lies between 0 and 5 seconds. The timer of air mines will be a quarter of the mines timer.</source>
- <translation type="unfinished"></translation>
+ <translation>Az aknák késleltetési ideje. A véletlenszerű időzítés 0 és 5 másodperc között lesz. A légi aknák ideje negyede lesz az itt megadott értéknek.</translation>
</message>
<message>
<source>Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
- <translation type="unfinished"></translation>
+ <translation>Egy közepes méretű sziget-pályán elhelyezendő aknák átlagos száma. Más méretű pályák esetén ezt a számot arányosítjuk.</translation>
</message>
<message>
<source>Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs.</source>
- <translation type="unfinished"></translation>
+ <translation>Annak a valószínűsége, hogy egy akna befullad. A sünök által elhelyezett aknákat nem érinti.</translation>
</message>
<message>
<source>Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps.</source>
- <translation type="unfinished"></translation>
+ <translation>Egy közepes méretű sziget-pályán elhelyezendő hordók átlagos száma. Más méretű pályák esetén ezt a számot arányosítjuk.</translation>
</message>
<message>
<source>Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps.</source>
- <translation type="unfinished"></translation>
+ <translation>Egy közepes méretű sziget-pályán elhelyezendő légi aknák átlagos száma. Más méretű pályák esetén ezt a számot arányosítjuk.</translation>
</message>
<message>
<source>Affects the left and right boundaries of the map</source>
- <translation type="unfinished"></translation>
+ <translation>A pálya bal és jobb szélét érinti</translation>
</message>
<message>
<source>Time you get after an attack</source>
- <translation type="unfinished"></translation>
+ <translation>Ennyi időt kapsz még támadás után</translation>
</message>
<message>
<source>Additional parameter to configure game styles. The meaning depends on the used style, refer to the documentation. When in doubt, leave it empty.</source>
- <translation type="unfinished"></translation>
+ <translation>További paraméter a játékstílusok konfigurálásához. Jelentése a használt stílustól függ, lásd a dokumentációt. Kétség esetén hagyd üresen.</translation>
</message>
<message>
<source>Name of this scheme</source>
- <translation type="unfinished"></translation>
+ <translation>A séma neve</translation>
</message>
<message>
<source>Select a hedgehog at the beginning of a turn</source>
- <translation type="unfinished"></translation>
+ <translation>Sün választása a kör elején</translation>
</message>
<message>
<source>Land can not be destroyed by most weapons.</source>
- <translation type="unfinished"></translation>
+ <translation>A pályát a legtöbb fegyver nem rombolja.</translation>
</message>
<message>
<source>%1 (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 (%2)</translation>
</message>
</context>
<context>
<name>PageSelectWeapon</name>
<message>
<source>Default</source>
- <translation>Default</translation>
+ <translation>Alapértelmezett</translation>
</message>
<message>
<source>Delete</source>
@@ -2087,147 +2123,147 @@
</message>
<message>
<source>New</source>
- <translation type="unfinished">Új</translation>
+ <translation>Új</translation>
</message>
<message>
<source>Copy</source>
- <translation type="unfinished"></translation>
+ <translation>Másolás</translation>
</message>
</context>
<context>
<name>PageSinglePlayer</name>
<message>
<source>Play a quick game against the computer with random settings</source>
- <translation type="unfinished"></translation>
+ <translation>Gyors játék a számítógép ellen, véletlenszerű beállításokkal</translation>
</message>
<message>
<source>Play a hotseat game against your friends, or AI teams</source>
- <translation type="unfinished"></translation>
+ <translation>Helycserés játék a barátaiddal vagy MI csapatokkal</translation>
</message>
<message>
<source>Campaign Mode</source>
- <translation type="unfinished"></translation>
+ <translation>Hadjárat mód</translation>
</message>
<message>
<source>Watch recorded demos</source>
- <translation type="unfinished"></translation>
+ <translation>Felvett bemutatók megtekintése</translation>
</message>
<message>
<source>Load a previously saved game</source>
- <translation type="unfinished"></translation>
+ <translation>Korábban mentett játék betöltése</translation>
</message>
<message>
<source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
- <translation type="unfinished"></translation>
+ <translation>Egyjátékos küldetések: A kiképzés során megtanulhatod a játék használatát; a forgatókönyvekkel pedig gyakorolhatod készségeidet, vagy megpróbálhatsz teljesíteni célokat.</translation>
</message>
</context>
<context>
<name>PageTraining</name>
<message>
<source>No description available</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs elérhető leírás</translation>
</message>
<message>
<source>Select a mission!</source>
- <translation type="unfinished"></translation>
+ <translation>Válassz küldetést!</translation>
</message>
<message>
<source>Start fighting</source>
- <translation type="unfinished"></translation>
+ <translation>Harc indítása</translation>
</message>
<message>
<source>Pick the training to play</source>
- <translation type="unfinished"></translation>
+ <translation>Válaszd ki a kívánt kiképzést</translation>
</message>
<message>
<source>Pick the challenge to play</source>
- <translation type="unfinished"></translation>
+ <translation>Válaszd ki a kívánt kihívást</translation>
</message>
<message>
<source>Pick the scenario to play</source>
- <translation type="unfinished"></translation>
+ <translation>Válaszd ki a kívánt forgatókönyvet</translation>
</message>
<message>
<source>Trainings</source>
- <translation type="unfinished"></translation>
+ <translation>Kiképzések</translation>
</message>
<message>
<source>Challenges</source>
- <translation type="unfinished"></translation>
+ <translation>Kihívások</translation>
</message>
<message>
<source>Scenarios</source>
- <translation type="unfinished"></translation>
+ <translation>Forgatókönyvek</translation>
</message>
<message>
<source>Team</source>
- <translation type="unfinished"></translation>
+ <translation>Csapat</translation>
</message>
<message>
<source>Team highscore: %1</source>
<extracomment>Highest score of a team</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Csapat legjobb eredménye: %1</translation>
</message>
<message>
<source>Team lowscore: %1</source>
<extracomment>Lowest score of a team</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Csapat legrosszabb eredménye: %1</translation>
</message>
<message>
<source>Team's top accuracy: %1%</source>
<extracomment>Best accuracy of a team (in a challenge)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Csapat legnagyobb pontossága: %1%</translation>
</message>
<message>
<source>Team's best time: %L1 s</source>
- <translation type="unfinished"></translation>
+ <translation>Csapat legjobb ideje: %L1 mp</translation>
</message>
<message>
<source>Team's longest time: %L1 s</source>
- <translation type="unfinished"></translation>
+ <translation>Csapat leghosszabb ideje: %L1 mp</translation>
</message>
</context>
<context>
<name>PageVideos</name>
<message>
<source>Name</source>
- <translation type="unfinished">Név</translation>
+ <translation>Név</translation>
</message>
<message>
<source>Size</source>
- <translation type="unfinished"></translation>
+ <translation>Méret</translation>
</message>
<message numerus="yes">
<source>%1 bytes</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 bájt</numerusform>
</translation>
</message>
<message>
<source>(in progress...)</source>
- <translation type="unfinished"></translation>
+ <translation>(folyamatban…)</translation>
</message>
<message>
<source>encoding</source>
- <translation type="unfinished"></translation>
+ <translation>kódolás</translation>
</message>
<message>
<source>Date: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Dátum: %1</translation>
</message>
<message>
<source>Size: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Méret: %1</translation>
</message>
<message>
<source>%1%</source>
<extracomment>Video encoding progress. %1 = number</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1%</translation>
</message>
<message>
<source>%1 (%2%) - %3</source>
<extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1 (%2%) – %3</translation>
</message>
</context>
<context>
@@ -2250,7 +2286,7 @@
</message>
<message>
<source>Ban</source>
- <translation>Bannolás</translation>
+ <translation>Tiltás</translation>
</message>
<message>
<source>Follow</source>
@@ -2258,7 +2294,7 @@
</message>
<message>
<source>Ignore</source>
- <translation>Ignorálás</translation>
+ <translation>Mellőzés</translation>
</message>
<message>
<source>Add friend</source>
@@ -2266,7 +2302,7 @@
</message>
<message>
<source>Unignore</source>
- <translation>Ignorálás feloldása</translation>
+ <translation>Mellőzés feloldása</translation>
</message>
<message>
<source>Remove friend</source>
@@ -2278,27 +2314,27 @@
</message>
<message>
<source>Restrict Unregistered Players Join</source>
- <translation type="unfinished"></translation>
+ <translation>Nem regisztrált játékosok korlátozása</translation>
</message>
<message>
<source>Show games in lobby</source>
- <translation type="unfinished"></translation>
+ <translation>Várakozóban lévő játékok mutatása</translation>
</message>
<message>
<source>Show games in-progress</source>
- <translation type="unfinished"></translation>
+ <translation>Folyamatban lévő játékok mutatása</translation>
</message>
<message>
<source>Show password protected</source>
- <translation type="unfinished"></translation>
+ <translation>Jelszóvédettek mutatása</translation>
</message>
<message>
<source>Show join restricted</source>
- <translation type="unfinished"></translation>
+ <translation>Korlátozottan csatlakozhatók mutatása</translation>
</message>
<message>
<source>Delegate room control</source>
- <translation type="unfinished"></translation>
+ <translation>Szobavezérlési jog adása</translation>
</message>
</context>
<context>
@@ -2329,92 +2365,92 @@
</message>
<message>
<source>Save password</source>
- <translation type="unfinished"></translation>
+ <translation>Jelszó mentése</translation>
</message>
<message>
<source>Record audio</source>
- <translation type="unfinished"></translation>
+ <translation>Hang rögzítése</translation>
</message>
<message>
<source>Use game resolution</source>
- <translation type="unfinished"></translation>
+ <translation>Mint a játéké</translation>
</message>
<message>
<source>Visual effects</source>
- <translation type="unfinished"></translation>
+ <translation>Képi hatások</translation>
</message>
<message>
<source>Sound</source>
- <translation type="unfinished"></translation>
+ <translation>Hang</translation>
</message>
<message>
<source>In-game sound effects</source>
- <translation type="unfinished"></translation>
+ <translation>Játékbeli hanghatások</translation>
</message>
<message>
<source>Music</source>
- <translation type="unfinished"></translation>
+ <translation>Zene</translation>
</message>
<message>
<source>In-game music</source>
- <translation type="unfinished"></translation>
+ <translation>Játékbeli zene</translation>
</message>
<message>
<source>Frontend sound effects</source>
- <translation type="unfinished"></translation>
+ <translation>Menübeli hanghatások</translation>
</message>
<message>
<source>Frontend music</source>
- <translation type="unfinished"></translation>
+ <translation>Menübeli zene</translation>
</message>
<message>
<source>Team</source>
- <translation type="unfinished"></translation>
+ <translation>Csapat</translation>
</message>
<message>
<source>Enable team tags by default</source>
- <translation type="unfinished"></translation>
+ <translation>Csapatcímkék alapértelmezett bekapcsolása</translation>
</message>
<message>
<source>Hog</source>
- <translation type="unfinished"></translation>
+ <translation>Sün</translation>
</message>
<message>
<source>Enable hedgehog tags by default</source>
- <translation type="unfinished"></translation>
+ <translation>Süncímkék alapértelmezett bekapcsolása</translation>
</message>
<message>
<source>Health</source>
- <translation type="unfinished"></translation>
+ <translation>Életpontszám</translation>
</message>
<message>
<source>Enable health tags by default</source>
- <translation type="unfinished"></translation>
+ <translation>Életpontszám alapértelmezett kijelzése</translation>
</message>
<message>
<source>Translucent</source>
- <translation type="unfinished"></translation>
+ <translation>Átlátszó</translation>
</message>
<message>
<source>Enable translucent tags by default</source>
- <translation type="unfinished"></translation>
+ <translation>Átlátszó címkék alapértelmezett bekapcsolása</translation>
</message>
<message>
<source>Enable visual effects such as animated menu transitions and falling stars</source>
- <translation type="unfinished"></translation>
+ <translation>Képi hatások, úgymint mozgásos menüátmenetek és hullócsillagok bekapcsolása</translation>
</message>
<message>
<source>If enabled, Hedgewars adds the date and time in the form "YYYY-MM-DD_hh-mm" for automatically created demos.</source>
- <translation type="unfinished"></translation>
+ <translation>Ha be van kapcsolva, a Hedgewars kiegészíti az automatikusan készült bemutatók fájlnevét a dátummal és idővel „ÉÉÉÉ-HH-NN_óó-pp” formátumban.</translation>
</message>
<message>
<source>Dampen when losing focus</source>
<extracomment>Checkbox text. If checked, the in-game audio volume is reduced (=dampened) when the game window loses its focus</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Halkítás, ha háttérbe kerül az ablak</translation>
</message>
<message>
<source>Reduce the game audio volume if the game window has lost its focus</source>
- <translation type="unfinished"></translation>
+ <translation>A játék hanghatásainak halkítása, ha a játék ablaka elveszíti a fókuszt</translation>
</message>
</context>
<context>
@@ -2429,99 +2465,99 @@
</message>
<message>
<source>(System default)</source>
- <translation>(rendszer default)</translation>
+ <translation>(rendszer alapértelmezése)</translation>
</message>
<message>
<source>Community</source>
- <translation type="unfinished"></translation>
+ <translation>Közösség</translation>
</message>
<message>
<source>Disabled</source>
- <translation type="unfinished"></translation>
+ <translation>Kikapcsolva</translation>
</message>
<message>
<source>Red/Cyan</source>
- <translation type="unfinished"></translation>
+ <translation>Vörös/Cián</translation>
</message>
<message>
<source>Cyan/Red</source>
- <translation type="unfinished"></translation>
+ <translation>Cián/Vörös</translation>
</message>
<message>
<source>Red/Blue</source>
- <translation type="unfinished"></translation>
+ <translation>Vörös/Kék</translation>
</message>
<message>
<source>Blue/Red</source>
- <translation type="unfinished"></translation>
+ <translation>Kék/Vörös</translation>
</message>
<message>
<source>Red/Green</source>
- <translation type="unfinished"></translation>
+ <translation>Vörös/Zöld</translation>
</message>
<message>
<source>Green/Red</source>
- <translation type="unfinished"></translation>
+ <translation>Zöld/Vörös</translation>
</message>
<message>
<source>Side-by-side</source>
- <translation type="unfinished"></translation>
+ <translation>Egymás mellett</translation>
</message>
<message>
<source>Top-Bottom</source>
- <translation type="unfinished"></translation>
+ <translation>Fent-lent</translation>
</message>
<message>
<source>Red/Cyan grayscale</source>
- <translation type="unfinished"></translation>
+ <translation>Vörös/Cián szürkeskála</translation>
</message>
<message>
<source>Cyan/Red grayscale</source>
- <translation type="unfinished"></translation>
+ <translation>Cián/Vörös szürkeskála</translation>
</message>
<message>
<source>Red/Blue grayscale</source>
- <translation type="unfinished"></translation>
+ <translation>Vörös/Kék szürkeskála</translation>
</message>
<message>
<source>Blue/Red grayscale</source>
- <translation type="unfinished"></translation>
+ <translation>Kék/Vörös szürkeskála</translation>
</message>
<message>
<source>Red/Green grayscale</source>
- <translation type="unfinished"></translation>
+ <translation>Vörös/Zöld szürkeskála</translation>
</message>
<message>
<source>Green/Red grayscale</source>
- <translation type="unfinished"></translation>
+ <translation>Zöld/Vörös szürkeskála</translation>
</message>
<message>
<source>Computer (Level %1)</source>
- <translation type="unfinished"></translation>
+ <translation>Számítógép (%1. szint)</translation>
</message>
<message>
<source>Stereoscopy creates an illusion of depth when you wear 3D glasses.</source>
- <translation type="unfinished"></translation>
+ <translation>A sztereoszkópia a mélység illúzióját kelti, ha 3D szemüveget viselsz.</translation>
</message>
<message>
<source>24 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>24 FPS</translation>
</message>
<message>
<source>25 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>25 FPS</translation>
</message>
<message>
<source>30 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>30 FPS</translation>
</message>
<message>
<source>50 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>50 FPS</translation>
</message>
<message>
<source>60 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>60 FPS</translation>
</message>
</context>
<context>
@@ -2536,31 +2572,31 @@
</message>
<message>
<source>Net game</source>
- <translation>Netes játék</translation>
+ <translation>Hálózati játék</translation>
</message>
<message>
<source>Playing teams</source>
- <translation>Résztvevő csapatok</translation>
+ <translation>Részt vevő csapatok</translation>
</message>
<message>
<source>Game Modifiers</source>
- <translation>Játék módosítók</translation>
+ <translation>Játékmódosítók</translation>
</message>
<message>
<source>Basic Settings</source>
- <translation>Alap beállítások</translation>
+ <translation>Alapbeállítások</translation>
</message>
<message>
<source>Team Settings</source>
- <translation>Csapat beállítások</translation>
+ <translation>Csapatbeállítások</translation>
</message>
<message>
<source>Videos</source>
- <translation type="unfinished"></translation>
+ <translation>Videók</translation>
</message>
<message>
<source>Description</source>
- <translation type="unfinished"></translation>
+ <translation>Leírás</translation>
</message>
</context>
<context>
@@ -2571,7 +2607,7 @@
</message>
<message>
<source>Mines</source>
- <translation>Aknák</translation>
+ <translation>Aknák száma</translation>
</message>
<message>
<source>Version</source>
@@ -2583,7 +2619,7 @@
</message>
<message>
<source>Host:</source>
- <translation>Host:</translation>
+ <translation>Gép:</translation>
</message>
<message>
<source>Port:</source>
@@ -2599,11 +2635,11 @@
</message>
<message>
<source>Server name:</source>
- <translation>Szerver név:</translation>
+ <translation>Szerver neve:</translation>
</message>
<message>
<source>Server port:</source>
- <translation>Szerver port:</translation>
+ <translation>Szerver portja:</translation>
</message>
<message>
<source>Initial sound volume</source>
@@ -2611,7 +2647,7 @@
</message>
<message>
<source>Damage Modifier</source>
- <translation>Sebzés módosító</translation>
+ <translation>Sebzésmódosító</translation>
</message>
<message>
<source>Turn Time</source>
@@ -2635,7 +2671,7 @@
</message>
<message>
<source>% Dud Mines</source>
- <translation>% hamis aknák</translation>
+ <translation>% befulladó akna</translation>
</message>
<message>
<source>Name</source>
@@ -2667,174 +2703,176 @@
</message>
<message>
<source>Quality</source>
- <translation type="unfinished"></translation>
+ <translation>Minőség</translation>
</message>
<message>
<source>% Health Crates</source>
- <translation type="unfinished"></translation>
+ <translation>% egészségügyi csomag</translation>
</message>
<message>
<source>Health in Crates</source>
- <translation type="unfinished"></translation>
+ <translation>életpont a csomagokban</translation>
</message>
<message>
<source>Sudden Death Water Rise</source>
- <translation type="unfinished"></translation>
+ <translation>Hirtelen halál vízemelkedés</translation>
</message>
<message>
<source>Sudden Death Health Decrease</source>
- <translation type="unfinished"></translation>
+ <translation>Hirtelen halál életpontcsökkenés</translation>
</message>
<message>
<source>% Rope Length</source>
- <translation type="unfinished"></translation>
+ <translation>% kötélhosszúság</translation>
</message>
<message>
<source>Style</source>
- <translation type="unfinished"></translation>
+ <translation>Stílus</translation>
</message>
<message>
<source>Scheme</source>
- <translation type="unfinished"></translation>
+ <translation>Séma</translation>
</message>
<message>
<source>There are videos that are currently being processed.
Exiting now will abort them.
Do you really want to quit?</source>
- <translation type="unfinished"></translation>
+ <translation>Van még feldolgozás alatt álló videó.
+Ha most kilépsz, ezek leállnak.
+Tényleg ki akarsz lépni?</translation>
</message>
<message>
<source>Description</source>
- <translation type="unfinished"></translation>
+ <translation>Leírás</translation>
</message>
<message>
<source>Nickname</source>
- <translation type="unfinished">Becenév</translation>
+ <translation>Becenév</translation>
</message>
<message>
<source>Format</source>
- <translation type="unfinished"></translation>
+ <translation>Formátum</translation>
</message>
<message>
<source>Audio codec</source>
- <translation type="unfinished"></translation>
+ <translation>Hangkodek</translation>
</message>
<message>
<source>Video codec</source>
- <translation type="unfinished"></translation>
+ <translation>Videokodek</translation>
</message>
<message>
<source>Framerate</source>
- <translation type="unfinished"></translation>
+ <translation>Képkockasebesség</translation>
</message>
<message>
<source>This development build is 'work in progress' and may not be compatible with other versions of the game, while some features might be broken or incomplete!</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a fejlesztői változat „folyamatban lévő munka”, és talán nem kompatibilis a játék más verzióival, valamint egyes funkciók hibásak vagy hiányosak lehetnek!</translation>
</message>
<message>
<source>Fullscreen</source>
- <translation type="unfinished">Teljes képernyő</translation>
+ <translation>Teljes képernyő</translation>
</message>
<message>
<source>Fullscreen Resolution</source>
- <translation type="unfinished"></translation>
+ <translation>Teljes képernyős felbontás</translation>
</message>
<message>
<source>Windowed Resolution</source>
- <translation type="unfinished"></translation>
+ <translation>Ablakos felbontás</translation>
</message>
<message>
<source>Your Email</source>
- <translation type="unfinished"></translation>
+ <translation>E-mail címed</translation>
</message>
<message>
<source>Summary</source>
- <translation type="unfinished"></translation>
+ <translation>Összegzés</translation>
</message>
<message>
<source>Send system information</source>
- <translation type="unfinished"></translation>
+ <translation>Rendszerinformáció küldése</translation>
</message>
<message>
<source>Type the security code:</source>
- <translation type="unfinished"></translation>
+ <translation>Írd be a biztonsági kódot:</translation>
</message>
<message>
<source>This setting will be effective at next restart.</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a beállítás a következő indításkor lép életbe.</translation>
</message>
<message>
<source>Tip: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Tipp: %1</translation>
</message>
<message>
<source>Displayed tags above hogs and translucent tags</source>
- <translation type="unfinished"></translation>
+ <translation>A sünök felett megjelenő címkék és azok átlátszósága</translation>
</message>
<message>
<source>World Edge</source>
- <translation type="unfinished"></translation>
+ <translation>Pálya széle</translation>
</message>
<message>
<source>Script parameter</source>
- <translation type="unfinished"></translation>
+ <translation>Szkriptparaméter</translation>
</message>
<message>
<source>Air Mines</source>
- <translation type="unfinished"></translation>
+ <translation>Légi aknák száma</translation>
</message>
<message>
<source>Player</source>
- <translation type="unfinished"></translation>
+ <translation>Játékos</translation>
</message>
<message>
<source>Barrels</source>
- <translation type="unfinished"></translation>
+ <translation>Hordók</translation>
</message>
<message>
<source>% Retreat Time</source>
<extracomment>Label of game scheme setting for the time you get after an attack</extracomment>
- <translation type="unfinished"></translation>
+ <translation>% visszavonulási idő</translation>
</message>
<message>
<source>Stereoscopy</source>
- <translation type="unfinished"></translation>
+ <translation>Sztereoszkópia</translation>
</message>
<message>
<source>Bitrate (Kibit/s)</source>
<extracomment>“Kibit/s” is the symbol for 1024 bits per second</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Bitráta (Kibit/s)</translation>
</message>
<message>
<source>Loading<br>CAPTCHA ...</source>
- <translation type="unfinished"></translation>
+ <translation>CAPTCHA<br>betöltése…</translation>
</message>
<message>
<source>Zoom (%)</source>
- <translation type="unfinished"></translation>
+ <translation>Nagyítás (%)</translation>
</message>
</context>
<context>
<name>QLineEdit</name>
<message>
<source>unnamed</source>
- <translation>névtelen</translation>
+ <translation>név nélküli</translation>
</message>
<message>
<source>hedgehog %1</source>
- <translation type="unfinished"></translation>
+ <translation>sün %1</translation>
</message>
<message>
<source>anonymous</source>
- <translation type="unfinished"></translation>
+ <translation>névtelen</translation>
</message>
<message>
<source>unnamed (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>név nélküli (%1)</translation>
</message>
<message>
<source>Hedgehog %1</source>
- <translation type="unfinished"></translation>
+ <translation>Sün %1</translation>
</message>
</context>
<context>
@@ -2848,7 +2886,7 @@
<name>QMessageBox</name>
<message>
<source>Connection to server is lost</source>
- <translation type="vanished">A kapcsolat a szerverrel megszakadt</translation>
+ <translation>A kapcsolat a szerverrel megszakadt</translation>
</message>
<message>
<source>Error</source>
@@ -2856,39 +2894,39 @@
</message>
<message>
<source>File association failed.</source>
- <translation type="unfinished"></translation>
+ <translation>Fájltársítás sikertelen.</translation>
</message>
<message>
<source>Teams - Are you sure?</source>
- <translation type="unfinished"></translation>
+ <translation>Csapatok – Biztos vagy benne?</translation>
</message>
<message>
<source>Do you really want to delete the team '%1'?</source>
- <translation type="unfinished"></translation>
+ <translation>Tényleg törölni akarod a(z) „%1” csapatot?</translation>
</message>
<message>
<source>Cannot delete default scheme '%1'!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem lehet törölni az alapértelmezett „%1” sémát!</translation>
</message>
<message>
<source>Please select a record from the list</source>
- <translation type="unfinished"></translation>
+ <translation>Kérjük, válassz egy felvételt a listáról</translation>
</message>
<message>
<source>Unable to start server</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült kiszolgálót indíŧani</translation>
</message>
<message>
<source>Hedgewars - Error</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Hiba</translation>
</message>
<message>
<source>Hedgewars - Success</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Siker</translation>
</message>
<message>
<source>All file associations have been set</source>
- <translation type="unfinished"></translation>
+ <translation>Minden fájltársítás be lett állítva</translation>
</message>
<message>
<source>Cannot create directory %1</source>
@@ -2900,15 +2938,15 @@
</message>
<message>
<source>Netgame - Error</source>
- <translation type="unfinished"></translation>
+ <translation>Hálózati játék – Hiba</translation>
</message>
<message>
<source>Please select a server from the list</source>
- <translation type="unfinished"></translation>
+ <translation>Kérjük, válassz kiszolgálót a listáról</translation>
</message>
<message>
<source>Please enter room name</source>
- <translation type="unfinished">Add meg a szoba nevét</translation>
+ <translation>Add meg a szoba nevét</translation>
</message>
<message>
<source>Please select record from the list</source>
@@ -2916,184 +2954,189 @@
</message>
<message>
<source>Room Name - Error</source>
- <translation type="unfinished"></translation>
+ <translation>Szoba neve – Hiba</translation>
</message>
<message>
<source>Please select room from the list</source>
- <translation type="unfinished">Válassz egy szobát a listából</translation>
+ <translation>Válassz egy szobát a listából</translation>
</message>
<message>
<source>Room Name - Are you sure?</source>
- <translation type="unfinished"></translation>
+ <translation>Szobanév – Biztos vagy benne?</translation>
</message>
<message>
<source>The game you are trying to join has started.
Do you still want to join the room?</source>
- <translation type="unfinished"></translation>
+ <translation>A játék, amihez csatlakozni próbálsz, már elindult.
+Mégis csatlakoznál a szobához?</translation>
</message>
<message>
<source>Schemes - Warning</source>
- <translation type="unfinished"></translation>
+ <translation>Sémák – Figyelmeztetés</translation>
</message>
<message>
<source>Schemes - Are you sure?</source>
- <translation type="unfinished"></translation>
+ <translation>Sémák – Biztos vagy benne?</translation>
</message>
<message>
<source>Do you really want to delete the game scheme '%1'?</source>
- <translation type="unfinished"></translation>
+ <translation>Tényleg törölni szerenéd a(z) „%1” játéksémát?</translation>
</message>
<message>
<source>Videos - Are you sure?</source>
- <translation type="unfinished"></translation>
+ <translation>Videók – Biztos vagy benne?</translation>
</message>
<message>
<source>Do you really want to delete the video '%1'?</source>
- <translation type="unfinished"></translation>
+ <translation>Tényleg törölni akarod a(z) „%1” videót?</translation>
</message>
<message numerus="yes">
<source>Do you really want to remove %1 file(s)?</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>Tényleg törölni szeretnél %1 fájlt?</numerusform>
</translation>
</message>
<message>
<source>File error</source>
- <translation type="unfinished"></translation>
+ <translation>Fájlhiba</translation>
</message>
<message>
<source>Cannot open '%1' for writing</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült megnyitni írásra a következőt: %1</translation>
</message>
<message>
<source>Cannot open '%1' for reading</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült olvasásra megnyitni a következőt: %1</translation>
</message>
<message>
<source>Weapons - Warning</source>
- <translation type="unfinished"></translation>
+ <translation>Fegyverek – Figyelmeztetés</translation>
</message>
<message>
<source>Cannot delete default weapon set '%1'!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem lehet törölni a(z) „%1” alapértelmezett fegyverkészletet!</translation>
</message>
<message>
<source>Weapons - Are you sure?</source>
- <translation type="unfinished"></translation>
+ <translation>Fegyverek – Biztos vagy benne?</translation>
</message>
<message>
<source>Do you really want to delete the weapon set '%1'?</source>
- <translation type="unfinished"></translation>
+ <translation>Tényleg törölni akarod a(z) „%1” fegyverkészletet?</translation>
</message>
<message>
<source>Hedgewars - Nick not registered</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Becenév nincs regisztrálva</translation>
</message>
<message>
<source>System Information Preview</source>
- <translation type="unfinished"></translation>
+ <translation>Rendszerinformáció előnézete</translation>
</message>
<message>
<source>Failed to generate captcha</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült captchát generálni</translation>
</message>
<message>
<source>Failed to download captcha</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült letölteni a captchát</translation>
</message>
<message>
<source>Please fill out all fields. Email is optional.</source>
- <translation type="unfinished"></translation>
+ <translation>Kérjük, tölts ki minden mezőt. Az e-mail cím nem kötelező.</translation>
</message>
<message>
<source>Hedgewars - Warning</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Figyelmeztetés</translation>
</message>
<message>
<source>Hedgewars - Information</source>
- <translation type="unfinished"></translation>
+ <translation>Hedgewars – Információ</translation>
</message>
<message>
<source>Not all players are ready</source>
- <translation type="unfinished"></translation>
+ <translation>Nem minden játékos áll készen</translation>
</message>
<message>
<source>Are you sure you want to start this game?
Not all players are ready.</source>
- <translation type="unfinished"></translation>
+ <translation>Biztosan el akarod indítani a játékot?
+Nem minden játékos áll készen.</translation>
</message>
<message>
<source>Teams - Name already taken</source>
- <translation type="unfinished"></translation>
+ <translation>Csapatok – A név már foglalt</translation>
</message>
<message>
<source>The team name '%1' is already taken, so your team has been renamed to '%2'.</source>
- <translation type="unfinished"></translation>
+ <translation>A(z) „%1” csapatnév már foglalt, így csapatodat átneveztük erre: „%2”.</translation>
</message>
<message>
<source>Please select a file from the list.</source>
- <translation type="unfinished"></translation>
+ <translation>Kérjük, válassz egy fájlt a listáról.</translation>
</message>
<message>
<source>Cannot rename file to %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült átnevezni a fájlt erre: „%1”.</translation>
</message>
<message>
<source>Cannot delete file %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült törölni ezt a fájlt: %1.</translation>
</message>
<message>
<source>Welcome to Hedgewars</source>
- <translation type="unfinished"></translation>
+ <translation>Üdvözlünk a Hedgewarsban</translation>
</message>
<message>
<source>Welcome to Hedgewars!
You seem to be new around here. Would you like to play some training missions first to learn the basics of Hedgewars?</source>
- <translation type="unfinished"></translation>
+ <translation>Üdvözlünk a Hedgewarsban!
+
+Úgy tűnik, te új vagy errefelé. Szeretnél először néhány kiképzési küldetést lejátszani, hogy megismerhesd a Hedgewars alapjait?</translation>
</message>
<message>
<source>Cannot use the weapon scheme '%1'!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem alkalmazható a(z) „%1” fegyverséma!</translation>
</message>
<message>
<source>The connection to the server is lost.</source>
- <translation type="unfinished"></translation>
+ <translation>Megszakadt a kapcsolat a kiszolgálóval.</translation>
</message>
<message>
<source>Schemes - Name already taken</source>
- <translation type="unfinished"></translation>
+ <translation>Sémák – A név már foglalt</translation>
</message>
<message>
<source>A scheme with the name '%1' already exists. Your scheme has been renamed to '%2'.</source>
- <translation type="unfinished"></translation>
+ <translation>Már létezik „%1” nevű séma. Így az új sémát átneveztük erre: „%2”.</translation>
</message>
<message>
<source>A weapon scheme with the name '%1' already exists. Changes made to the weapon scheme have been discarded.</source>
- <translation type="unfinished"></translation>
+ <translation>Már létezik „%1” nevű fegyverséma. A módosításokat nem mentettük.</translation>
</message>
<message>
<source>Server redirection</source>
- <translation type="unfinished"></translation>
+ <translation>Kiszolgálóátirányítás</translation>
</message>
<message>
<source>This server supports secure connections on port %1.
Would you like to reconnect securely?</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a kiszolgáló biztonságos kapcsolódást is támogat a(z) %1. számú porton.
+Szeretnél újracsatlakozni biztonságosan?</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>No description available</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs elérhető leírás</translation>
</message>
</context>
<context>
<name>QPushButton</name>
<message>
<source>default</source>
- <translation>default</translation>
+ <translation>alapértelmezés</translation>
</message>
<message>
<source>OK</source>
@@ -3117,7 +3160,7 @@
</message>
<message>
<source>Specify</source>
- <translation type="vanished">Specifikálás</translation>
+ <translation>Beállítás</translation>
</message>
<message>
<source>Start</source>
@@ -3129,7 +3172,7 @@
</message>
<message>
<source>Play demo</source>
- <translation>Demo lejátszása</translation>
+ <translation>Bemutató lejátszása</translation>
</message>
<message>
<source>Rename</source>
@@ -3145,174 +3188,176 @@
</message>
<message>
<source>Associate file extensions</source>
- <translation type="unfinished"></translation>
+ <translation>Fájlkiterjesztések hozzárendelése</translation>
</message>
<message>
<source>More info</source>
- <translation type="unfinished"></translation>
+ <translation>További információ</translation>
</message>
<message>
<source>Set default options</source>
- <translation type="unfinished"></translation>
+ <translation>Alapértelmezett beállítások megadása</translation>
</message>
<message>
<source>Open videos directory</source>
- <translation type="unfinished"></translation>
+ <translation>Videók könyvtárának megnyitása</translation>
</message>
<message>
<source>Play</source>
- <translation type="unfinished"></translation>
+ <translation>Lejátszás</translation>
</message>
<message>
<source>Restore default coding parameters</source>
- <translation type="unfinished"></translation>
+ <translation>Alapértelmezett kódolási paraméterek visszaállítása</translation>
</message>
<message>
<source>Open the video directory in your system</source>
- <translation type="unfinished"></translation>
+ <translation>A videók könyvtárának megnyitása a rendszeren</translation>
</message>
<message>
<source>Play this video</source>
- <translation type="unfinished"></translation>
+ <translation>Video lejátszása</translation>
</message>
<message>
<source>Delete this video</source>
- <translation type="unfinished"></translation>
+ <translation>Video törlése</translation>
</message>
<message>
<source>Reset</source>
- <translation type="unfinished"></translation>
+ <translation>Visszaállítás</translation>
</message>
<message>
<source>Set the default server port for Hedgewars</source>
- <translation type="unfinished"></translation>
+ <translation>A Hedgewars kiszolgáló alapértelmezett portjának megadása</translation>
</message>
<message>
<source>Invite your friends to your server in just 1 click!</source>
- <translation type="unfinished"></translation>
+ <translation>Hívd meg a barátaidat a szerveredre egyetlen kattintással!</translation>
</message>
<message>
<source>Click to copy your unique server URL to your clipboard. Send this link to your friends and they will be able to join you.</source>
- <translation type="unfinished"></translation>
+ <translation>Kattints ide az egyedi kiszolgáló-URL-ed vágólapra másolásához. Küldd el ezt barátaidnak, és így csatlakozhatnak hozzád.</translation>
</message>
<message>
<source>Start private server</source>
- <translation type="unfinished"></translation>
+ <translation>Magánkiszolgáló indítása</translation>
</message>
<message>
<source>Specify address</source>
- <translation type="unfinished"></translation>
+ <translation>Cím megadása</translation>
</message>
</context>
<context>
<name>QSpinBox</name>
<message>
<source>Specify the bitrate of recorded videos as a multiple of 1024 bits per second</source>
- <translation type="unfinished"></translation>
+ <translation>Add meg a rögzített videók bitsebességét 1024 bit per másodperc többszöröseként</translation>
</message>
</context>
<context>
<name>RoomNamePrompt</name>
<message>
<source>Enter a name for your room.</source>
- <translation type="unfinished"></translation>
+ <translation>Add meg a szoba nevét.</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Mégse</translation>
+ <translation>Mégse</translation>
</message>
<message>
<source>Create room</source>
- <translation type="unfinished"></translation>
+ <translation>Szoba készítése</translation>
</message>
<message>
<source>set password</source>
- <translation type="unfinished"></translation>
+ <translation>jelszó beállítása</translation>
</message>
</context>
<context>
<name>RoomsListModel</name>
<message>
<source>In progress</source>
- <translation type="unfinished"></translation>
+ <translation>Folyamatban</translation>
</message>
<message>
<source>Room Name</source>
- <translation type="unfinished">Szoba neve</translation>
+ <translation>Szoba neve</translation>
</message>
<message>
<source>C</source>
<extracomment>Caption of the column for the number of connected clients in the list of rooms</extracomment>
- <translation type="unfinished">C</translation>
+ <translatorcomment>"Játékos"</translatorcomment>
+ <translation>J</translation>
</message>
<message>
<source>T</source>
<extracomment>Caption of the column for the number of teams in the list of rooms</extracomment>
- <translation type="unfinished">T</translation>
+ <translatorcomment>"Csapat"</translatorcomment>
+ <translation>Cs</translation>
</message>
<message>
<source>Owner</source>
- <translation type="unfinished">Tulajdonos</translation>
+ <translation>Tulajdonos</translation>
</message>
<message>
<source>Map</source>
- <translation type="unfinished">Pálya</translation>
+ <translation>Pálya</translation>
</message>
<message>
<source>Rules</source>
- <translation type="unfinished">Szabályok</translation>
+ <translation>Szabályok</translation>
</message>
<message>
<source>Weapons</source>
- <translation type="unfinished">Fegyverek</translation>
+ <translation>Fegyverek</translation>
</message>
<message>
<source>Random Map</source>
- <translation type="unfinished">Véletlen pálya</translation>
+ <translation>Véletlen pálya</translation>
</message>
<message>
<source>Random Maze</source>
- <translation type="unfinished">Véletlen labirintus</translation>
+ <translation>Véletlen útvesztő</translation>
</message>
<message>
<source>Hand-drawn</source>
- <translation type="unfinished"></translation>
+ <translation>Kézzel rajzolt</translation>
</message>
<message>
<source>Script</source>
- <translation type="unfinished"></translation>
+ <translation>Szkript</translation>
</message>
<message>
<source>Random Perlin</source>
- <translation type="unfinished"></translation>
+ <translation>Véletlen Perlin</translation>
</message>
<message>
<source>Forts</source>
- <translation type="unfinished"></translation>
+ <translation>Várak</translation>
</message>
</context>
<context>
<name>SeedPrompt</name>
<message>
<source>The map seed is the basis for all random values generated by the game.</source>
- <translation type="unfinished"></translation>
+ <translation>A pályamag az alapja a játékban generált minden véletlenszerű értéknek.</translation>
</message>
<message>
<source>Cancel</source>
- <translation type="unfinished">Mégse</translation>
+ <translation>Mégse</translation>
</message>
<message>
<source>Set seed</source>
- <translation type="unfinished"></translation>
+ <translation>Mag megadása</translation>
</message>
<message>
<source>Close</source>
- <translation type="unfinished"></translation>
+ <translation>Bezárás</translation>
</message>
<message>
<source>Seed</source>
<extracomment>Refers to the "random seed"; the source of randomness in the game</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Mag</translation>
</message>
</context>
<context>
@@ -3339,31 +3384,32 @@
</message>
<message>
<source>New</source>
- <translation type="unfinished">Új</translation>
+ <translation>Új</translation>
</message>
<message>
<source>New (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>Új (%1)</translation>
</message>
<message>
<source>Copy of %1</source>
- <translation type="unfinished"></translation>
+ <translation>%1 másolata</translation>
</message>
<message>
<source>Copy of %1 (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 másolata (%2)</translation>
</message>
</context>
<context>
<name>TCPBase</name>
<message>
<source>Unable to start server at %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült kiszolgálót indítani itt: %1.</translation>
</message>
<message>
<source>Unable to run engine at %1
Error code: %2</source>
- <translation type="unfinished"></translation>
+ <translation>Nem sikerült motort futtatni itt: %1
+Hibakód: %2</translation>
</message>
<message>
<source>The game engine died unexpectedly!
@@ -3372,33 +3418,38 @@
We are very sorry for the inconvenience :(
If this keeps happening, please click the '%2' button in the main menu!</source>
- <translation type="unfinished"></translation>
+ <translation>A játékmotor váratlanul összeomlott!
+(kilépési kód: %1)
+
+Nagyon sajnáljuk a kellemetlenséget :(
+
+Ha ez újra meg újra megtörténik, kérjük, kattints a „%2” gombra a főmenüben!</translation>
</message>
</context>
<context>
<name>TeamSelWidget</name>
<message>
<source>At least two teams are required to play!</source>
- <translation type="unfinished"></translation>
+ <translation>Legalább két csapat kell a játékhoz!</translation>
</message>
</context>
<context>
<name>ThemePrompt</name>
<message>
<source>Cancel</source>
- <translation type="unfinished">Mégse</translation>
+ <translation>Mégse</translation>
</message>
<message>
<source>Search for a theme:</source>
- <translation type="unfinished"></translation>
+ <translation>Téma keresése:</translation>
</message>
<message>
<source>Use selected theme</source>
- <translation type="unfinished"></translation>
+ <translation>Választott téma használata</translation>
</message>
<message>
<source>Choose a theme</source>
- <translation type="unfinished"></translation>
+ <translation>Válassz témát</translation>
</message>
</context>
<context>
@@ -3445,39 +3496,39 @@
</message>
<message>
<source>slot 1</source>
- <translation>slot 1</translation>
+ <translation>1. csoport</translation>
</message>
<message>
<source>slot 2</source>
- <translation>slot 2</translation>
+ <translation>2. csoport</translation>
</message>
<message>
<source>slot 3</source>
- <translation>slot 3</translation>
+ <translation>3. csoport</translation>
</message>
<message>
<source>slot 4</source>
- <translation>slot 4</translation>
+ <translation>4. csoport</translation>
</message>
<message>
<source>slot 5</source>
- <translation>slot 5</translation>
+ <translation>5. csoport</translation>
</message>
<message>
<source>slot 6</source>
- <translation>slot 6</translation>
+ <translation>6. csoport</translation>
</message>
<message>
<source>slot 7</source>
- <translation>slot 7</translation>
+ <translation>7. csoport</translation>
</message>
<message>
<source>slot 8</source>
- <translation>slot 8</translation>
+ <translation>8. csoport</translation>
</message>
<message>
<source>slot 9</source>
- <translation>slot 9</translation>
+ <translation>9. csoport</translation>
</message>
<message>
<source>timer 1 sec</source>
@@ -3501,15 +3552,15 @@
</message>
<message>
<source>chat</source>
- <translation>chat</translation>
+ <translation>csevegés</translation>
</message>
<message>
<source>chat history</source>
- <translation>chat history</translation>
+ <translation>csevegési előzmények</translation>
</message>
<message>
<source>pause</source>
- <translation type="vanished">szünet</translation>
+ <translation>szünet</translation>
</message>
<message>
<source>confirmation</source>
@@ -3529,7 +3580,7 @@
</message>
<message>
<source>capture</source>
- <translation type="vanished">elfogás</translation>
+ <translation>elfogás</translation>
</message>
<message>
<source>quit</source>
@@ -3545,7 +3596,7 @@
</message>
<message>
<source>reset zoom</source>
- <translation type="vanished">zoom visszaállítása</translation>
+ <translation>nagyítás visszaállítása</translation>
</message>
<message>
<source>long jump</source>
@@ -3557,166 +3608,166 @@
</message>
<message>
<source>slot 10</source>
- <translation type="unfinished">slot 10</translation>
+ <translation>10. csoport</translation>
</message>
<message>
<source>mute audio</source>
- <translation type="unfinished"></translation>
+ <translation>hang némítása</translation>
</message>
<message>
<source>record</source>
- <translation type="unfinished"></translation>
+ <translation>rögzítés</translation>
</message>
<message>
<source>autocam / find hedgehog</source>
- <translation type="unfinished"></translation>
+ <translation>automatikus kamera / sün keresése</translation>
</message>
<message>
<source>speed up replay</source>
- <translation type="unfinished"></translation>
+ <translation>visszajátszás gyorsítása</translation>
</message>
<message>
<source>toggle team bars</source>
<extracomment>This refers to the team info bars (name/flag/health) of all teams. These are shown at the bottom center of the screen</extracomment>
- <translation type="unfinished"></translation>
+ <translation>csapatsávok kapcsolása</translation>
</message>
<message>
<source>pause / auto skip</source>
- <translation type="unfinished"></translation>
+ <translation>szünet / automatikus passzolás</translation>
</message>
<message>
<source>toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>süncímkék kapcsolása</translation>
</message>
<message>
<source>change timer</source>
- <translation type="unfinished"></translation>
+ <translation>időzítő állítása</translation>
</message>
<message>
<source>show mission information</source>
- <translation type="unfinished"></translation>
+ <translation>küldetésinformációk mutatása</translation>
</message>
<message>
<source>clan chat</source>
- <translation type="unfinished"></translation>
+ <translation>kláncsevegés</translation>
</message>
<message>
<source>unselect weapon</source>
- <translation type="unfinished"></translation>
+ <translation>fegyver elvetése</translation>
</message>
<message>
<source>stand still on slippery land</source>
- <translation type="unfinished"></translation>
+ <translation>megállás csúszós talajon</translation>
</message>
<message>
<source>change direction without moving</source>
- <translation type="unfinished"></translation>
+ <translation>irányváltás megmozdulás nélkül</translation>
</message>
<message>
<source>switch backwards</source>
- <translation type="unfinished"></translation>
+ <translation>váltás hátra</translation>
</message>
<message>
<source>change bounciness</source>
- <translation type="unfinished"></translation>
+ <translation>pattogósság állítása</translation>
</message>
<message>
<source>reset zoom to start value</source>
- <translation type="unfinished"></translation>
+ <translation>nagyítás visszaállítása kezdőértékre</translation>
</message>
<message>
<source>set zoom to 100%</source>
- <translation type="unfinished"></translation>
+ <translation>nagyítás állítása 100%-ra</translation>
</message>
<message>
<source>save map as image</source>
- <translation type="unfinished"></translation>
+ <translation>pálya mentése képként</translation>
</message>
<message>
<source>show object information</source>
- <translation type="unfinished"></translation>
+ <translation>objektuminformáció mutatása</translation>
</message>
<message>
<source>change hedgehog tag types</source>
- <translation type="unfinished"></translation>
+ <translation>süncímkék típusának állítása</translation>
</message>
<message>
<source>toggle hedgehog tag translucency</source>
- <translation type="unfinished"></translation>
+ <translation>süncímkék átlátszóságának állítása</translation>
</message>
<message>
<source>toggle HUD</source>
- <translation type="unfinished"></translation>
+ <translation>kijelző kapcsolása</translation>
</message>
<message>
<source>backwards jump</source>
- <translation type="unfinished"></translation>
+ <translation>ugrás hátra</translation>
</message>
<message>
<source>screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>képernyőkép készítése</translation>
</message>
</context>
<context>
<name>binds (categories)</name>
<message>
<source>Movement</source>
- <translation type="unfinished"></translation>
+ <translation>Mozgás</translation>
</message>
<message>
<source>Weapons</source>
- <translation type="unfinished">Fegyverek</translation>
+ <translation>Fegyverek</translation>
</message>
<message>
<source>Camera</source>
- <translation type="unfinished"></translation>
+ <translation>Kamera</translation>
</message>
<message>
<source>Miscellaneous</source>
- <translation type="unfinished"></translation>
+ <translation>Egyebek</translation>
</message>
</context>
<context>
<name>binds (combination)</name>
<message>
<source>hold down precise</source>
- <translation type="unfinished"></translation>
+ <translation>pontos célzás lenyomása</translation>
</message>
<message>
<source>precise + left/right</source>
- <translation type="unfinished"></translation>
+ <translation>pontos célzás + balra/jobbra</translation>
</message>
<message>
<source>precise + switch</source>
- <translation type="unfinished"></translation>
+ <translation>pontos célzás + váltás</translation>
</message>
<message>
<source>precise + timer</source>
- <translation type="unfinished"></translation>
+ <translation>pontos célzás + időzítő</translation>
</message>
<message>
<source>precise + reset zoom</source>
- <translation type="unfinished"></translation>
+ <translation>pontos célzás + nagyítás visszaállítása</translation>
</message>
<message>
<source>precise + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>pontos célzás + süncímkék kapcsolása</translation>
</message>
<message>
<source>switch + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>váltás + süncímkék kapcsolása</translation>
</message>
<message>
<source>precise + switch + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>pontos célzás + váltás + süncímkék kapcsolása</translation>
</message>
<message>
<source>high jump (twice)</source>
- <translation type="unfinished"></translation>
+ <translation>magasugrás (kétszer)</translation>
</message>
<message>
<source>precise + screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>pontos célzás + képernyőkép készítése</translation>
</message>
</context>
<context>
@@ -3755,11 +3806,11 @@
</message>
<message>
<source>Modify the camera's zoom level:</source>
- <translation>Kamera ráközelítsének módosítása:</translation>
+ <translation>Kamera ráközelítésének módosítása:</translation>
</message>
<message>
<source>Talk to your team or all participants:</source>
- <translation type="vanished">Beszélgetés a csapattal vagy minden résztvevővel:</translation>
+ <translation>Beszélgetés a csapattal vagy minden résztvevővel:</translation>
</message>
<message>
<source>Pause, continue or leave your game:</source>
@@ -3779,62 +3830,62 @@
</message>
<message>
<source>Toggle labels above hedgehogs:</source>
- <translation type="vanished">Sünik feletti címkék beállítása:</translation>
+ <translation>Sünik feletti címkék beállítása:</translation>
</message>
<message>
<source>Record video:</source>
- <translation type="unfinished"></translation>
+ <translation>Video rögzítése:</translation>
</message>
<message>
<source>Hedgehog movement</source>
- <translation type="unfinished"></translation>
+ <translation>Sünmozgás</translation>
</message>
<message>
<source>Toggle automatic camera / refocus on active hedgehog:</source>
- <translation type="unfinished"></translation>
+ <translation>Automatikus kamera kapcsolása / aktív sünre közelítés:</translation>
</message>
<message>
<source>Demo replay:</source>
- <translation type="unfinished"></translation>
+ <translation>Bemutató lejátszása:</translation>
</message>
<message>
<source>Heads-up display:</source>
- <translation type="unfinished"></translation>
+ <translation>Kijelző:</translation>
</message>
<message>
<source>Talk to your clan or all participants:</source>
- <translation type="unfinished"></translation>
+ <translation>Beszéd a klánhoz vagy minden résztvevőhöz:</translation>
</message>
</context>
<context>
<name>binds (keys)</name>
<message>
<source>Axis</source>
- <translation type="vanished">Tengely</translation>
+ <translation>Tengely</translation>
</message>
<message>
<source>(Up)</source>
- <translation type="vanished">(Fel)</translation>
+ <translation>(Fel)</translation>
</message>
<message>
<source>(Down)</source>
- <translation type="vanished">(Le)</translation>
+ <translation>(Le)</translation>
</message>
<message>
<source>Hat</source>
- <translation type="vanished">Kalap</translation>
+ <translation>Fejfedő</translation>
</message>
<message>
<source>(Left)</source>
- <translation type="vanished">(Balra)</translation>
+ <translation>(Balra)</translation>
</message>
<message>
<source>(Right)</source>
- <translation type="vanished">(Jobbra)</translation>
+ <translation>(Jobbra)</translation>
</message>
<message>
<source>Button</source>
- <translation type="vanished">Gomb</translation>
+ <translation>Gomb</translation>
</message>
<message>
<source>Keyboard</source>
@@ -3882,7 +3933,7 @@
</message>
<message>
<source>Pause</source>
- <translation>Szünet</translation>
+ <translation>Pause</translation>
</message>
<message>
<source>Escape</source>
@@ -3894,71 +3945,71 @@
</message>
<message>
<source>Numpad 0</source>
- <translation type="vanished">Numpad 0</translation>
+ <translation>Numerikus 0</translation>
</message>
<message>
<source>Numpad 1</source>
- <translation type="vanished">Numpad 1</translation>
+ <translation>Numerikus 1</translation>
</message>
<message>
<source>Numpad 2</source>
- <translation type="vanished">Numpad 2</translation>
+ <translation>Numerikus 2</translation>
</message>
<message>
<source>Numpad 3</source>
- <translation type="vanished">Numpad 3</translation>
+ <translation>Numerikus 3</translation>
</message>
<message>
<source>Numpad 4</source>
- <translation type="vanished">Numpad 4</translation>
+ <translation>Numerikus 4</translation>
</message>
<message>
<source>Numpad 5</source>
- <translation type="vanished">Numpad 5</translation>
+ <translation>Numerikus 5</translation>
</message>
<message>
<source>Numpad 6</source>
- <translation type="vanished">Numpad 6</translation>
+ <translation>Numerikus 6</translation>
</message>
<message>
<source>Numpad 7</source>
- <translation type="vanished">Numpad 7</translation>
+ <translation>Numerikus 7</translation>
</message>
<message>
<source>Numpad 8</source>
- <translation type="vanished">Numpad 8</translation>
+ <translation>Numerikus 8</translation>
</message>
<message>
<source>Numpad 9</source>
- <translation type="vanished">Numpad 9</translation>
+ <translation>Numerikus 9</translation>
</message>
<message>
<source>Numpad .</source>
- <translation type="vanished">Numpad .</translation>
+ <translation>Numerikus .</translation>
</message>
<message>
<source>Numpad /</source>
- <translation type="vanished">Numpad /</translation>
+ <translation>Numerikus /</translation>
</message>
<message>
<source>Numpad *</source>
- <translation type="vanished">Numpad *</translation>
+ <translation>Numerikus *</translation>
</message>
<message>
<source>Numpad -</source>
- <translation type="vanished">Numpad -</translation>
+ <translation>Numerikus -</translation>
</message>
<message>
<source>Numpad +</source>
- <translation type="vanished">Numpad +</translation>
+ <translation>Numerikus +</translation>
</message>
<message>
<source>Enter</source>
- <translation type="vanished">Enter</translation>
+ <translation>Enter</translation>
</message>
<message>
<source>Equals</source>
- <translation type="vanished">Egyenlő</translation>
+ <translation>Egyenlő</translation>
</message>
<message>
<source>Up</source>
@@ -3990,55 +4041,55 @@
</message>
<message>
<source>Page up</source>
- <translation type="vanished">Page up</translation>
+ <translation>Page Up</translation>
</message>
<message>
<source>Page down</source>
- <translation type="vanished">Page Down</translation>
+ <translation>Page Down</translation>
</message>
<message>
<source>Num lock</source>
- <translation type="vanished">Num lock</translation>
+ <translation>Num Lock</translation>
</message>
<message>
<source>Caps lock</source>
- <translation type="vanished">Caps lock</translation>
+ <translation>Caps Lock</translation>
</message>
<message>
<source>Scroll lock</source>
- <translation type="vanished">Scroll lock</translation>
+ <translation>Scroll Lock</translation>
</message>
<message>
<source>Right shift</source>
- <translation type="vanished">Jobb oldali Shift</translation>
+ <translation>Jobb oldali Shift</translation>
</message>
<message>
<source>Left shift</source>
- <translation type="vanished">Bal oldali Shift</translation>
+ <translation>Bal oldali Shift</translation>
</message>
<message>
<source>Right ctrl</source>
- <translation type="vanished">Jobb oldali Ctrl</translation>
+ <translation>Jobb oldali Ctrl</translation>
</message>
<message>
<source>Left ctrl</source>
- <translation type="vanished">Bal oldali Ctrl</translation>
+ <translation>Bal oldali Ctrl</translation>
</message>
<message>
<source>Right alt</source>
- <translation type="vanished">Jobb oldali Alt</translation>
+ <translation>Jobb oldali Alt</translation>
</message>
<message>
<source>Left alt</source>
- <translation type="vanished">Bal oldali Alt</translation>
+ <translation>Bal oldali Alt</translation>
</message>
<message>
<source>Right meta</source>
- <translation type="vanished">Jobb oldali Meta</translation>
+ <translation>Jobb oldali Meta</translation>
</message>
<message>
<source>Left meta</source>
- <translation type="vanished">Bal oldali Meta</translation>
+ <translation>Bal oldali Meta</translation>
</message>
<message>
<source>A button</source>
@@ -4122,1076 +4173,1076 @@
</message>
<message>
<source>DPad</source>
- <translation type="vanished">DPad</translation>
+ <translation>DPad</translation>
</message>
<message>
<source>D-pad</source>
- <translation type="unfinished"></translation>
+ <translation>D-pad</translation>
</message>
<message>
<source>Axis %1 %2</source>
<extracomment>Game controller axis direction. %1 = axis number, %2 = direction</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1. tengely %2</translation>
</message>
<message>
<source>Button %1</source>
<extracomment>Game controller button. %1 = button number</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1. gomb</translation>
</message>
<message>
<source>D-pad %1 %2</source>
<extracomment>Game controller D-pad button. %1 = D-pad number, %2 = direction</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1. D-pad %2</translation>
</message>
<message>
<source>(Don't use)</source>
<extracomment>Special entry in key selection when an action has no control assigned</extracomment>
- <translation type="unfinished"></translation>
+ <translation>(nem használt)</translation>
</message>
<message>
<source>Mouse: X1 button </source>
- <translation type="unfinished"></translation>
+ <translation>Egér: X1 gomb</translation>
</message>
<message>
<source>Mouse: X2 button</source>
- <translation type="unfinished"></translation>
+ <translation>Egér: X2 gomb</translation>
</message>
<message>
<source>Keypad 0</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 0</translation>
</message>
<message>
<source>Keypad 1</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 1</translation>
</message>
<message>
<source>Keypad 2</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 2</translation>
</message>
<message>
<source>Keypad 3</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 3</translation>
</message>
<message>
<source>Keypad 4</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 4</translation>
</message>
<message>
<source>Keypad 5</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 5</translation>
</message>
<message>
<source>Keypad 6</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 6</translation>
</message>
<message>
<source>Keypad 7</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 7</translation>
</message>
<message>
<source>Keypad 8</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 8</translation>
</message>
<message>
<source>Keypad 9</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus 9</translation>
</message>
<message>
<source>Keypad .</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus .</translation>
</message>
<message>
<source>Keypad /</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus /</translation>
</message>
<message>
<source>Keypad *</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus *</translation>
</message>
<message>
<source>Keypad -</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus –</translation>
</message>
<message>
<source>Keypad +</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus +</translation>
</message>
<message>
<source>Keypad Enter</source>
- <translation type="unfinished"></translation>
+ <translation>Numerikus Enter</translation>
</message>
<message>
<source>PageUp</source>
- <translation type="unfinished"></translation>
+ <translation>Page Up</translation>
</message>
<message>
<source>PageDown</source>
- <translation type="unfinished"></translation>
+ <translation>Page Down</translation>
</message>
<message>
<source>Numlock</source>
- <translation type="unfinished"></translation>
+ <translation>Num Lock</translation>
</message>
<message>
<source>CapsLock</source>
- <translation type="unfinished"></translation>
+ <translation>Caps Lock</translation>
</message>
<message>
<source>ScrollLock</source>
- <translation type="unfinished"></translation>
+ <translation>Scroll Lock</translation>
</message>
<message>
<source>Right Shift</source>
- <translation type="unfinished"></translation>
+ <translation>Jobb Shift</translation>
</message>
<message>
<source>Left Shift</source>
- <translation type="unfinished"></translation>
+ <translation>Bal Shift</translation>
</message>
<message>
<source>Right Ctrl</source>
- <translation type="unfinished"></translation>
+ <translation>Jobb Ctrl</translation>
</message>
<message>
<source>Left Ctrl</source>
- <translation type="unfinished"></translation>
+ <translation>Bal Ctrl</translation>
</message>
<message>
<source>Right Alt</source>
- <translation type="unfinished"></translation>
+ <translation>Jobb Alt</translation>
</message>
<message>
<source>Left Alt</source>
- <translation type="unfinished"></translation>
+ <translation>Bal Alt</translation>
</message>
<message>
<source>Right GUI</source>
<extracomment>Windows key / Command key / Meta key /Super key (right)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Jobb Windows</translation>
</message>
<message>
<source>Left GUI</source>
<extracomment>Windows key / Command key / Meta key /Super key (left)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Bal Windows</translation>
</message>
<message>
<source>(QWERTY)</source>
<extracomment>Name of QWERTY US keyboard layout</extracomment>
- <translation type="unfinished"></translation>
+ <translation>(QWERTY)</translation>
</message>
<message>
<source>Menu</source>
- <translation type="unfinished"></translation>
+ <translation>Menü</translation>
</message>
</context>
<context>
<name>credits</name>
<message>
<source>Programming</source>
- <translation type="unfinished"></translation>
+ <translation>Programozás</translation>
</message>
<message>
<source>Game engine</source>
- <translation type="unfinished"></translation>
+ <translation>Játékmotor</translation>
</message>
<message>
<source>Creator</source>
- <translation type="unfinished"></translation>
+ <translation>Készítő</translation>
</message>
<message>
<source>Many engine improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Számos motorfejlesztés</translation>
</message>
<message>
<source>Gamepad and Lua integration</source>
- <translation type="unfinished"></translation>
+ <translation>Gamepad és Lua integráció</translation>
</message>
<message>
<source>Campaign support</source>
- <translation type="unfinished"></translation>
+ <translation>Hadjárattámogatás</translation>
</message>
<message>
<source>Theme customization improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Téma-testreszabási fejlesztések</translation>
</message>
<message>
<source>Some Pas2C and GLES2 work</source>
- <translation type="unfinished"></translation>
+ <translation>Némi Pas2C és GLES2 munka</translation>
</message>
<message>
<source>Video recording</source>
- <translation type="unfinished"></translation>
+ <translation>Videorögzítés</translation>
</message>
<message>
<source>Other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Más fejlesztések</translation>
</message>
<message>
<source>Map generation</source>
- <translation type="unfinished"></translation>
+ <translation>Pályagenerálás</translation>
</message>
<message>
<source>Core map generators</source>
- <translation type="unfinished"></translation>
+ <translation>Alap pályagenerátorok</translation>
</message>
<message>
<source>Perlin maps and other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Perlin-pályák és más fejlesztések</translation>
</message>
<message>
<source>Maze maps</source>
- <translation type="unfinished"></translation>
+ <translation>Útvesztőpályák</translation>
</message>
<message>
<source>Weapons</source>
- <translation type="unfinished">Fegyverek</translation>
+ <translation>Fegyverek</translation>
</message>
<message>
<source>Most core weapons</source>
- <translation type="unfinished"></translation>
+ <translation>A legtöbb alapfegyver</translation>
</message>
<message>
<source>Air mine, rubber, others</source>
- <translation type="unfinished"></translation>
+ <translation>Légi akna, gumiszalag, egyebek</translation>
</message>
<message>
<source>Drill rocket, ballgun, RC plane</source>
- <translation type="unfinished"></translation>
+ <translation>Ásórakéta, labdavető, RC repülő</translation>
</message>
<message>
<source>Freezer</source>
- <translation type="unfinished"></translation>
+ <translation>Fagyasztó</translation>
</message>
<message>
<source>Mine number and time game settings</source>
- <translation type="unfinished"></translation>
+ <translation>Aknák száma és idő játékbeállítások</translation>
</message>
<message>
<source>Frontend / main menu</source>
- <translation type="unfinished"></translation>
+ <translation>Kezelőfelület / főmenü</translation>
</message>
<message>
<source>Many frontend improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Számos kezelőfelületi fejlesztés</translation>
</message>
<message>
<source>Keybinds, feedback, maps and hats interfaces</source>
- <translation type="unfinished"></translation>
+ <translation>Billentyű-hozzárendelések, visszajelzés, pálya és fejfedő felületek</translation>
</message>
<message>
<source>Login dialogs, other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Bejelentkezési párbeszédablakok, más fejlesztések</translation>
</message>
<message>
<source>Missions and styles</source>
- <translation type="unfinished"></translation>
+ <translation>Küldetések és stílusok</translation>
</message>
<message>
<source>A Classic Fairytale</source>
- <translation type="unfinished"></translation>
+ <translation>Egy klasszikus tündérmese</translation>
</message>
<message>
<source>A Space Adventure</source>
- <translation type="unfinished"></translation>
+ <translation>Kalandok az űrben</translation>
</message>
<message>
<source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
- <translation type="unfinished"></translation>
+ <translation>A Szerezd meg a zászlót, Építkezési mód, Irányítás, Sünszerkesztő, Hegylakó, Versenyző, TechVersenyző, A szakértők és a WxW szerzője</translation>
</message>
<message>
<source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
- <translation type="unfinished"></translation>
+ <translation>Kiképzés, gyorsasági és céllövő kihívások, Aknavető harcmező, Polipterror, Nagy fegyvertár, hibajavítások és karbantartás</translation>
</message>
<message>
<source>Some styles and missions</source>
- <translation type="unfinished"></translation>
+ <translation>Egyes stílusok és küldetések</translation>
</message>
<message>
<source>Battalion</source>
- <translation type="unfinished"></translation>
+ <translation>Zászlóalj</translation>
</message>
<message>
<source>Continental supplies</source>
- <translation type="unfinished"></translation>
+ <translation>Tengerentúli ellátmány</translation>
</message>
<message>
<source>Teamwork 2</source>
- <translation type="unfinished"></translation>
+ <translation>Csapatmunka 2</translation>
</message>
<message>
<source>Climb Home</source>
- <translation type="unfinished"></translation>
+ <translation>Mássz haza</translation>
</message>
<message>
<source>Portal Mind Challenge</source>
- <translation type="unfinished"></translation>
+ <translation>Átjáró kihívás</translation>
</message>
<message>
<source>Game server</source>
- <translation type="unfinished"></translation>
+ <translation>Játékszerver</translation>
</message>
<message>
<source>Ports</source>
- <translation type="unfinished"></translation>
+ <translation>Portolás több rendszerre</translation>
</message>
<message>
<source>macOS/iPhone port, OpenGL-ES conversion</source>
- <translation type="unfinished"></translation>
+ <translation>masOS/iPhone portolás, OpenGL ES konverzió</translation>
</message>
<message>
<source>Android port</source>
- <translation type="unfinished"></translation>
+ <translation>Android portolás</translation>
</message>
<message>
<source>Android netplay, portability abstraction</source>
- <translation type="unfinished"></translation>
+ <translation>Android hálózati játék, hordozhatósági absztrakció</translation>
</message>
<message>
<source>WebGL port</source>
- <translation type="unfinished"></translation>
+ <translation>WebGL portolás</translation>
</message>
<message>
<source>iPhone/iPad ports</source>
- <translation type="unfinished"></translation>
+ <translation>iPhone/iPad portolás</translation>
</message>
<message>
<source>Graphics</source>
- <translation type="unfinished"></translation>
+ <translation>Grafika</translation>
</message>
<message>
<source>General</source>
- <translation type="unfinished">Általános</translation>
+ <translation>Általános</translation>
</message>
<message>
<source>Themes</source>
- <translation type="unfinished"></translation>
+ <translation>Témák</translation>
</message>
<message>
<source>Nature, Snow, City, Castle, Halloween, Island</source>
- <translation type="unfinished"></translation>
+ <translation>Természet, Hó, Város, Kastély, Halloween, Sziget</translation>
</message>
<message>
<source>Bamboo, EarthRise, BambooPlinko</source>
- <translation type="unfinished"></translation>
+ <translation>Bambusz, Földkelte, Bambusz Plinko</translation>
</message>
<message>
<source>Golf, Hoggywood, Stage</source>
- <translation type="unfinished"></translation>
+ <translation>Golf, Süniwood, Színpad</translation>
</message>
<message>
<source>Hoggywood</source>
- <translation type="unfinished"></translation>
+ <translation>Süniwood</translation>
</message>
<message>
<source>Cave, Olympics</source>
- <translation type="unfinished"></translation>
+ <translation>Barlang, Olimpia</translation>
</message>
<message>
<source>Fruit, Cake</source>
- <translation type="unfinished"></translation>
+ <translation>Gyümölcs, Torta</translation>
</message>
<message>
<source>Art</source>
- <translation type="unfinished"></translation>
+ <translation>Művészet</translation>
</message>
<message>
<source>Beach</source>
- <translation type="unfinished"></translation>
+ <translation>Tengerpart</translation>
</message>
<message>
<source>Brick</source>
- <translation type="unfinished"></translation>
+ <translation>Tégla</translation>
</message>
<message>
<source>Hell</source>
- <translation type="unfinished"></translation>
+ <translation>Pokol</translation>
</message>
<message>
<source>Jungle</source>
- <translation type="unfinished"></translation>
+ <translation>Dzsungel</translation>
</message>
<message>
<source>Sheep</source>
- <translation type="unfinished"></translation>
+ <translation>Juh</translation>
</message>
<message>
<source>Maps</source>
- <translation type="unfinished"></translation>
+ <translation>Pályák</translation>
</message>
<message>
<source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
- <translation type="unfinished"></translation>
+ <translation>Kosárlabda, Kosárlabdapálya, Fürdőszoba, Buborékok, Függőágy, Sünszerelem, Sünharc, Tűzcsap, Gomba, Repülő, Kötél, Fa </translation>
</message>
<message>
<source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
- <translation type="unfinished"></translation>
+ <translation>SB_Csontok, SB_Kristály, SB_Füves, SB_Liget, SB_Kísérteties, SB_Tölgy, SB_Gombák, SB_Polip</translation>
</message>
<message>
<source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
- <translation type="unfinished"></translation>
+ <translation>Bambusz, Kockák, Torta, Fogaskerék, Földkelte, Sztráda</translation>
</message>
<message>
<source>Castle, PirateFlag</source>
- <translation type="unfinished"></translation>
+ <translation>Kastély, Kalózzászló</translation>
</message>
<message>
<source>ShoppaKing, TrophyRace</source>
- <translation type="unfinished"></translation>
+ <translation>ShoppaKirály, Kupaverseny</translation>
</message>
<message>
<source>Battlefield</source>
- <translation type="unfinished"></translation>
+ <translation>Harcmező</translation>
</message>
<message>
<source>CTF_Blizzard</source>
- <translation type="unfinished"></translation>
+ <translation>CTF_Hóvihar</translation>
</message>
<message>
<source>Cheese</source>
- <translation type="unfinished"></translation>
+ <translation>Sajt</translation>
</message>
<message>
<source>ClimbHome</source>
- <translation type="unfinished"></translation>
+ <translation>Mássz haza</translation>
</message>
<message>
<source>Lonely_Island</source>
- <translation type="unfinished"></translation>
+ <translation>Magányos sziget</translation>
</message>
<message>
<source>Octorama</source>
- <translation type="unfinished"></translation>
+ <translation>Octorama</translation>
</message>
<message>
<source>portal</source>
- <translation type="unfinished"></translation>
+ <translation>átjáró</translation>
</message>
<message>
<source>Ruler</source>
- <translation type="unfinished"></translation>
+ <translation>Vonalzó</translation>
</message>
<message>
<source>Sticks</source>
- <translation type="unfinished"></translation>
+ <translation>Matricák</translation>
</message>
<message>
<source>Forts</source>
- <translation type="unfinished"></translation>
+ <translation>Várak</translation>
</message>
<message>
<source>EvilChicken</source>
- <translation type="unfinished"></translation>
+ <translation>Vércsirke</translation>
</message>
<message>
<source>Olympic</source>
- <translation type="unfinished"></translation>
+ <translation>Olimpia</translation>
</message>
<message>
<source>Tank</source>
- <translation type="unfinished"></translation>
+ <translation>Tank</translation>
</message>
<message>
<source>Snail</source>
- <translation type="unfinished"></translation>
+ <translation>Csiga</translation>
</message>
<message>
<source>SteelTower</source>
- <translation type="unfinished"></translation>
+ <translation>Acéltorony</translation>
</message>
<message>
<source>Hats, graves, other</source>
- <translation type="unfinished"></translation>
+ <translation>Fejfedők, sírok, egyebek</translation>
</message>
<message>
<source>See CREDITS text file</source>
- <translation type="unfinished"></translation>
+ <translation>Lásd a CREDITS szövegfájlt</translation>
</message>
<message>
<source>Sounds</source>
- <translation type="unfinished"></translation>
+ <translation>Hangok</translation>
</message>
<message>
<source>Hedgehogs voice</source>
- <translation type="unfinished"></translation>
+ <translation>Sünbeszéd</translation>
</message>
<message>
<source>Default_pl, Russian_pl voices</source>
- <translation type="unfinished"></translation>
+ <translation>Alap_pl, Orosz_pl beszédek</translation>
</message>
<message>
<source>Various authors from www.freesound.org (see CREDITS text file)</source>
- <translation type="unfinished"></translation>
+ <translation>A www.freesound.org különféle szerzői (lásd a CREDITS szövegfájlt)</translation>
</message>
<message>
<source>Music</source>
- <translation type="unfinished"></translation>
+ <translation>Zene</translation>
</message>
<message>
<source>City, Rock, others</source>
- <translation type="unfinished"></translation>
+ <translation>Város, Rock, egyebek</translation>
</message>
<message>
<source>Compost</source>
- <translation type="unfinished"></translation>
+ <translation>Komposzt</translation>
</message>
<message>
<source>EarthRise, oriental, Pirate, snow</source>
- <translation type="unfinished"></translation>
+ <translation>Földkelte, Orientalista, Kalóz, Hó</translation>
</message>
<message>
<source>Fruit, Jungle</source>
- <translation type="unfinished"></translation>
+ <translation>Gyümölcs, Dzsungel</translation>
</message>
<message>
<source>Nature</source>
- <translation type="unfinished"></translation>
+ <translation>Természet</translation>
</message>
<message>
<source>olympics_sd</source>
- <translation type="unfinished"></translation>
+ <translation>Olimpia_HH</translation>
</message>
<message>
<source>sdmusic (Hitman [sheepluva edit])</source>
- <translation type="unfinished"></translation>
+ <translation>Hirtelen halál zene (Hitman [sheepluva edit])</translation>
</message>
<message>
<source>Translations</source>
- <translation type="unfinished"></translation>
+ <translation>Fordítások</translation>
</message>
<message>
<source>Brazilian Portuguese</source>
- <translation type="unfinished"></translation>
+ <translation>Brazíliai portugál</translation>
</message>
<message>
<source>Bulgarian</source>
- <translation type="unfinished"></translation>
+ <translation>Bolgár</translation>
</message>
<message>
<source>Czech</source>
- <translation type="unfinished"></translation>
+ <translation>Cseh</translation>
</message>
<message>
<source>Chinese</source>
- <translation type="unfinished"></translation>
+ <translation>Kínai</translation>
</message>
<message>
<source>Finnish</source>
- <translation type="unfinished"></translation>
+ <translation>Finn</translation>
</message>
<message>
<source>French</source>
- <translation type="unfinished"></translation>
+ <translation>Francia</translation>
</message>
<message>
<source>German</source>
- <translation type="unfinished"></translation>
+ <translation>Német</translation>
</message>
<message>
<source>Greek</source>
- <translation type="unfinished"></translation>
+ <translation>Görög</translation>
</message>
<message>
<source>Italian</source>
- <translation type="unfinished"></translation>
+ <translation>Olasz</translation>
</message>
<message>
<source>Japanese</source>
- <translation type="unfinished"></translation>
+ <translation>Japán</translation>
</message>
<message>
<source>Korean</source>
- <translation type="unfinished"></translation>
+ <translation>Koreai</translation>
</message>
<message>
<source>Lithuanian</source>
- <translation type="unfinished"></translation>
+ <translation>Litván</translation>
</message>
<message>
<source>Polish</source>
- <translation type="unfinished"></translation>
+ <translation>Lengyel</translation>
</message>
<message>
<source>Portuguese</source>
- <translation type="unfinished"></translation>
+ <translation>Portugál</translation>
</message>
<message>
<source>Russian</source>
- <translation type="unfinished"></translation>
+ <translation>Orosz</translation>
</message>
<message>
<source>Scottish Gaelic</source>
- <translation type="unfinished"></translation>
+ <translation>Skót gael</translation>
</message>
<message>
<source>Slovak</source>
- <translation type="unfinished"></translation>
+ <translation>Szlovák</translation>
</message>
<message>
<source>Spanish</source>
- <translation type="unfinished"></translation>
+ <translation>Spanyol</translation>
</message>
<message>
<source>Swedish</source>
- <translation type="unfinished"></translation>
+ <translation>Svéd</translation>
</message>
<message>
<source>Ukrainian</source>
- <translation type="unfinished"></translation>
+ <translation>Ukrán</translation>
</message>
<message>
<source>Special thanks</source>
- <translation type="unfinished"></translation>
+ <translation>Külön köszönet</translation>
</message>
<message>
<source>Project founder</source>
- <translation type="unfinished"></translation>
+ <translation>Projektalapító</translation>
</message>
</context>
<context>
<name>server</name>
<message>
<source>Nickname is already in use</source>
- <translation type="unfinished"></translation>
+ <translation>A becenevet már használják</translation>
</message>
<message>
<source>No checker rights</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs ellenőrzési jogkör</translation>
</message>
<message>
<source>Authentication failed</source>
- <translation type="unfinished"></translation>
+ <translation>Hitelesítés sikertelen</translation>
</message>
<message>
<source>60 seconds cooldown after kick</source>
- <translation type="unfinished"></translation>
+ <translation>60 másodperc pihenő a kirúgás után</translation>
</message>
<message>
<source>kicked</source>
- <translation type="unfinished"></translation>
+ <translation>kirúgva</translation>
</message>
<message>
<source>Ping timeout</source>
- <translation type="unfinished"></translation>
+ <translation>Ping időtúllépés</translation>
</message>
<message>
<source>New voting started</source>
- <translation type="unfinished"></translation>
+ <translation>Új szavazás indult</translation>
</message>
<message>
<source>kick</source>
- <translation type="unfinished"></translation>
+ <translation>kirúgás</translation>
</message>
<message>
<source>map</source>
- <translation type="unfinished"></translation>
+ <translation>pálya</translation>
</message>
<message>
<source>pause</source>
- <translation type="unfinished">szünet</translation>
+ <translation>szünet</translation>
</message>
<message>
<source>Reconnected too fast</source>
- <translation type="unfinished"></translation>
+ <translation>Túl gyors újracsatlakozás</translation>
</message>
<message>
<source>Warning! Chat flood protection activated</source>
- <translation type="unfinished"></translation>
+ <translation>Figyelem! Elárasztó csevegés védelem bekapcsolva</translation>
</message>
<message>
<source>Excess flood</source>
- <translation type="unfinished"></translation>
+ <translation>Elárasztó üzenetek</translation>
</message>
<message>
<source>Game messages flood detected - 1</source>
- <translation type="unfinished"></translation>
+ <translation>Elárasztó játéküzenetek észlelve – 1</translation>
</message>
<message>
<source>Warning! Joins flood protection activated</source>
- <translation type="unfinished"></translation>
+ <translation>Figyelem! Csatlakozási elárasztás védelem bekapcsolva</translation>
</message>
<message>
<source>new seed</source>
- <translation type="unfinished"></translation>
+ <translation>új mag</translation>
</message>
<message>
<source>/maxteams: specify number from 2 to 8</source>
- <translation type="unfinished"></translation>
+ <translation>/maxteams: adj meg 2 és 8 közti számot</translation>
</message>
<message>
<source>The game can't be started with less than two clans!</source>
- <translation type="unfinished"></translation>
+ <translation>A játék nem indítható kettőnél kevesebb klánnal!</translation>
</message>
<message>
<source>Empty config entry.</source>
- <translation type="unfinished"></translation>
+ <translation>Üres beállító bejegyzés.</translation>
</message>
<message>
<source>Access denied.</source>
- <translation type="unfinished"></translation>
+ <translation>Hozzáférés megtagadva.</translation>
</message>
<message>
<source>You're not the room master!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem te vagy a szobagazda!</translation>
</message>
<message>
<source>Corrupted hedgehogs info!</source>
- <translation type="unfinished"></translation>
+ <translation>Sérült süninformáció!</translation>
</message>
<message>
<source>Too many teams!</source>
- <translation type="unfinished"></translation>
+ <translation>Túl sok csapat!</translation>
</message>
<message>
<source>Too many hedgehogs!</source>
- <translation type="unfinished"></translation>
+ <translation>Túl sok sün!</translation>
</message>
<message>
<source>There's already a team with same name in the list.</source>
- <translation type="unfinished"></translation>
+ <translation>Már van ugyanilyen nevű csapat a listában.</translation>
</message>
<message>
<source>Joining not possible: Round is in progress.</source>
- <translation type="unfinished"></translation>
+ <translation>Nem lehet csatlakozni: Kör közben vannak.</translation>
</message>
<message>
<source>This room currently does not allow adding new teams.</source>
- <translation type="unfinished"></translation>
+ <translation>Ehhez a szobához jelenleg nem lehet új csapatokat adni.</translation>
</message>
<message>
<source>Error: The team you tried to remove does not exist.</source>
- <translation type="unfinished"></translation>
+ <translation>Hiba: Nem létezik a csapat, amit el akarsz távolítani.</translation>
</message>
<message>
<source>You can't remove a team you don't own.</source>
- <translation type="unfinished"></translation>
+ <translation>Nem távolíthatsz el egy csapatot, ha az nem a tiéd. </translation>
</message>
<message>
<source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
- <translation type="unfinished"></translation>
+ <translation>Nem megengedett szobanév! A szoba neve 1–40 karakter hosszúságú lehet, nem kezdődhet vagy végződhet szóközzel, és nem lehetnek benne ilyen karakterek: $()*+?[]^{|}</translation>
</message>
<message>
<source>A room with the same name already exists.</source>
- <translation type="unfinished"></translation>
+ <translation>Már van ugyanilyen nevű szoba.</translation>
</message>
<message>
<source>/callvote kick: You need to specify a nickname.</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote kick: Meg kell adnod egy becenevet.</translation>
</message>
<message>
<source>/callvote kick: No such user!</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote kick: Nincs ilyen felhasználó!</translation>
</message>
<message>
<source>/callvote map: No such map!</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote map: Nincs ilyen pálya!</translation>
</message>
<message>
<source>/callvote pause: No game in progress!</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote pause: Nincs zajló játék!</translation>
</message>
<message>
<source>/callvote hedgehogs: Specify number from 1 to 8.</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote hedgehogs: Adj meg egy 1 és 8 közötti számot.</translation>
</message>
<message>
<source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
- <translation type="unfinished"></translation>
+ <translation>Nem megengedett szobanév! A szoba neve 1–40 karakter hosszúságú lehet, nem kezdődhet vagy végződhet szóközzel, és nem lehetnek benne ilyen karakterek: $()*+?[]^{|}</translation>
</message>
<message>
<source>No such room.</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs ilyen szoba.</translation>
</message>
<message>
<source>Room version incompatible to your Hedgewars version!</source>
- <translation type="unfinished"></translation>
+ <translation>A szoba verziója nem felel meg a Hedgewars verziódnak!</translation>
</message>
<message>
<source>Access denied. This room currently doesn't allow joining.</source>
- <translation type="unfinished"></translation>
+ <translation>Hozzáférés megtagadva. A szobába jelenleg nem lehet belépni.</translation>
</message>
<message>
<source>Access denied. This room is for registered users only.</source>
- <translation type="unfinished"></translation>
+ <translation>Hozzáférés megtagadva. Ebbe a szobába csak regisztrált felhasználók léphetnek be.</translation>
</message>
<message>
<source>You are banned from this room.</source>
- <translation type="unfinished"></translation>
+ <translation>Ki vagy tiltva ebből a szobából.</translation>
</message>
<message>
<source>Nickname already provided.</source>
- <translation type="unfinished"></translation>
+ <translation>Már megadtál becenevet.</translation>
</message>
<message>
<source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
- <translation type="unfinished"></translation>
+ <translation>Nem megengedett becenév! A becenév 1–40 karakter hosszúságú lehet, nem kezdődhet vagy végződhet szóközzel, és nem lehetnek benne ilyen karakterek: $()*+?[]^{|}</translation>
</message>
<message>
<source>Protocol already known.</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a protokoll már ismert.</translation>
</message>
<message>
<source>Bad number.</source>
- <translation type="unfinished"></translation>
+ <translation>Rossz szám.</translation>
</message>
<message>
<source>There's no voting going on.</source>
- <translation type="unfinished"></translation>
+ <translation>Nincs most szavazás.</translation>
</message>
<message>
<source>You already have voted.</source>
- <translation type="unfinished"></translation>
+ <translation>Már szavaztál.</translation>
</message>
<message>
<source>Your vote has been counted.</source>
- <translation type="unfinished"></translation>
+ <translation>Szavazatod beérkezett.</translation>
</message>
<message>
<source>Voting closed.</source>
- <translation type="unfinished"></translation>
+ <translation>A szavazás lezárult.</translation>
</message>
<message>
<source>Pause toggled.</source>
- <translation type="unfinished"></translation>
+ <translation>Szünet van.</translation>
</message>
<message>
<source>Voting expired.</source>
- <translation type="unfinished"></translation>
+ <translation>A szavazás lejárt.</translation>
</message>
<message>
<source>hedgehogs per team: </source>
- <translation type="unfinished"></translation>
+ <translation>csapatonkénti sünök: </translation>
</message>
<message>
<source>/info <player>: Show info about player</source>
- <translation type="unfinished"></translation>
+ <translation>/info <játékos>: információk egy játékosról</translation>
</message>
<message>
<source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source>
- <translation type="unfinished"></translation>
+ <translation>/me <üzenet>: Csevegési művelet, pl. „/me pizzát eszik” ez lesz: „* Játékos pizzát eszik”</translation>
</message>
<message>
<source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source>
- <translation type="unfinished"></translation>
+ <translation>/rnd: Egy képzeletbeli érme feldobása, a válasz „fej” vagy „írás”</translation>
</message>
<message>
<source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
- <translation type="unfinished"></translation>
+ <translation>/rnd [A] [B] [C] […]: A válasz a listából véletlenszerűen választott szó lesz</translation>
</message>
<message>
<source>/watch <id>: Watch a demo stored on the server with the given ID</source>
- <translation type="unfinished"></translation>
+ <translation>/watch <azonosító>: A szerveren a megadott azonosítóval tárolt bemutató lejátszása</translation>
</message>
<message>
<source>/help: Show chat command help</source>
- <translation type="unfinished"></translation>
+ <translation>/help: A csevegési parancsok súgójának megjelenítése</translation>
</message>
<message>
<source>/callvote [arguments]: Start a vote</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote [argumentumok]: Szavazás indítása</translation>
</message>
<message>
<source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
- <translation type="unfinished"></translation>
+ <translation>/vote <yes/no>: A zajló szavazáson igennel vagy nemmel voksolás</translation>
</message>
<message>
<source>/delegate <player>: Surrender room control to player</source>
- <translation type="unfinished"></translation>
+ <translation>/delegate <játékos>: A szoba irányítási jogának átadása a játékosnak</translation>
</message>
<message>
<source>/maxteams <N>: Limit maximum number of teams to N</source>
- <translation type="unfinished"></translation>
+ <translation>/maxteams <N>: A csapatok maximális számának korlátozása N-re</translation>
</message>
<message>
<source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
- <translation type="unfinished"></translation>
+ <translation>/global <üzenet>: Globális csevegési üzenet küldése, amit mindenki látni fog a kiszolgálón</translation>
</message>
<message>
<source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
- <translation type="unfinished"></translation>
+ <translation>/registered_only: A „csak regisztráltak” állapot bekapcsolása. Ez esetben csak regisztrált játékosok csatlakozhatnak a kiszolgálóra</translation>
</message>
<message>
<source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
- <translation type="unfinished"></translation>
+ <translation>/super_power: Szupererőd aktiválása. Ezzel bármely szobába beléphetsz, és nem lehet téged kirúgni. Addig él, míg ki nem lépsz a kiszolgálóról</translation>
</message>
<message>
<source>/stats: Query server stats</source>
- <translation type="unfinished"></translation>
+ <translation>/stats: A kiszolgáló statisztikáinak lekérdezése</translation>
</message>
<message>
<source>/force <yes/no>: Force vote result for active vote</source>
- <translation type="unfinished"></translation>
+ <translation>/force <yes/no>: A zajló szavazás eredményének kikényszerítése</translation>
</message>
<message>
<source>/fix: Force this room to stay open when it is empty</source>
- <translation type="unfinished"></translation>
+ <translation>/fix: Akkor is nyitva marad a szoba, ha üres</translation>
</message>
<message>
<source>/unfix: Undo the /fix command</source>
- <translation type="unfinished"></translation>
+ <translation>/unfix: A /fix parancs visszavonása</translation>
</message>
<message>
<source>List of lobby chat commands:</source>
- <translation type="unfinished"></translation>
+ <translation>A váróterem csevegési parancsainak listája:</translation>
</message>
<message>
<source>List of room chat commands:</source>
- <translation type="unfinished"></translation>
+ <translation>A szoba csevegési parancsainak listája:</translation>
</message>
<message>
<source>Commands for server admins only:</source>
- <translation type="unfinished"></translation>
+ <translation>Parancsok csak kiszolgálókezelőknek:</translation>
</message>
<message>
<source>room</source>
- <translation type="unfinished"></translation>
+ <translation>szoba</translation>
</message>
<message>
<source>lobby</source>
- <translation type="unfinished"></translation>
+ <translation>váróterem</translation>
</message>
<message>
<source>(playing)</source>
- <translation type="unfinished"></translation>
+ <translation>(játszik)</translation>
</message>
<message>
<source>(spectating)</source>
- <translation type="unfinished"></translation>
+ <translation>(megfigyel)</translation>
</message>
<message>
<source>Player is not online.</source>
- <translation type="unfinished"></translation>
+ <translation>A játékos nincs online.</translation>
</message>
<message>
<source>/force: Please use 'yes' or 'no'.</source>
- <translation type="unfinished"></translation>
+ <translation>/force: Kérjük, „yes”-t vagy „no”-t írj.</translation>
</message>
<message>
<source>/vote: Please use 'yes' or 'no'.</source>
- <translation type="unfinished"></translation>
+ <translation>/vote: Kérjük, „yes”-t vagy „no”-t írj.</translation>
</message>
<message>
<source>Kicked</source>
- <translation type="unfinished"></translation>
+ <translation>Kirúgva</translation>
</message>
<message>
<source>This server only allows registered users to join.</source>
- <translation type="unfinished"></translation>
+ <translation>Erre a kiszolgálóra csak regisztrált felhasználók léphetnek be.</translation>
</message>
<message>
<source>heads</source>
- <translation type="unfinished"></translation>
+ <translation>fej</translation>
</message>
<message>
<source>tails</source>
- <translation type="unfinished"></translation>
+ <translation>írás</translation>
</message>
<message>
<source>This server does not support replays!</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a kiszolgáló nem támogatja a visszajátszásokat!</translation>
</message>
<message>
<source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
- <translation type="unfinished"></translation>
+ <translation>/greeting [üzenet]: Üdvözlő üzenet beállítása vagy törlése. Ezt a szobába belépő játékosok látják</translation>
</message>
<message>
<source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
- <translation type="unfinished"></translation>
+ <translation>/save <beállításazonosító> <beállításnév>: A szoba jelenlegi beállításainak hozzáadása a /callvote map paranccsal megszavazható lehetőségekhez</translation>
</message>
<message>
<source>/delete <config ID>: Delete a votable room configuration</source>
- <translation type="unfinished"></translation>
+ <translation>/delete <beállításazonosító>: Megszavazható szobabeállítás törlése</translation>
</message>
<message>
<source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
- <translation type="unfinished"></translation>
+ <translation>/saveroom <fájlnév>: Minden megszavazható szobabeállítás (és az üdvözlő üzenet) mentése fájlba</translation>
</message>
<message>
<source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source>
- <translation type="unfinished"></translation>
+ <translation>/loadroom <fájlnév>: Megszavazható szobabeállítások (és üdvözlő üzenet) betöltése fájlból</translation>
</message>
<message>
<source>Super power activated.</source>
- <translation type="unfinished"></translation>
+ <translation>Szupererő bekapcsolva.</translation>
</message>
<message>
<source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source>
- <translation type="unfinished"></translation>
+ <translation>Ismeretlen parancs vagy rossz paraméterek. A parancsok listájához írd a csevegőbe, hogy „/help”.</translation>
</message>
<message>
<source>You can't kick yourself!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem rúghatod ki saját magadat!</translation>
</message>
<message>
<source>You can't kick the only other player!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem rúghatod ki az egyetlen másik játékost!</translation>
</message>
<message>
<source>The player is not in your room.</source>
- <translation type="unfinished"></translation>
+ <translation>A játékos nem a te szobádban van.</translation>
</message>
<message>
<source>This player is protected from being kicked.</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a játékos védettséget élvez a kirúgással szemben.</translation>
</message>
<message>
<source>You're not the room master or a server admin!</source>
- <translation type="unfinished"></translation>
+ <translation>Nem vagy szobagazda, sem kiszolgálókezelő!</translation>
</message>
<message>
<source>You're already the room master.</source>
- <translation type="unfinished"></translation>
+ <translation>Már te vagy a szobagazda.</translation>
</message>
<message>
<source>Greeting message cleared.</source>
- <translation type="unfinished"></translation>
+ <translation>Üdvözlő üzenet törölve.</translation>
</message>
<message>
<source>Greeting message set.</source>
- <translation type="unfinished"></translation>
+ <translation>Üdvözlő üzenet beállítva.</translation>
</message>
<message>
<source>/callvote kick: This is only allowed in rooms without a room master.</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote kick: Ez csak a gazda nélküli szobákban használható.</translation>
</message>
<message>
<source>/callvote map: No maps available.</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote map: Nincs elérhető pálya.</translation>
</message>
<message>
<source>You're the new room master!</source>
- <translation type="unfinished"></translation>
+ <translation>Te vagy az új szobagazda!</translation>
</message>
<message>
<source>/quit: Quit the server</source>
- <translation type="unfinished"></translation>
+ <translation>/quit: Kilépés a kiszolgálóról</translation>
</message>
<message>
<source>This command is only available in the lobby.</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a parancs csak a váróteremben használható.</translation>
</message>
<message>
<source>This command is only available in rooms.</source>
- <translation type="unfinished"></translation>
+ <translation>Ez a parancs csak szobákban használható.</translation>
</message>
<message>
<source>This server no longer allows unregistered players to join.</source>
- <translation type="unfinished"></translation>
+ <translation>Most már nem csatlakozhatnak regisztrálatlan játékosok erre a kiszolgálóra.</translation>
</message>
<message>
<source>This server now allows unregistered players to join.</source>
- <translation type="unfinished"></translation>
+ <translation>Most már regisztrálatlan játékosok is csatlakozhatnak erre a kiszolgálóra.</translation>
</message>
<message>
<source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
- <translation type="unfinished"></translation>
+ <translation>Elérhető callvote parancsok: hedgehogs <szám>, pause, newseed, map <név>, kick <játékos></translation>
</message>
<message>
<source>Please confirm server restart with '/restart_server yes'.</source>
- <translation type="unfinished"></translation>
+ <translation>Kérjük, erősítsd meg a kiszolgáló újraindítását ezzel: „/restart_server yes”.</translation>
</message>
<message>
<source>Warning! Room name change flood protection activated</source>
- <translation type="unfinished"></translation>
+ <translation>Figyelem! Szobanévváltási elárasztási védelem bekapcsolva</translation>
</message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_it.ts Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_it.ts Fri Jul 03 23:51:47 2020 +0200
@@ -10,116 +10,116 @@
<message>
<source>Hedgewars %1</source>
<extracomment>%1 contains Hedgewars' version number</extracomment>
- <translation type="unfinished">Hedgewars %1</translation>
+ <translation>Hedgewars %1</translation>
</message>
<message>
<source>Revision %1 (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>Revisione %1 (%2)</translation>
</message>
<message>
<source>Visit our homepage: %1</source>
- <translation type="unfinished"></translation>
+ <translation>visita la nostra pagina: %1</translation>
</message>
<message>
<source>This program is distributed under the %1.</source>
- <translation type="unfinished">Questo programma è distribuito secondo i termini di %1.</translation>
+ <translation>Questo programma è distribuito secondo i termini di %1.</translation>
</message>
<message>
<source>GNU GPL v2</source>
<extracomment>Short for “GNU General Public License version 2”</extracomment>
- <translation type="unfinished"></translation>
+ <translation>GNU GPL v2</translation>
</message>
<message>
<source>Dependency versions:</source>
<extracomment>For the version numbers of Hedgewars' software dependencies</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Versioni di riferimento:</translation>
</message>
<message>
<source><a href="https://gcc.gnu.org">GCC</a>: %1</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://gcc.gnu.org">GCC</a>: %1</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://www.qt.io/developers/">Qt</a>: %1</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://www.qt.io/developers/">Qt</a>: %1</translation>
</message>
<message>
<source><a href="https://libav.org">libavcodec</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://libav.org">libavcodec</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://libav.org">libavformat</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://libav.org">libavformat</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://libav.org">libavutil</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://libav.org">libavutil</a>: %1.%2.%3</translation>
</message>
<message>
<source><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3</translation>
</message>
<message>
<source>Credits</source>
- <translation type="unfinished"></translation>
+ <translation>Crediti</translation>
</message>
<message>
<source>Other people</source>
- <translation type="unfinished"></translation>
+ <translation>Le altre persone</translation>
</message>
<message>
<source>%1 (alias %2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 (alias %2)</translation>
</message>
<message>
<source>%1 &lt;%2&gt;</source>
<extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1 &lt;%2&gt;</translation>
</message>
<message>
<source>%1: %2</source>
<extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1: %2</translation>
</message>
<message>
<source>%1: %2 &lt;%3&gt;</source>
<extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1: %2 &lt;%3&gt;</translation>
</message>
<message>
<source>Extended Credits</source>
- <translation type="unfinished"></translation>
+ <translation>Crediti estesi</translation>
</message>
<message>
<source>An extended credits list can be found in the CREDITS text file.</source>
- <translation type="unfinished"></translation>
+ <translation>La lista dei crediti estesi può essere trovata nel file: CREDITS.</translation>
</message>
<message>
<source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://visualstudio.microsoft.com">VC++</a>: %1</translation>
</message>
<message>
<source>Unknown Compiler: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Compilatore sconosciuto: %1</translation>
</message>
</context>
<context>
@@ -185,11 +185,11 @@
</message>
<message>
<source>Please specify an IP address.</source>
- <translation type="unfinished"></translation>
+ <translation>per favore specifica l'indirizzo IP.</translation>
</message>
<message>
<source>Please specify a nickname.</source>
- <translation type="unfinished"></translation>
+ <translation>Perfavore specifica un nickname.</translation>
</message>
</context>
<context>
@@ -235,7 +235,7 @@
</message>
<message>
<source>This is optional, but this information might help us to resolve bugs and other technical problems.</source>
- <translation type="unfinished"></translation>
+ <translation>Questo è facoltativo, ma questa informazione potrebbe aiutarci a risolvere i bug e altri problemi tecnici.</translation>
</message>
</context>
<context>
@@ -295,11 +295,11 @@
</message>
<message>
<source>New (%1)</source>
- <translation type="unfinished">Nuovo (%1)</translation>
+ <translation>Nuovo (%1)</translation>
</message>
<message>
<source>Copy of %1 (%2)</source>
- <translation type="unfinished">Copia di %1 (%2)</translation>
+ <translation>Copia di %1 (%2)</translation>
</message>
</context>
<context>
@@ -621,29 +621,29 @@
</message>
<message>
<source>Team 1</source>
- <translation type="unfinished"></translation>
+ <translation>Squadra 1</translation>
</message>
<message>
<source>Team %1</source>
<extracomment>Default team name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Squadra %1</translation>
</message>
<message>
<source>Computer %1</source>
<extracomment>Default computer team name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Computer %1</translation>
</message>
<message>
<source>Unknown network error (possibly missing SSL library).</source>
- <translation type="unfinished"></translation>
+ <translation>Errore di network sconosciuto (probabilmente manca la libreria SSL).</translation>
</message>
<message>
<source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source>
- <translation type="unfinished"></translation>
+ <translation>Questa funzione richiede una connesione a internet, ma sembra che tu non sia online (codice errore: %1).</translation>
</message>
<message>
<source>Internal error: Reply object is invalid.</source>
- <translation type="unfinished"></translation>
+ <translation>Errore interno: Oggetto di risposta non valido.</translation>
</message>
</context>
<context>
@@ -684,7 +684,14 @@
Last engine message:
%1</source>
- <translation type="unfinished"></translation>
+ <translation>ERRORE non recuperabile! il motore di gioco ha dovuto arrestarsi.
+
+Ci dispiace molto per l'inconveniente. :-(
+
+Se continua a succedere, perfavore clicca sul pulsante 'Feedback' nel menu principale!
+
+Ultimo messaggio della macchina:
+%1</translation>
</message>
</context>
<context>
@@ -879,15 +886,15 @@
</message>
<message>
<source>Scale size of the drawn map</source>
- <translation type="unfinished"></translation>
+ <translation>Ridimensiona la grandezza della mappa disegnata</translation>
</message>
<message>
<source>Load</source>
- <translation type="unfinished">Carica</translation>
+ <translation>Carica</translation>
</message>
<message>
<source>Edit</source>
- <translation type="unfinished"></translation>
+ <translation>Modifica</translation>
</message>
</context>
<context>
@@ -959,11 +966,11 @@
</message>
<message>
<source>Reason:</source>
- <translation type="unfinished"></translation>
+ <translation>Ragione:</translation>
</message>
<message>
<source>The connection was refused by the official server or timed out. Something seems to be wrong with the official server at the moment. This might be a temporary problem. Please try again later.</source>
- <translation type="unfinished"></translation>
+ <translation>La connessione è stata rifiutata dal server ufficiale oppure è scaduta. Al momento sembra esserci un problema con il server ufficiale. Questo potrebbe essere un problema temporaneo. Perfavore riprova più tardi.</translation>
</message>
<message>
<source>The connection was refused by the host or timed out. This might have one of the following reasons:
@@ -972,7 +979,12 @@
- There is a temporary network problem
Please check the host name and port settings and/or try again later.</source>
- <translation type="unfinished"></translation>
+ <translation>La connessione è stata rifiutata dall'host oppure è scaduta. Ciò potrebbe essere accaduto per le seguenti ragioni:
+- Il programma del server di Hedgewars non è attualmente eseguito sull'host
+- Il numero della porta specificata è incorretto
+- C'è un problema di network temporaneo
+
+Perfavore controlla il nome dell'host e le impostazioni della porta e/o riprova più tardi.</translation>
</message>
</context>
<context>
@@ -1015,7 +1027,14 @@
Last engine message:
%1</source>
- <translation type="unfinished"></translation>
+ <translation>Si è verificato un ERRORE non recuperabile durante la registrazione del video! Non è stato possibile salvare la registrazione.
+
+Come rimedio, puoi provare a resettare le impostazioni della registrazione video impostandole su Default.
+
+Per segnalare questo errore, perfavore clicca sul pulsante Feedback nel menù principale!
+
+Ultimo messaggio della macchina:
+%1</translation>
</message>
</context>
<context>
@@ -1063,7 +1082,7 @@
</message>
<message>
<source>Warning: The same key is assigned multiple times!</source>
- <translation type="unfinished"></translation>
+ <translation>Attenzione: Lo stesso tasto è assegnato più volte!</translation>
</message>
</context>
<context>
@@ -1091,34 +1110,34 @@
<message>
<source>Duration: %1min %2s</source>
<extracomment>Duration in minutes and seconds (SI units)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Durata: %1min %2s</translation>
</message>
<message>
<source>Video: %1x%2, %3 FPS, %4</source>
<extracomment>Video metadata. %1 = video width, %2 = video height, %3 = frames per second = %4 = decoder name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Video: %1x%2, %3 FPS, %4</translation>
</message>
<message>
<source>Video: %1x%2, %3</source>
<extracomment>Video metadata. %1 = video width, %2 = video height, %3 = decoder name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Video: %1x%2,%3</translation>
</message>
<message>
<source>Player: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Giocatore: %1</translation>
</message>
<message>
<source>Theme: %1</source>
- <translation type="unfinished">Tema: %1</translation>
+ <translation>Tema: %1</translation>
</message>
<message>
<source>Map: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Mappa %1</translation>
</message>
<message>
<source>Record: %1</source>
<extracomment>As in ‘recording’</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Registrazione: %1</translation>
</message>
</context>
<context>
@@ -1132,12 +1151,12 @@
<name>MinesTimeSpinBox</name>
<message>
<source>Random</source>
- <translation type="unfinished">Casuale</translation>
+ <translation>Casuale</translation>
</message>
<message numerus="yes">
<source>%1 seconds</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>%1 secondi</numerusform>
<numerusform></numerusform>
</translation>
</message>
@@ -1222,7 +1241,7 @@
</message>
<message>
<source>Start fighting</source>
- <translation type="unfinished">Inizia combattimento</translation>
+ <translation>Inizio combattimento</translation>
</message>
</context>
<context>
@@ -1248,19 +1267,19 @@
</message>
<message>
<source>Load the start page</source>
- <translation type="unfinished"></translation>
+ <translation>Carica la pagina iniziale</translation>
</message>
<message>
<source>Unknown network error (possibly missing SSL library).</source>
- <translation type="unfinished"></translation>
+ <translation>Errore di network sconosciuto (probabilmente manca la libreria SSL).</translation>
</message>
<message>
<source>This feature requires an Internet connection, but you don't appear to be online (error code: %1).</source>
- <translation type="unfinished"></translation>
+ <translation>Questa funzione richiede una connessione a internet, ma sembra che tu non sia online (codice errore: %1).</translation>
</message>
<message>
<source>Internal error: Reply object is invalid.</source>
- <translation type="unfinished"></translation>
+ <translation>Errore interno: Oggetto di risposta non valido.</translation>
</message>
</context>
<context>
@@ -1319,7 +1338,7 @@
</message>
<message>
<source>Brush size</source>
- <translation type="unfinished"></translation>
+ <translation>Grandezza pennello</translation>
</message>
</context>
<context>
@@ -1370,40 +1389,40 @@
</message>
<message>
<source>Random Hats</source>
- <translation type="unfinished"></translation>
+ <translation>Cappelli casuali</translation>
</message>
<message>
<source>Random Names</source>
- <translation type="unfinished"></translation>
+ <translation>Nomi casuali</translation>
</message>
<message>
<source>Randomize the team name</source>
- <translation type="unfinished"></translation>
+ <translation>Randomizza il nome della squadra</translation>
</message>
<message>
<source>Randomize the grave</source>
- <translation type="unfinished"></translation>
+ <translation>Randomizza le tombe</translation>
</message>
<message>
<source>Randomize the flag</source>
- <translation type="unfinished"></translation>
+ <translation>Randomizza la bandiera</translation>
</message>
<message>
<source>Randomize the voice</source>
- <translation type="unfinished"></translation>
+ <translation>Randomizza le voci</translation>
</message>
<message>
<source>Randomize the fort</source>
- <translation type="unfinished"></translation>
+ <translation>Randomizza il forte</translation>
</message>
<message>
<source>CPU %1</source>
<extracomment>Name of a flag for computer-controlled enemies. %1 is replaced with the computer level</extracomment>
- <translation type="unfinished"></translation>
+ <translation>BOT %1</translation>
</message>
<message>
<source>%1 (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 (%2)</translation>
</message>
</context>
<context>
@@ -1430,15 +1449,15 @@
<message numerus="yes">
<source>The best killer is <b>%1</b> with <b>%2</b> kills in a turn.</source>
<translation>
- <numerusform><p>Il miglior killer è <b>%1</b> con <b>%2</b> uccisione in un turno.</p></numerusform>
- <numerusform><p>Il miglior killer è <b>%1</b> con <b>%2</b> uccisioni in un turno.</p></numerusform>
+ <numerusform>Il miglior killer è <b>%1</b> con <b>%2</b> uccisione in un turno.</numerusform>
+ <numerusform>Il miglior killer è <b>%1</b> con <b>%2</b> uccisioni in un turno.</numerusform>
</translation>
</message>
<message numerus="yes">
<source>A total of <b>%1</b> hedgehog(s) were killed during this round.</source>
<translation>
- <numerusform><p>Durante questo round è stato ucciso <b>%1</b> riccio in totale.</p></numerusform>
- <numerusform><p>Durante questo round sono stati uccisi <b>%1</b> ricci in totale.</p></numerusform>
+ <numerusform>Durante questo round è stato ucciso <b>%1</b> riccio in totale.</numerusform>
+ <numerusform>Durante questo round sono stati uccisi <b>%1</b> ricci in totale.</numerusform>
</translation>
</message>
<message numerus="yes">
@@ -1488,42 +1507,42 @@
</message>
<message numerus="yes">
<source><b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform><b>%1</b> ha pensato fosse una buona idea sparare al proprio riccio per <b>%2</b> punti.</numerusform>
<numerusform></numerusform>
</translation>
</message>
<message numerus="yes">
<source><b>%1</b> killed <b>%2</b> of their own hedgehogs.</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform><b>%1</b> ha ucciso <b>%2</b> dei suoi stessi ricci.</numerusform>
<numerusform></numerusform>
</translation>
</message>
<message>
<source>With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after.</source>
- <translation type="unfinished"></translation>
+ <translation>Avendo tutti lo stesso colore del clan, non c'era più ragione di combattere, E così i ricci vissero in pace per sempre.</translation>
</message>
<message numerus="yes">
<source>(%1 point(s))</source>
<extracomment>Number of points in stats screen, written after the team name</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 punti(s))</numerusform>
<numerusform></numerusform>
</translation>
</message>
<message numerus="yes">
<source>(%L1 second(s))</source>
<extracomment>Time in seconds</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%L1 secondi(s))</numerusform>
<numerusform></numerusform>
</translation>
</message>
<message numerus="yes">
<source>(%1 crate(s))</source>
- <translation type="unfinished">
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 cassa(s))</numerusform>
<numerusform></numerusform>
</translation>
</message>
@@ -1602,7 +1621,7 @@
</message>
<message>
<source>Open the Hedgewars online game manual in your web browser</source>
- <translation type="unfinished"></translation>
+ <translation>Apri il manuale di gioco online di Hedgewars nel tuo browser</translation>
</message>
</context>
<context>
@@ -1624,19 +1643,19 @@
<name>PageNet</name>
<message>
<source>Connect to the selected server</source>
- <translation type="unfinished"></translation>
+ <translation>Connettiti al server selezionato</translation>
</message>
<message>
<source>Update the list of servers</source>
- <translation type="unfinished"></translation>
+ <translation>Aggiorna la lista dei server</translation>
</message>
<message>
<source>Specify the address and port number of a known server and connect to it directly</source>
- <translation type="unfinished"></translation>
+ <translation>Specifica l'indirizzo e il numero della porta di un server che conosci e connettiti direttamente</translation>
</message>
<message>
<source>Start private server</source>
- <translation type="unfinished">Avvia un server privato</translation>
+ <translation>Avvia un server privato</translation>
</message>
</context>
<context>
@@ -1858,24 +1877,24 @@
<message>
<source>x</source>
<extracomment>Multiplication sign, to be used between two numbers. Note the “x” is only a dummy character, we recommend to use “×” if your language permits it</extracomment>
- <translation type="unfinished"></translation>
+ <translation>*</translation>
</message>
<message>
<source>MISSING LANGUAGE NAME [%1]</source>
<extracomment>In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Nome della lingua mancante [%1]</translation>
</message>
<message>
<source>Check now</source>
- <translation type="unfinished"></translation>
+ <translation>Controlla ora</translation>
</message>
<message>
<source>Can't delete last team</source>
- <translation type="unfinished"></translation>
+ <translation>Impossibile eliminare l'ultima squadra</translation>
</message>
<message>
<source>You can't delete the last team!</source>
- <translation type="unfinished"></translation>
+ <translation>Non puoi eliminare l'ultima squadra!</translation>
</message>
</context>
<context>
@@ -2156,15 +2175,15 @@
</message>
<message>
<source>Select a hedgehog at the beginning of a turn</source>
- <translation type="unfinished"></translation>
+ <translation>Seleziona un riccio all'inizio di un turno</translation>
</message>
<message>
<source>Land can not be destroyed by most weapons.</source>
- <translation type="unfinished"></translation>
+ <translation>Il terreno non può essere distrutto dalla maggior parte delle armi.</translation>
</message>
<message>
<source>%1 (%2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 (%2)</translation>
</message>
</context>
<context>
@@ -2214,7 +2233,7 @@
</message>
<message>
<source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
- <translation type="unfinished"></translation>
+ <translation>Missioni giocatore singolo: Impara a giocare nell'allenamento, affina le tue abilità nelle sfide oppure prova a completare gli obiettivi negli scenari.</translation>
</message>
</context>
<context>
@@ -2261,30 +2280,30 @@
</message>
<message>
<source>Team</source>
- <translation type="unfinished">Squadra</translation>
+ <translation>Squadra</translation>
</message>
<message>
<source>Team highscore: %1</source>
<extracomment>Highest score of a team</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Punteggio massimo: %1</translation>
</message>
<message>
<source>Team lowscore: %1</source>
<extracomment>Lowest score of a team</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Punteggio minimo: %1</translation>
</message>
<message>
<source>Team's top accuracy: %1%</source>
<extracomment>Best accuracy of a team (in a challenge)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Migliore precisione della squadra: %1%</translation>
</message>
<message>
<source>Team's best time: %L1 s</source>
- <translation type="unfinished"></translation>
+ <translation>Miglior tempo della squadra: %L1 s</translation>
</message>
<message>
<source>Team's longest time: %L1 s</source>
- <translation type="unfinished"></translation>
+ <translation>Tempo più lungo della squadra: %L1 s</translation>
</message>
</context>
<context>
@@ -2327,12 +2346,12 @@
<message>
<source>%1%</source>
<extracomment>Video encoding progress. %1 = number</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1%</translation>
</message>
<message>
<source>%1 (%2%) - %3</source>
<extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1 (%2%) - %3</translation>
</message>
</context>
<context>
@@ -2510,20 +2529,20 @@
</message>
<message>
<source>Enable visual effects such as animated menu transitions and falling stars</source>
- <translation type="unfinished"></translation>
+ <translation>Attiva effetti grafici come le transizioni animate del menu e le stelle cadenti</translation>
</message>
<message>
<source>If enabled, Hedgewars adds the date and time in the form "YYYY-MM-DD_hh-mm" for automatically created demos.</source>
- <translation type="unfinished"></translation>
+ <translation>Se attivato, Hedgewars aggiunge la data e l'orario nella forma "YYYY-MM-DD_hh-mm" per i filmati creati automaticamente.</translation>
</message>
<message>
<source>Dampen when losing focus</source>
<extracomment>Checkbox text. If checked, the in-game audio volume is reduced (=dampened) when the game window loses its focus</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Smorza l'audio quando la finestra passa in background</translation>
</message>
<message>
<source>Reduce the game audio volume if the game window has lost its focus</source>
- <translation type="unfinished"></translation>
+ <translation>Riduci il volume di gioco se la finestra di gioco è passata in secondo piano</translation>
</message>
</context>
<context>
@@ -2610,27 +2629,27 @@
</message>
<message>
<source>Stereoscopy creates an illusion of depth when you wear 3D glasses.</source>
- <translation type="unfinished"></translation>
+ <translation>Lo stereoscopio crea un illusione di profondità quando indossi gli occhiali 3D.</translation>
</message>
<message>
<source>24 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>24 FPS</translation>
</message>
<message>
<source>25 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>25 FPS</translation>
</message>
<message>
<source>30 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>30 FPS</translation>
</message>
<message>
<source>50 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>50 FPS</translation>
</message>
<message>
<source>60 FPS</source>
- <translation type="unfinished"></translation>
+ <translation>60 FPS</translation>
</message>
</context>
<context>
@@ -2949,20 +2968,20 @@
</message>
<message>
<source>Stereoscopy</source>
- <translation type="unfinished"></translation>
+ <translation>Stereoscopio</translation>
</message>
<message>
<source>Bitrate (Kibit/s)</source>
<extracomment>“Kibit/s” is the symbol for 1024 bits per second</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Bitrate (Kibit/s)</translation>
</message>
<message>
<source>Loading<br>CAPTCHA ...</source>
- <translation type="unfinished"></translation>
+ <translation>Caricamento<br>CAPTCHA ...</translation>
</message>
<message>
<source>Zoom (%)</source>
- <translation type="unfinished"></translation>
+ <translation>Zoom (%)</translation>
</message>
</context>
<context>
@@ -2981,11 +3000,11 @@
</message>
<message>
<source>unnamed (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>Senza-nome (%1)</translation>
</message>
<message>
<source>Hedgehog %1</source>
- <translation type="unfinished"></translation>
+ <translation>Riccio %1</translation>
</message>
</context>
<context>
@@ -3212,62 +3231,65 @@
</message>
<message>
<source>Teams - Name already taken</source>
- <translation type="unfinished"></translation>
+ <translation>Nome della squadra già preso</translation>
</message>
<message>
<source>The team name '%1' is already taken, so your team has been renamed to '%2'.</source>
- <translation type="unfinished"></translation>
+ <translation>Il nome della squadra '%1' è già preso, quindi la tua squadra è stata rinominata '%2'.</translation>
</message>
<message>
<source>Please select a file from the list.</source>
- <translation type="unfinished"></translation>
+ <translation>Perfavore seleziona un file dalla lista.</translation>
</message>
<message>
<source>Cannot rename file to %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Impossibile rinominare il file in %1.</translation>
</message>
<message>
<source>Cannot delete file %1.</source>
- <translation type="unfinished"></translation>
+ <translation>Impossibile eliminare il file %1.</translation>
</message>
<message>
<source>Welcome to Hedgewars</source>
- <translation type="unfinished"></translation>
+ <translation>Benvenuto a Hedgewars</translation>
</message>
<message>
<source>Welcome to Hedgewars!
You seem to be new around here. Would you like to play some training missions first to learn the basics of Hedgewars?</source>
- <translation type="unfinished"></translation>
+ <translation>Benvenuto a Hedgewars!
+
+Sembra che tu sia nuovo qui. Ti piacerebbe fare delle missioni di allenamento per imparare le basi di Hedgewars prima?</translation>
</message>
<message>
<source>Cannot use the weapon scheme '%1'!</source>
- <translation type="unfinished"></translation>
+ <translation>Impossibile utilizzare lo schema delle armi '%1'!</translation>
</message>
<message>
<source>The connection to the server is lost.</source>
- <translation type="unfinished"></translation>
+ <translation>La connessione al server è persa.</translation>
</message>
<message>
<source>Schemes - Name already taken</source>
- <translation type="unfinished"></translation>
+ <translation>Schemi - Nome già preso</translation>
</message>
<message>
<source>A scheme with the name '%1' already exists. Your scheme has been renamed to '%2'.</source>
- <translation type="unfinished"></translation>
+ <translation>Uno schema con il nome '%1' esiste già. Il tuo schema è stato rinominato '%2'.</translation>
</message>
<message>
<source>A weapon scheme with the name '%1' already exists. Changes made to the weapon scheme have been discarded.</source>
- <translation type="unfinished"></translation>
+ <translation>Uno schema delle armi con il nome '%1' esiste già. I cambiamenti allo schema delle armi sono stati scartati.</translation>
</message>
<message>
<source>Server redirection</source>
- <translation type="unfinished"></translation>
+ <translation>Reindirizzamento del server</translation>
</message>
<message>
<source>This server supports secure connections on port %1.
Would you like to reconnect securely?</source>
- <translation type="unfinished"></translation>
+ <translation>Il server supporta connessioni sicure sulla porta %1.
+Ti piacerebbe riconnettert in maniera sicura?</translation>
</message>
</context>
<context>
@@ -3401,14 +3423,14 @@
</message>
<message>
<source>Specify address</source>
- <translation type="unfinished"></translation>
+ <translation>Specifica l'indirizzo</translation>
</message>
</context>
<context>
<name>QSpinBox</name>
<message>
<source>Specify the bitrate of recorded videos as a multiple of 1024 bits per second</source>
- <translation type="unfinished"></translation>
+ <translation>Specifica il bitrate dei filmati registrati in multipli di 1024 bits per secondo</translation>
</message>
</context>
<context>
@@ -3788,83 +3810,83 @@
<message>
<source>toggle team bars</source>
<extracomment>This refers to the team info bars (name/flag/health) of all teams. These are shown at the bottom center of the screen</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Attiva le barre delle squadre</translation>
</message>
<message>
<source>pause / auto skip</source>
- <translation type="unfinished"></translation>
+ <translation>Pausa / salta il turno automaticamente</translation>
</message>
<message>
<source>toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>Attiva i tag del riccio</translation>
</message>
<message>
<source>change timer</source>
- <translation type="unfinished"></translation>
+ <translation>Cambia timer</translation>
</message>
<message>
<source>show mission information</source>
- <translation type="unfinished"></translation>
+ <translation>Mostra informazioni missione</translation>
</message>
<message>
<source>clan chat</source>
- <translation type="unfinished"></translation>
+ <translation>Chat di clan</translation>
</message>
<message>
<source>unselect weapon</source>
- <translation type="unfinished"></translation>
+ <translation>Deseleziona arma</translation>
</message>
<message>
<source>stand still on slippery land</source>
- <translation type="unfinished"></translation>
+ <translation>Rimani immobile su terreno scivoloso</translation>
</message>
<message>
<source>change direction without moving</source>
- <translation type="unfinished"></translation>
+ <translation>Cambia direzione senza muoverti</translation>
</message>
<message>
<source>switch backwards</source>
- <translation type="unfinished"></translation>
+ <translation>Girati indietro</translation>
</message>
<message>
<source>change bounciness</source>
- <translation type="unfinished"></translation>
+ <translation>Cambia il grado del rimbalzo</translation>
</message>
<message>
<source>reset zoom to start value</source>
- <translation type="unfinished"></translation>
+ <translation>Resetta lo zoom al valore iniziale</translation>
</message>
<message>
<source>set zoom to 100%</source>
- <translation type="unfinished"></translation>
+ <translation>Imposta lo zoom all 100%</translation>
</message>
<message>
<source>save map as image</source>
- <translation type="unfinished"></translation>
+ <translation>Salva la mappa come immagine</translation>
</message>
<message>
<source>show object information</source>
- <translation type="unfinished"></translation>
+ <translation>Mostra informazioni oggetto</translation>
</message>
<message>
<source>change hedgehog tag types</source>
- <translation type="unfinished"></translation>
+ <translation>Cambia il tipo di tag del riccio</translation>
</message>
<message>
<source>toggle hedgehog tag translucency</source>
- <translation type="unfinished"></translation>
+ <translation>Imposta l'opacità del tag del riccio</translation>
</message>
<message>
<source>toggle HUD</source>
- <translation type="unfinished"></translation>
+ <translation>Attiva HUD</translation>
</message>
<message>
<source>backwards jump</source>
- <translation type="unfinished"></translation>
+ <translation>Salto all'indietro</translation>
</message>
<message>
<source>screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>Screenshot</translation>
</message>
</context>
<context>
@@ -3890,43 +3912,43 @@
<name>binds (combination)</name>
<message>
<source>hold down precise</source>
- <translation type="unfinished"></translation>
+ <translation>Tieni premuto Shift</translation>
</message>
<message>
<source>precise + left/right</source>
- <translation type="unfinished"></translation>
+ <translation>Shift + sinistra/destra</translation>
</message>
<message>
<source>precise + switch</source>
- <translation type="unfinished"></translation>
+ <translation>Shift + cambia riccio</translation>
</message>
<message>
<source>precise + timer</source>
- <translation type="unfinished"></translation>
+ <translation>Shift + timer</translation>
</message>
<message>
<source>precise + reset zoom</source>
- <translation type="unfinished"></translation>
+ <translation>Shift + resetta zoom</translation>
</message>
<message>
<source>precise + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>Shift + attiva tag del riccio</translation>
</message>
<message>
<source>switch + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>Cambia riccio + attiva tags del riccio</translation>
</message>
<message>
<source>precise + switch + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>Shift + cambia riccio + attiva tags del riccio</translation>
</message>
<message>
<source>high jump (twice)</source>
- <translation type="unfinished"></translation>
+ <translation>Salto alto (due volte)</translation>
</message>
<message>
<source>precise + screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>Shift + screenshot</translation>
</message>
</context>
<context>
@@ -4005,11 +4027,11 @@
</message>
<message>
<source>Heads-up display:</source>
- <translation type="unfinished"></translation>
+ <translation>HUD:</translation>
</message>
<message>
<source>Talk to your clan or all participants:</source>
- <translation type="unfinished"></translation>
+ <translation>Parla al tuo clan o a tutti i partecipanti:</translation>
</message>
</context>
<context>
@@ -4332,625 +4354,625 @@
</message>
<message>
<source>D-pad</source>
- <translation type="unfinished"></translation>
+ <translation>D-pad</translation>
</message>
<message>
<source>Axis %1 %2</source>
<extracomment>Game controller axis direction. %1 = axis number, %2 = direction</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Asse %1 %2</translation>
</message>
<message>
<source>Button %1</source>
<extracomment>Game controller button. %1 = button number</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Pulsante %1</translation>
</message>
<message>
<source>D-pad %1 %2</source>
<extracomment>Game controller D-pad button. %1 = D-pad number, %2 = direction</extracomment>
- <translation type="unfinished"></translation>
+ <translation>D-pad %1 %2</translation>
</message>
<message>
<source>(Don't use)</source>
<extracomment>Special entry in key selection when an action has no control assigned</extracomment>
- <translation type="unfinished"></translation>
+ <translation>(Non usare)</translation>
</message>
<message>
<source>Mouse: X1 button </source>
- <translation type="unfinished"></translation>
+ <translation>Mouse: X1 pulsante </translation>
</message>
<message>
<source>Mouse: X2 button</source>
- <translation type="unfinished"></translation>
+ <translation>Mouse: X2 pulsante</translation>
</message>
<message>
<source>Keypad 0</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 0</translation>
</message>
<message>
<source>Keypad 1</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 1</translation>
</message>
<message>
<source>Keypad 2</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 2</translation>
</message>
<message>
<source>Keypad 3</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 3</translation>
</message>
<message>
<source>Keypad 4</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 4</translation>
</message>
<message>
<source>Keypad 5</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 5</translation>
</message>
<message>
<source>Keypad 6</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 6</translation>
</message>
<message>
<source>Keypad 7</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 7</translation>
</message>
<message>
<source>Keypad 8</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 8</translation>
</message>
<message>
<source>Keypad 9</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad 9</translation>
</message>
<message>
<source>Keypad .</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad .</translation>
</message>
<message>
<source>Keypad /</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad /</translation>
</message>
<message>
<source>Keypad *</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad *</translation>
</message>
<message>
<source>Keypad -</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad -</translation>
</message>
<message>
<source>Keypad +</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad +</translation>
</message>
<message>
<source>Keypad Enter</source>
- <translation type="unfinished"></translation>
+ <translation>Keypad Invio</translation>
</message>
<message>
<source>PageUp</source>
- <translation type="unfinished"></translation>
+ <translation>PaginaSu</translation>
</message>
<message>
<source>PageDown</source>
- <translation type="unfinished"></translation>
+ <translation>PaginaGiù</translation>
</message>
<message>
<source>Numlock</source>
- <translation type="unfinished"></translation>
+ <translation>Numlock</translation>
</message>
<message>
<source>CapsLock</source>
- <translation type="unfinished"></translation>
+ <translation>CapsLock</translation>
</message>
<message>
<source>ScrollLock</source>
- <translation type="unfinished"></translation>
+ <translation>ScrollLock</translation>
</message>
<message>
<source>Right Shift</source>
- <translation type="unfinished"></translation>
+ <translation>Shift destro</translation>
</message>
<message>
<source>Left Shift</source>
- <translation type="unfinished"></translation>
+ <translation>Shift sinistro</translation>
</message>
<message>
<source>Right Ctrl</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl Destro</translation>
</message>
<message>
<source>Left Ctrl</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl Sinistro</translation>
</message>
<message>
<source>Right Alt</source>
- <translation type="unfinished"></translation>
+ <translation>Alt Destro</translation>
</message>
<message>
<source>Left Alt</source>
- <translation type="unfinished"></translation>
+ <translation>Alt Sinistro</translation>
</message>
<message>
<source>Right GUI</source>
<extracomment>Windows key / Command key / Meta key /Super key (right)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>GUI Destro</translation>
</message>
<message>
<source>Left GUI</source>
<extracomment>Windows key / Command key / Meta key /Super key (left)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>GUI Sinistro</translation>
</message>
<message>
<source>(QWERTY)</source>
<extracomment>Name of QWERTY US keyboard layout</extracomment>
- <translation type="unfinished"></translation>
+ <translation>(QWERTY)</translation>
</message>
<message>
<source>Menu</source>
- <translation type="unfinished"></translation>
+ <translation>Menù</translation>
</message>
</context>
<context>
<name>credits</name>
<message>
<source>Programming</source>
- <translation type="unfinished"></translation>
+ <translation>Programmatori</translation>
</message>
<message>
<source>Game engine</source>
- <translation type="unfinished"></translation>
+ <translation>Motore di gioco</translation>
</message>
<message>
<source>Creator</source>
- <translation type="unfinished"></translation>
+ <translation>Creatore</translation>
</message>
<message>
<source>Many engine improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Molti miglioramenti al motore di gioco</translation>
</message>
<message>
<source>Gamepad and Lua integration</source>
- <translation type="unfinished"></translation>
+ <translation>Gamepad e integrazione Lua</translation>
</message>
<message>
<source>Campaign support</source>
- <translation type="unfinished"></translation>
+ <translation>Curatori della campagna</translation>
</message>
<message>
<source>Theme customization improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Miglioramneti alla personalizzazione dei temi</translation>
</message>
<message>
<source>Some Pas2C and GLES2 work</source>
- <translation type="unfinished"></translation>
+ <translation>Alcuni Pas2C e GLES2 funzionano</translation>
</message>
<message>
<source>Video recording</source>
- <translation type="unfinished"></translation>
+ <translation>Registrazione Video</translation>
</message>
<message>
<source>Other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Altri miglioramenti</translation>
</message>
<message>
<source>Map generation</source>
- <translation type="unfinished"></translation>
+ <translation>Generazione mappa</translation>
</message>
<message>
<source>Core map generators</source>
- <translation type="unfinished"></translation>
+ <translation>Curatori del generatore centrale delle mappe</translation>
</message>
<message>
<source>Perlin maps and other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Curatori delle mappe perlin e altri miglioramenti</translation>
</message>
<message>
<source>Maze maps</source>
- <translation type="unfinished"></translation>
+ <translation>Mappe labirinto</translation>
</message>
<message>
<source>Weapons</source>
- <translation type="unfinished">Armi</translation>
+ <translation>Armi</translation>
</message>
<message>
<source>Most core weapons</source>
- <translation type="unfinished"></translation>
+ <translation>Curatori della maggior parte delle armi principali</translation>
</message>
<message>
<source>Air mine, rubber, others</source>
- <translation type="unfinished"></translation>
+ <translation>Mine aeree, Gomma, altro</translation>
</message>
<message>
<source>Drill rocket, ballgun, RC plane</source>
- <translation type="unfinished"></translation>
+ <translation>Razzo penetrante, Sparapalle, RC plane</translation>
</message>
<message>
<source>Freezer</source>
- <translation type="unfinished"></translation>
+ <translation>Raggio congelatore</translation>
</message>
<message>
<source>Mine number and time game settings</source>
- <translation type="unfinished"></translation>
+ <translation>Impostazioni riguardo il numero di mine e il tempo di gioco</translation>
</message>
<message>
<source>Frontend / main menu</source>
- <translation type="unfinished"></translation>
+ <translation>Pagina iniziale / Menù principale</translation>
</message>
<message>
<source>Many frontend improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Miglioramenti pagina iniziale</translation>
</message>
<message>
<source>Keybinds, feedback, maps and hats interfaces</source>
- <translation type="unfinished"></translation>
+ <translation>Interfacce di Selezione tasti, feedback, mappe e cappelli</translation>
</message>
<message>
<source>Login dialogs, other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Login dialoghi, altri miglioramenti</translation>
</message>
<message>
<source>Missions and styles</source>
- <translation type="unfinished"></translation>
+ <translation>Missioni e stili</translation>
</message>
<message>
<source>A Classic Fairytale</source>
- <translation type="unfinished"></translation>
+ <translation>Una classica fiaba</translation>
</message>
<message>
<source>A Space Adventure</source>
- <translation type="unfinished"></translation>
+ <translation>Una avventura spaziale</translation>
</message>
<message>
<source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
- <translation type="unfinished"></translation>
+ <translation>Creato Cattura la bandiera, Modalità costruzione, Controllo, HedgeEditor, Highlander,Racer,Techracer,Gli specialisti,WxW</translation>
</message>
<message>
<source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
- <translation type="unfinished"></translation>
+ <translation>Allenamento, prove a tempo e sfide di pratica della mira, Bazooka Battlefield, Tentacle Terror,Big Armory, correzioni di bug e manutenzione</translation>
</message>
<message>
<source>Some styles and missions</source>
- <translation type="unfinished"></translation>
+ <translation>Alcuni stili e missioni</translation>
</message>
<message>
<source>Battalion</source>
- <translation type="unfinished"></translation>
+ <translation>Battalion</translation>
</message>
<message>
<source>Continental supplies</source>
- <translation type="unfinished"></translation>
+ <translation>Continental supplies</translation>
</message>
<message>
<source>Teamwork 2</source>
- <translation type="unfinished"></translation>
+ <translation>Teamwork 2</translation>
</message>
<message>
<source>Climb Home</source>
- <translation type="unfinished"></translation>
+ <translation>Climb Home</translation>
</message>
<message>
<source>Portal Mind Challenge</source>
- <translation type="unfinished"></translation>
+ <translation>Portal Mind Challenge</translation>
</message>
<message>
<source>Game server</source>
- <translation type="unfinished"></translation>
+ <translation>Server di gioco</translation>
</message>
<message>
<source>Ports</source>
- <translation type="unfinished"></translation>
+ <translation>Porte</translation>
</message>
<message>
<source>macOS/iPhone port, OpenGL-ES conversion</source>
- <translation type="unfinished"></translation>
+ <translation>macOS/iPhone port, OpenGL-ES conversion</translation>
</message>
<message>
<source>Android port</source>
- <translation type="unfinished"></translation>
+ <translation>Porta Android</translation>
</message>
<message>
<source>Android netplay, portability abstraction</source>
- <translation type="unfinished"></translation>
+ <translation>Curatori del gioco su network Android, Portabilità</translation>
</message>
<message>
<source>WebGL port</source>
- <translation type="unfinished"></translation>
+ <translation>Porta WebGl</translation>
</message>
<message>
<source>iPhone/iPad ports</source>
- <translation type="unfinished"></translation>
+ <translation>Porte iPhone/iPad</translation>
</message>
<message>
<source>Graphics</source>
- <translation type="unfinished">Grafica</translation>
+ <translation>Grafica</translation>
</message>
<message>
<source>General</source>
- <translation type="unfinished">Generale</translation>
+ <translation>Generale</translation>
</message>
<message>
<source>Themes</source>
- <translation type="unfinished"></translation>
+ <translation>Temi</translation>
</message>
<message>
<source>Nature, Snow, City, Castle, Halloween, Island</source>
- <translation type="unfinished"></translation>
+ <translation>Natura, Neve, Città, Castello, Halloween, Isola</translation>
</message>
<message>
<source>Bamboo, EarthRise, BambooPlinko</source>
- <translation type="unfinished"></translation>
+ <translation>Bamboo, EarthRise, BambooPlinko</translation>
</message>
<message>
<source>Golf, Hoggywood, Stage</source>
- <translation type="unfinished"></translation>
+ <translation>Golf,Hoggywood,Palco</translation>
</message>
<message>
<source>Hoggywood</source>
- <translation type="unfinished"></translation>
+ <translation>Hoggywood</translation>
</message>
<message>
<source>Cave, Olympics</source>
- <translation type="unfinished"></translation>
+ <translation>Caverna,Olimpiadi</translation>
</message>
<message>
<source>Fruit, Cake</source>
- <translation type="unfinished"></translation>
+ <translation>Frutta,Torta</translation>
</message>
<message>
<source>Art</source>
- <translation type="unfinished"></translation>
+ <translation>Arte</translation>
</message>
<message>
<source>Beach</source>
- <translation type="unfinished"></translation>
+ <translation>Spiaggia</translation>
</message>
<message>
<source>Brick</source>
- <translation type="unfinished"></translation>
+ <translation>Mattoni</translation>
</message>
<message>
<source>Hell</source>
- <translation type="unfinished"></translation>
+ <translation>Inferno</translation>
</message>
<message>
<source>Jungle</source>
- <translation type="unfinished"></translation>
+ <translation>Giungla</translation>
</message>
<message>
<source>Sheep</source>
- <translation type="unfinished"></translation>
+ <translation>Pecore</translation>
</message>
<message>
<source>Maps</source>
- <translation type="unfinished"></translation>
+ <translation>Mappe</translation>
</message>
<message>
<source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
- <translation type="unfinished"></translation>
+ <translation>Basket, Campo da Basket, Bagno, Flusso di bolle, Amaca,Hedgelove, Hedgewars, Idrante, Funghi, Aereo, Corde, Albero</translation>
</message>
<message>
<source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
- <translation type="unfinished"></translation>
+ <translation>SB_Ossa, SB_Cristalli, SB_Erboso, SB_Boschetto, SB_Spettrale, SB_Palme, SB_Shrooms, SB_Tentacolo</translation>
</message>
<message>
<source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
- <translation type="unfinished"></translation>
+ <translation>Bamboo, Blox, Torta, Ingranaggi, EarthRise, Autostrada</translation>
</message>
<message>
<source>Castle, PirateFlag</source>
- <translation type="unfinished"></translation>
+ <translation>Castello, BandieraPirata</translation>
</message>
<message>
<source>ShoppaKing, TrophyRace</source>
- <translation type="unfinished"></translation>
+ <translation>Shoppaking, TrophyRace</translation>
</message>
<message>
<source>Battlefield</source>
- <translation type="unfinished"></translation>
+ <translation>CampoDiBattaglia</translation>
</message>
<message>
<source>CTF_Blizzard</source>
- <translation type="unfinished"></translation>
+ <translation>CTF_Blizzard</translation>
</message>
<message>
<source>Cheese</source>
- <translation type="unfinished"></translation>
+ <translation>Formaggio</translation>
</message>
<message>
<source>ClimbHome</source>
- <translation type="unfinished"></translation>
+ <translation>ClimbHome</translation>
</message>
<message>
<source>Lonely_Island</source>
- <translation type="unfinished"></translation>
+ <translation>Isola_Solitaria</translation>
</message>
<message>
<source>Octorama</source>
- <translation type="unfinished"></translation>
+ <translation>Octorama</translation>
</message>
<message>
<source>portal</source>
- <translation type="unfinished"></translation>
+ <translation>portale</translation>
</message>
<message>
<source>Ruler</source>
- <translation type="unfinished"></translation>
+ <translation>Riga</translation>
</message>
<message>
<source>Sticks</source>
- <translation type="unfinished"></translation>
+ <translation>Adesivi</translation>
</message>
<message>
<source>Forts</source>
- <translation type="unfinished">Forti</translation>
+ <translation>Forti</translation>
</message>
<message>
<source>EvilChicken</source>
- <translation type="unfinished"></translation>
+ <translation>GallinaMalvagia</translation>
</message>
<message>
<source>Olympic</source>
- <translation type="unfinished"></translation>
+ <translation>Olimpico</translation>
</message>
<message>
<source>Tank</source>
- <translation type="unfinished"></translation>
+ <translation>Carroarmato</translation>
</message>
<message>
<source>Snail</source>
- <translation type="unfinished"></translation>
+ <translation>Lumaca</translation>
</message>
<message>
<source>SteelTower</source>
- <translation type="unfinished"></translation>
+ <translation>Torred'Acciaio</translation>
</message>
<message>
<source>Hats, graves, other</source>
- <translation type="unfinished"></translation>
+ <translation>Cappelli, tombe, altro</translation>
</message>
<message>
<source>See CREDITS text file</source>
- <translation type="unfinished"></translation>
+ <translation>Vedi i file di testo CREDITI</translation>
</message>
<message>
<source>Sounds</source>
- <translation type="unfinished"></translation>
+ <translation>Suoni</translation>
</message>
<message>
<source>Hedgehogs voice</source>
- <translation type="unfinished"></translation>
+ <translation>Voce dei ricci</translation>
</message>
<message>
<source>Default_pl, Russian_pl voices</source>
- <translation type="unfinished"></translation>
+ <translation>Voci russe Default</translation>
</message>
<message>
<source>Various authors from www.freesound.org (see CREDITS text file)</source>
- <translation type="unfinished"></translation>
+ <translation>Vari autori da www.freesound.org (vedi file di testo CREDITI)</translation>
</message>
<message>
<source>Music</source>
- <translation type="unfinished">Musica</translation>
+ <translation>Musica</translation>
</message>
<message>
<source>City, Rock, others</source>
- <translation type="unfinished"></translation>
+ <translation>Città, Rock, altri</translation>
</message>
<message>
<source>Compost</source>
- <translation type="unfinished"></translation>
+ <translation>Compost</translation>
</message>
<message>
<source>EarthRise, oriental, Pirate, snow</source>
- <translation type="unfinished"></translation>
+ <translation>Earthrise, orientale, Pirata, neve</translation>
</message>
<message>
<source>Fruit, Jungle</source>
- <translation type="unfinished"></translation>
+ <translation>Frutta. Giungla</translation>
</message>
<message>
<source>Nature</source>
- <translation type="unfinished"></translation>
+ <translation>Natura</translation>
</message>
<message>
<source>olympics_sd</source>
- <translation type="unfinished"></translation>
+ <translation>Olimpiadi_sd</translation>
</message>
<message>
<source>sdmusic (Hitman [sheepluva edit])</source>
- <translation type="unfinished"></translation>
+ <translation>sdmusic (Hitman [sheepluva edit])</translation>
</message>
<message>
<source>Translations</source>
- <translation type="unfinished"></translation>
+ <translation>Traduzioni</translation>
</message>
<message>
<source>Brazilian Portuguese</source>
- <translation type="unfinished"></translation>
+ <translation>Portoghese Brasiliano</translation>
</message>
<message>
<source>Bulgarian</source>
- <translation type="unfinished"></translation>
+ <translation>Bulgaro</translation>
</message>
<message>
<source>Czech</source>
- <translation type="unfinished"></translation>
+ <translation>Ceco</translation>
</message>
<message>
<source>Chinese</source>
- <translation type="unfinished"></translation>
+ <translation>Cinese</translation>
</message>
<message>
<source>Finnish</source>
- <translation type="unfinished"></translation>
+ <translation>Finlandese</translation>
</message>
<message>
<source>French</source>
- <translation type="unfinished"></translation>
+ <translation>Francese</translation>
</message>
<message>
<source>German</source>
- <translation type="unfinished"></translation>
+ <translation>Tedesco</translation>
</message>
<message>
<source>Greek</source>
- <translation type="unfinished"></translation>
+ <translation>Greco</translation>
</message>
<message>
<source>Italian</source>
- <translation type="unfinished"></translation>
+ <translation>Italiano</translation>
</message>
<message>
<source>Japanese</source>
- <translation type="unfinished"></translation>
+ <translation>Giapponese</translation>
</message>
<message>
<source>Korean</source>
- <translation type="unfinished"></translation>
+ <translation>Coreano</translation>
</message>
<message>
<source>Lithuanian</source>
- <translation type="unfinished"></translation>
+ <translation>Lituano</translation>
</message>
<message>
<source>Polish</source>
- <translation type="unfinished"></translation>
+ <translation>Polacco</translation>
</message>
<message>
<source>Portuguese</source>
- <translation type="unfinished"></translation>
+ <translation>Portoghese</translation>
</message>
<message>
<source>Russian</source>
- <translation type="unfinished"></translation>
+ <translation>Russo</translation>
</message>
<message>
<source>Scottish Gaelic</source>
- <translation type="unfinished"></translation>
+ <translation>Scozzese</translation>
</message>
<message>
<source>Slovak</source>
- <translation type="unfinished"></translation>
+ <translation>Slovacco</translation>
</message>
<message>
<source>Spanish</source>
- <translation type="unfinished"></translation>
+ <translation>Spagnolo</translation>
</message>
<message>
<source>Swedish</source>
- <translation type="unfinished"></translation>
+ <translation>Svedese</translation>
</message>
<message>
<source>Ukrainian</source>
- <translation type="unfinished"></translation>
+ <translation>Ucraino</translation>
</message>
<message>
<source>Special thanks</source>
- <translation type="unfinished"></translation>
+ <translation>Ringraziamenti Speciali</translation>
</message>
<message>
<source>Project founder</source>
- <translation type="unfinished"></translation>
+ <translation>Fondatore del progetto</translation>
</message>
</context>
<context>
@@ -5177,379 +5199,379 @@
</message>
<message>
<source>The game can't be started with less than two clans!</source>
- <translation type="unfinished"></translation>
+ <translation>Il gioco non può iniziare con meno di due clan!</translation>
</message>
<message>
<source>Empty config entry.</source>
- <translation type="unfinished"></translation>
+ <translation>Ingresso di configurazione vuoto.</translation>
</message>
<message>
<source>Access denied.</source>
- <translation type="unfinished"></translation>
+ <translation>Accesso negato.</translation>
</message>
<message>
<source>You're not the room master!</source>
- <translation type="unfinished"></translation>
+ <translation>Non sei il capostanza!</translation>
</message>
<message>
<source>Corrupted hedgehogs info!</source>
- <translation type="unfinished"></translation>
+ <translation>Informazioni sui ricci corrotte!</translation>
</message>
<message>
<source>Too many teams!</source>
- <translation type="unfinished"></translation>
+ <translation>Troppe squadre!</translation>
</message>
<message>
<source>Too many hedgehogs!</source>
- <translation type="unfinished"></translation>
+ <translation>Troppi ricci!</translation>
</message>
<message>
<source>There's already a team with same name in the list.</source>
- <translation type="unfinished"></translation>
+ <translation>C'è gia una squadra con quel nome nell'elenco.</translation>
</message>
<message>
<source>Joining not possible: Round is in progress.</source>
- <translation type="unfinished"></translation>
+ <translation>Partecipazione non consentita: Il round è già iniziato.</translation>
</message>
<message>
<source>This room currently does not allow adding new teams.</source>
- <translation type="unfinished"></translation>
+ <translation>Al momento questa stanza non consente di aggiungere nuove squadre.</translation>
</message>
<message>
<source>Error: The team you tried to remove does not exist.</source>
- <translation type="unfinished"></translation>
+ <translation>Errore: la squadra che hai cercato di rimuovere non esiste.</translation>
</message>
<message>
<source>You can't remove a team you don't own.</source>
- <translation type="unfinished"></translation>
+ <translation>Non puoi rimuovere una squadra che non possiedi.</translation>
</message>
<message>
<source>Illegal room name! The room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
- <translation type="unfinished"></translation>
+ <translation>Nome stanza invalido! Il nome della stanza deve contenere tra gli 1 e i 40 caratteri,non deve iniziare con uno spazio e non può contenere spazi prolungati,inoltre non può contenere questi caratteri: $()*+?[]^{|}</translation>
</message>
<message>
<source>A room with the same name already exists.</source>
- <translation type="unfinished"></translation>
+ <translation>Una stanza con lo stesso nome esiste già.</translation>
</message>
<message>
<source>/callvote kick: You need to specify a nickname.</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote kick: Devi specificare un nickname.</translation>
</message>
<message>
<source>/callvote kick: No such user!</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote kick: Non esiste questo utente!</translation>
</message>
<message>
<source>/callvote map: No such map!</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote map: Non esiste una tale mappa!</translation>
</message>
<message>
<source>/callvote pause: No game in progress!</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote pause: tale partita non è in corso!</translation>
</message>
<message>
<source>/callvote hedgehogs: Specify number from 1 to 8.</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote hedgehogs: Specifica un numero da 1 a 8.</translation>
</message>
<message>
<source>Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
- <translation type="unfinished"></translation>
+ <translation>Nome stanza invalido! Il nome della stanza deve contenere tra gli 1 e i 40 caratteri,non deve iniziare con uno spazio e non può contenere spazi prolungati,inoltre non può contenere questi caratteri: $()*+?[]^{|}</translation>
</message>
<message>
<source>No such room.</source>
- <translation type="unfinished"></translation>
+ <translation>Non esiste una tale stanza.</translation>
</message>
<message>
<source>Room version incompatible to your Hedgewars version!</source>
- <translation type="unfinished"></translation>
+ <translation>La versione Hedgewars di questa stanza non è compatibile con la tua!</translation>
</message>
<message>
<source>Access denied. This room currently doesn't allow joining.</source>
- <translation type="unfinished"></translation>
+ <translation>Accesso negato. Questa stanza non permette partecipazioni.</translation>
</message>
<message>
<source>Access denied. This room is for registered users only.</source>
- <translation type="unfinished"></translation>
+ <translation>Accesso negato. Questa stanza è riservata a solo gli utenti iscritti.</translation>
</message>
<message>
<source>You are banned from this room.</source>
- <translation type="unfinished"></translation>
+ <translation>Sei stato bannato da questa stanza.</translation>
</message>
<message>
<source>Nickname already provided.</source>
- <translation type="unfinished"></translation>
+ <translation>Nickname già fornito.</translation>
</message>
<message>
<source>Illegal nickname! Nicknames must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}</source>
- <translation type="unfinished"></translation>
+ <translation>Nickname invalido! Il nickname deve contenere tra gli 1 e i 40 caratteri,non deve iniziare con uno spazio e non può contenere spazi prolungati,inoltre non può contenere questi caratteri: $()*+?[]^{|}</translation>
</message>
<message>
<source>Protocol already known.</source>
- <translation type="unfinished"></translation>
+ <translation>Protocollo già conosciuto.</translation>
</message>
<message>
<source>Bad number.</source>
- <translation type="unfinished"></translation>
+ <translation>Brutto numero.</translation>
</message>
<message>
<source>There's no voting going on.</source>
- <translation type="unfinished"></translation>
+ <translation>Non c'è nessuna votazione in corso.</translation>
</message>
<message>
<source>You already have voted.</source>
- <translation type="unfinished"></translation>
+ <translation>Hai già votato.</translation>
</message>
<message>
<source>Your vote has been counted.</source>
- <translation type="unfinished"></translation>
+ <translation>Il tuo voto è riconosciuto.</translation>
</message>
<message>
<source>Voting closed.</source>
- <translation type="unfinished"></translation>
+ <translation>Votazione chiusa.</translation>
</message>
<message>
<source>Pause toggled.</source>
- <translation type="unfinished"></translation>
+ <translation>Pausa attivata.</translation>
</message>
<message>
<source>Voting expired.</source>
- <translation type="unfinished"></translation>
+ <translation>Votazione scaduta.</translation>
</message>
<message>
<source>hedgehogs per team: </source>
- <translation type="unfinished"></translation>
+ <translation>Ricci per squadra: </translation>
</message>
<message>
<source>/info <player>: Show info about player</source>
- <translation type="unfinished"></translation>
+ <translation>/info <player>: Mostra informazioni sul giocatore</translation>
</message>
<message>
<source>/me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza'</source>
- <translation type="unfinished"></translation>
+ <translation>/me <message>: Chat action, e.g. '/me eats pizza' becomes '*Player eats pizza'</translation>
</message>
<message>
<source>/rnd: Flip a virtual coin and reply with 'heads' or 'tails'</source>
- <translation type="unfinished"></translation>
+ <translation>/rnd: Tira una moneta virtuale e rispone con testa o croce</translation>
</message>
<message>
<source>/rnd [A] [B] [C] [...]: Reply with a random word from the given list</source>
- <translation type="unfinished"></translation>
+ <translation>/rnd [A] [B] [C] [...]: Risponde con una delle parole nella lista in modo casuale</translation>
</message>
<message>
<source>/watch <id>: Watch a demo stored on the server with the given ID</source>
- <translation type="unfinished"></translation>
+ <translation>/watch <id>: Guarda un filmato presente nel server con questo ID</translation>
</message>
<message>
<source>/help: Show chat command help</source>
- <translation type="unfinished"></translation>
+ <translation>/help: Mostra un aiuto per i comandi di chat</translation>
</message>
<message>
<source>/callvote [arguments]: Start a vote</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote [arguments]: Inizia una votazione</translation>
</message>
<message>
<source>/vote <yes/no>: Vote 'yes' or 'no' for active vote</source>
- <translation type="unfinished"></translation>
+ <translation>/vote <yes/no>: Vota 'si' o 'no' per la votazione corrente</translation>
</message>
<message>
<source>/delegate <player>: Surrender room control to player</source>
- <translation type="unfinished"></translation>
+ <translation>/delegate <player>: Cedi il controllo della stanza al giocatore</translation>
</message>
<message>
<source>/maxteams <N>: Limit maximum number of teams to N</source>
- <translation type="unfinished"></translation>
+ <translation>/maxteams <N>: Imposta il limite massimo di squadre a N</translation>
</message>
<message>
<source>/global <message>: Send global chat message which can be seen by everyone on the server</source>
- <translation type="unfinished"></translation>
+ <translation>/global <message>: Invia un messaggio globale che può essere visto da tutti nel server</translation>
</message>
<message>
<source>/registered_only: Toggle 'registered only' state. If enabled, only registered players can join server</source>
- <translation type="unfinished"></translation>
+ <translation>/registered_only: Abilita l'opzione solo iscritti. Se attivato, solo i giocatori registrati potranno partcipare al server</translation>
</message>
<message>
<source>/super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server</source>
- <translation type="unfinished"></translation>
+ <translation>/super_power: Attiva il tuo superpoter. Con esso puoi entrare in ogni stanza e sei protetto dall'essere cacciato. L'effetto termina quando ti disconnetti</translation>
</message>
<message>
<source>/stats: Query server stats</source>
- <translation type="unfinished"></translation>
+ <translation>/stats: Richiedi le statistiche del server</translation>
</message>
<message>
<source>/force <yes/no>: Force vote result for active vote</source>
- <translation type="unfinished"></translation>
+ <translation>/force <yes/no>: Forza il risultato della votazione in corso</translation>
</message>
<message>
<source>/fix: Force this room to stay open when it is empty</source>
- <translation type="unfinished"></translation>
+ <translation>/fix: Imponi a questa stanza di rimanere aperta anche quando è vuota</translation>
</message>
<message>
<source>/unfix: Undo the /fix command</source>
- <translation type="unfinished"></translation>
+ <translation>/unfix: Annulla il comando /fix</translation>
</message>
<message>
<source>List of lobby chat commands:</source>
- <translation type="unfinished"></translation>
+ <translation>Lista dei comandi di chat per la lobby:</translation>
</message>
<message>
<source>List of room chat commands:</source>
- <translation type="unfinished"></translation>
+ <translation>Lista dei comandi di chat per la stanza:</translation>
</message>
<message>
<source>Commands for server admins only:</source>
- <translation type="unfinished"></translation>
+ <translation>Comandi per gli admins:</translation>
</message>
<message>
<source>room</source>
- <translation type="unfinished"></translation>
+ <translation>stanza</translation>
</message>
<message>
<source>lobby</source>
- <translation type="unfinished"></translation>
+ <translation>lobby</translation>
</message>
<message>
<source>(playing)</source>
- <translation type="unfinished"></translation>
+ <translation>(giocando)</translation>
</message>
<message>
<source>(spectating)</source>
- <translation type="unfinished"></translation>
+ <translation>(guardando)</translation>
</message>
<message>
<source>Player is not online.</source>
- <translation type="unfinished"></translation>
+ <translation>Il giocatore non è online.</translation>
</message>
<message>
<source>/force: Please use 'yes' or 'no'.</source>
- <translation type="unfinished"></translation>
+ <translation>/force: Perfavore usa 'yes' o 'no'.</translation>
</message>
<message>
<source>/vote: Please use 'yes' or 'no'.</source>
- <translation type="unfinished"></translation>
+ <translation>/vote: Perfavore usa 'yes' or 'no'.</translation>
</message>
<message>
<source>Kicked</source>
- <translation type="unfinished"></translation>
+ <translation>Cacciato</translation>
</message>
<message>
<source>This server only allows registered users to join.</source>
- <translation type="unfinished"></translation>
+ <translation>Questo server ammette solo utenti registrati.</translation>
</message>
<message>
<source>heads</source>
- <translation type="unfinished"></translation>
+ <translation>teste</translation>
</message>
<message>
<source>tails</source>
- <translation type="unfinished"></translation>
+ <translation>code</translation>
</message>
<message>
<source>This server does not support replays!</source>
- <translation type="unfinished"></translation>
+ <translation>Questo server non supporta i replay!</translation>
</message>
<message>
<source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
- <translation type="unfinished"></translation>
+ <translation>/greeting [message]: Imposta il messaggio di benvenuto che verrà mostrato ai giocatori che entrano in stanza</translation>
</message>
<message>
<source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
- <translation type="unfinished"></translation>
+ <translation>/save <config ID> <config name>: Aggiunge a questa stanza l'opzione votabile di configurazione con /callvote map</translation>
</message>
<message>
<source>/delete <config ID>: Delete a votable room configuration</source>
- <translation type="unfinished"></translation>
+ <translation>/delete <config ID>: Elimina l'opzione votabile di configurazione</translation>
</message>
<message>
<source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
- <translation type="unfinished"></translation>
+ <translation>/saveroom <file name>: Salva tutte le opzioni di configurazione della mappa e i messaggi di benvenuto per questa stanza in un file</translation>
</message>
<message>
<source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source>
- <translation type="unfinished"></translation>
+ <translation>/loadroom <file name>: Carica l'opzione di configurazione della mappa e il messaggio di benvenuto dal file</translation>
</message>
<message>
<source>Super power activated.</source>
- <translation type="unfinished"></translation>
+ <translation>Super potere attivato.</translation>
</message>
<message>
<source>Unknown command or invalid parameters. Say '/help' in chat for a list of commands.</source>
- <translation type="unfinished"></translation>
+ <translation>Comando sconosciuto o parametri illegali. Scrivi '/help' nella chat per la lista dei comandi di chat.</translation>
</message>
<message>
<source>You can't kick yourself!</source>
- <translation type="unfinished"></translation>
+ <translation>Non puoi cacciarti da solo!</translation>
</message>
<message>
<source>You can't kick the only other player!</source>
- <translation type="unfinished"></translation>
+ <translation>Non puoi cacciare l'unico altro giocatore!</translation>
</message>
<message>
<source>The player is not in your room.</source>
- <translation type="unfinished"></translation>
+ <translation>Il giocatore non è nella tua stanza.</translation>
</message>
<message>
<source>This player is protected from being kicked.</source>
- <translation type="unfinished"></translation>
+ <translation>Questo giocatore è protetto dall'essere cacciato.</translation>
</message>
<message>
<source>You're not the room master or a server admin!</source>
- <translation type="unfinished"></translation>
+ <translation>Non sei nè il capostanza nè un admin del server!</translation>
</message>
<message>
<source>You're already the room master.</source>
- <translation type="unfinished"></translation>
+ <translation>Sei già il capostanza.</translation>
</message>
<message>
<source>Greeting message cleared.</source>
- <translation type="unfinished"></translation>
+ <translation>Messaggio di benvenuto cancellato.</translation>
</message>
<message>
<source>Greeting message set.</source>
- <translation type="unfinished"></translation>
+ <translation>Messaggio di benvenuto impostato.</translation>
</message>
<message>
<source>/callvote kick: This is only allowed in rooms without a room master.</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote kick: Questa opzione è valida solo nelle stanze senza un capostanza.</translation>
</message>
<message>
<source>/callvote map: No maps available.</source>
- <translation type="unfinished"></translation>
+ <translation>/callvote map: Nessuna mappa disponibile.</translation>
</message>
<message>
<source>You're the new room master!</source>
- <translation type="unfinished"></translation>
+ <translation>Sei il nuovo capostanza!</translation>
</message>
<message>
<source>/quit: Quit the server</source>
- <translation type="unfinished"></translation>
+ <translation>/quit: Esci dal server</translation>
</message>
<message>
<source>This command is only available in the lobby.</source>
- <translation type="unfinished"></translation>
+ <translation>Questo comando non è disponibile nella lobby.</translation>
</message>
<message>
<source>This command is only available in rooms.</source>
- <translation type="unfinished"></translation>
+ <translation>Questo comando è disponibile solo nelle stanze.</translation>
</message>
<message>
<source>This server no longer allows unregistered players to join.</source>
- <translation type="unfinished"></translation>
+ <translation>Il server non ammette più utenti non registrati di partecipare.</translation>
</message>
<message>
<source>This server now allows unregistered players to join.</source>
- <translation type="unfinished"></translation>
+ <translation>Il server non ammette gli utenti non registrati di partecipare.</translation>
</message>
<message>
<source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
- <translation type="unfinished"></translation>
+ <translation>Comandi di votazione disponibili:: hedgehogs <number>, pause, newseed, map <name>, kick <player></translation>
</message>
<message>
<source>Please confirm server restart with '/restart_server yes'.</source>
- <translation type="unfinished"></translation>
+ <translation>Perfavore conferma il riavvio del server con '/restart_server yes'.</translation>
</message>
<message>
<source>Warning! Room name change flood protection activated</source>
- <translation type="unfinished"></translation>
+ <translation>Attenzione! Attivata la protezione per l'inondazione di messagi</translation>
</message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_ru.ts Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_ru.ts Fri Jul 03 23:51:47 2020 +0200
@@ -80,46 +80,46 @@
</message>
<message>
<source>Credits</source>
- <translation type="unfinished"></translation>
+ <translation>Титры</translation>
</message>
<message>
<source>Other people</source>
- <translation type="unfinished"></translation>
+ <translation>Другие люди</translation>
</message>
<message>
<source>%1 (alias %2)</source>
- <translation type="unfinished"></translation>
+ <translation>%1 (под псевдонимом %2)</translation>
</message>
<message>
<source>%1 &lt;%2&gt;</source>
<extracomment>Part of credits. %1: Contributor name. %2: E-mail address</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1 &lt;%2&gt;</translation>
</message>
<message>
<source>%1: %2</source>
<extracomment>Part of credits. %1: Description of contribution. %2: Contributor name</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1: %2</translation>
</message>
<message>
<source>%1: %2 &lt;%3&gt;</source>
<extracomment>Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1: %2 &lt;%3&gt;</translation>
</message>
<message>
<source>Extended Credits</source>
- <translation type="unfinished"></translation>
+ <translation>Больше титров</translation>
</message>
<message>
<source>An extended credits list can be found in the CREDITS text file.</source>
- <translation type="unfinished"></translation>
+ <translation>Больше титров можно найти в файле CREDITS</translation>
</message>
<message>
<source><a href="https://visualstudio.microsoft.com">VC++</a>: %1</source>
- <translation type="unfinished"></translation>
+ <translation><a href="https://visualstudio.microsoft.com">VC++</a>: %1</translation>
</message>
<message>
<source>Unknown Compiler: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Неизвестный компилятор: %1</translation>
</message>
</context>
<context>
@@ -602,10 +602,6 @@
Пожалуйста, попробуйте снова через несколько секунд.</translation>
</message>
<message>
- <source>Guest</source>
- <translation type="vanished">Гость</translation>
- </message>
- <message>
<source>Room password</source>
<translation>Пароль комнаты</translation>
</message>
@@ -864,15 +860,15 @@
</message>
<message>
<source>Scale size of the drawn map</source>
- <translation type="unfinished"></translation>
+ <translation>Масштаб размера нарисованной карты</translation>
</message>
<message>
<source>Load</source>
- <translation type="unfinished">Загрузить</translation>
+ <translation>Загрузить</translation>
</message>
<message>
<source>Edit</source>
- <translation type="unfinished"></translation>
+ <translation>Редактировать</translation>
</message>
</context>
<context>
@@ -997,7 +993,14 @@
Last engine message:
%1</source>
- <translation type="unfinished"></translation>
+ <translation>Произошла фатальная ошибка во время обработки видеозаписи! Видео не может быть сохранено.
+
+Как вариант, вы можете попробовать сбросить настройки видеозаписи Hedgewars до стандартных.
+
+Чтобы сообщить об этой ошибке, пожалуйста, нажмите кнопку 'Отзыв' в главном меню!
+
+Последнее сообщение движка:
+%1</translation>
</message>
</context>
<context>
@@ -1041,7 +1044,7 @@
</message>
<message>
<source>Warning: The same key is assigned multiple times!</source>
- <translation type="unfinished"></translation>
+ <translation>Предупреждение: Одна и так же клавиша назначена несколько раз!</translation>
</message>
</context>
<context>
@@ -1448,10 +1451,10 @@
<message numerus="yes">
<source>(%1 %2)</source>
<extracomment>For custom number of points in the stats screen, written after the team name. %1 is the number, %2 is the word. Example: “4 points”</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
- <numerusform></numerusform>
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 %2)</numerusform>
+ <numerusform>(%1 %2)</numerusform>
+ <numerusform>(%1 %2)</numerusform>
</translation>
</message>
<message numerus="yes">
@@ -1477,27 +1480,27 @@
<message numerus="yes">
<source>(%1 point(s))</source>
<extracomment>Number of points in stats screen, written after the team name</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
- <numerusform></numerusform>
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 очко)</numerusform>
+ <numerusform>(%1 очка)</numerusform>
+ <numerusform>(%1 очков)</numerusform>
</translation>
</message>
<message numerus="yes">
<source>(%L1 second(s))</source>
<extracomment>Time in seconds</extracomment>
- <translation type="unfinished">
- <numerusform></numerusform>
- <numerusform></numerusform>
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%L1 секунда)</numerusform>
+ <numerusform>(%L1 секунды)</numerusform>
+ <numerusform>(%L1 секунд)</numerusform>
</translation>
</message>
<message numerus="yes">
<source>(%1 crate(s))</source>
- <translation type="unfinished">
- <numerusform></numerusform>
- <numerusform></numerusform>
- <numerusform></numerusform>
+ <translation>
+ <numerusform>(%1 ящик)</numerusform>
+ <numerusform>(%1 ящика)</numerusform>
+ <numerusform>(%1 ящиков)</numerusform>
</translation>
</message>
</context>
@@ -1597,19 +1600,19 @@
<name>PageNet</name>
<message>
<source>Connect to the selected server</source>
- <translation type="unfinished"></translation>
+ <translation>Подключиться к выбранному серверу</translation>
</message>
<message>
<source>Update the list of servers</source>
- <translation type="unfinished"></translation>
+ <translation>Обновить список серверов</translation>
</message>
<message>
<source>Specify the address and port number of a known server and connect to it directly</source>
- <translation type="unfinished"></translation>
+ <translation>Укажите адрес и номер порта известного сервера чтобы подключиться к нему напрямую</translation>
</message>
<message>
<source>Start private server</source>
- <translation type="unfinished">Запустить личный сервер</translation>
+ <translation>Запустить личный сервер</translation>
</message>
</context>
<context>
@@ -2207,10 +2210,6 @@
<translation>Кампания</translation>
</message>
<message>
- <source>Practice your skills in a range of training missions</source>
- <translation type="vanished">Тренировка мастерства в тренировочных миссиях</translation>
- </message>
- <message>
<source>Watch recorded demos</source>
<translation>Смотреть записанные демки</translation>
</message>
@@ -2220,7 +2219,7 @@
</message>
<message>
<source>Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios.</source>
- <translation type="unfinished"></translation>
+ <translation>Однопользовательские миссии: Научитесь играть в тренировках, улучшайте свои навыки в испытаниях или попытайтесь выполнить цели в сценариях.</translation>
</message>
</context>
<context>
@@ -2267,30 +2266,30 @@
</message>
<message>
<source>Team</source>
- <translation type="unfinished">Команда</translation>
+ <translation>Команда</translation>
</message>
<message>
<source>Team highscore: %1</source>
<extracomment>Highest score of a team</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Лучший счёт команды: %1</translation>
</message>
<message>
<source>Team lowscore: %1</source>
<extracomment>Lowest score of a team</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Худший счёт команды: %1</translation>
</message>
<message>
<source>Team's top accuracy: %1%</source>
<extracomment>Best accuracy of a team (in a challenge)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Наибольшая точность команды: %1%</translation>
</message>
<message>
<source>Team's best time: %L1 s</source>
- <translation type="unfinished"></translation>
+ <translation>Лучшее время команды: %L1 с</translation>
</message>
<message>
<source>Team's longest time: %L1 s</source>
- <translation type="unfinished"></translation>
+ <translation>Худшее время команды: %L1 с</translation>
</message>
</context>
<context>
@@ -2340,12 +2339,12 @@
<message>
<source>%1%</source>
<extracomment>Video encoding progress. %1 = number</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1%</translation>
</message>
<message>
<source>%1 (%2%) - %3</source>
<extracomment>Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>%1 (%2%) - %3</translation>
</message>
</context>
<context>
@@ -2955,7 +2954,7 @@
</message>
<message>
<source>Zoom (%)</source>
- <translation type="unfinished"></translation>
+ <translation>Масштаб (%)</translation>
</message>
</context>
<context>
@@ -3216,12 +3215,13 @@
</message>
<message>
<source>Server redirection</source>
- <translation type="unfinished"></translation>
+ <translation>Перенаправление сервера</translation>
</message>
<message>
<source>This server supports secure connections on port %1.
Would you like to reconnect securely?</source>
- <translation type="unfinished"></translation>
+ <translation>Этот сервер поддерживает безопасное соединение на порту %1.
+Не желаете ли переподсоединиться безопасно?</translation>
</message>
</context>
<context>
@@ -3262,10 +3262,6 @@
<translation>Загрузить</translation>
</message>
<message>
- <source>Specify</source>
- <translation type="vanished">Указать</translation>
- </message>
- <message>
<source>default</source>
<translation>по умолчанию</translation>
</message>
@@ -3343,7 +3339,7 @@
</message>
<message>
<source>Specify address</source>
- <translation type="unfinished"></translation>
+ <translation>Указать адрес</translation>
</message>
</context>
<context>
@@ -3647,10 +3643,6 @@
<translation>таймер на 5 сек</translation>
</message>
<message>
- <source>capture</source>
- <translation type="vanished">снимок</translation>
- </message>
- <message>
<source>quit</source>
<translation>выход</translation>
</message>
@@ -3703,16 +3695,12 @@
<translation>уменьшить</translation>
</message>
<message>
- <source>reset zoom</source>
- <translation type="vanished">сбросить увеличение</translation>
- </message>
- <message>
<source>long jump</source>
<translation>прыжок в длину</translation>
</message>
<message>
<source>high jump</source>
- <translation>прыжок в высоту</translation>
+ <translation>прыжок вверх</translation>
</message>
<message>
<source>slot 10</source>
@@ -3761,59 +3749,59 @@
</message>
<message>
<source>unselect weapon</source>
- <translation type="unfinished"></translation>
+ <translation>убрать оружие</translation>
</message>
<message>
<source>stand still on slippery land</source>
- <translation type="unfinished"></translation>
+ <translation>стоять спокойно на скользкой поверхности</translation>
</message>
<message>
<source>change direction without moving</source>
- <translation type="unfinished"></translation>
+ <translation>изменить направление без движения</translation>
</message>
<message>
<source>switch backwards</source>
- <translation type="unfinished"></translation>
+ <translation>переключить назад</translation>
</message>
<message>
<source>change bounciness</source>
- <translation type="unfinished"></translation>
+ <translation>изменить отскок</translation>
</message>
<message>
<source>reset zoom to start value</source>
- <translation type="unfinished"></translation>
+ <translation>сбросить масштаб до первоначального</translation>
</message>
<message>
<source>set zoom to 100%</source>
- <translation type="unfinished"></translation>
+ <translation>установить масштаб в 100%</translation>
</message>
<message>
<source>save map as image</source>
- <translation type="unfinished"></translation>
+ <translation>сохранить карту, как изображение</translation>
</message>
<message>
<source>show object information</source>
- <translation type="unfinished"></translation>
+ <translation>показать информацию об объекте</translation>
</message>
<message>
<source>change hedgehog tag types</source>
- <translation type="unfinished"></translation>
+ <translation>изменить тип ярлыков над ёжиками</translation>
</message>
<message>
<source>toggle hedgehog tag translucency</source>
- <translation type="unfinished"></translation>
+ <translation>вкл/выкл прозрачность ярлыков над ёжиками</translation>
</message>
<message>
<source>toggle HUD</source>
- <translation type="unfinished"></translation>
+ <translation>вкл/выкл информационную панель (HUD)</translation>
</message>
<message>
<source>backwards jump</source>
- <translation type="unfinished"></translation>
+ <translation>прыжок назад</translation>
</message>
<message>
<source>screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>снимок экрана</translation>
</message>
</context>
<context>
@@ -3839,43 +3827,43 @@
<name>binds (combination)</name>
<message>
<source>hold down precise</source>
- <translation type="unfinished"></translation>
+ <translation>зажмите точность</translation>
</message>
<message>
<source>precise + left/right</source>
- <translation type="unfinished"></translation>
+ <translation>точность + лево/право</translation>
</message>
<message>
<source>precise + switch</source>
- <translation type="unfinished"></translation>
+ <translation>точность + переключить</translation>
</message>
<message>
<source>precise + timer</source>
- <translation type="unfinished"></translation>
+ <translation>точность + таймер</translation>
</message>
<message>
<source>precise + reset zoom</source>
- <translation type="unfinished"></translation>
+ <translation>точность + сброс масштаба</translation>
</message>
<message>
<source>precise + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>точность + вкл ярлыки над ёжиками</translation>
</message>
<message>
<source>switch + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>переключить + вкл ярлыки над ёжиками</translation>
</message>
<message>
<source>precise + switch + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>точность + переключить + вкл ярлыки над ёжиками</translation>
</message>
<message>
<source>high jump (twice)</source>
- <translation type="unfinished"></translation>
+ <translation>прыжок вверх (дважды)</translation>
</message>
<message>
<source>precise + screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>точность + снимок экрана</translation>
</message>
</context>
<context>
@@ -4032,98 +4020,6 @@
<translation>Влево</translation>
</message>
<message>
- <source>Right shift</source>
- <translation type="vanished">Правый shift</translation>
- </message>
- <message>
- <source>Left shift</source>
- <translation type="vanished">Левый shift</translation>
- </message>
- <message>
- <source>Right ctrl</source>
- <translation type="vanished">Правый ctrl</translation>
- </message>
- <message>
- <source>Left ctrl</source>
- <translation type="vanished">Левый ctrl</translation>
- </message>
- <message>
- <source>Right alt</source>
- <translation type="vanished">Правый alt</translation>
- </message>
- <message>
- <source>Left alt</source>
- <translation type="vanished">Левый alt</translation>
- </message>
- <message>
- <source>Numpad 0</source>
- <translation type="vanished">Цифровая клавиатура 0</translation>
- </message>
- <message>
- <source>Numpad 1</source>
- <translation type="vanished">Цифровая клавиатура 1</translation>
- </message>
- <message>
- <source>Numpad 2</source>
- <translation type="vanished">Цифровая клавиатура 2</translation>
- </message>
- <message>
- <source>Numpad 3</source>
- <translation type="vanished">Цифровая клавиатура 3</translation>
- </message>
- <message>
- <source>Numpad 4</source>
- <translation type="vanished">Цифровая клавиатура 4</translation>
- </message>
- <message>
- <source>Numpad 5</source>
- <translation type="vanished">Цифровая клавиатура 5</translation>
- </message>
- <message>
- <source>Numpad 6</source>
- <translation type="vanished">Цифровая клавиатура 6</translation>
- </message>
- <message>
- <source>Numpad 7</source>
- <translation type="vanished">Цифровая клавиатура 7</translation>
- </message>
- <message>
- <source>Numpad 8</source>
- <translation type="vanished">Цифровая клавиатура 8</translation>
- </message>
- <message>
- <source>Numpad 9</source>
- <translation type="vanished">Цифровая клавиатура 9</translation>
- </message>
- <message>
- <source>Numpad .</source>
- <translation type="vanished">Цифровая клавиатура .</translation>
- </message>
- <message>
- <source>Numpad /</source>
- <translation type="vanished">Цифровая клавиатура /</translation>
- </message>
- <message>
- <source>Numpad *</source>
- <translation type="vanished">Цифровая клавиатура *</translation>
- </message>
- <message>
- <source>Numpad -</source>
- <translation type="vanished">Цифровая клавиатура -</translation>
- </message>
- <message>
- <source>Numpad +</source>
- <translation type="vanished">Цифровая клавиатура +</translation>
- </message>
- <message>
- <source>Enter</source>
- <translation type="vanished">Enter</translation>
- </message>
- <message>
- <source>Equals</source>
- <translation type="vanished">=</translation>
- </message>
- <message>
<source>Insert</source>
<translation>Insert</translation>
</message>
@@ -4136,34 +4032,6 @@
<translation>End</translation>
</message>
<message>
- <source>Page up</source>
- <translation type="vanished">Page up</translation>
- </message>
- <message>
- <source>Page down</source>
- <translation type="vanished">Page down</translation>
- </message>
- <message>
- <source>Num lock</source>
- <translation type="vanished">Num lock</translation>
- </message>
- <message>
- <source>Caps lock</source>
- <translation type="vanished">Caps lock</translation>
- </message>
- <message>
- <source>Scroll lock</source>
- <translation type="vanished">Scroll lock</translation>
- </message>
- <message>
- <source>Right meta</source>
- <translation type="vanished">Правая метаклавиша</translation>
- </message>
- <message>
- <source>Left meta</source>
- <translation type="vanished">Левая метаклавишa</translation>
- </message>
- <message>
<source>A button</source>
<translation>Кнопка A</translation>
</message>
@@ -4250,7 +4118,7 @@
<message>
<source>Axis %1 %2</source>
<extracomment>Game controller axis direction. %1 = axis number, %2 = direction</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Ось %1 %2</translation>
</message>
<message>
<source>Button %1</source>
@@ -4260,610 +4128,610 @@
<message>
<source>D-pad %1 %2</source>
<extracomment>Game controller D-pad button. %1 = D-pad number, %2 = direction</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Крестовина %1 %2</translation>
</message>
<message>
<source>(Don't use)</source>
<extracomment>Special entry in key selection when an action has no control assigned</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Не использовать</translation>
</message>
<message>
<source>Mouse: X1 button </source>
- <translation type="unfinished"></translation>
+ <translation>Мышь: клавиша X1</translation>
</message>
<message>
<source>Mouse: X2 button</source>
- <translation type="unfinished"></translation>
+ <translation>Мышь: клавиша X2</translation>
</message>
<message>
<source>Keypad 0</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 0</translation>
</message>
<message>
<source>Keypad 1</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 1</translation>
</message>
<message>
<source>Keypad 2</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 2</translation>
</message>
<message>
<source>Keypad 3</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 3</translation>
</message>
<message>
<source>Keypad 4</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 4</translation>
</message>
<message>
<source>Keypad 5</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 5</translation>
</message>
<message>
<source>Keypad 6</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 6</translation>
</message>
<message>
<source>Keypad 7</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 7</translation>
</message>
<message>
<source>Keypad 8</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 8</translation>
</message>
<message>
<source>Keypad 9</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок 9</translation>
</message>
<message>
<source>Keypad .</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок .</translation>
</message>
<message>
<source>Keypad /</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок /</translation>
</message>
<message>
<source>Keypad *</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок *</translation>
</message>
<message>
<source>Keypad -</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок -</translation>
</message>
<message>
<source>Keypad +</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок +</translation>
</message>
<message>
<source>Keypad Enter</source>
- <translation type="unfinished"></translation>
+ <translation>Цифр. блок Enter</translation>
</message>
<message>
<source>PageUp</source>
- <translation type="unfinished"></translation>
+ <translation>PageUp</translation>
</message>
<message>
<source>PageDown</source>
- <translation type="unfinished"></translation>
+ <translation>PageDown</translation>
</message>
<message>
<source>Numlock</source>
- <translation type="unfinished"></translation>
+ <translation>Numlock</translation>
</message>
<message>
<source>CapsLock</source>
- <translation type="unfinished"></translation>
+ <translation>CapsLock</translation>
</message>
<message>
<source>ScrollLock</source>
- <translation type="unfinished"></translation>
+ <translation>ScrollLock</translation>
</message>
<message>
<source>Right Shift</source>
- <translation type="unfinished"></translation>
+ <translation>Правый Shift</translation>
</message>
<message>
<source>Left Shift</source>
- <translation type="unfinished"></translation>
+ <translation>Левый Shift</translation>
</message>
<message>
<source>Right Ctrl</source>
- <translation type="unfinished"></translation>
+ <translation>Правый Ctrl</translation>
</message>
<message>
<source>Left Ctrl</source>
- <translation type="unfinished"></translation>
+ <translation>Левый Ctrl</translation>
</message>
<message>
<source>Right Alt</source>
- <translation type="unfinished"></translation>
+ <translation>Правый Alt</translation>
</message>
<message>
<source>Left Alt</source>
- <translation type="unfinished"></translation>
+ <translation>Левый Alt</translation>
</message>
<message>
<source>Right GUI</source>
<extracomment>Windows key / Command key / Meta key /Super key (right)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Правая мета-клавиша</translation>
</message>
<message>
<source>Left GUI</source>
<extracomment>Windows key / Command key / Meta key /Super key (left)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>Левая мета-клавиша</translation>
</message>
<message>
<source>(QWERTY)</source>
<extracomment>Name of QWERTY US keyboard layout</extracomment>
- <translation type="unfinished"></translation>
+ <translation>(QWERTY)</translation>
</message>
<message>
<source>Menu</source>
- <translation type="unfinished"></translation>
+ <translation>Меню</translation>
</message>
</context>
<context>
<name>credits</name>
<message>
<source>Programming</source>
- <translation type="unfinished"></translation>
+ <translation>Программирование</translation>
</message>
<message>
<source>Game engine</source>
- <translation type="unfinished"></translation>
+ <translation>Игровой движок</translation>
</message>
<message>
<source>Creator</source>
- <translation type="unfinished"></translation>
+ <translation>Создатель</translation>
</message>
<message>
<source>Many engine improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Множество улучшений движка</translation>
</message>
<message>
<source>Gamepad and Lua integration</source>
- <translation type="unfinished"></translation>
+ <translation>Интеграция геймпада и Lua</translation>
</message>
<message>
<source>Campaign support</source>
- <translation type="unfinished"></translation>
+ <translation>Поддержка кампаний</translation>
</message>
<message>
<source>Theme customization improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Улучшения изменения тем</translation>
</message>
<message>
<source>Some Pas2C and GLES2 work</source>
- <translation type="unfinished"></translation>
+ <translation>Некоторая работа над Pas2C и GLES2</translation>
</message>
<message>
<source>Video recording</source>
- <translation type="unfinished"></translation>
+ <translation>Видеозапись</translation>
</message>
<message>
<source>Other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Другие улучшения</translation>
</message>
<message>
<source>Map generation</source>
- <translation type="unfinished"></translation>
+ <translation>Генерация карт</translation>
</message>
<message>
<source>Core map generators</source>
- <translation type="unfinished"></translation>
+ <translation>Основные генераторы карт</translation>
</message>
<message>
<source>Perlin maps and other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Перлиновские карты и другие улучшения</translation>
</message>
<message>
<source>Maze maps</source>
- <translation type="unfinished"></translation>
+ <translation>Карты лабиринты</translation>
</message>
<message>
<source>Weapons</source>
- <translation type="unfinished">Оружие</translation>
+ <translation>Оружие</translation>
</message>
<message>
<source>Most core weapons</source>
- <translation type="unfinished"></translation>
+ <translation>Большинство основного оружия</translation>
</message>
<message>
<source>Air mine, rubber, others</source>
- <translation type="unfinished"></translation>
+ <translation>Воздушная мина, батут и другое</translation>
</message>
<message>
<source>Drill rocket, ballgun, RC plane</source>
- <translation type="unfinished"></translation>
+ <translation>Сверлящая ракета, шаромёт, радиоуправляемый самолётик</translation>
</message>
<message>
<source>Freezer</source>
- <translation type="unfinished"></translation>
+ <translation>Замораживатель</translation>
</message>
<message>
<source>Mine number and time game settings</source>
- <translation type="unfinished"></translation>
+ <translation>Число мин и настройки игрового времени</translation>
</message>
<message>
<source>Frontend / main menu</source>
- <translation type="unfinished"></translation>
+ <translation>Главное меню</translation>
</message>
<message>
<source>Many frontend improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Множество улучшений главного меню</translation>
</message>
<message>
<source>Keybinds, feedback, maps and hats interfaces</source>
- <translation type="unfinished"></translation>
+ <translation>Привязки клавиш, отзыв, интерфейс карт и шапок</translation>
</message>
<message>
<source>Login dialogs, other improvements</source>
- <translation type="unfinished"></translation>
+ <translation>Диалоги логина и другие улучшения</translation>
</message>
<message>
<source>Missions and styles</source>
- <translation type="unfinished"></translation>
+ <translation>Миссии и стили</translation>
</message>
<message>
<source>A Classic Fairytale</source>
- <translation type="unfinished"></translation>
+ <translation>Классическая сказка</translation>
</message>
<message>
<source>A Space Adventure</source>
- <translation type="unfinished"></translation>
+ <translation>Космическое приключение</translation>
</message>
<message>
<source>Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</source>
- <translation type="unfinished"></translation>
+ <translation>Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW</translation>
</message>
<message>
<source>Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance</source>
- <translation type="unfinished"></translation>
+ <translation>Тренировки, испытания практики на время и точность, Bazooka Battlefield, Tentacle Terror, Big Armory, исправления ошибок и поддержка</translation>
</message>
<message>
<source>Some styles and missions</source>
- <translation type="unfinished"></translation>
+ <translation>Некоторые стили и миссии</translation>
</message>
<message>
<source>Battalion</source>
- <translation type="unfinished"></translation>
+ <translation>Battalion</translation>
</message>
<message>
<source>Continental supplies</source>
- <translation type="unfinished"></translation>
+ <translation>Continental supplies</translation>
</message>
<message>
<source>Teamwork 2</source>
- <translation type="unfinished"></translation>
+ <translation>Teamwork 2</translation>
</message>
<message>
<source>Climb Home</source>
- <translation type="unfinished"></translation>
+ <translation>Climb Home</translation>
</message>
<message>
<source>Portal Mind Challenge</source>
- <translation type="unfinished"></translation>
+ <translation>Portal Mind Challenge</translation>
</message>
<message>
<source>Game server</source>
- <translation type="unfinished"></translation>
+ <translation>Игровой сервер</translation>
</message>
<message>
<source>Ports</source>
- <translation type="unfinished"></translation>
+ <translation>Портирование</translation>
</message>
<message>
<source>macOS/iPhone port, OpenGL-ES conversion</source>
- <translation type="unfinished"></translation>
+ <translation>Порт на macOS/iPhone, OpenGL-ES преобразование</translation>
</message>
<message>
<source>Android port</source>
- <translation type="unfinished"></translation>
+ <translation>Порт на Android</translation>
</message>
<message>
<source>Android netplay, portability abstraction</source>
- <translation type="unfinished"></translation>
+ <translation>Сетвая игра на Android, абстракция портирования</translation>
</message>
<message>
<source>WebGL port</source>
- <translation type="unfinished"></translation>
+ <translation>Порт на WebGL</translation>
</message>
<message>
<source>iPhone/iPad ports</source>
- <translation type="unfinished"></translation>
+ <translation>Порты на iPhone/iPad</translation>
</message>
<message>
<source>Graphics</source>
- <translation type="unfinished">Графика</translation>
+ <translation>Графика</translation>
</message>
<message>
<source>General</source>
- <translation type="unfinished">Основные настройки</translation>
+ <translation>Основное</translation>
</message>
<message>
<source>Themes</source>
- <translation type="unfinished"></translation>
+ <translation>Темы</translation>
</message>
<message>
<source>Nature, Snow, City, Castle, Halloween, Island</source>
- <translation type="unfinished"></translation>
+ <translation>Nature, Snow, City, Castle, Halloween, Island</translation>
</message>
<message>
<source>Bamboo, EarthRise, BambooPlinko</source>
- <translation type="unfinished"></translation>
+ <translation>Bamboo, EarthRise, BambooPlinko</translation>
</message>
<message>
<source>Golf, Hoggywood, Stage</source>
- <translation type="unfinished"></translation>
+ <translation>Golf, Hoggywood, Stage</translation>
</message>
<message>
<source>Hoggywood</source>
- <translation type="unfinished"></translation>
+ <translation>Hoggywood</translation>
</message>
<message>
<source>Cave, Olympics</source>
- <translation type="unfinished"></translation>
+ <translation>Cave, Olympics</translation>
</message>
<message>
<source>Fruit, Cake</source>
- <translation type="unfinished"></translation>
+ <translation>Fruit, Cake</translation>
</message>
<message>
<source>Art</source>
- <translation type="unfinished"></translation>
+ <translation>Art</translation>
</message>
<message>
<source>Beach</source>
- <translation type="unfinished"></translation>
+ <translation>Beach</translation>
</message>
<message>
<source>Brick</source>
- <translation type="unfinished"></translation>
+ <translation>Brick</translation>
</message>
<message>
<source>Hell</source>
- <translation type="unfinished"></translation>
+ <translation>Hell</translation>
</message>
<message>
<source>Jungle</source>
- <translation type="unfinished"></translation>
+ <translation>Jungle</translation>
</message>
<message>
<source>Sheep</source>
- <translation type="unfinished"></translation>
+ <translation>Sheep</translation>
</message>
<message>
<source>Maps</source>
- <translation type="unfinished"></translation>
+ <translation>Карты</translation>
</message>
<message>
<source>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</source>
- <translation type="unfinished"></translation>
+ <translation>Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree</translation>
</message>
<message>
<source>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</source>
- <translation type="unfinished"></translation>
+ <translation>SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle</translation>
</message>
<message>
<source>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</source>
- <translation type="unfinished"></translation>
+ <translation>Bamboo, Blox, Cake, Cogs, EarthRise, Freeway</translation>
</message>
<message>
<source>Castle, PirateFlag</source>
- <translation type="unfinished"></translation>
+ <translation>Castle, PirateFlag</translation>
</message>
<message>
<source>ShoppaKing, TrophyRace</source>
- <translation type="unfinished"></translation>
+ <translation>ShoppaKing, TrophyRace</translation>
</message>
<message>
<source>Battlefield</source>
- <translation type="unfinished"></translation>
+ <translation>Battlefield</translation>
</message>
<message>
<source>CTF_Blizzard</source>
- <translation type="unfinished"></translation>
+ <translation>CTF_Blizzard</translation>
</message>
<message>
<source>Cheese</source>
- <translation type="unfinished"></translation>
+ <translation>Cheese</translation>
</message>
<message>
<source>ClimbHome</source>
- <translation type="unfinished"></translation>
+ <translation>ClimbHome</translation>
</message>
<message>
<source>Lonely_Island</source>
- <translation type="unfinished"></translation>
+ <translation>Lonely_Island</translation>
</message>
<message>
<source>Octorama</source>
- <translation type="unfinished"></translation>
+ <translation>Octorama</translation>
</message>
<message>
<source>portal</source>
- <translation type="unfinished"></translation>
+ <translation>portal</translation>
</message>
<message>
<source>Ruler</source>
- <translation type="unfinished"></translation>
+ <translation>Ruler</translation>
</message>
<message>
<source>Sticks</source>
- <translation type="unfinished"></translation>
+ <translation>Sticks</translation>
</message>
<message>
<source>Forts</source>
- <translation type="unfinished">Форты</translation>
+ <translation>Форты</translation>
</message>
<message>
<source>EvilChicken</source>
- <translation type="unfinished"></translation>
+ <translation>EvilChicken</translation>
</message>
<message>
<source>Olympic</source>
- <translation type="unfinished"></translation>
+ <translation>Olympic</translation>
</message>
<message>
<source>Tank</source>
- <translation type="unfinished"></translation>
+ <translation>Tank</translation>
</message>
<message>
<source>Snail</source>
- <translation type="unfinished"></translation>
+ <translation>Snail</translation>
</message>
<message>
<source>SteelTower</source>
- <translation type="unfinished"></translation>
+ <translation>SteelTower</translation>
</message>
<message>
<source>Hats, graves, other</source>
- <translation type="unfinished"></translation>
+ <translation>Шапки, надгробья и другое</translation>
</message>
<message>
<source>See CREDITS text file</source>
- <translation type="unfinished"></translation>
+ <translation>Смотрите файл CREDITS</translation>
</message>
<message>
<source>Sounds</source>
- <translation type="unfinished"></translation>
+ <translation>Звуки</translation>
</message>
<message>
<source>Hedgehogs voice</source>
- <translation type="unfinished"></translation>
+ <translation>Голоса ёжиков</translation>
</message>
<message>
<source>Default_pl, Russian_pl voices</source>
- <translation type="unfinished"></translation>
+ <translation>Default_pl, Russian_pl голоса</translation>
</message>
<message>
<source>Various authors from www.freesound.org (see CREDITS text file)</source>
- <translation type="unfinished"></translation>
+ <translation>Различные авторы с www.freesound.org (смотрите файл CREDITS)</translation>
</message>
<message>
<source>Music</source>
- <translation type="unfinished">Музыка</translation>
+ <translation>Музыка</translation>
</message>
<message>
<source>City, Rock, others</source>
- <translation type="unfinished"></translation>
+ <translation>City, Rock, другое</translation>
</message>
<message>
<source>Compost</source>
- <translation type="unfinished"></translation>
+ <translation>Compost</translation>
</message>
<message>
<source>EarthRise, oriental, Pirate, snow</source>
- <translation type="unfinished"></translation>
+ <translation>EarthRise, oriental, Pirate, snow</translation>
</message>
<message>
<source>Fruit, Jungle</source>
- <translation type="unfinished"></translation>
+ <translation>Fruit, Jungle</translation>
</message>
<message>
<source>Nature</source>
- <translation type="unfinished"></translation>
+ <translation>Nature</translation>
</message>
<message>
<source>olympics_sd</source>
- <translation type="unfinished"></translation>
+ <translation>olympics_sd</translation>
</message>
<message>
<source>sdmusic (Hitman [sheepluva edit])</source>
- <translation type="unfinished"></translation>
+ <translation>sdmusic (Hitman [sheepluva edit])</translation>
</message>
<message>
<source>Translations</source>
- <translation type="unfinished"></translation>
+ <translation>Переводы</translation>
</message>
<message>
<source>Brazilian Portuguese</source>
- <translation type="unfinished"></translation>
+ <translation>Бразильский, Португальский</translation>
</message>
<message>
<source>Bulgarian</source>
- <translation type="unfinished"></translation>
+ <translation>Болгарский</translation>
</message>
<message>
<source>Czech</source>
- <translation type="unfinished"></translation>
+ <translation>Чешский</translation>
</message>
<message>
<source>Chinese</source>
- <translation type="unfinished"></translation>
+ <translation>Китайский</translation>
</message>
<message>
<source>Finnish</source>
- <translation type="unfinished"></translation>
+ <translation>Финский</translation>
</message>
<message>
<source>French</source>
- <translation type="unfinished"></translation>
+ <translation>Французский</translation>
</message>
<message>
<source>German</source>
- <translation type="unfinished"></translation>
+ <translation>Немецкий</translation>
</message>
<message>
<source>Greek</source>
- <translation type="unfinished"></translation>
+ <translation>Греческий</translation>
</message>
<message>
<source>Italian</source>
- <translation type="unfinished"></translation>
+ <translation>Итальянский</translation>
</message>
<message>
<source>Japanese</source>
- <translation type="unfinished"></translation>
+ <translation>Японский</translation>
</message>
<message>
<source>Korean</source>
- <translation type="unfinished"></translation>
+ <translation>Корейский</translation>
</message>
<message>
<source>Lithuanian</source>
- <translation type="unfinished"></translation>
+ <translation>Литовский</translation>
</message>
<message>
<source>Polish</source>
- <translation type="unfinished"></translation>
+ <translation>Польский</translation>
</message>
<message>
<source>Portuguese</source>
- <translation type="unfinished"></translation>
+ <translation>Португальский</translation>
</message>
<message>
<source>Russian</source>
- <translation type="unfinished"></translation>
+ <translation>Русский</translation>
</message>
<message>
<source>Scottish Gaelic</source>
- <translation type="unfinished"></translation>
+ <translation>Шотландский Гэльский</translation>
</message>
<message>
<source>Slovak</source>
- <translation type="unfinished"></translation>
+ <translation>Словацкий</translation>
</message>
<message>
<source>Spanish</source>
- <translation type="unfinished"></translation>
+ <translation>Испанский</translation>
</message>
<message>
<source>Swedish</source>
- <translation type="unfinished"></translation>
+ <translation>Шведский</translation>
</message>
<message>
<source>Ukrainian</source>
- <translation type="unfinished"></translation>
+ <translation>Украинский</translation>
</message>
<message>
<source>Special thanks</source>
- <translation type="unfinished"></translation>
+ <translation>Отдельные благодарности</translation>
</message>
<message>
<source>Project founder</source>
- <translation type="unfinished"></translation>
+ <translation>Основатель проекта</translation>
</message>
</context>
<context>
@@ -4874,7 +4742,7 @@
</message>
<message>
<source>No checker rights</source>
- <translation type="unfinished"></translation>
+ <translation>Нет прав для проверки</translation>
</message>
<message>
<source>Authentication failed</source>
@@ -4882,7 +4750,7 @@
</message>
<message>
<source>60 seconds cooldown after kick</source>
- <translation type="unfinished"></translation>
+ <translation>60 секунд отдыха после кика</translation>
</message>
<message>
<source>kicked</source>
@@ -4937,10 +4805,6 @@
<translation>/maxteams: укажите число от 2 до 8</translation>
</message>
<message>
- <source>Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs</source>
- <translation type="vanished">Доступные для голосования команды: kick <nickname>, map <name>, pause, newseed, hedgehogs</translation>
- </message>
- <message>
<source>The game can't be started with less than two clans!</source>
<translation>Игра не может быть начата пока не будет как минимум две команды!</translation>
</message>
@@ -5214,27 +5078,23 @@
</message>
<message>
<source>/greeting [message]: Set or clear greeting message to be shown to players who join the room</source>
- <translation>/greeting [сообщение]: Поставить или очистить сообщение, показываемое игрокам, которые присоединяются к комнате</translation>
+ <translation>/greeting [сообщение]: Поставить или очистить приветствие игрокам, которые присоединяются к комнате</translation>
</message>
<message>
<source>/save <config ID> <config name>: Add current room configuration as votable choice for /callvote map</source>
- <translation type="unfinished"></translation>
+ <translation>/save <config ID> <имя конфигаe>: Добавить текущую конфигурацию комнаты, как вариант голосования для /callvote карты</translation>
</message>
<message>
<source>/delete <config ID>: Delete a votable room configuration</source>
- <translation type="unfinished"></translation>
+ <translation>/delete <config ID>: Удалить конфигурацию комнаты из голосования</translation>
</message>
<message>
<source>/saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file</source>
- <translation type="unfinished"></translation>
+ <translation>/saveroom <имя файла>: Сохранить все конфигурации комнаты (и приветствие) для голосования в файл</translation>
</message>
<message>
<source>/loadroom <file name>: Load votable room configurations (and greeting) from a file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>'Registered only' state toggled.</source>
- <translation type="vanished">Режим 'только для зарегистрированных' переключён</translation>
+ <translation>/loadroom <имя файла>: Загрузить конфигурацию комнат (и приветствия) для голосования из файла</translation>
</message>
<message>
<source>Super power activated.</source>
@@ -5250,7 +5110,7 @@
</message>
<message>
<source>You can't kick the only other player!</source>
- <translation type="unfinished"></translation>
+ <translation>Вы не можете кикнуть единственного другого игрока!</translation>
</message>
<message>
<source>The player is not in your room.</source>
@@ -5302,23 +5162,23 @@
</message>
<message>
<source>This server no longer allows unregistered players to join.</source>
- <translation type="unfinished"></translation>
+ <translation>Этот сервер больше не позволяет присоединяться незарегистрированным игрокам.</translation>
</message>
<message>
<source>This server now allows unregistered players to join.</source>
- <translation type="unfinished"></translation>
+ <translation>Этот сервер теперь позволяет присоединяться незарегистрированным игрокам.</translation>
</message>
<message>
<source>Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player></source>
- <translation type="unfinished"></translation>
+ <translation>Доступные команды голосования: hedgehogs <number>, pause, newseed, map <name>, kick <player></translation>
</message>
<message>
<source>Please confirm server restart with '/restart_server yes'.</source>
- <translation type="unfinished"></translation>
+ <translation>Пожалуйста, подтвердите перезапуск сервера с помощью '/restart_server yes'.</translation>
</message>
<message>
<source>Warning! Room name change flood protection activated</source>
- <translation type="unfinished"></translation>
+ <translation>Внимание! Включена защита от частой смены названия комнаты</translation>
</message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_zh_TW.ts Fri Jul 03 23:51:47 2020 +0200
@@ -875,11 +875,11 @@
</message>
<message>
<source>Load</source>
- <translation type="unfinished">讀取</translation>
+ <translation>讀取</translation>
</message>
<message>
<source>Edit</source>
- <translation type="unfinished"></translation>
+ <translation>編輯</translation>
</message>
</context>
<context>
@@ -1078,7 +1078,7 @@
</message>
<message>
<source>Warning: The same key is assigned multiple times!</source>
- <translation type="unfinished"></translation>
+ <translation>警告! 同一個按鍵被重複分配</translation>
</message>
</context>
<context>
@@ -2947,7 +2947,7 @@
</message>
<message>
<source>Displayed tags above hogs and translucent tags</source>
- <translation>刺蝟頭上顯示的標籤和半透明的標籤</translation>
+ <translation>刺蝟頭上的標示</translation>
</message>
<message>
<source>World Edge</source>
@@ -2989,7 +2989,7 @@
</message>
<message>
<source>Zoom (%)</source>
- <translation type="unfinished"></translation>
+ <translation>畫面縮放(%)</translation>
</message>
</context>
<context>
@@ -3299,12 +3299,13 @@
</message>
<message>
<source>Server redirection</source>
- <translation type="unfinished"></translation>
+ <translation>伺服器重定向</translation>
</message>
<message>
<source>This server supports secure connections on port %1.
Would you like to reconnect securely?</source>
- <translation type="unfinished"></translation>
+ <translation>這個伺服器在端口%1支援加密連線。
+你要改用這個端口嗎?</translation>
</message>
</context>
<context>
@@ -3829,7 +3830,7 @@
<message>
<source>toggle team bars</source>
<extracomment>This refers to the team info bars (name/flag/health) of all teams. These are shown at the bottom center of the screen</extracomment>
- <translation>切換隊伍資訊欄</translation>
+ <translation>隊伍資訊欄開關</translation>
</message>
<message>
<source>pause / auto skip</source>
@@ -3837,7 +3838,7 @@
</message>
<message>
<source>toggle hedgehog tags</source>
- <translation>切換刺蝟標示</translation>
+ <translation>刺蝟標示開關</translation>
</message>
<message>
<source>change timer</source>
@@ -3857,55 +3858,55 @@
</message>
<message>
<source>stand still on slippery land</source>
- <translation type="unfinished"></translation>
+ <translation>在滑溜的地面停住</translation>
</message>
<message>
<source>change direction without moving</source>
- <translation type="unfinished"></translation>
+ <translation>定點轉向</translation>
</message>
<message>
<source>switch backwards</source>
- <translation type="unfinished"></translation>
+ <translation>反向切換</translation>
</message>
<message>
<source>change bounciness</source>
- <translation type="unfinished"></translation>
+ <translation>改變反彈力度</translation>
</message>
<message>
<source>reset zoom to start value</source>
- <translation type="unfinished"></translation>
+ <translation>重置縮放率</translation>
</message>
<message>
<source>set zoom to 100%</source>
- <translation type="unfinished"></translation>
+ <translation>調整縮放率為100%</translation>
</message>
<message>
<source>save map as image</source>
- <translation type="unfinished"></translation>
+ <translation>保存地圖</translation>
</message>
<message>
<source>show object information</source>
- <translation type="unfinished"></translation>
+ <translation>物品資訊開關</translation>
</message>
<message>
<source>change hedgehog tag types</source>
- <translation type="unfinished"></translation>
+ <translation>刺蝟標示樣式調整</translation>
</message>
<message>
<source>toggle hedgehog tag translucency</source>
- <translation type="unfinished"></translation>
+ <translation>刺蝟標示半透明開關</translation>
</message>
<message>
<source>toggle HUD</source>
- <translation type="unfinished"></translation>
+ <translation>抬頭顯示開關</translation>
</message>
<message>
<source>backwards jump</source>
- <translation type="unfinished"></translation>
+ <translation>向後跳</translation>
</message>
<message>
<source>screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>擷圖</translation>
</message>
</context>
<context>
@@ -3931,43 +3932,43 @@
<name>binds (combination)</name>
<message>
<source>hold down precise</source>
- <translation type="unfinished"></translation>
+ <translation>壓住 精細瞄準</translation>
</message>
<message>
<source>precise + left/right</source>
- <translation type="unfinished"></translation>
+ <translation>精細瞄準 + 左/右</translation>
</message>
<message>
<source>precise + switch</source>
- <translation type="unfinished"></translation>
+ <translation>精細瞄準 + 切換</translation>
</message>
<message>
<source>precise + timer</source>
- <translation type="unfinished"></translation>
+ <translation>精細瞄準 + 定時控制</translation>
</message>
<message>
<source>precise + reset zoom</source>
- <translation type="unfinished"></translation>
+ <translation>精細瞄準 + 重置縮放率</translation>
</message>
<message>
<source>precise + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>精細瞄準 + 刺蝟標示開關</translation>
</message>
<message>
<source>switch + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>切換 + 刺蝟標示開關</translation>
</message>
<message>
<source>precise + switch + toggle hedgehog tags</source>
- <translation type="unfinished"></translation>
+ <translation>精細瞄準 + 切換 + 隊伍資訊欄開關</translation>
</message>
<message>
<source>high jump (twice)</source>
- <translation type="unfinished"></translation>
+ <translation>跳高(兩次)</translation>
</message>
<message>
<source>precise + screenshot</source>
- <translation type="unfinished"></translation>
+ <translation>精細瞄準 + 擷圖</translation>
</message>
</context>
<context>
@@ -4026,7 +4027,7 @@
</message>
<message>
<source>Take a screenshot:</source>
- <translation>截圖:</translation>
+ <translation>擷取螢幕畫面:</translation>
</message>
<message>
<source>Toggle labels above hedgehogs:</source>
@@ -4385,138 +4386,138 @@
</message>
<message>
<source>Mouse: X1 button </source>
- <translation type="unfinished"></translation>
+ <translation>滑鼠:X1鍵</translation>
</message>
<message>
<source>Mouse: X2 button</source>
- <translation type="unfinished"></translation>
+ <translation>滑鼠:X2鍵</translation>
</message>
<message>
<source>Keypad 0</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 0</translation>
</message>
<message>
<source>Keypad 1</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 1</translation>
</message>
<message>
<source>Keypad 2</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 2</translation>
</message>
<message>
<source>Keypad 3</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 3</translation>
</message>
<message>
<source>Keypad 4</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 4</translation>
</message>
<message>
<source>Keypad 5</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 5</translation>
</message>
<message>
<source>Keypad 6</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 6</translation>
</message>
<message>
<source>Keypad 7</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 7</translation>
</message>
<message>
<source>Keypad 8</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 8</translation>
</message>
<message>
<source>Keypad 9</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 9</translation>
</message>
<message>
<source>Keypad .</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 .</translation>
</message>
<message>
<source>Keypad /</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 /</translation>
</message>
<message>
<source>Keypad *</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 *</translation>
</message>
<message>
<source>Keypad -</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 -</translation>
</message>
<message>
<source>Keypad +</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 +</translation>
</message>
<message>
<source>Keypad Enter</source>
- <translation type="unfinished"></translation>
+ <translation>數字小鍵盤 Enter</translation>
</message>
<message>
<source>PageUp</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>PageDown</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Numlock</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>CapsLock</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>ScrollLock</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Right Shift</source>
- <translation type="unfinished"></translation>
+ <translation>右Shift</translation>
</message>
<message>
<source>Left Shift</source>
- <translation type="unfinished"></translation>
+ <translation>左Shift</translation>
</message>
<message>
<source>Right Ctrl</source>
- <translation type="unfinished"></translation>
+ <translation>右Ctrl</translation>
</message>
<message>
<source>Left Ctrl</source>
- <translation type="unfinished"></translation>
+ <translation>左Ctrl</translation>
</message>
<message>
<source>Right Alt</source>
- <translation type="unfinished"></translation>
+ <translation>右Alt</translation>
</message>
<message>
<source>Left Alt</source>
- <translation type="unfinished"></translation>
+ <translation>左Alt</translation>
</message>
<message>
<source>Right GUI</source>
<extracomment>Windows key / Command key / Meta key /Super key (right)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>右Windows鍵</translation>
</message>
<message>
<source>Left GUI</source>
<extracomment>Windows key / Command key / Meta key /Super key (left)</extracomment>
- <translation type="unfinished"></translation>
+ <translation>左Windows鍵</translation>
</message>
<message>
<source>(QWERTY)</source>
<extracomment>Name of QWERTY US keyboard layout</extracomment>
- <translation type="unfinished"></translation>
+ <translation>(QWERTY)</translation>
</message>
<message>
<source>Menu</source>
- <translation type="unfinished"></translation>
+ <translation>菜單鍵</translation>
</message>
</context>
<context>
@@ -5542,7 +5543,7 @@
</message>
<message>
<source>Warning! Room name change flood protection activated</source>
- <translation type="unfinished"></translation>
+ <translation>警告! 避免修改房間名氾濫的防護機制被啟動</translation>
</message>
</context>
</TS>
--- a/share/hedgewars/Data/Locale/hu.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Locale/hu.txt Fri Jul 03 23:51:47 2020 +0200
@@ -9,30 +9,30 @@
00:06=Kör kihagyása
00:07=Kötél
00:08=Akna
-00:09=Desert Eagle
+00:09=Sivatagi Sas
00:10=Dinamit
00:11=Baseball ütő
00:12=Shoryuken
00:13=mp
00:14=Ejtőernyő
00:15=Légicsapás
-00:16=Akna eső
+00:16=Aknaeső
00:17=Fúrópajzs
00:18=Építkezés
00:19=Teleportálás
00:20=Süncsere
-00:21=Mortar
+00:21=Mozsár
00:22=Ostor
00:23=Kamikaze
00:24=Torta
00:25=Csábítás
-00:26=Dinnye Bomba
+00:26=Dinnyebomba
00:27=Pokoli gránát
00:28=Ásórakéta
00:29=Labdavető
00:30=Napalm
-00:31=RC Repülő
-00:32=Alancsony gravitáció
+00:31=RC repülő
+00:32=Alacsony gravitáció
00:33=Extra sebzés
00:34=Sérthetetlenség
00:35=Extra idő
@@ -40,35 +40,98 @@
00:37=Vámpírizmus
00:38=Orvlövész puska
00:39=Repülő csészealj
-00:40=Molotov koktél
+00:40=Molotov-koktél
00:41=Madárka
+00:42=Hordozható átjárónyitó
+00:43=Zongoracsapás
+00:44=Pálpusztai sajt
+00:45=Szinuszpuska
+00:46=Lángszóró
+00:47=Tapadóakna
+00:48=Kalapács
+00:49=Feltámasztó
+00:50=Ásócsapás
+00:51=Sárgolyó
+00:52=Nincs kiválasztva fegyver
+00:53=Időgép
+00:54=Földpermet
+00:55=Fagyasztó
+00:56=Bárd
+00:57=Gumi
+00:58=Légi akna
+00:59=Creeper
+00:60=Sorozatlövő
-; 01:00=Loading …
+01:00=Betöltés…
01:01=Döntetlen
01:02=%1 nyert!
-01:03=Hangerő %1%
+01:03=Hangerő: %1%
01:04=Szünet
-01:05=Valóban Kilépsz? (%1/%2)
+01:05=Valóban kilépsz? (%1/%2)
01:06=Hirtelen halál!
01:07=%1 maradt
01:08=Töltet: %1%
-01:09=Szinkronizálás...
+01:09=Szinkronizálás…
01:10=A kör nem ér véget ennek a használatával!
01:11=Ez a fegyver vagy eszköz még nem elérhető!
+01:12=Utolsó kör a hirtelen halál előtt!
+01:13=%1 kör a hirtelen halálig!
+01:14=Felkészülni, %1!
+; Bounciness adjectives
+01:15=Elhanyagolható
+01:16=Gyenge
+01:17=Közepes
+01:18=Nagy
+01:19=Rendkívüli
+01:20=%1 pattogás
+01:21=Hang némítva
+01:22=Automatikus passzolás bekapcsolva
+01:23=Automatikus kamera ki
+01:24=Automatikus kamera be
+01:25=A cél kijelöléséhez nyomd meg a Célzás gombot!
+01:26=Ez az eszköz nem használató a hirtelen halál idején!
+; E.g. “+25” when gaining health from crate or vampirism
+01:27=+%1
+01:28=Üres!
+01:29=Ismeretlen billentyű
+01:30=%1 és %2 nyert!
+01:31=%1, %2 és %3 nyert!
+01:32=%1, %2, %3 és %4 nyert!
+01:33=%1, %2, %3, %4 és %5 nyert!
+01:34=%1, %2, %3, %4, %5 és %6 nyert!
+01:35=%1, %2, %3, %4, %5, %6 és %7 nyert!
+01:36=Mindenki nyert!
+01:37=%1 kilépett.
+01:38=%1 visszatért.
+01:39=%1 automatikusan passzolt.
+01:40=%1 fps
+01:41=Lua értelmezés: KI
+01:42=Lua értelmezés: BE
+01:43=Lua értelmezés nem használható online játékban!
+; Ammo count in ammo menu
+01:44=%1×
+; Chat. %1 = player, %2 = message
+01:45=%1: %2
+; Clan chat. %1 = player, %2 = message
+01:46=[Klán] %1: %2
+; Hedgehog chat. %1 = hog name, %2 = message
+01:47=[%1]: %2
+; Symbol for unknown mine timer
+01:48=?
; Event messages
; Hog (%1) died
02:00=%1 beadta a kulcsot!
02:00=%1 meglátta a fényt!
-02:00=%1 sosem hitte volna...
+02:00=%1 sosem hitte volna…
02:00=%1 búcsúzik!
02:00=%1 jobblétre szenderült!
02:00=%1 találkozott a teremtőjével!
02:00=%1 már nem bírta tovább!
02:00=%1 bevégezte a dolgát!
02:00=%1 meghozta a végső áldozatot!
-02:00=%1 Elhagyta porhüvelyét!
-02:00=%1 Külföldre ment. Oszlóban van!
+02:00=%1 elhagyta porhüvelyét!
+02:00=%1 külföldre ment. Oszlóban van!
02:00=%1 felett eljárt az idő!
02:00=%1 feldobta a talpát!
02:00=%1 nem halt meg hiába!
@@ -87,25 +150,24 @@
02:00=%1 elment valami jobbal játszani
02:00=%1 kipurcant
02:00=%1 elbukott
-02:00=Szegény %1...
-02:00=%1 inkább a wormux-re szavaz
+02:00=Szegény %1…
+02:00=%1 inkább a Wormuxre szavaz
02:00=%1 odatartotta a másik orcáját is
02:00=%1 neve fennmarad örökké
02:00=%1 végre a Valhallába került
02:00=%1 elhagyta az épületet
-02:00=%1 követi a dínók példáját
+02:00=%1 követi a dinók példáját
02:00=%1 közelebb hozza a süniket a kihaláshoz
02:00=%1 könnyet csal a szemekbe
02:00=%1 már csak ex-sün
02:00=%1 alulról szagolja az ibolyát
02:00=%1 megSÜNt létezni
-02:00=Viszlát, %1 !
+02:00=Viszlát, %1!
02:00=%1 reménytelen eset
02:00=%1 elérkezett a végső felvonáshoz
02:00=%1 egzisztenciális gondokkal küzd
02:00=%1 már odaát van
02:00=%1 nincs többé
-02:00=%1 lejárt a szavatossága
02:00=Nyugodj békében, %1
02:00=%1 nem bírta a kiképzést
02:00=%1 nem volt macska, hogy kilenc élete legyen
@@ -113,9 +175,9 @@
; Hog (%1) drowned
02:01=%1 tengeralattjárósdit játszik!
-02:01=%1 A Titanic-ot utánozza!
+02:01=%1 a Titanicot utánozza!
02:01=%1 úszik, mint egy kő!
-02:01=%1 Lebeg, mint a tégla!
+02:01=%1 lebeg, mint a tégla!
02:01=%1 a dolgok mélyére jár
02:01=%1 gargalizál kicsit
02:01=%1 placcsant
@@ -123,16 +185,16 @@
02:01=%1 vehetett volna úszóleckét
02:01=%1 nem hozta a szörfdeszkát
02:01=%1 vizes takarítást kért
-02:01=%1 meglátogatta a vizes blokkot
+02:01=%1 meglátogatta a vizesblokkot
02:01=%1 nem hozott mentőmellényt
-02:01=%1 kacsázik...
+02:01=%1 kacsázik…
02:01=%1 felcsapott haleledelnek
02:01=%1 szerint a víz rosszul lett implementálva
02:01=%1 szomjas lehet
02:01=%1 biztos nem lesz tengeribeteg
02:01=%1 nem hozta a búvárszerkót
02:01=%1 tengeri temetést kap
-02:01=%1 mély érzéseket táplál...
+02:01=%1 mély érzéseket táplál…
02:01=%1 hátúszást gyakorol
02:01=%1 elmerült az élvezetekben
02:01=%1 nem tud vízen járni
@@ -140,13 +202,13 @@
02:01=Vajon hány süni lehet már odalenn?
02:01=%1 egy picit emeli a vízszintet
02:01=%1 nem jelentkezett tengerésznek
-02:01=%1 döglött halat imitál
+02:01=%1 döglött halat játszik
02:01=Legalább nem a vécén húztak le, %1
02:01=Sonic nem tudott úszni, %1 sem.
-02:01=%1 Eccot, a delfint játssza
-02:01=%1 meglátogatja Aquaria-t
+02:01=%1 Eccót, a delfint játssza
+02:01=%1 meglátogatja Aquariát
02:01=%1 meglelte Atlantiszt
-02:01=A kutyaúszásod még nem tőkéletes, %1
+02:01=A kutyaúszásod még nem tökéletes, %1
02:01=%1 hozhatott volna jet ski-t is
02:01=%1 nem szereti a vízisportokat
02:01=%1 szerint a sós víz jó a bőrnek
@@ -154,7 +216,7 @@
02:01=%1 elment fürödni
02:01=%1 megfulladt
02:01=%1 majdnem jobb, mint Búvár Kund!
-02:01=Ilyen mélyre süllyedni, %1
+02:01=Ilyen mélyre süllyedni, %1…
; Round starts
02:02=Küzdjetek!
@@ -164,20 +226,20 @@
02:02=Indulás!
02:02=Nosza!
02:02=Hajrá!
-02:02=Kezdődik...
+02:02=Kezdődik…
02:02=Üdvözöl a Hedgewars
02:02=Üdvözöl a pokol!
-02:02=Isten hozott a fronton! És az ördög vigyen el...
+02:02=Isten hozott a fronton! És az ördög vigyen el…
02:02=Győzzön a jobbik!
02:02=Győzelem vagy halál
02:02=A háború istenei ma mosolyognak
02:02=Hedgewars, a Hedgewars.org által!
02:02=GL HF
-02:02=Örülj, hogy nem Tiyuri van ellened...
-02:02=Örülj, hogy nem unC0Rr van ellened...
-02:02=Örülj, hogy nem Nemo van ellened...
-02:02=Örülj, hogy nem Smaxx van ellened...
-02:02=Örülj, hogy nem Jessor van ellened...
+02:02=Örülj, hogy nem Tiyuri van ellened…
+02:02=Örülj, hogy nem unC0Rr van ellened…
+02:02=Örülj, hogy nem Nemo van ellened…
+02:02=Örülj, hogy nem Smaxx van ellened…
+02:02=Örülj, hogy nem Jessor van ellened…
02:02=A vesztes mosogat!
02:02=Kezdődjön az évezred harca!
02:02=Kezdődjön az évszázad csatája!
@@ -204,39 +266,70 @@
; Round ends and team/clan (%1) wins
02:03=%1 nyert!
+02:03=%1 a bajnok!
+02:03=%1 a győztes!
+02:03=%1 megmutatta, hogy kell nyerni!
+02:03=%1 a legjobbak legjobbja
+02:03=%1 győzelmi táncot lejt
+02:03=És a győztes: %1
+02:03=Gratulálunk, %1 győzött!
+02:03=Hajoljunk meg %1 előtt!
+02:03=%1 megnyerte a csatát
+02:03=%1 lenyűgöző győzelmet aratott
+02:03=Bravó, bravó, %1!
+02:03=%1 a legjobb
+02:03=Éljen, éljen %1!
+02:03=Micsoda izgalmas győzelem, %1!
+02:03=%1 megsemmisítette az ellenséget
+02:03=Igyunk %1 győzelmére!
+02:03=%1 a győzelmet választotta, nem a halált
+02:03=%1 a győző
+02:03=%1 megadta a módját
+02:03=Na, ki a király? %1 a király!
+02:03=%1 ma este bulit csap
+02:03=%1 győztes stratégiát mutatott be
; Round ends in a draw
02:04=Döntetlen
+02:04=Hát ez döntetlen!
+02:04=Döntetlen kör, milyen uncsi
+02:04=Döntetlen kör! Na, most kezdhetjük elölről…
+02:04=Döntetlen kör, ezért megérte fáradni…
+02:04=Döntetlen. Mindenki küzdött a végsőkig.
+02:04=Hé! Hol a győztes?!
+02:04=Hová lett az összes sün?
+02:04=Uncsi! Kérem vissza a belépőt!
+02:04=Mindenki meghalt. Helyes
; New health crate
02:05=Egy kis segítség!
02:05=Felcser!
02:05=Kötszerek az égből!
-02:05=Egy kis gyógyszer...
-02:05=Jó egészséget...doboz alakút!
+02:05=Egy kis gyógyszer…
+02:05=Jó egészséget… doboz alakút!
02:05=Hív a doktor
02:05=Friss kötszerek!
02:05=Ettől majd jobban leszel
-02:05=Élet lötyi! Izé, másik játék...
+02:05=Élet lötyi! Izé, másik játék…
02:05=Egészségedre!
02:05=Vedd fel!
-02:05=Egy jóleső falat...
+02:05=Egy jóleső falat…
02:05=Fájdalomcsillapító
02:05=Megfelelő adagolás: Amennyit csak tudsz!
02:05=Gyorsposta!
02:05=Ellátmány!
-02:05=Kígyónak lábsó...
+02:05=Kígyónak lábsó…
; New ammo crate
02:06=Még több fegyver!
02:06=Utánpótlás!
-02:06=Ha fogytán lennél...
+02:06=Ha fogytán lennél…
02:06=Vajon mi lehet benne?
02:06=Ellátmány!
02:06=Mit rejt a doboz?
-02:06=Korán jött a karácsony a Hedgewars-ban
+02:06=Korán jött a karácsony a Hedgewarsban
02:06=Ajándék!
-02:06=Alig jutott át a vámon...
+02:06=Alig jutott át a vámon…
02:06=Pusztító játékok az égiektől
02:06=Vigyázat! Robban!
02:06=Felveszed, vagy felrobbantod, a döntés a tied!
@@ -252,8 +345,7 @@
02:06=Egy rejtélyes doboz!
; New utility crate
-02:07=Tooltime!
-02:07=Ez jól jöhet...
+02:07=Ez jól jöhet…
02:07=Cuccok!
02:07=Használd okosan!
02:07=Vigyázat odalent!
@@ -262,10 +354,17 @@
02:07=Ez jó kell legyen!
02:07=Csak ésszel!
02:07=Ohó, ez nehéz!
-02:07=Ez még kellhet...
+02:07=Ez még kellhet…
+02:07=Barkácskészlet!
+02:07=Minél több, annál jobb!
+02:07=Ez valami új találmány?
+02:07=Nincs ötleted? Van itt valami…
+02:07=Most jött le a gépsorról
+02:07=Svájci bicska doboz formában
+02:07=Csináld magad!
; Hog (%1) skips his turn
-02:08=%1 unalmas...
+02:08=%1 unalmas…
02:08=%1 hiába fáradt
02:08=%1 eléggé lusta
02:08=%1 ötlettelen
@@ -282,7 +381,7 @@
02:08=%1 hagyja, hogy az ellen magát pusztítsa
02:08=%1 uncsi lenne bulikon
02:08=%1 kihagyja a lehetőséget
-02:08=%1 úgy dönt, hogy a legjobb, amit tehet ... semmit.
+02:08=%1 úgy dönt, hogy a legjobb, amit tehet… semmit.
02:08=%1 egy puhány
02:08=%1, te gyáva nyúl!
02:08=%1 meghúzza magát
@@ -303,7 +402,7 @@
02:09=%1 gyakorolhatna kicsit!
02:09=%1 látszólag utálja magát
02:09=%1 rossz oldalra állt!
-02:09=%1 emonak néz ki
+02:09=%1 emónak néz ki
02:09=%1 rosszul fogta fegyverét
02:09=%1 egy kicsit szadista
02:09=%1 egy kicsit mazohista
@@ -320,6 +419,7 @@
02:09=%1 segíti az ellenfelet
02:09=Ez nem volt okos lépés, %1
02:09=%1 szerint áldozat nélkül nincs győzelem!
+02:09=%1 lenne a tégla?
02:09=%1 kicsit zavart
02:09=%1 megvágta magát a nagy hadonászásban
02:09=%1 hajlamos lejáratni magát
@@ -328,16 +428,155 @@
02:09=%1 sem lehet mindig tökéletes
02:09=Ne aggódj, %1, senki sem tökéletes!
02:09=%1 szándékosan csinálta!
-02:09=én hallgatok, ha te is, %1
+02:09=Én hallgatok, ha te is, %1
02:09=Ez szégyenletes!
02:09=Senki sem látta, %1
-02:09=%1 átnézhetné a kézi könyvet
+02:09=%1 átnézhetné a kézikönyvet
02:09=%1 fegyvere rosszul működik
; Hog shot an home run (using the bat and another hog)
02:10=Hazafutás!
-02:10=Tágas égen andalog...
+02:10=Tágas égen andalog…
02:10=Egy mínusz!
+02:10=Méghogy a sünök nem tudnak repülni!
+02:10=A végtelenbe és tovább!
+02:10=Hú, ez fájhatott!
+02:10=Ez a te tapsod, %1!
+02:10=%1 jól megsimogatta…
+02:10=Ebből holdraszállás lesz…
+02:10=Ő mondta, hogy üsse meg…
+02:10=%1 fizikaórát tart
+02:10=%1 erősebb, mint a gravitáció
+
+; Hog (%1) has to leave (team is gone)
+02:11=%1, lefekvés!
+02:11=%1 nem ér rá játszani
+02:11=%1 párhuzamos univerzumba távozott
+02:11=%1 elpárolgott
+02:11=%1 elment
+02:11=%1 leviszi a szemetet
+02:11=%1 megszökött
+02:11=%1 megfutamodott
+02:11=%1 fontos hívást kapott
+02:11=%1 lelépett
+02:11=%1 csapot-papot itt hagyott
+
+; Hog (%1) was poisoned
+02:12=%1 émelyeg
+02:12=%1 elég rossz bőrben van
+02:12=%1 orvost kíván
+02:12=%1 vegyi fegyver áldozata
+02:12=%1 bevehette volna a vitaminjait
+02:12=%1 nem szedi azokat a cseppeket
+02:12=Jól vagy, %1?
+02:12=%1 lázas
+02:12=%1 sajnos letüdőzte
+02:12=%1 otthon hagyta a gázálarcát
+02:12=Reméljük, %1 hozta a TAJ-kártyáját
+02:12=%1 kiitta a méregpoharat?
+02:12=%1 azért nem puszilkodik, mert beteg
+02:12=%1 elég rosszul néz ki
+02:12=%1 egyre gyengébb és gyengébb
+02:12=%1 ma nemigen megy suliba
+02:12=Olybá tűnik, %1 nem kapta meg az oltásokat
+02:12=%1 mérgeskígyót melengetett a keblén
+02:12=%1 sokáig maradt a beteg barátainál
+02:12=%1 most a vírussal is harcol
+
+; Hog (%1) was resurrected by the Resurrector utility
+02:13=%1 feltámadt
+02:13=%1 visszatért a pokolBA
+02:13=%1 második esélyt kap
+02:13=%1 újra él
+02:13=%1 feltámadt halottaiból
+02:13=%1 újraszületett
+02:13=%1 legyőzte a halált
+02:13=%1 kiröhögte a Kaszást
+02:13=%1 újra köztünk van
+02:13=%1 felkelt a sírból
+02:13=Élj a második eséllyel, %1!
+02:13=%1, még szükség van rád!
+02:13=%1 ki lett rúgva a mennyországból
+02:13=%1 a kiválasztott
+02:13=%1 jogosan hitt a feltámadásban
+02:13=%1 tudta, hogy eljön ez a nap
+02:13=Vigyázat, %1 visszatért!
+02:13=%1 erősebb, mint a halál
+02:13=%1 újra készen áll a halálra
+
+; Hog (%1) explodes after an kamikaze attack
+02:14=%1 hősi halált halt
+02:14=%1 felrobbant dühében
+02:14=%1 egy igazi hős
+02:14=Sose feledünk, %1!
+02:14=%1 látta A függetlenség napját
+02:14=%1 feláldozta magát
+02:14=%1 lecsapott utoljára
+02:14=%1 halált és pusztulást hoz
+02:14=%1 végleg elment
+02:14=%1 nem félt
+02:14=%1 csak felhívta magára a figyelmet
+02:14=%1 ellenségei után ment az alvilágba
+02:14=%1 látványosan akart meghalni
+02:14=%1 amúgy is meghalt volna
+02:14=%1 nem ágyban, párnák közt halt meg
+02:14=%1 kap egy szobrot a Hősök terén
+
+; Hog (%1) returned from time-travel with the time box
+; These texts are intentionally kept simple and clear to not confuse the player
+02:15=%1 visszatért az időutazásból
+02:15=%1 időutazó visszatért
+02:15=%1 kisétál az időgépből
+02:15=%1 időgépe megérkezett
+02:15=%1 visszatért a jelenbe
+02:15=Üdvözlünk újra a jelenben, %1!
+
+; Hog (%1) runs out of turn time (not shown in infinite attack mode)
+02:16=%1 túl lassú volt
+02:16=%1 nem nézte az órát
+02:16=%1 lassabb, mint a reumás csiga!
+02:16=%1 elaludt
+02:16=%1 elfelejtett támadni
+02:16=%1 tökéleteset lőtt volna. Ez biztos!
+02:16=Lejárt az idő, %1!
+02:16=%1 várta a megfelelő alkalmat
+02:16=Gondolkozz gyorsabban, %1!
+02:16=Csalódtunk benned, %1!
+02:16=%1 szerint az idő relatív
+02:16=Nem érünk rá erre, %1!
+02:16=Kérem a következőt!
+02:16=%1, te vagy Pató Pál?
+02:16=%1 hihetetlenül lassú
+02:16=%1 nem állította be az ébresztőóráját
+02:16=%1 kifutott az időből
+02:16=Nem tart örökké a köröd, %1!
+02:16=%1 otthon hagyta az óráját
+02:16=%1 számára inkább a gyöngyfűzést ajánljuk
+02:16=Ej, ráérünk arra még!
+02:16=%1, hol jár az eszed?
+02:16=Nincs itt semmi látnivaló!
+02:16=%1 nem akart támadni
+02:16=%1 versenyt futott az idővel, és vesztett
+02:16=Idő van, %1!
+02:16=Nézz néha az órára, %1!
+02:16=%1 túl sokáig tüskészkedett
+
+; King (%1) has died
+02:17=%1 nincs többé velünk
+02:17=Meghalt %1, oda az igazság!
+02:17=%1, szeretett királyunk, halott
+02:17=%1 amúgy is egy zsarnok volt
+02:17=%1 napjai meg voltak számlálva
+02:17=%1 vezetése nélkül a csapat elveszett
+02:17=%1 uralma véget ért
+02:17=%1 elbukott, éppígy a királysága
+02:17=%1 gyenge király volt
+02:17=Sokkal jobb királyok is vannak, mint %1
+02:17=%1 szeretett veszélyesen élni
+02:17=%1 feldühítette a tömeget
+02:17=%1 nem érdemelte meg a koronát
+02:17=%1 királysága elbukott!
+02:17=Sakk-matt, %1!
; Weapon Categories
03:00=Időzíthető gránát
@@ -345,7 +584,7 @@
03:02=Ballisztikus rakéta
03:03=Irányított fegyver
03:04=Lőfegyver (több lövés)
-03:05=ásó eszköz
+03:05=Ásó eszköz
03:06=Cselekvés
03:07=Szállító eszköz
03:08=Kis hatósugarú bomba
@@ -364,7 +603,7 @@
03:21=Ballisztikus rakéta
03:22=Az én nevem Indiana!
03:23=(igazán) Harcművészet
-03:24=The cake is NOT a lie!
+03:24=Ez nem habostorta!
03:25=Álruha
03:26=Ízletes gránát
03:27=Pokoli gránát
@@ -382,16 +621,35 @@
03:39=Szállító eszköz
03:40=Felperzselő gránát
03:41=A csőrösök nagy hívője
+03:42=Ezt felírom ide…
+03:43=Ezt még Liszt is megirigyelné!
+03:44=Fogyasztható: 1923.12.31-ig
+03:45=A tudomány ereje
+03:46=Forró, forró, forró!
+03:47=Öntapadós!
+03:48=Lesújtó élmény!
+03:49=Visszahozza a halottakat a pokolBA!
+03:50=A vakondok nyomába ered
+03:51=A földön találtam…
+03:52=(nem használt)
+03:53=Típ. sz.: 40
+03:54=Eszköz
+03:55=Ennél hidegebb nem is lehet!
+03:56=Használd a konyhában vagy máshol…
+03:57=Eszköz
+03:58=Lebegő közelségi bomba
+03:59=Félkész fegyver
+03:60=A legkeményebb kézifegyver
; Weapon Descriptions (use | as line breaks)
04:00=Az ellenfél megdobása egy szimpla gránáttal.|Amint lejár az időzítő, felrobban.|1-5: időzítő beállítása|Támadás: Tartsd nyomva, és nő a távolság
04:01=Az ellenfél megtámadása egy repeszgránáttal.|Kisebb darabokra esik, ha lejár az időzítő.|1-5: időzítő beállítása|Támadás: Tartsd nyomva, és nő a távolság
-04:02=Az ellenfél meglövése egy ballisztikus rakétával|aminek pályáját a szél befolyásolja|Támadás: Tartsd nyomva, és nő a távolság
-04:03=Egy robbanó méhecske eleresztése, ami|elindul a célpont felé. Ne lőjj teljes erőből,|hogy a célzás pontosabb legyen.|Kurzor: Célpont kiválasztása|Támadás: Tartsd nyomva, és nő a távolság
+04:02=Az ellenfél meglövése egy ballisztikus rakétával,|aminek pályáját a szél befolyásolja|Támadás: Tartsd nyomva, és nő a távolság
+04:03=Egy robbanó méhecske eleresztése, ami|elindul a célpont felé. Ne lőj teljes erőből,|hogy a célzás pontosabb legyen.|Kurzor: Célpont kiválasztása|Támadás: Tartsd nyomva, és nő a távolság
04:04=Az ellenfél meglövése egy kétlövetű puskával.|A szórásnak hála nem kell pontosnak lenned,|hogy kárt okozz.|Támadás: Lövés (többszöri alkalommal)
04:05=Menj a föld alá! Használd a légkalapácsot, hogy|lyukat fúrj a talajba, és elérj új zónákat.|Támadás: Fúrás indítása vagy leállítása
04:06=Unod? Nem tudsz támadni? Halmozod a lőszert?|Semmi gond! Hagyd ki ezt a kört, te gyáva!|Támadás: Kör kihagyása harc nélkül
-04:07=Küzdj le nagy távolságokat a kötél használatával.|A lendületed segítségével szállj neki más sünöknek|vagy ejts rájuk gránátot vagy más finomságot.|Támadás: Kötél kilövése vagy visszahúzása|Hosszú ugrás: Gránát meg hasonlók leejtése
+04:07=Küzdj le nagy távolságokat a kötél használatával.|A lendületed segítségével szállj neki más sünöknek,|vagy ejts rájuk gránátot vagy más finomságot.|Támadás: Kötél kilövése vagy visszahúzása|Hosszú ugrás: Gránát meg hasonlók leejtése
04:08=Tartsd távol ellenfeleid aknák lerakásával szűk|átjárókba vagy éppen a lábuk elé. A biztonságos|távot vedd fel, nehogy te magad aktiváld!|Támadás: Akna lerakása a lábad elé
04:09=Nem vagy az a biztos kezű? Használd a |pisztolyod akár négy lövés erejéig is.|Támadás: Lövés (többszöri alkalommal)
04:10=A nyers erőszak mindig megoldás. Rakd le ezt a klasszikus|robbanószert az ellenfeleidhez, majd vonulj vissza.|Támadás: Dinamit leejtése a lábad elé
@@ -402,7 +660,7 @@
04:15=Repülőgép hívása, hogy az ellenfeleid|megszórd bombákkal.|Jobbra/Balra: Irány megadása|Kurzor: Célterület kiválasztása
04:16=Repülőgép hívása, hogy aknákat ejts|a területen levőkre.|Jobbra/Balra: Irány megadása|Kurzor: Célterület kiválasztása
04:17=Fedezék kellene? Használd a fúrópajzsot, hogy|pofás alagutat vájj a talajba, ami megvéd.|Támadás: Fúrás megkezdése vagy leállítása
-04:18=További védelem kellene, vagy lehetetlen terepen|is átkelnél? Helyezd el a gerendákat, ahogy jólesik.|Jobbra/Balra: Gerendák forgatása|Kurzor: Gerenda érvényes helyre való lerakása
+04:18=További védelem kellene, vagy lehetetlen terepen|is átkelnél? Helyezd el a gerendákat, ahogy jólesik.|Jobbra/Balra: Gerendák forgatása|Kurzor: Gerenda megengedett helyre való lerakása
04:19=A jókor használt teleportálás olykor|többet ér, mint bármilyen más fegyver,|hiszen másodpercek alatt kimenekíti|a sünidet, ha már szorul a hurok.|Kurzor: Célterület kiválasztása
04:20=Lehetővé teszi, hogy az aktuális köröd egy|másik sünnel játszd le.|Támadás: Sünök cseréjének bekapcsolása
04:21=Egy gránátszerű lövedék kilövése, ami majdan|becsapódáskor további repeszeket enged szét.|Támadás: Kilövés maximális erővel
@@ -410,25 +668,44 @@
04:23=Ha már nem maradt veszteni valód, akkor ez jól|jöhet. Áldozd fel a sünöd, annak kilövésével az|általad meghatározott irányba, ami megsebez|mindent az útjában, végül felrobban.|Támadás: A végzetes támadás elindítása
04:24=Boldog szülinapot! Engedd el útjára a tortát,|az odasétál hozzájuk, kirobbanó siker lesz!|A torta bármilyen terepen átgyalogol, de így|lehet, hogy idő előtt felrobban.|Támadás: A torta indítása vagy robbantása
04:25=Használd ezt az álruhát, hogy ellenfeleid|feléd ugorjanak (valami gödörfélébe)!|Támadás: Többi sün elcsábítása álruhában
-04:26=Egy fincsi görögdinnye eldobása az ellenfeleknek.|Ha lejár az időzítő, további robbanó darabra esik.|1-5: Időzítő beállítása|Támadás: Tartsd nyomva, és nő a távolság
+04:26=Egy fincsi görögdinnye eldobása az ellenfeleknek.|Ha lejár az időzítő, további robbanó szeletekre esik.|1-5: Időzítő beállítása|Támadás: Tartsd nyomva, és nő a távolság
04:27=Engedd rá a pokol tüzét az ellenfeleidre ezzel a|ördögi robbanószerkezettel! Tartsd magad távol|a robbanástól, mert a kis tüzek tovább éghetnek!|Támadás: Tartsd nyomva, és nő a távolság
-04:28=A kilövés után nemsokkal a rakéta elkezd|utat vájni a talajba, és felrobban, ha lejár| az időzítője vagy újra felszínre ér.|Támadás: Tartsd nyomva, és nő a távolság
+04:28=Nem sokkal a kilövés után a rakéta elkezd|utat vájni a talajba, és felrobban, ha lejár| az időzítője, vagy újra felszínre ér.|Támadás: Tartsd nyomva, és nő a távolság
04:29=Nem gyerek kezébe való! A labdavető megannyi|apró, színes labdát lő ki, robbanó eleggyel töltve.|Támadás: Tüzelés teljes erőből|Fel/Le: Célzás folytatása
04:30=Repülőgép hívása egy kis napalmcsapáshoz.|Megfelelő célzással képes hatalmas területet|eltörölni, az ottlévő sünikkel együtt.|Jobbra/Balra: Támadás irányának megadása|Kurzor: Célterület kiválasztása
-04:31=Az RC repülő az ideális fegyver csomagok begyűjtésére vagy|messzi sünök kilövésére. Vezesd neki az ellenségnek, vagy|ejts le pár bombát előbb.|Támadás: Repülő indítása vagy bombák ledobása|Hosszú ugrás: A valkűrök csatába küldése|Fel/Le: A repülő kormányzása
+04:31=Az RC repülő az ideális fegyver csomagok begyűjtésére vagy|messzi sünök kilövésére. Vezesd neki az ellenségnek, vagy|ejts le előbb pár bombát.|Támadás: Repülő indítása vagy bombák ledobása|Hosszú ugrás: A valkűrök csatába küldése|Fel/Le: A repülő kormányzása
04:32=Az alacsony gravitáció jobb, mint a diétázás! Ugorj|magasabbra vagy messzebbre, vagy repítsd az ellent|még messzebbre.|Támadás: Aktiválás
04:33=Néha szükség van egy kis többleterőre, hogy a|sebzés igazán szép legyen.|Támadás: Aktiválás
04:34=Nem érhetsz el!|Támadás: Aktiválás
-04:35=Néha az idő túl gyorsan telik. Szerezz pár extra|másodperced a támadás véghezviteléhez.|Támadás: Aktiválás
+04:35=Néha az idő túl gyorsan telik. Szerezz pár extra|másodpercet a támadás véghezviteléhez.|Támadás: Aktiválás
04:36=Hát, megesik, hogy rosszul célzol. A biztonság|kedvéért vess be egy kis modern technológiát!|Támadás: Aktiválás
04:37=Ne félj a napfénytől! Csak egyetlen körig tart,|de lehetővé teszi a más sünök által vesztett|életerő felszívását.|Támadás: Aktiválás
04:38=A mesterlövész puska lehet a leghalálosabb fegyvered|az összes közül, ugyanakkor nem éri meg kis távra|használni. Az okozott sebzés mértéke a távolsággal|egyenes arányban nő.|Támadás: Lövés (kétszer)
04:39=Repülj más részekre a csészealj segítségével.|Ez a nehezen kezelhető jármű képes bárhova|eljuttatni téged a csatamezőn.|Támadás: Aktiválás|Fel/Jobbra/Balra: Tolósugarak alkalmazása|Hosszú ugrás: Gránát meg egyebek leejtése
04:40=Csinálj egy szép tűzszőnyeget ezzel a|(hamarosan) égő folyadékkal!|Támadás: Tartsd nyomva, és nő a távolság
04:41=A természet csodája tán még a csészealjon|is túltesz. A madárka cipel téged, illetve|tojásokat ejt az ellenfelekre!|Támadás: Aktiváld vagy ejts tojásokat|Fel/Jobbra/Balra: Abba az irányba csapkodjon
+04:42=Ez a hordozható átjárónyitó képes azonnal|áthelyezni téged, ellenségeidet vagy fegyvereidet|a pálya egyik pontjáról a másikra.|Használd bölcsen, és vállakozásod… SIKERES LESZ!|Megjegyzés\: Nem működik a gumiszalagon.|Támadás: Átjáró kilövése|Váltás: Átjáró színének módosítása
+04:43=Legyen a zenei belépőd kirobbanó siker!|Dobj le egy zongorát az égből,|mindent eltiporva alatta, de vigyázz\:|fel kell áldoznod a sünödet, aki a pianista.|Kurzor: Célterület kiválasztása|F1-F9: Játék a zongorán
+04:44=Ez nemcsak sajt, ez egyenesen vegyi fegyver!|Nem okoz nagy sérülést, ha lejár az idő,|de bárki, aki beleszagol a gőzébe,|mérgezést kap!|1-5: Időzítő beállítása|Célzás + 1-5: Pattogás erősségének beállítása|Támadás: Tartsd nyomva, és nő a távolság
+04:45=Csak volt értelme azoknak a fizikaóráknak!|Indíts egy pusztító szinuszhullámot, ami|átégeti magát a térképen.|Vigyázz, mert erősen visszaüt!|Támadás: Lövés
+04:46=Áraszd el ellenségeidet perzselő folyékony lánggal!|Szívmelengető!|Támadás: Aktiválás|Fel/Le: Célzás folytatása|Bal/Jobb: Tűzerő állítása
+04:47=Dupla élvezet két hegyes, tapadós, sunyi aknával.|Indíts láncreakciót, vagy védd meg magad (esetleg mindkettő!)|Támadás: Tartsd nyomva, és nő a távolság (kétszer)
+04:48=Miért fogjuk mindig a vakondokra?|A sünök is megviccelhetik az embert!|Ha jól rácsapsz ellenfeledre ezzel a kalapáccsal,|pontjainak egyharmadát (extra sebzés|esetén felét) elveszi,|egyszersmind a földbe is döngöli.|Támadás: Aktiválás
+04:49=Áldozd fel egészségedet társaid feltámasztására!|De vigyázz: ez ellenségeidet is visszahozza.|Támadás: Tartsd nyomva a lassú feltámasztáshoz|Fel: a feltámasztás felgyorsítása
+04:50=Van valaki odalent?|Ásd elő a ásócsapással!|Az időzítővel állítható a fúrás mélysége.|Bal/Jobb: Támadás irányának beállítása|1-5: Időzítő beállítása|Kurzor: Célterület beállítása
+04:51=Sárgolyó dobása puszta kézzel.|Nem sebed, de odébblöki|a sünöket és más tárgyakat.|Támadás: Tartsd nyomva, és nő a távolság
+04:52=(nem használt)
+04:53=Kelj útra térben és időben,|hátrahagyva társaidat, hadd harcoljanak.|De légy kész bármikor visszatérni,|főleg hirtelen halálkor, vagy ha mindenki halott.|Megjegyzés\: Nem használható, ha már hirtelen halál van,|ha egyedül vagy, vagy ha király vagy.|Támadás: Aktiválás
+04:54=Fújj ragadós homokpelyheket!|Építs hidat, temess el ellenségeket, zárj le alagutakat!|Vigyázz, hogy rád ne jusson belőle!|Támadás: Aktiválás/kikapcsolás|Fel/Le: Célzás folytatása|Bal/Jobb: Tűzerő állítása
+04:55=Hozd vissza a jégkorszakot!|Fagyassz le sünöket vagy tárgyakat, csinálj síkos talajt,|vagy fagyaszd meg a vizet, nehogy belefulladj!|Támadás: fagyasztósugár be-/kikapcsolása|Fel/Le: Célzás folytatása
+04:56=Két bárdot dobhatsz ellenfeledre, elzárhatsz|átjárókat, alagutakat, sőt, még mászhatsz|is velük! Sebzése a sebességével együtt nő.|De vigyázz! Késekkel játszani veszélyes!|Támadás: Tartsd nyomva, és nő a távolság (kétszer)
+04:57=NAGYON rugalmas gumiszalag, mellyel|sünök és más tárgyak elrugaszkodhatnak|anélkül, hogy estükben sérülnének.|Bal/Jobb: Gumiszalag tájolásának állítása|Kurzor: Gumiszalag elhelyezése megfelelő pozícióban
+04:58=Ez a közelségi bomba lebeg a levegőben, és követi|a túl közel merészkedő sünöket.|Viszont nem durran akkorát, mint a taposóakna.|Támadás: Tartsd nyomva, és nő a távolság
+04:59=Ez a fegyver még nincs kész, kísérleti stádiumban van.|Csak saját felelősségre használd!
+04:60=Eressz golyózáport ellenségeidre!|És még azt hitték, biztonságban vannak|három réteg gerenda alatt!|Támadás: Lövés teljes erővel|Fel/Le: Célzás folytatása
; Game goal strings
-05:00=Játék módok
+05:00=Játékmódok
05:01=Az alábbi szabályok érvényesek:
05:02=Király elhelyezése: Válassz egy védett helyet, ahova lerakod őfelségét
05:03=Alacsony gravitáció: Vigyázz, hova lépsz!
@@ -436,11 +713,49 @@
05:05=Vámpírizmus: A sünök visszagyógyulnak a sebzések arányában
05:06=Karma: A sünök is sérülnek az általuk okozott sebek által
05:07=Óvd Őfelségét: Ne hagyd a királyt meghalni!
-05:08=Sünök Lerakása: A játék kezdete előtt te választod ki a kezdőhelyet
+05:08=Sünök lerakása: A játék kezdete előtt te választod ki a kezdőhelyet
05:09=Tüzérség: A sünök nem mozoghatnak
-05:10=Lebonthatatlan talaj:A legtöbb fegyver nem tudja szétrobbantani a földet
-05:11=Közös lőszer: Az egyszínű csapatoknak közös a lőszerkészlete
-05:12=Akna időzítés: Az aknák %1 másodperc után robbanak
-05:13=Akna időzítés: Az aknák azonnal berobbannak
-05:14=Akna időzítés: Az aknák 0 - 3 másodperc után robbannak
-05:15=Sebzés módosító: Minden fegyver %1%-al sebez az eredetihez képest
+05:10=Lebonthatatlan talaj: A legtöbb fegyver nem tudja szétrobbantani a földet
+05:11=Közös lőszer: Az azonos színű csapatoknak közös a lőszerkészlete
+05:12=Aknaidőzítés: Az aknák %1 másodperc után robbanak
+05:13=Aknaidőzítés: Az aknák azonnal berobbannak
+05:14=Aknaidőzítés: Az aknák 0 - 3 másodperc után robbannak
+05:15=Sebzés módosító: Minden fegyver az eredeti %1%-ával sebez
+05:16=Mentőorvos: A sünök minden kör elején eredeti egészségpontjukig gyógyulnak
+05:17=MI feltámadás: Az MI sünök újraélednek, ha meghaltak
+05:18=Korlátlan támadás: A támadással nem ér véget a köröd
+05:19=Állandó fegyvertár: A fegyverek száma minden kör elején visszáll
+05:20=Sünönkénti muníció: A sünök nem osztják meg a fegyvereiket egymással
+05:21=Csapatcímkék: Egy klán csapatai felváltva következnek|Megosztott idő: Egy klán csapatai osztoznak a köridőn
+05:22=Erős szél: A szél szinte mindent elfúj
+
+; Chat command help
+06:00=A kliens alapvető csevegési parancsai:
+06:01=/togglechat: A csevegési képernyő kapcsolása
+06:02=/clan <üzenet>: Üzenet küldése csak klántagoknak
+06:03=/me <üzenet>: Állapot közlése, pl. „/me pizzát eszik” ez lesz: „* Játékos pizzát eszik”
+06:04=/pause: Szünetelés kapcsolása
+06:05=/pause: Automatikus passzolás kapcsolása
+06:06=/fullscreen: Teljes képernyő kapcsolása
+06:07=/quit: Kilépés a Hedgewarsból
+06:08=/help: A kliens alapvető csevegési parancsainak megjelenítése
+06:09=/help taunts: Gúnyolódó üzenetek parancsainak listázása
+06:10=/history: Hosszú csevegési előzmények kapcsolása
+06:11=/lua: Lua értelmezés kapcsolása (fejlesztőknek)
+06:12=Gúnyolódó üzenetek parancsai:
+06:13="szöveg": A szöveg beszédbuborékba kerül
+06:14='szöveg': A szöveg gondolatbuborékba kerül
+06:15=-szöveg-: A szöveg kiabálóbuborékba kerül
+06:16=A fenti parancsoknál tegyél egy számot a szöveg elé a sün kiválasztásához.
+06:17=/hsa <szöveg>: A szöveg beszédbuborékba kerül a következő támadásnál
+06:18=/hta <szöveg>: A szöveg gondolatbuborékba kerül a következő támadásnál
+06:19=/hya <szöveg>: A szöveg kiabálóbuborékba kerül a következő támadásnál
+06:20=/hurrah: Vigyorogjon a sün
+06:21=/ilovelotsoflemonade: Pisiljen a sün
+06:22=/juggle: Zsonglőrködjön a sün
+06:23=/rollup: Gömbölyödjön össze a sün
+06:24=/shrug: Vonjon vállat a sün
+06:25=/wave: Integessen a sün
+06:26=Ismeretlen parancs vagy rossz paraméterek. A parancsok listájához írd üzenetbe, hogy „/help”.
+06:27=/help <szoba>: A szoba csevegési parancsainak listázása
+06:28=Nem vagy online!
--- a/share/hedgewars/Data/Locale/ru.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Locale/ru.txt Fri Jul 03 23:51:47 2020 +0200
@@ -1,5 +1,6 @@
; Перевод сообщений на русский
+; Weapon names
00:00=Граната
00:01=Касcетная бомба
00:02=Базука
@@ -13,6 +14,7 @@
00:10=Динамит
00:11=Бейсбольная бита
00:12=Восходящий удар Дракона
+; Сокращение для "секунда" (единица времени)
00:13=сек
00:14=Парашют
00:15=Воздушная атака
@@ -62,6 +64,7 @@
00:59=Крипер
00:60=Пулемёт
+; Game messages and HUD texts
01:00=Загрузка …
01:01=Ничья
01:02=Победила команда %1!
@@ -77,6 +80,7 @@
01:12=Последний раунд до потопа!
01:13=%1 раундов до потопа!
01:14=Приготовься, %1!
+; Варианты отскока
01:15=Незначительный
01:16=Низкий
01:17=Нормальный
@@ -115,6 +119,8 @@
01:46=[Команда] %1: %2
; Чат ёжиков. %1 = имя ёжика, %2 = сообщение
01:47=[%1]: %2
+; Символ для неизвестного времени мины
+01:48=?
; Event messages
; Normal hog (%1) died (0 health)
@@ -851,3 +857,5 @@
06:24=/shrug: Заставить ёжика пожать плечами
06:25=/wave: Заставить ёжика помахать рукой
06:26=Неизвестная команда или неверные параметры. Напишите "/help" в чате, чтобы получить список команд.
+06:27=/help room: Посмотреть список команд комнаты
+06:28=Вы не в сети!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/share/hedgewars/Data/Locale/tips_hu.xml Fri Jul 03 23:51:47 2020 +0200
@@ -0,0 +1,91 @@
+<!-- This is not xml actually, but it looks and behaves like it.
+ Including an xml library would need too much resources.
+ Tips between the platform specific tags are shown only on those platforms.
+ Do not escape characters or use the CDATA tag. -->
+<tips>
+ <tip>Ha egy barátoddal egy klánban szeretnél játszani, csak válasszátok ugyanazt a színt. Így is mindegyikőtök a saját sünjeit vezeti majd, de osztoztok a győzelmen és a vereségen.</tip>
+ <tip>Bizonyos fegyverek talán csak kis sebzést okoznak, de a megfelelő helyzetben sokkal pusztítóbbak is lehetnek. Próbálj például a Sivatagi Sassal egyszerre több sünt a vízbe taszítani.</tip>
+ <tip>Ha bizonytalan vagy, mitévő legyél, és nem akarsz lőszert pocsékolni, hagyj ki egy kört. De ne vesztegess el sok időt, mert jön a hirtelen halál!</tip>
+ <tip>Takarékoskodnál a kötéllel? Engedd el a kötelet a levegőben, és lőj újra. Amíg nem érsz földet vagy tévesztesz célt, addig újra felhasználhatod ugyanazt a kötelet!</tip>
+ <tip>Ha nem szeretnéd, hogy valaki más lecsapjon a választott becenevedre a hivatalos kiszolgálón, regisztrálj fiókot a <a href="https://www.hedgewars.org/">https://www.hedgewars.org/</a> címen!</tip>
+ <tip>Unod már a sima játékokat? Próbáld ki a küldetéseket – azok más és más játékmenetet nyújtanak.</tip>
+ <tip>A játék eleve rögzíti a legutoljára játszott meccset bemutató formájában. A „Helyi játék” menüben a jobb alsó sarokban lévő „Bemutatók” gombra kattintva lejátszhatod és kezelheted őket.</tip>
+ <tip>A Hedgewars egy szabad szoftver (nyílt forráskódú), amit a szabadidőnkben fejlesztünk. Probléma esetén kérdezz a fórumokon, vagy látogasd meg IRC szobánkat!</tip>
+ <tip>A Hedgewars egy szabad szoftver (nyílt forráskódú), amit a szabadidőnkben fejlesztünk. Ha tetszik, nyugodtan küldj egy kis adományt, vagy add hozzá te is a munkádat!</tip>
+ <tip>A Hedgewars egy szabad szoftver (nyílt forráskódú), amit a szabadidőnkben fejlesztünk. Nyugodtan oszd meg családoddal, barátaiddal is!</tip>
+ <tip>A Hedgewars egy szabad szoftver (nyílt forráskódú), amit a szabadidőnkben fejlesztünk, csak a móka kedvéért! A fejlesztőkkel a <a href="irc://irc.freenode.net/hedgewars">#hedgewars</a> csatornán találkozhatsz.</tip>
+ <tip>Időről időre hivatalos bajnokságok indulnak. A közelgő eseményeket pár nappal előre bejelentjük a <a href="https://www.hedgewars.org/">https://www.hedgewars.org/</a> webhelyen.</tip>
+ <tip>A Hedgewars sok nyelven elérhető. Ha a te nyelved fordítása hiányzik vagy elavult, nyugodtan keress minket!</tip>
+ <tip>A Hedgewars számos operációs rendszerre elérhető, többek között Microsoft Windowsra, macOS-re és GNU/Linuxra is.</tip>
+ <tip>Ne feledd, hogy készíthetsz saját játékot is helyi vagy hálózati/online módban. Nem csak a „Gyors játék” létezik!</tip>
+ <tip>Ha gamepadeket szeretnél hozzárendelni csapatokhoz, még a játék indítása előtt csatlakoztasd azokat a géphez.</tip>
+ <tip>Érdemes óránként legalább egy rövid szünetet tartani, nehogy megártson a testednek a sok játék a gép előtt.</tip>
+ <tip>Ha a videokártyád nem támogatja a hardveres gyosítású OpenGL-t, próbálkozz az alacsony minőségű mód bekapcsolásával, hogy javuljon a teljesítmény.</tip>
+ <tip>Ha a videokártyád nem támogatja a hardveres gyosítású OpenGL-t, próbálkozz az érintett illesztőprogramok frissítésével.</tip>
+ <tip>Nyitottak vagyunk a javaslatokra és az építő kritikára. Ha valami nem tetszik, vagy van egy remek ötleted, ne tartsd magadban!</tip>
+ <tip>A saját érdekedben is kérünk, hogy légy tapintatos és barátságos, mikor a kiszolgálónkon játszol. Azt se feledd, hogy a játékosok egy része még gyerek!</tip>
+ <tip>Az olyan játékmódok, mint például a „Vámpírizmus” vagy a „Karma”, egészen új taktikáknak adnak teret. Próbáld ki őket egy saját készítésű játékban!</tip>
+ <tip>Kérjük, ne telepítsd a Hedgewarst olyan számítógépre, ami nem a tiéd (pl. iskolai, egyetemi, munkahelyi gépek), hacsak meg nem engedik. Nem szeretnénk, ha bajba kerülnél.</tip>
+ <tip>A Hedgewars remek rövid játék lehet a szünetekben. Csak ne tegyetek bele túl sok sünt vagy túl nagy pályát. Az életpontok és az idő csökkentése is jó ötlet.</tip>
+ <tip>A játék készítése során egyetlen sünnek sem esett bántódása.</tip>
+ <tip>Háromféle ugrás van. A [magasugrás] kétszeri lenyomása egy igen magas, hátrafelé irányú ugrást eredményez.</tip>
+ <tip>Félsz, hogy leesel egy szakadék szélén? Ha lenyomva tartod a [pontos célzás]t, úgy fordulhatsz jobbra vagy balra, hogy közben nem mozdulsz.</tip>
+ <tip>Egyes fegyverek sajátos stratégiát vagy egyszerűen sok gyakorlást igényelnek, úgyhogy ne add fel egy eszköz használatát, csak mert egyszer mellélőttél.</tip>
+ <tip>A legtöbb fegyver vízbe esve nem működik. Kivétel például a méhecske és a torta.</tip>
+ <tip>A pálpusztai sajt csak kicsit robban. De a szaga, amit elvisz a szél, sok sünt tud egyszerre megmérgezni.</tip>
+ <tip>A zongoracsapás a legerősebb légitámadás. Viszont elveszíted a sünt, aki előadja, így van egy nagy hátránya is.</tip>
+ <tip>A méhecske használata trükkös lehet. Fordulási szöge a sebességétől függ, úgyhogy lehetőleg ne teljes erővel lődd ki!</tip>
+ <tip>A tapadóaknákkal remekül lehet kis láncreakciókat indítani, amik az ellenséges sünt szorult helyzetbe, vagy éppen a vízbe juttatják.</tip>
+ <tip>A kalapácsot a legjobb hídon vagy gerendán használni. Akire lecsapsz, az alatt a padló is beszakad.</tip>
+ <tip>Ha beszorultál egy ellenséges sün mögé, a kalapáccsal kiszabadíthatod magad anélkül, hogy egy robbanásban magad is megsérülnél.</tip>
+ <tip>Hogy milyen messzire jut a torta, a bejárandó területtől függ. Idő előtti felrobbantásához haszáld a [támadás] gombot.</tip>
+ <tip>A lángszóró egy fegyver, de alagutat is lehet vele ásni.</tip>
+ <tip>A Molotov-koktéllal vagy a lángszóróval ideiglegesen megakadályozhatod, hogy egy sün áthaladjon egy területen, például alagúton vagy hídon.</tip>
+ <tip>Tetszik a Hedgewars? Légy rajongónk a <a href="https://www.facebook.com/Hedgewars">Facebookon</a>, vagy kövess minket a <a href="https://twitter.com/hedgewars">Twitteren</a>!</tip>
+ <tip>Nyugodtan rajzolj saját sírokat, fejfedőket, zászlókat vagy akár pályákat, témákat is! Viszont az online használathoz valahol meg kell osztanod ezeket.</tip>
+ <tip>Rendszeresen frissítsd a videokártyád illesztőprogramjait, hogy elkerüld a játék közbeni problémákat.</tip>
+ <tip>Fej vagy írás? Írd be a várakozóba, hogy „/rnd”, és megtudod. Sőt: az „/rnd kő papír olló” is működik!</tip>
+ <tip>Beállíthatod, hogy a Hedgewarsszal kapcsolatos fájlok (játékmentések és bemutató felvételek) a játékhoz legyenek társítva, így azokat kedvenc fájlkezelődből vagy webböngésződből is elindíthatod.</tip>
+ <tip>A befulladt aknák nem veszélytelenek: noha időzítőjük elromlott, attól még felrobbanhatnak, ha sokat piszkálják azokat!</tip>
+ <tip>A szerelem forró! A csábítással felolvaszthatod a lefagyasztott sünöket.</tip>
+ <tip>Ha egy hordó füstölög, akkor annak már nincs sok hátra, és kis sérüléstől is felrobbanhat.</tip>
+ <tip>A hordók 60 életpontról indulnak, és úgy sérülnek, mint a sünök, tehát kell egy kicsit háborgatni őket, hogy felrobbanjanak.</tip>
+ <tip>Jobban pattogtatnád a fegyvereket? A gránátok, repeszgránátok, a pálpusztai sajt és az aknák pattogósságát az időzítő gombokkal állíthatod, ha közben lenyomod a [pontos célzás] gombot.</tip>
+ <tip>Már elfelejtetted a játék céljait vagy módosítóit? A Kilépés vagy a Szünet gomb megnyomásával újra átnézheted azokat.</tip>
+ <tip>Nemcsak a sünöket lehet elütni, elcsapni és földbe döngölni. Semmi sem állhat az utadba!</tip>
+ <tip>Hacsak másként nincs beállítva, az aknák 3 másodperc után robbannak.</tip>
+ <tip>Király módban az uralkodó erősebben, egészségesebben kezd, és ellenállóbb a sebzésekkel, robbanásokkal szemben, mint az alattvalók.</tip>
+ <tip>Király módban az uralkodó minden körben sérül, ha már nincs alattvaló a csapatban.</tip>
+ <tip>Az ostor a vékonyabb falakon át is eléri a sünöket, tárgyakat.</tip>
+ <tip>Minél gyorsabban repül a bárd, annál nagyobbat sebez.</tip>
+ <tip>A tortát ledobhatod szakadék széléről is, de nagyon a szélén kell állnod, úgyhogy csak óvatosan!</tip>
+ <tip>A kötéllel odébb küldhetsz más sünöket, például a földön csúszással. Ezt a technikát „kötélütés”-nek hívják.</tip>
+ <tip>Ne állj meg egy jeges lejtőn, mert lecsúszol. Esetleg lenyomhatod a [pontos célzás]t.</tip>
+ <tip>A Hó és a Karácsony témájú pályákon idővel rakodik a hó, kivéve, ha a pálya nem roncsolható.</tip>
+ <tip>Vigyázz a Hó és a Karácsony témájú pályákon, mert a gerendák csúszós jégből vannak!</tip>
+ <tip>A visszavonulási idő a használt fegyvertől függ. Vigyázz, mert bizonyos fegyvereknél egyáltalán nincs, és azonnal befejezik a körödet!</tip>
+ <tip>Ha ügyesen csinálod, elüthetsz egy sünt pusztán azzal, hogy kiugrasz alóla.</tip>
+ <tip>Ha jól időzíted a támadást, akkor a Shoryuken, a légkalapács és a szinuszpuska megmenthet az esési sérüléstől.</tip>
+ <tip>Amíg a sünöd a levegőben van, nem találják el a lövedékek.</tip>
+ <tip>Az ásórakéta, az orvlövészpuska és a Sivatagi Sas által vágott réseken át lehet lőni átjárokat – ha elég pontosan célzol.</tip>
+ <tip>Az elsősegélycsomaggal meggyógyíthatod a mérgezett sünödet.</tip>
+ <tip>A csomagokat felveheted az RC repülővel, a Shoryukennel, a légkalapáccsal és a Kamikazéval is.</tip>
+ <tip>Vigyázz, nehogy felrobbantsd magad, miközben a fúrópajzzsal megközelítesz egy csomagot.</tip>
+ <tip>A légi aknák a körök első 5 másodpercében nem működnek, csak utána kezdenek sünöket keresni.</tip>
+ <tip>Ne menj túl közel a légi aknához, mert ha elkezd követni, aligha menekülhetsz meg eszközök nélkül!</tip>
+ <tip>A légi aknák negyedannyi idő után robbannak, mint a rendes aknák.</tip>
+ <tip>Ha a pályán egy bárd egy robbanásban legalább 30 pont sérülést szerez, előfordulhat, hogy leesik. Minél nagyobb a sérülés, annál valószínűbb.</tip>
+ <tip>Figyelj a szélre, mert a lángokat és egyes lőszereket elfújja.</tip>
+ <tip>A fúrópajzzsal odébb tolhatod a sünöket és a hosszú időzítésű aknákat.</tip>
+ <tip>Ha nekimégy a fúrópajzzsal egy hordónak, abból nagy baj lehet.</tip>
+ <tip>Ha beírod a csevegőbe, hogy „/help”, parancsok listáját láthatod. Ezek olyan különleges funkciókat nyújtanak, mint például a gúnyolódás vagy a szavazás.</tip>
+ <windows-only>
+ <tip>A Hedgewars beállítófájljait a „Dokumentumok\Hedgewars” mappában találod. Lemásolhatod vagy magaddal viheted, de ne szerkeszd őket kézzel.</tip>
+ </windows-only>
+ <mac-only>
+ <tip>A Hedgewars beállítófájljait a saját mappádban a „Könyvtár/Alkalmazástámogatás/Hedgewars” mappában találod. Lemásolhatod vagy magaddal viheted, de ne szerkeszd őket kézzel.</tip>
+ </mac-only>
+ <linux-only>
+ <tip>A Hedgewars beállítófájljait a saját mappádban a „.hedgewars” almappában találod. Lemásolhatod vagy magaddal viheted, de ne szerkeszd őket kézzel.</tip>
+ </linux-only>
+</tips>
--- a/share/hedgewars/Data/Locale/tips_ru.xml Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Locale/tips_ru.xml Fri Jul 03 23:51:47 2020 +0200
@@ -5,50 +5,91 @@
<tips>
<tip>Выберите тот же цвет команды, что и у друга, чтобы играть в союзе. Вы будете управлять своими ёжиками, но выиграете или проиграете вместе.</tip>
<tip>Некоторые виды оружия наносят небольшой урон, но могут наносить больший урон в правильной ситуации. Попробуйте использовать пистолет Дезерт Игл, чтобы столкнуть несколько ёжиков в воду.</tip>
- <tip>Если вы не уверены в том, что хотите сделать и не хотите тратить снаряды, пропустите ход. Но не теряйте много времени, так как смерть неизбежна!</tip>
- <tip>Если вы хотите предотвратить использование вашего псевдонима другими игроками на официальном игровом сервере, зарегистрируйтесь на https://www.hedgewars.org/.</tip>
+ <tip>Если у вас нет идей как действовать, и вы не хотите тратить снаряды, пропустите ход. Но не теряйте много времени, так как смерть неизбежна!</tip>
+ <tip>Хотите сохранить верёвку? Отпустите её во время полёта и выстрелите ей снова. Пока вы не коснётесь земли или не промахнётесь выстрелом, вы можете её использовать сколько угодно!</tip>
+ <tip>Если вы хотите предотвратить использование вашего псевдонима другими игроками на официальном игровом сервере, зарегистрируйтесь на <a href="https://www.hedgewars.org/">https://www.hedgewars.org/</a>.</tip>
<tip>Наскучила обычная игра? Попробуйте миссии, имеющие различные виды сценариев.</tip>
- <tip>По умолчанию игры всегда записывает последнюю игру в виде демки. Выберите "Локальную игру" и нажмите кнопку "Демки" в правом нижнем углу, чтобы проиграть запись.</tip>
- <tip>Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если у вас возникают вопросы, задавайте их на нашем форуме, но пожалуйста, не ожидайте круглосуточной поддержки!</tip>
+ <tip>По умолчанию Hedgewars всегда записывает последнюю игру в виде демки. Выберите "Локальную игру" и нажмите кнопку "Демки" в правом нижнем углу, чтобы проиграть запись.</tip>
+ <tip>Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если у вас возникают вопросы, задайте их на нашем форуме или посетите наш IRC канал!</tip>
<tip>Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если вам понравилась игра, помогите нам денежным вознаграждением или вкладом в виде вашей работы!</tip>
<tip>Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Распространяйте его среди друзей и членов семьи!</tip>
- <tip>Время от времени проводятся официальные турниры. Предстоящие события анонсируются на https://www.hedgewars.org/ за несколько дней.</tip>
- <tip>Hedgewars доступен на многих языках. Если перевод на ваш язык отсутствует или устарел, сообщите нам!</tip>
- <tip>Hedgewars запускается на множестве различных операционных систем, включая Microsoft Windows, Mac OS X и Linux.</tip>
+ <tip>Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время в своё удовольствие! Встретиться с разработчиками можно тут <a href="irc://irc.freenode.net/hedgewars">#hedgewars</a>!</tip>
+ <tip>Время от времени проводятся официальные турниры. Предстоящие события анонсируются на <a href="https://www.hedgewars.org/">https://www.hedgewars.org/</a> за несколько дней.</tip>
+ <tip>Hedgewars доступен на многих языках. Если русский перевод устарел или содержит ошибки, сообщите нам или последнему переводчику в списке!</tip>
+ <tip>Hedgewars запускается на множестве различных операционных систем, включая Microsoft Windows, Mac OS и Linux.</tip>
<tip>Помните, что у вас есть возможность создать собственную игру локально или по сети. Вы не ограничены кнопкой "Простая игра".</tip>
+ <tip>Подсоедините один или больше джойстиков перед запуском игры, чтобы получить возможность настроить их для управления командами.</tip>
<tip>Играя, не забывайте делать небольшой перерыв хотя бы раз в час.</tip>
<tip>Если ваша видеокарта не поддерживает ускорение OpenGL, попробуйте включить опцию "низкое качество", чтобы улучшить производительность.</tip>
+ <tip>Если ваша видеокарта не поддерживает ускорение OpenGL, попробуйте обновить драйверы видеокарты.</tip>
<tip>Мы открыты для предложений и конструктивной критики. Если вам что-то не понравилось или у вас появилась отличная идея, сообщите нам!</tip>
<tip>Играя по сети, будьте особенно вежливы и всегда помните, что с вами или против вас могут играть дети!</tip>
<tip>Особые настройки игры "Вампиризм" и "Карма" дают возможность выработать совершенно новую тактику. Попробуйте их!</tip>
- <tip>Не следует устанавливать Hedgewars на компьютеры, не принадлежащие вам (в школе, на работе, в университете и т.п.). Не забудь спросить разрешения у ответственного лица!</tip>
+ <tip>Не следует устанавливать Hedgewars на компьютеры, не принадлежащие вам (в школе, на работе, в университете и т.п.). Не забудьте спросить разрешения у ответственного лица!</tip>
<tip>Hedgewars может отлично подойти для коротких матчей на перерывах. Просто не добавляйте слишком много ёжиков и не играйте на больших картах. Также можно уменьшить время или количество начального здоровья.</tip>
<tip>При подготовке игры не пострадал ни один ёж.</tip>
- <tip>Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если кто-то продал вам игру, потребуйте возврат денег!</tip>
- <tip>Подсоедините один или несколько геймпадов перед запуском игры, и вы сможете настроить их для управления командами.</tip>
- <tip>Если вы хотите предотвратить использование вашего псевдонима другими игроками на официальном игровом сервере, зарегистрируйтесь на https://www.hedgewars.org/.</tip>
- <tip>Если ваша видеокарта не поддерживает ускорение OpenGL, попробуйте обновить видеодрайвер.</tip>
<tip>Есть три вида прыжков. Нажмите [прыжок вверх] дважды, чтобы сделать очень высокий прыжок назад.</tip>
- <tip>Боитесь упасть с обрыва? Нажмите левый shift, чтобы повернуться влево или вправо, не передвигаясь.</tip>
- <tip>Некоторые виды оружия требуют особых стратегий или просто много тренировок, поэтому не разочаровывайтесь в инструменте, если разок промахнётесь.</tip>
- <tip>Большинство видов оружия не сработают при попадании в воду. Пчела и Торт - это исключения.</tip>
+ <tip>Боитесь упасть с обрыва? Нажмите [точность], чтобы повернуться [влево] или [вправо], не передвигаясь.</tip>
+ <tip>Некоторые виды оружия требуют особых стратегий или просто большого опыта, поэтому не разочаровывайтесь в инструменте, если разок промахнётесь.</tip>
+ <tip>Большинство видов оружия тонет в воде. Пчела и Торт - это исключения.</tip>
<tip>Старый Лимбургер взрывается несильно. Однако ветер, несущий зловонное облако, может отравить несколько ёжиков за раз.</tip>
<tip>Фортепьяновый удар - это наиболее мощный из ударов с воздуха. При использовании вы потеряете ёжика, в этом его недостаток.</tip>
- <tip>Мины-липучки - отличный инструмент для создания небольших цепных реакций, от которых ёж попадет в неприятную ситуацию... или в воду.</tip>
- <tip>Молот наиболее эффективен, когда используется на мосту или балке. Ударенный ёж пролетит сквозь землю.</tip>
- <tip>Если вы застряли позади ёжика противника, используйте Молот. чтобы освободить себя без риска потери здоровья от взрыва.</tip>
+ <tip>Пчёлка - весьма непростое оружие. Её радиус поворота зависит от её скорости, так что постарайтесь не запускать её на полной мощности.</tip>
+ <tip>Мины-липучки - отличный инструмент для создания небольших цепных реакций, от которых ёжик попадет в неприятную ситуацию... или в воду.</tip>
+ <tip>Молот наиболее эффективен, когда используется на мосту или балке. Ударенный ёжик пролетит сквозь землю.</tip>
+ <tip>Если вы застряли позади ёжика противника, используйте Молот, чтобы освободить себя без риска потери здоровья от взрыва.</tip>
<tip>Дистанция, которую проходит Торт, зависит от поверхности. Используйте клавишу атаки, чтобы сдетонировать его раньше.</tip>
<tip>Огнемёт - это оружие, но он также может быть использован как инструмент для рытья туннелей.</tip>
- <tip>Хотите узнать, кто стоит за разработкой игры? Нажмите на логотип Hedgewars в главном меню, чтобы увидеть состав разработчиков.</tip>
- <tip>Нравится Hedgewars? Станьте фанатом на %1 или следите за нами на %2!</tip>
+ <tip>Используйте Коктейль Молотова или Огнемёт, чтобы временно не дать ёжикам пройти через туннель или по платформе.</tip>
+ <tip>Понравилась Hedgewars? Заходите на <a href="https://www.facebook.com/Hedgewars">Facebook</a> или следите за нами в <a href="https://twitter.com/hedgewars">Twitter</a>.</tip>
<tip>Рисуйте свои варианты надгробий, шляп, флагов или даже карт и тем! Но не забудьте передать их соперникам каким-либо образом для игры по сети.</tip>
- <tip>Очень хочется особенную шляпу? Сделайте пожертвование и получите эксклюзивную шляпу на выбор!</tip>
- <tip>Обновляйте видеодрайвера, чтобы не было проблем во время игры.</tip>
- <tip>Файлы конфигурации Hedgewars находятся в папке "Мои документы\Hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную.</tip>
+ <tip>Обновляйте видеодрайверы, чтобы не было проблем во время игры.</tip>
+ <tip>Орёл или решка? Наберите “/rnd” в лобби и получите результат. Так же работает команда “/rnd rock paper scissors”!</tip>
<tip>Можно ассоциировать файлы Hedgewars (сохранения и демки игр) с игрой, чтобы запускать их прямо из вашего любимого файлового менеджера или браузера.</tip>
- <tip>Хотите сэкономить верёвки? Отпустите верёвку в воздухе и стреляйте снова. Пока вы не затронете землю, вы можете использовать верёвку сколько угодно, не тратя дополнительных!</tip>
- <tip>Файлы конфигурации Hedgewars находятся в папке ""Library/Application Support/Hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную.</tip>
- <tip>Файлы конфигурации Hedgewars находятся в папке ".hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную.</tip>
- <tip>Используйте Коктейль Молотова или Огнемёт, чтобы временно не дать ёжикам пройти через туннель или по платформе.</tip>
- <tip>Пчёлку можеть быть сложно использовать. Её радиус поворота зависит от скорости, поэтому попробуйте не использовать полную силу броска.</tip>
+ <tip>Неразорвавшиеся мины не так уж безобидны: Хотя их таймер сломан, они всё ещё могут взорваться, если обходиться с ними неаккуратно!</tip>
+ <tip>Любовь согревает! Используйте Соблазнение, чтобы разморозить ёжиков.</tip>
+ <tip>Дым, выходящий из бочки указывает на то, что у неё мало "здоровья" и даже небольшой урон по ней может вызвать взрыв.</tip>
+ <tip>Изначально у бочек 60 единиц здоровья и они так же как и ёжики получают урон. Потеряв всё "здоровье", бочки взрываются.</tip>
+ <tip>Нужен больший отскок? Меняйте силу отскока у Гранат, Кассетных Бомб, Старого Лимбургера и Мин, нажимая [точность] и одну из цифр.</tip>
+ <tip>Забыли цели или условия игры? Нажмите паузу или кнопку выхода, чтобы посмотреть их снова!</tip>
+ <tip>Вы можете бить, топить и вдавливать в землю другие объекты так же как и ёжиков. Бей всё подряд!</tip>
+ <tip>Если не указано другое, то мины обычно взрываются через 3 секунды.</tip>
+ <tip>В режиме King Mode у вашего Короля больше здоровья, силы и сопротивления к урону, чем у Миньонов.</tip>
+ <tip>В режиме King Mode Король будет получать урон каждый ход, если в команде не осталось Миньонов.</tip>
+ <tip>Удар кнутом бьёт ёжиков а также объекты за тонкой стеной.</tip>
+ <tip>Урон Секача возрастает с его скоростью.</tip>
+ <tip>Торты можно бросать с обрыва, но будьте осторожны - нужно стоять совсем на краю.</tip>
+ <tip>Используйте верёвку, чтобы толкать других ёжиков, например, скользя по поверхности после приземления.</tip>
+ <tip>Не стойте на скользкой поверхности, вы соскользнёте. Или стойте, но зажимайте [точность].</tip>
+ <tip>На картах с темами Snow и Christmas снег падает и оседает на рельефе карты и объектах.</tip>
+ <tip>Будьте аккуратны на картах с темами Snow и Christmas, потому что балки на них покрыты льдом.</tip>
+ <tip>Время отхода зависит от оружия, которое вы используете. Будьте осторожны, некоторые виды оружия не имеют времени на отход и заканчивают ход мгновено!</tip>
+ <tip>Обладая должным опытом, можно толкать ёжиков, прыгая из под них.</tip>
+ <tip>Вовремя запущенный Сюрикен, Отбойный Молоток или Синус-пушка могут убрать урон от падения.</tip>
+ <tip>Ёжики не могут столкнуться с ракетами или огнём, пока они в полёте.</tip>
+ <tip>Отверстия сделанные Сверлящей Ракетой, Снайперской винтовкой и Пистолетом Desert Eagle достаточно велики, чтобы можно было выстрелить через них портальной пушкой, если целиться метко.</tip>
+ <tip>Собирайте аптечки, чтобы подлечить вашего отравленного ёжика.</tip>
+ <tip>Вы можете собирать ящики во время использования Самолётика, Сюрикена, Отбойного Молотка или Камикадзе.</tip>
+ <tip>Будьте осторожны, не взорвитесь, когда используете бур рядом с ящиками.</tip>
+ <tip>Воздушные мины остаются неактивными в течение 5 секунд после начала хода, а затем они начинают искать ёжиков.</tip>
+ <tip>Держитесь подальше от воздушных мин! Если она начнёт преследовать вас, будет сложно уйти от неё без использования каких-нибудь приспособлений.</tip>
+ <tip>Воздушные мины взрываются через четверть времени, установленного для обычных мин.</tip>
+ <tip>Когда Секач наносит поверхности больше 30 единиц урона, появляется шанс, что он не зацепится и упадёт. Этот шанс возрастает с уроном.</tip>
+ <tip>Не забывайте про ветер, потому что огонь и траектории некоторых снарядов зависят от него.</tip>
+ <tip>Используйте Бур, чтобы толкать ёжиков и мины с долгим таймером.</tip>
+ <tip>Бур и Бочка - вот лучший рецепт катастрофы!</tip>
+ <tip>Наберите “/help” в чате, чтобы получить список доступных команд. Команды дают вам доступ к специальным возможностям типа голосования или насмешек.</tip>
+ <windows-only>
+ <tip>Файлы конфигурации Hedgewars находятся в папке "Мои документы\Hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную.</tip>
+ </windows-only>
+ <mac-only>
+ <tip>Файлы конфигурации Hedgewars находятся в папке "Library/Application Support/Hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную.</tip>
+ </mac-only>
+ <linux-only>
+ <tip>Файлы конфигурации Hedgewars находятся в каталоге ".hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную.</tip>
+ </linux-only>
</tips>
+ <tip>Хотите узнать, кто стоит за разработкой игры? Нажмите на логотип Hedgewars в главном меню, чтобы увидеть состав разработчиков.</tip>
+ <tip>Очень хочется особенную шапку? Сделайте пожертвование и получите эксклюзивную шапку на выбор!</tip>
+ <tip>Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если кто-то продал вам игру, потребуйте возврата денег!</tip>
+</tips>
Binary file share/hedgewars/Data/Music/Jungle.ogg has changed
Binary file share/hedgewars/Data/Music/Jungle.opus has changed
--- a/share/hedgewars/Data/Scripts/Multiplayer/Battalion.lua Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Battalion.lua Fri Jul 03 23:51:47 2020 +0200
@@ -752,6 +752,7 @@
hogInfo[hog]['variant'] = hogVar
SetHealth(hog, variants[hogVar]["hp"])
+ hogInfo[hog]['maxHp'] = variants[hogVar]["hp"]
end
function getHogInfo(hog, info)
@@ -1150,8 +1151,7 @@
end
hpDiff = div(deathMaxHP * highEnemyKillHPBonus, 100)
- newHP = curHP + hpDiff
- HealHog(CurHog, newHP)
+ HealHog(CurHog, hpDiff)
-- Friendly fire! Punish hog by removing weapons and helpers from pool
-- and reduce health
else
@@ -1464,6 +1464,8 @@
break
end
end
+
+ updatePointsLabel(LastTeam)
end
function onNewTurn()
--- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.cfg Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.cfg Fri Jul 03 23:51:47 2020 +0200
@@ -1,2 +1,2 @@
+Racer
Shoppa
-Shoppa
--- a/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/Racer.lua Fri Jul 03 23:51:47 2020 +0200
@@ -1,87 +1,29 @@
+--[[
+RACER
+map-independant racing script
+originally by mikade, edited heavily by others
-------------------------------------------
--- RACER 0.8
--- map-independant racing script
--- by mikade
+-----------------------------------------
+Script parameters:
+rounds=N
+--> The game will be played with N rounds (default: 3)
+
+waypointradius=N
+--> The waypoints have a radius of N pixels (default: 450)
+
+maxwaypoints=N
+--> The maximum number of waypoints to be placed (default: 8)
+
+teamrope=true
+--> The team will be colored in the color of the team.
-----------------------------------------
--- DEVELOPER WARNING - FOR OFFICIAL DEVELOPMENT --
--- Be careful when editig this script, do not introduce changes lightly!
--- This script is used for time records on the official Hedgewars server.
--- Introducing breaking changes means we have to invalidate past time records!
-
------------------------------------
---0.1: took all the code from crazy racer and scrapped most of it
------------------------------------
-
--- Removed tumbler system
--- Removed extra adds like boosters etc
--- Added experimental waypoint placement system
--- More user feedback
--- Reduced race complexity limit to 5 waypoints
--- stop placement at complexity limit reached and end turn
--- guys dont keep racing after dying
--- invulnerable feasibility
--- reverted time keeping method
--- reduced feedback display time
--- colour-coded addcaptions
--- cleaned up code
--- support for more players properly added
--- tardis fix
--- remove airstrikes
-
--- i think the remainder 0 .456 sec of the tracktime isnt getting reset on newturn
-
--- update feedback
-
--------
--- 0.2
--------
-
--- allow gameflags
--- extend time to 90s
--- remove other air-attack based weps
--- turn off water rise for sd
+DEVELOPER WARNING - FOR OFFICIAL DEVELOPMENT --
+Be careful when editig this script, do not introduce changes lightly!
+This script is used for time records on the official Hedgewars server.
+Introducing breaking changes means we have to invalidate past time records!
--------
--- 0.3
--------
-
--- prevent WP being placed in land
--- prevent waypoints being placed outside border
-
--------
--- 0.4
--------
-
--- update user feedback
--- add more sounds
-
--------
--- 0.5
--------
-
--- fix ghost disappearing if hog falls in water or somehow dies
--- lengthen ghost tracking interval to improve performance on slower machines
--- increase waypoint limit to 8
--- allow for persistent showmission information
-
--------
--- 0.6
--------
-
--- remove hogs from racing area as per request
-
--------
--- 0.7
--------
-
--- switch to first available weapon if starting race with no weapon selected
-
--------
--- 0.8
--------
--- allow different boost directions
+]]
-----------------------------
-- SCRIPT BEGINS
@@ -120,6 +62,8 @@
local officialChallenge
+local ammoDelays
+
--------------------------
-- hog and team tracking variales
--------------------------
@@ -237,23 +181,6 @@
end
end
---[[
-Parameters syntax:
-
-teamrope=true
---> The team will be colored in the color of the team.
-
-rounds=N
---> The game will be played with N rounds (default: 3)
-
-waypointradius=N
---> The waypoints have a radius of N pixels (default: 450)
-
-maxwaypoints=N
---> The maximum number of waypoints to be placed (default: 8)
-
-]]
-
function onParameters()
parseParams()
if params["teamrope"] ~= nil then
@@ -598,6 +525,8 @@
if GetHogClan(hhs[i]) ~= bestClan or roundDraw then
SetEffect(hhs[i], heResurrectable, 0)
SetHealth(hhs[i],0)
+ elseif not roundDraw then
+ SetEffect(hhs[i], heInvulnerable, 1)
end
end
@@ -680,12 +609,13 @@
----------------------------------
function onGameInit()
- EnableGameFlags(gfInfAttack, gfInvulnerable)
+ EnableGameFlags(gfInfAttack)
+ -- Force-disable various game flags that would break the script
+ DisableGameFlags(gfKing, gfSwitchHog, gfAISurvival, gfPlaceHog, gfTagTeam)
CaseFreq = 0
TurnTime = 90000
WaterRise = 0
HealthDecrease = 0
-
end
function InstructionsBuild()
@@ -844,6 +774,24 @@
AddAmmo(CurrentHedgehog, amAirAttack, 0)
gTimer = 0
+ SetSoundMask(sndStupid, false)
+ SetSoundMask(sndBugger, false)
+ SetSoundMask(sndDrat, false)
+
+ -- Remember ammo delays for later
+ if ammoDelays == nil then
+ ammoDelays = {}
+ for a=0, AmmoTypeMax do
+ local _, _, delay = GetAmmo(a)
+ -- delay >= 10000 is special value used in hog placement phase.
+ -- This extracts the "true" delay
+ if delay >= 10000 then
+ delay = delay - 10000
+ end
+ ammoDelays[a] = delay
+ end
+ end
+
-- Handle Starting Stage of Game
if (gameOver == false) and (gameBegun == false) then
if wpCount >= 2 then
@@ -854,6 +802,13 @@
InstructionsRace()
end
+ -- Restore old ammo delays
+ for a=0, AmmoTypeMax do
+ if a ~= amAirAttack and a ~= amSkip then
+ SetAmmoDelay(a, ammoDelays[a])
+ end
+ end
+
SetAmmoTexts(amSkip, nil, nil, nil)
else
local infoString
@@ -864,7 +819,12 @@
end
ShowMission(loc("Racer"),
loc("Waypoint placement phase"), infoString, -amAirAttack, 4000)
- AddAmmo(CurrentHedgehog, amAirAttack, 4000)
+ AddAmmo(CurrentHedgehog, amAirAttack, AMMO_INFINITE)
+ for a=0, AmmoTypeMax do
+ if a ~= amAirAttack and a ~= amSkip then
+ SetAmmoDelay(a, 9999)
+ end
+ end
SetWeapon(amAirAttack)
-- Bots skip waypoint placement
if GetHogLevel(CurrentHedgehog) ~= 0 then
@@ -912,15 +872,19 @@
AddAmmo(CurrentHedgehog, amMineStrike, 0)
AddAmmo(CurrentHedgehog, amNapalm, 0)
AddAmmo(CurrentHedgehog, amPiano, 0)
+ AddAmmo(CurrentHedgehog, amSwitch, 0)
+ AddAmmo(CurrentHedgehog, amKamikaze, 0)
+ AddAmmo(CurrentHedgehog, amIceGun, 0)
+ SetAmmoDelay(amAirAttack, 0)
end
function onGameTick20()
-- airstrike detected, convert this into a potential waypoint spot
if cGear ~= nil then
- x,y = GetGearPosition(cGear)
+ local x,y = GetGearPosition(cGear)
if x > -9000 then
- x,y = GetGearTarget(cGear)
+ local x,y = GetGearTarget(cGear)
if TestRectForObstacle(x-20, y-20, x+20, y+20, true) then
@@ -939,7 +903,7 @@
else
DeleteGear(cGear)
end
- SetGearPosition(cGear, -10000, 0)
+ SetGearPosition(cGear, -10000, y)
end
@@ -956,7 +920,10 @@
trackTime = 0
SetGearPosition(CurrentHedgehog, wpX[0], wpY[0])
- AddGear(GetX(CurrentHedgehog)+boostX, GetY(CurrentHedgehog)+boostY, gtGrenade, 0, 0, 0, 1)
+ Explode(GetX(CurrentHedgehog)+boostX,
+ GetY(CurrentHedgehog)+boostY,
+ 50,
+ EXPLNoDamage + EXPLAutoSound)
FollowGear(CurrentHedgehog)
HideMission()
@@ -998,8 +965,13 @@
AddCaption(string.format(loc("Time: %.1fs"), (trackTime/1000)),GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
+ -- Track completed, all waypoints touched
if (CheckWaypoints() == true) then
+ SetSoundMask(sndStupid, true)
+ SetSoundMask(sndBugger, true)
+ SetSoundMask(sndDrat, true)
AdjustScores()
+ SetEffect(CurrentHedgehog, heInvulnerable, 1)
DisableTumbler()
end
@@ -1030,6 +1002,14 @@
end
end
+function onGearDamage(gear)
+
+ if gear == CurrentHedgehog then
+ DisableTumbler(false)
+ end
+
+end
+
function onGearResurrect(gear, vGear)
if gear == CurrentHedgehog then
@@ -1049,6 +1029,10 @@
SetEffect(gear, heResurrectable, 1)
elseif GetGearType(gear) == gtAirAttack then
cGear = gear
+ local x,y = GetGearPosition(cGear)
+ SetGearPosition(cGear, 10000, y)
+ elseif (not gameBegun) and GetGearType(gear) == gtAirBomb then
+ DeleteGear(gear)
elseif GetGearType(gear) == gtRope and TeamRope then
SetTag(gear,1)
SetGearValues(gear,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,GetClanColor(GetHogClan(CurrentHedgehog)))
--- a/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua Fri Jul 03 23:51:47 2020 +0200
@@ -714,6 +714,7 @@
EnableGameFlags(gfInfAttack, gfDisableWind, gfBorder)
DisableGameFlags(gfSolidLand)
+ DisableGameFlags(gfKing, gfSwitchHog, gfAISurvival, gfPlaceHog, gfTagTeam)
CaseFreq = 0
TurnTime = 90000
WaterRise = 0
@@ -948,6 +949,10 @@
function onNewTurn()
+ SetSoundMask(sndStupid, false)
+ SetSoundMask(sndDrat, false)
+ SetSoundMask(sndBugger, false)
+
CheckForNewRound()
TryRepositionHogs()
@@ -1088,7 +1093,11 @@
AddCaption(string.format(loc("Time: %.1fs"), (trackTime/1000)), GetClanColor(GetHogClan(CurrentHedgehog)),capgrpMessage2)
+ -- Track completed, all waypoints touched!
if (CheckWaypoints() == true) then
+ SetSoundMask(sndStupid, true)
+ SetSoundMask(sndDrat, true)
+ SetSoundMask(sndBugger, true)
AdjustScores()
DisableTumbler()
end
--- a/share/hedgewars/Data/Shaders/default.fs Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/Shaders/default.fs Fri Jul 03 23:51:47 2020 +0200
@@ -14,8 +14,8 @@
{
if(enableTexture){
if (tintAdd){
- tint.a = 0.0;
- gl_FragColor = clamp(texture2D(tex0, tex) + tint, 0.0, 1.1);
+ vec4 tint_ = vec4(tint.xyz, 0.0);
+ gl_FragColor = clamp(texture2D(tex0, tex) + tint_, 0.0, 1.1);
}else{
gl_FragColor = texture2D(tex0, tex) * tint;
}
--- a/share/hedgewars/Data/misc/CMakeLists.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/share/hedgewars/Data/misc/CMakeLists.txt Fri Jul 03 23:51:47 2020 +0200
@@ -4,8 +4,11 @@
file(GLOB miscfiles *.svg *.xml *.desktop *.csv)
- install(FILES ${miscfiles} DESTINATION ${SHAREPATH}/Data/misc)
install(FILES hedgewars.xpm DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps)
install(FILES hedgewars.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
+else()
+ file(GLOB miscfiles *.csv)
endif()
+install(FILES ${miscfiles} DESTINATION ${SHAREPATH}/Data/misc)
+
--- a/tools/CMakeLists.txt Wed Jul 31 23:14:27 2019 +0200
+++ b/tools/CMakeLists.txt Fri Jul 03 23:51:47 2020 +0200
@@ -26,9 +26,6 @@
endif()
endif()
- get_target_property(qmake_executable Qt5::qmake IMPORTED_LOCATION)
- get_filename_component(qt_bin_dir "${qmake_executable}" DIRECTORY)
-
#remove the ";-framework Cocoa" from the SDL2_LIBRARY variable
string(REGEX REPLACE "(.*);-.*" "\\1" sdl_library_only "${SDL2_LIBRARY}")
#remove the "libSDLmain.a" from the SDL2_LIBRARY variable
@@ -39,22 +36,75 @@
string(REGEX REPLACE ".*/(.*)$" "\\1" ZLIB_LIBNAME "${ZLIB_LIBRARY}")
set(frameworks_dir ${CMAKE_INSTALL_PREFIX}/${target_library_install_dir})
+
if(${BUILD_ENGINE_LIBRARY})
set(engine_full_path "${frameworks_dir}/${CMAKE_SHARED_LIBRARY_PREFIX}hwengine${CMAKE_SHARED_LIBRARY_SUFFIX}")
else()
set(engine_full_path "${CMAKE_INSTALL_PREFIX}/hwengine${CMAKE_EXECUTABLE_SUFFIX}")
endif()
- find_program(macdeployqt_executable NAMES macdeployqt PATHS ${qt_bin_dir})
- if(NOT macdeployqt_executable)
- message(FATAL_ERROR "The utility macdeployqt is required to create the bundle (searched: ${qt_bin_dir})")
- endif()
+
+ #create the .app bundle using BundleUtilities instead of old macdeployqt
+ set(APP_DIR "Hedgewars.app")
+ set(APP_BASE_DIR "${CMAKE_INSTALL_PREFIX}/../") # should be, Hedgewars.app/Contents/MacOS/../
+
+ # macro to install qt5 plugins
+ # modified from https://github.com/Kitware/CMake/blob/master/Source/QtDialog/CMakeLists.txt
+ macro(install_qt5_plugin _qt_plugin_name _qt_plugins_var)
+ get_target_property(_qt_plugin_path "${_qt_plugin_name}" LOCATION)
+ if(EXISTS "${_qt_plugin_path}")
+ get_filename_component(_qt_plugin_file "${_qt_plugin_path}" NAME)
+ get_filename_component(_qt_plugin_type "${_qt_plugin_path}" PATH)
+ get_filename_component(_qt_plugin_type "${_qt_plugin_type}" NAME)
+ set(_qt_plugin_dir "PlugIns")
+ set(_qt_plugin_dest "${_qt_plugin_dir}/${_qt_plugin_type}")
+ install(FILES "${_qt_plugin_path}"
+ DESTINATION "../${_qt_plugin_dest}" # relative to install dir
+ ${COMPONENT})
+ list(APPEND ${_qt_plugins_var}
+ "\${CMAKE_BINARY_DIR}/${APP_BASE_DIR}/${_qt_plugin_dest}/${_qt_plugin_file}")
+ else()
+ message(FATAL_ERROR "QT plugin ${_qt_plugin_name} not found")
+ endif()
+ endmacro()
- #create the .app bundle
- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CreateMacBundle.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CreateMacBundle.cmake)
- install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/CreateMacBundle.cmake
- CODE "message(STATUS \"Your app bundle is ready\")")
+ # install cocoa plugin and build list to send to fixup_bundle
+ install_qt5_plugin("Qt5::QCocoaIntegrationPlugin" QT_PLUGINS)
+ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
+ "[Paths]\nPlugins = ${_qt_plugin_dir}\n")
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/qt.conf"
+ DESTINATION "../Resources" # relative to install dir
+ ${COMPONENT})
+ # Build up search directories for fixup_bundle
+ set(DIRS "")
+ # Add QT bin and lib paths
+ if(CMAKE_PREFIX_PATH)
+ foreach(dir ${CMAKE_PREFIX_PATH})
+ list(APPEND DIRS "${dir}/bin" "${dir}/lib")
+ endforeach()
+ endif()
+ # Add other lib folder from around the system
+ list(APPEND DIRS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /usr/local/lib
+ /opt/local/lib
+ )
+
+ # operate on the Hedgewars.app
+ set(APPS ${CMAKE_BINARY_DIR}/${APP_DIR})
+
+ # debugging
+ message(STATUS "APPS: ${APPS}")
+ message(STATUS "QT_PLUGINS: ${QT_PLUGINS}")
+ message(STATUS "DIRS: ${DIRS}")
+
+ # properly fixup the .app to include all dependencies
+ install(CODE "include(BundleUtilities)
+ fixup_bundle(\"${APPS}\" \"${QT_PLUGINS}\" \"${DIRS}\")")
+
+
#create the .dmg for deployment
#first make sure .app exists, then remove any old .dmg with same name, finally run the script
add_custom_target(dmg COMMAND make install
@@ -68,7 +118,7 @@
--app-drop-link 410 190
--background "${CMAKE_CURRENT_SOURCE_DIR}/../misc/dmgBackground.png"
${CMAKE_BINARY_DIR}/Hedgewars-${HEDGEWARS_VERSION}.dmg
- ${CMAKE_BINARY_DIR}/Hedgewars.app
+ ${CMAKE_BINARY_DIR}/${APP_DIR}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
endif()
--- a/tools/CreateMacBundle.cmake.in Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-# check for a well known-framework
-execute_process(COMMAND stat ${frameworks_dir}/QtCore.framework RESULT_VARIABLE doBundle OUTPUT_QUIET ERROR_QUIET)
-# prepare Frameworks directory
-execute_process(COMMAND mkdir -p ${frameworks_dir})
-# macdeployqt will convert safely any absolute path library for 'hedgewars'
-execute_process(COMMAND ${macdeployqt_executable} ${CMAKE_BINARY_DIR}/Hedgewars.app OUTPUT_QUIET ERROR_QUIET)
-
-# but macdeployqt will not work for a second executable, so employ this series of ridiculous commands to work around it
-execute_process(COMMAND mv ${CMAKE_BINARY_DIR}/Hedgewars.app/Contents/MacOS/hedgewars ${CMAKE_BINARY_DIR}/Hedgewars.app/Contents/MacOS/tmp)
-execute_process(COMMAND mv ${CMAKE_BINARY_DIR}/Hedgewars.app/Contents/MacOS/hwengine ${CMAKE_BINARY_DIR}/Hedgewars.app/Contents/MacOS/hedgewars)
-execute_process(COMMAND ${macdeployqt_executable} ${CMAKE_BINARY_DIR}/Hedgewars.app OUTPUT_QUIET ERROR_QUIET)
-execute_process(COMMAND mv ${CMAKE_BINARY_DIR}/Hedgewars.app/Contents/MacOS/hedgewars ${CMAKE_BINARY_DIR}/Hedgewars.app/Contents/MacOS/hwengine)
-execute_process(COMMAND mv ${CMAKE_BINARY_DIR}/Hedgewars.app/Contents/MacOS/tmp ${CMAKE_BINARY_DIR}/Hedgewars.app/Contents/MacOS/hedgewars)
-
-if(doBundle EQUAL 1)
- if(${SPARKLE_FOUND})
- execute_process(COMMAND cp -pPR ${SPARKLE_LIBRARY} ${frameworks_dir})
- endif()
- message(STATUS "Frameworks and libraries successfully copied...")
-else()
- message(STATUS "Frameworks already present, skipping...")
-endif()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/build_vcpkg.bat Fri Jul 03 23:51:47 2020 +0200
@@ -0,0 +1,79 @@
+@echo off
+setlocal
+::CONFIG START
+::edit these variables if necessary
+
+::change between Debug and Release
+set BUILD_TYPE=Release
+::path where Hedgewars will be installed to
+::default is %ProgramFiles%\hedgewars and requires running this script as administrator
+set INSTALL_LOCATION=
+::set if vcpkg is not on path
+set VCPKG_PATH=%VCPKG_ROOT%
+::set if CMake is not on path
+set CMAKE_PATH=
+::set if FPC is not on path
+set PASCAL_PATH=
+::set to 1 if x86 to x64 cross-compiler is not enabled automatically
+set FORCE_X64_CROSS_COMPILE=
+::set to 1 to build the game server
+set BUILD_SERVER=
+
+::CONFIG END
+
+:setup
+set CURRDIR="%CD%"
+cd %CURRDIR%\..\
+
+set PATH=%PASCAL_PATH%;%VCPKG_PATH%;%CMAKE_PATH%;%PATH%
+
+if "%VSCMD_ARG_TGT_ARCH%" == "x64" (
+ set FORCE_X64_CROSS_COMPILE=1
+)
+
+if "%FORCE_X64_CROSS_COMPILE%" NEQ "" (
+ set CROSS_COMPILE_FLAG=-DWIN32_WIN64_CROSS_COMPILE=1
+ if "%INSTALL_LOCATION%" == "" (
+ set INSTALL_LOCATION=%ProgramFiles%/hedgewars
+ )
+) else (
+ set CROSS_COMPILE_FLAG=
+)
+
+if "%INSTALL_LOCATION%" NEQ "" (
+ set PREFIX_FLAG=-DCMAKE_INSTALL_PREFIX=%INSTALL_LOCATION%
+) else (
+ set PREFIX_FLAG=
+)
+
+if "%BUILD_SERVER%" == "" (
+ set BUILD_SERVER_FLAG=-DNOSERVER=1
+) else (
+ set BUILD_SERVER_FLAG=
+)
+
+echo Running cmake...
+set ERRORLEVEL=
+
+cmake . -DCMAKE_TOOLCHAIN_FILE="%VCPKG_PATH%\scripts\buildsystems\vcpkg.cmake" -G"NMake Makefiles" %CROSS_COMPILE_FLAG% %BUILD_SERVER_FLAG% "%PREFIX_FLAG%" -DCMAKE_BUILD_TYPE="%BUILD_TYPE%" -DSDL2_BUILDING_LIBRARY=1
+
+if %ERRORLEVEL% NEQ 0 goto exitpoint
+
+echo Configuration completed successfully
+
+echo Building...
+set ERRORLEVEL=
+
+nmake
+
+if %ERRORLEVEL% NEQ 0 goto exitpoint
+
+echo Build completed successfully
+
+nmake install
+
+:exitpoint
+cd %CURRDIR%
+
+endlocal
+pause
--- a/tools/build_vcpkg_basic.bat Wed Jul 31 23:14:27 2019 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-@echo off
-::edit these variables if necessary
-set BUILD_TYPE="Debug"
-::set if vcpkg is not on path
-set VCPKG_PATH=%VCPKG_ROOT%
-::set if CMake is not on path
-set CMAKE_PATH=
-::set if FPC is not on path
-set PASCAL_PATH=
-
-:setup
-set CURRDIR="%CD%"
-cd %CURRDIR%\..\
-
-set PATH=%PASCAL_PATH%;%VCPKG_PATH%;%CMAKE_PATH%;%PATH%
-
-echo Running cmake...
-set ERRORLEVEL=
-
-cmake . -DCMAKE_TOOLCHAIN_FILE="%VCPKG_PATH%\scripts\buildsystems\vcpkg.cmake" -G"NMake Makefiles" -DNOPNG=1 -DNOSERVER=1 -DNOVIDEOREC=1 -DCMAKE_BUILD_TYPE="%BUILD_TYPE%" -DSDL2_BUILDING_LIBRARY=1
-
-if %ERRORLEVEL% NEQ 0 goto exitpoint
-
-echo Configuration completed successfully
-
-echo Building...
-set ERRORLEVEL=
-
-nmake
-
-if %ERRORLEVEL% NEQ 0 goto exitpoint
-
-echo Build completed successfully
-
-:exitpoint
-cd %CURRDIR%
-pause