# HG changeset patch # User sheepluva # Date 1593813107 -7200 # Node ID d92eeb468dad42c5f39a1e96d4b4b1fe738e7c26 # Parent c4fd2813b127fcfe798acdcbd8684a594745d54e# Parent 9a76589e294e50cbdbd1520a339354ad60363209 Merge branch 1.0.0 into branch ui-scaling diff -r c4fd2813b127 -r d92eeb468dad .gitignore --- 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 diff -r c4fd2813b127 -r d92eeb468dad .hgignore --- 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/ diff -r c4fd2813b127 -r d92eeb468dad .hgtags --- 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 diff -r c4fd2813b127 -r d92eeb468dad CMakeLists.txt --- 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" diff -r c4fd2813b127 -r d92eeb468dad CREDITS --- 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 -> Other hats +- alfadur -> zoo_crocodile (2019) ========== = GRAVES diff -r c4fd2813b127 -r d92eeb468dad ChangeLog.txt --- 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 “ 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 diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/CMakeLists.txt --- 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} diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/game.cpp --- 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()); diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/gameuiconfig.cpp --- 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(); diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/gameuiconfig.h --- 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 vid_ResolutionPair(); + bool vid_Maximized(); + void vid_SetMaximized(bool isMaximized); bool vid_Fullscreen(); quint32 translateQuality(); bool isSoundEnabled(); @@ -108,6 +110,7 @@ QList m_binds; void applyProxySettings(); + bool pIsEngineWindowMaximized; QString cachedRandomNick; }; diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/hwform.cpp --- 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") diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/model/gameSchemeModel.cpp --- 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 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"); diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnArtillery.png Binary file QTfrontend/res/btnArtillery.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnArtillery@2x.png Binary file QTfrontend/res/btnArtillery@2x.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnDisableLandObjects.png Binary file QTfrontend/res/btnDisableLandObjects.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnDisableLandObjects@2x.png Binary file QTfrontend/res/btnDisableLandObjects@2x.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnInvulnerable.png Binary file QTfrontend/res/btnInvulnerable.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnInvulnerable@2x.png Binary file QTfrontend/res/btnInvulnerable@2x.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnLaserSight.png Binary file QTfrontend/res/btnLaserSight.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnLaserSight@2x.png Binary file QTfrontend/res/btnLaserSight@2x.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnSwitchHog.png Binary file QTfrontend/res/btnSwitchHog.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/btnSwitchHog@2x.png Binary file QTfrontend/res/btnSwitchHog@2x.png has changed diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/credits.csv --- 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", diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/css/april1.css --- 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; +} diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/css/birthday.css --- 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; +} diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/css/christmas.css --- 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; +} diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/css/easter.css --- 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; +} diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/res/css/qt.css --- 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; +} diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/ui/page/pageoptions.cpp --- 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); diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/ui/widget/keybinder.cpp --- 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); diff -r c4fd2813b127 -r d92eeb468dad QTfrontend/util/DataManager.cpp --- 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 #include -#include +#include #include "hwconsts.h" #include "HWApplication.h" diff -r c4fd2813b127 -r d92eeb468dad cmake_modules/compilerchecks.cmake --- 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) diff -r c4fd2813b127 -r d92eeb468dad cmake_modules/cpackvars.cmake --- 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}") diff -r c4fd2813b127 -r d92eeb468dad cmake_modules/paths.cmake --- 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): diff -r c4fd2813b127 -r d92eeb468dad cmake_modules/platform.cmake --- 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) diff -r c4fd2813b127 -r d92eeb468dad cmake_modules/revinfo.cmake --- 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) diff -r c4fd2813b127 -r d92eeb468dad gameServer/Actions.hs --- 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 diff -r c4fd2813b127 -r d92eeb468dad gameServer/CommandHelp.hs --- 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 : Add current room configuration as votable choice for /callvote map", - loc "/delete : Delete a votable room configuration", + loc "/delete : Delete a votable room configuration" +#if defined(OFFICIAL_SERVER) + , loc "/saveroom : Save all votable room configurations (and the greeting) of this room into a file", loc "/loadroom : Load votable room configurations (and greeting) from a file" +#endif ] cmdHelpHeaderLobby :: [B.ByteString] diff -r c4fd2813b127 -r d92eeb468dad gameServer/CoreTypes.hs --- 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 "

https://www.hedgewars.org/

" - "

Hedgewars 0.9.25 is out! Please update.

Download page here" - 57 -- latestReleaseVersion + "

Hedgewars 1.0.0 is out! Please update.

Download page here" + 59 -- latestReleaseVersion 41 -- earliestCompatibleVersion 46631 "" diff -r c4fd2813b127 -r d92eeb468dad gameServer/Utils.hs --- 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 diff -r c4fd2813b127 -r d92eeb468dad hedgewars/ArgParsers.pas --- 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 [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 : Set the path to the system game data folder'); + WriteLn(stdout, ' --user-prefix : Set the path to the custom data folder to find game content'); + WriteLn(stdout, ' --locale : Set the game language (en.txt for example)'); + WriteLn(stdout, ''); + WriteLn(stdout, 'Graphics:'); + WriteLn(stdout, ' --width : Set game window width'); + WriteLn(stdout, ' --height : Set game window height'); + WriteLn(stdout, ' --maximized: Start in maximized window'); + WriteLn(stdout, ' --fullscreen: Start in fullscreen'); + WriteLn(stdout, ' --fullscreen-width : Set fullscreen width'); + WriteLn(stdout, ' --fullscreen-height : Set fullscreen height'); + WriteLn(stdout, ' --low-quality: Lowers the game quality'); + WriteLn(stdout, ' --zoom : Start with custom zoom level'); + WriteLn(stdout, ''); + WriteLn(stdout, 'Audio:'); + WriteLn(stdout, ' --volume : 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. diff -r c4fd2813b127 -r d92eeb468dad hedgewars/CMakeLists.txt --- 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}) diff -r c4fd2813b127 -r d92eeb468dad hedgewars/SDLh.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/hwengine.pas --- 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(); diff -r c4fd2813b127 -r d92eeb468dad hedgewars/pas2cRedo.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/pas2cSystem.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uAI.pas --- 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. diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uAIActions.pas --- 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); diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uAIAmmoTests.pas --- 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); diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uAIMisc.pas --- 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); diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uAmmos.pas --- 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); diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uCollisions.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uConsts.pas --- 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 diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uGears.pas --- 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 diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uGearsHandlersMess.pas --- 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); diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uGearsHedgehog.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uGearsRender.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uGearsUtils.pas --- 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); diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uLandObjects.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uMisc.pas --- 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 diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uRender.pas --- 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); diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uSound.pas --- 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 diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uStats.pas --- 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) diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uStore.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uTeams.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uVariables.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uVideoRec.pas --- 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; diff -r c4fd2813b127 -r d92eeb468dad hedgewars/uWorld.pas --- 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); diff -r c4fd2813b127 -r d92eeb468dad misc/racer.yaml --- 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' diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/Hedgewars.lnk Binary file misc/winutils/Hedgewars.lnk has changed diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/avcodec.h --- 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 -#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.
- * 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, 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, 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/avfft.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/dxva2.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 - -#include -#include - -/** - * @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/old_codec_ids.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/vaapi.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 - -/** - * @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/vda.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 -#endif - -#include - -// 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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/vdpau.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 -#include - -/** @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/version.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavcodec/xvmc.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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavformat/avformat.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 -#include /* 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 -- . - 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavformat/avio.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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavformat/version.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/adler32.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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/aes.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 - * - * 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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/attributes.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 - * - * 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/audio_fifo.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 - * - * 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/audioconvert.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 - * 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 - -/** - * @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/avassert.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 - * - * 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 - */ - -#ifndef AVUTIL_AVASSERT_H -#define AVUTIL_AVASSERT_H - -#include -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/avconfig.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/avstring.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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/avutil.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 - * - * 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< - -/** - * @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/blowfish.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 - -/** - * @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/bswap.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 - * - * 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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/common.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 - * - * 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 -#include -#include -#include -#include -#include -#include -#include - -#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<> 31 & ((1< 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 diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/cpu.h --- 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/crc.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 - * - * 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 -#include -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/dict.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/error.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 -#include -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/eval.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 - * - * 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/fifo.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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/file.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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/imgutils.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/intfloat.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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/intfloat_readwrite.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 - * - * 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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/intreadwrite.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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/lfg.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/log.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 - * - * 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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/lzo.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 - -/** @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/mathematics.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 - * - * 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 -#include -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/md5.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 - * - * 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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/mem.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 - * - * 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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/old_pix_fmts.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/opt.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 - * - * 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/parseutils.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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/pixdesc.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 - * - * 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 -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/pixfmt.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 - * - * 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/random_seed.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 - * - * 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 -/** - * @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/rational.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 - * - * 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 - */ - -#ifndef AVUTIL_RATIONAL_H -#define AVUTIL_RATIONAL_H - -#include -#include -#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>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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/samplefmt.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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/sha.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 - * - * 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 - -#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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/time.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 - -/** - * 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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/version.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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/include/libavutil/xtea.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 - -/** - * @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 */ diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/lib/libavcodec.dll.a Binary file misc/winutils/lib/libavcodec.dll.a has changed diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/lib/libavformat.dll.a Binary file misc/winutils/lib/libavformat.dll.a has changed diff -r c4fd2813b127 -r d92eeb468dad misc/winutils/lib/libavutil.dll.a Binary file misc/winutils/lib/libavutil.dll.a has changed diff -r c4fd2813b127 -r d92eeb468dad project_files/hwc/CMakeLists.txt --- 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 diff -r c4fd2813b127 -r d92eeb468dad project_files/hwc/rtl/CMakeLists.txt --- 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) diff -r c4fd2813b127 -r d92eeb468dad project_files/hwc/rtl/GL.h --- 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 diff -r c4fd2813b127 -r d92eeb468dad project_files/hwc/rtl/fpcrtl.h --- 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 diff -r c4fd2813b127 -r d92eeb468dad project_files/hwc/rtl/misc.c --- 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 diff -r c4fd2813b127 -r d92eeb468dad project_files/hwc/rtl/misc.h --- 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 #include -#ifdef EMSCRIPTEN -#include -#else -#include -#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 diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-engine-messages/Cargo.toml --- 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" diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-engine-messages/src/lib.rs --- 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; diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-engine-messages/src/parser.rs --- 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)))); -} diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-engine-messages/src/queue.rs --- /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, + ordered: Queue, +} + +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 { + 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 { + 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 = 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); +} diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/core/indexslab.rs --- 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 { + pub fn iter(&self) -> impl Iterator + Clone { self.data .iter() .enumerate() diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/core/server.rs --- 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 = slab::Slab; +#[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, pub protocol_number: Option, 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 { - 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, - ) -> 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 + 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 + 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, 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, +fn create_room<'a, 'b>( + client: &'a mut HwClient, + rooms: &'b mut Slab, name: String, password: Option, -) -> 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) { diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/handlers.rs --- 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); } } } diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/handlers/common.rs --- 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 + 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 + where + I: Iterator, + 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, diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/handlers/inlobby.rs --- 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("".to_string()); - for protocol in protocols { - html.push(format!( - "", - super::utils::protocol_version_string(protocol), - server.protocol_clients(protocol).count(), - server.protocol_rooms(protocol).count() - )); + html.push("
{}{}{}
".to_string()); + for protocol in protocols { + html.push(format!( + "", + super::utils::protocol_version_string(protocol), + server.protocol_clients(protocol).count(), + server.protocol_rooms(protocol).count() + )); + } + html.push("
{}{}{}
".to_string()); + + response.add(Warning(html.join("")).send_self()); } - html.push("".to_string()); - - response.add(Warning(html.join("")).send_self()); - } + }, List => warn!("Deprecated LIST message received"), _ => warn!("Incorrect command in lobby state"), } diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/handlers/inroom.rs --- 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()), }, }; diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/handlers/strings.rs --- /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!"; diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/protocol.rs --- 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)) => { diff -r c4fd2813b127 -r d92eeb468dad rust/hedgewars-server/src/utils.rs --- 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", } } diff -r c4fd2813b127 -r d92eeb468dad rust/hwphysics/src/collision.rs --- 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, collisions: Vec, @@ -108,6 +100,11 @@ } impl CollisionProcessor { + pub fn register_components(data: &mut GearDataManager) { + data.register::(); + data.register::(); + } + 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 { + None + } + pub fn process( &mut self, land: &Land2D, @@ -142,13 +151,3 @@ &self.detected_collisions } } - -impl GearDataProcessor 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); - } -} diff -r c4fd2813b127 -r d92eeb468dad rust/hwphysics/src/common.rs --- 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 { - fn add(&mut self, gear_id: GearId, gear_data: T); - fn remove(&mut self, gear_id: GearId); -} - -pub trait GearDataAggregator { - fn find_processor(&mut self) -> &mut GearDataProcessor; -} - pub struct GearAllocator { max_id: u16, free_ids: BinaryHeap, diff -r c4fd2813b127 -r d92eeb468dad rust/hwphysics/src/data.rs --- /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); +} + +impl TypeTuple for () { + fn get_types(_types: &mut Vec) {} +} + +impl TypeTuple for &T { + fn get_types(types: &mut Vec) { + types.push(TypeId::of::()); + } +} + +pub trait TypeIter: TypeTuple { + unsafe fn iter(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) { + $(types.push(TypeId::of::<$t>()));+ + } + } + + impl<$($t: 'static),+> TypeIter for ($(&$t),+,) { + unsafe fn iter(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) { + $(types.push(TypeId::of::<$t>()));+ + } + } + + impl<$($t: 'static),+> TypeIter for ($(&mut $t),+,) { + unsafe fn iter(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>; 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::())) as u16; + + //ensure the block memory is aligned to GearId + let tmp_data: Box<[GearId; BLOCK_SIZE / size_of::()]> = + 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::() * 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, + 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, + tags: Vec, + blocks: Vec, + block_masks: Vec, + 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(&self) -> Option { + let type_id = TypeId::of::(); + self.types.iter().position(|id| *id == type_id) + } + + #[inline] + fn get_tag_index(&self) -> Option { + let type_id = TypeId::of::(); + 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(&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( + &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(&mut self, gear_id: GearId, value: &T) { + if let Some(type_index) = self.get_type_index::() { + 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(&mut self, gear_id: GearId) { + if let Some(tag_index) = self.get_tag_index::() { + 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(&mut self, gear_id: GearId) { + if let Some(type_index) = self.get_type_index::() { + 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(&mut self) { + debug_assert!(!std::mem::needs_drop::()); + debug_assert!(size_of::() <= u16::max_value() as usize); + + let id = TypeId::of::(); + if size_of::() == 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::() as u16; + self.element_alignments[self.types.len()] = align_of::() as u8; + self.types.push(id); + } + } + } + + fn run_impl( + &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(&mut self) -> DataIterator { + 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, + tags: u64, + phantom_types: PhantomData, +} + +impl<'a, T: TypeIter + 'static> DataIterator<'a, T> { + fn new( + data: &'a mut GearDataManager, + types: u64, + type_indices: Vec, + ) -> DataIterator<'a, T> { + Self { + data, + types, + type_indices, + tags: 0, + phantom_types: PhantomData, + } + } + + pub fn with_tags(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(&mut self, mut f: F) { + self.run_id(|_, x| f(x)) + } + + #[inline] + pub fn run_id(&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::(); + 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::(); + manager.register::(); + 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::(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); + } +} diff -r c4fd2813b127 -r d92eeb468dad rust/hwphysics/src/lib.rs --- 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) { - 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(&mut self, gear_id: GearId, data: T) - where - T: GearData, - Self: GearDataAggregator, - { - self.find_processor().add(gear_id, data); + #[inline] + pub fn add_gear_data(&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); } } diff -r c4fd2813b127 -r d92eeb468dad rust/hwphysics/src/physics.rs --- 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, - positions: Vec, - velocities: Vec, -} - -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 { - self.gear_ids - .iter() - .cloned() - .zip(self.positions.iter_mut().zip(self.velocities.iter())) - } -} - -pub struct StaticPhysicsCollection { - gear_ids: Vec, - positions: Vec, -} +#[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, - position_updates: PositionUpdates, -} +pub struct AffectedByWind; pub struct PositionUpdates { pub gear_ids: Vec, @@ -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::(); + data.register::(); + data.register::(); + } + 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 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) - } -} diff -r c4fd2813b127 -r d92eeb468dad rust/hwphysics/src/time.rs --- 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, diff -r c4fd2813b127 -r d92eeb468dad rust/integral-geometry/src/lib.rs --- 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)] diff -r c4fd2813b127 -r d92eeb468dad rust/lib-hedgewars-engine/Cargo.toml --- 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" } diff -r c4fd2813b127 -r d92eeb468dad rust/lib-hedgewars-engine/src/instance.rs --- 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; diff -r c4fd2813b127 -r d92eeb468dad rust/lib-hedgewars-engine/src/ipc.rs --- 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::*; diff -r c4fd2813b127 -r d92eeb468dad rust/lib-hedgewars-engine/src/ipc/queue.rs --- 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, - ordered: Queue, -} - -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 { - 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 { - 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 = 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); -} diff -r c4fd2813b127 -r d92eeb468dad rust/lib-hedgewars-engine/src/render/atlas.rs --- 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() diff -r c4fd2813b127 -r d92eeb468dad rust/lib-hedgewars-engine/src/render/gear.rs --- 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 { +fn load_sprite_pixels(path: &Path, buffer: &mut [u8]) -> io::Result { + 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 { 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> { +fn load_sprites(path: &Path) -> io::Result> { 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, + }); } } } diff -r c4fd2813b127 -r d92eeb468dad rust/lib-hedgewars-engine/src/render/gl.rs --- 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, } 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 { + 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()); + } } } } diff -r c4fd2813b127 -r d92eeb468dad rust/lib-hedgewars-engine/src/render/map.rs --- 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, diff -r c4fd2813b127 -r d92eeb468dad share/CMakeLists.txt --- 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 diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Graphics/AmmoMenu/Ammos_base.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_base.png has changed diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw_base.png Binary file share/hedgewars/Data/Graphics/AmmoMenu/Ammos_bw_base.png has changed diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Graphics/Hats/zoo_crocodile.png Binary file share/hedgewars/Data/Graphics/Hats/zoo_crocodile.png has changed diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Graphics/Switch.png Binary file share/hedgewars/Data/Graphics/Switch.png has changed diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Graphics/Switch.svg --- /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 @@ + + + + + + + + + + + + + diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Graphics/SwitchBackOld.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 @@ + + + + + + + image/svg+xml + + + + + + + + diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Graphics/SwitchOld.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 @@ + + + + + + + image/svg+xml + + + + + + + + diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/hedgewars_de.ts --- 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 @@ Griechisch + Hungarian + Ungarisch + + Italian Italienisch diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/hedgewars_hu.ts --- 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 @@ - + About Unknown Compiler - + Ismeretlen fordító Hedgewars %1 %1 contains Hedgewars' version number - Hedgewars %1 + Hedgewars %1 Revision %1 (%2) - + Revízió %1 (%2) Visit our homepage: %1 - + Látogasd meg honlapunkat: %1 This program is distributed under the %1. - + Ez a program a %1 feltételei szerint terjeszthető. GNU GPL v2 Short for “GNU General Public License version 2” - + GNU GPL v2 Dependency versions: For the version numbers of Hedgewars' software dependencies - + Függőségek verziói: <a href="https://gcc.gnu.org">GCC</a>: %1 - + <a href="https://gcc.gnu.org">GCC</a>: %1 <a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3 <a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3 <a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3 <a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3 <a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3 <a href="https://www.qt.io/developers/">Qt</a>: %1 - + <a href="https://www.qt.io/developers/">Qt</a>: %1 <a href="https://libav.org">libavcodec</a>: %1.%2.%3 - + <a href="https://libav.org">libavcodec</a>: %1.%2.%3 <a href="https://libav.org">libavformat</a>: %1.%2.%3 - + <a href="https://libav.org">libavformat</a>: %1.%2.%3 <a href="https://libav.org">libavutil</a>: %1.%2.%3 - + <a href="https://libav.org">libavutil</a>: %1.%2.%3 <a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3 - + <a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3 Credits - + Közreműködők Other people - + További személyek %1 (alias %2) - + %1 (alias %2) %1 &lt;%2&gt; Part of credits. %1: Contributor name. %2: E-mail address - + %1 &lt;%2&gt; %1: %2 Part of credits. %1: Description of contribution. %2: Contributor name - + %1: %2 %1: %2 &lt;%3&gt; Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address - + %1: %2 &lt;%3&gt; Extended Credits - + A közreműködők bővebb listája An extended credits list can be found in the CREDITS text file. - + A közreműködők bővebb listája a CREDITS nevű szövegfájlban olvasható. <a href="https://visualstudio.microsoft.com">VC++</a>: %1 - + <a href="https://visualstudio.microsoft.com">VC++</a>: %1 Unknown Compiler: %1 - + Ismeretlen fordító: %1 AbstractPage Go back - + Vissza BanDialog IP - IP + IP Nick - + Becenév IP/Nick - + IP/Becenév Reason - + Indok Duration - + Időtartam Ok - + OK Cancel - Mégse + Mégse you know why - + tudod te, miért Warning - + Figyelmeztetés permanent - + végleges Ban player - + Játékos kitiltása Please specify an IP address. - + Kérjük, adj meg egy IP címet. Please specify a nickname. - + Kérjük, adj meg egy becenevet. DataManager Use Default - + Alapértelmezés használata FeedbackDialog View - + Megtekintés Cancel - Mégse + Mégse Send Feedback - + Visszajelzés küldése We are always happy about suggestions, ideas, or bug reports. - + Minden javaslatnak, ötletnek, hibajelzésnek örülünk. Send us feedback! - + Küldj visszajelzést! If you found a bug, you can see if it's already been reported here: - + Ha hibát találtál, itt megnézheted, jelentették-e már: Your email address is optional, but necessary if you want us to get back at you. - + Az e-mail cím nem kötelező, de csak akkor tudunk válaszolni, ha megadod. Feedback - + Visszajelzés This is optional, but this information might help us to resolve bugs and other technical problems. - + Nem kötelező, de hasznos lehet nekünk a hibák és más technikai problémák megoldásához. @@ -239,7 +239,7 @@ Every %1 turn - Minden %1 körben + Minden %1. körben @@ -255,15 +255,15 @@ Game scheme will auto-select a weapon - + A játékséma automatikusan választ fegyvert Map - Pálya + Pálya Game options - + Játékbeállítások @@ -274,202 +274,205 @@ New - Új + Új Copy of %1 - + %1 másolata New (%1) - + Új (%1) Copy of %1 (%2) - + %1 másolata (%2) GameUIConfig Guest - + Vendég HWApplication %1 minutes - - + + %1 perc %1 hour - - + + %1 óra %1 hours - - + + %1 óra %1 day - - + + %1 nap %1 days - - + + %1 nap Scheme '%1' not supported - + A(z) %1 séma nem támogatott Cannot create directory %1 - Nem sikerült létrehozni %1 + Nem sikerült létrehozni a(z) %1 könyvtárat Failed to open data directory: %1 Please check your installation! - + Nem sikerült a következő adatkönyvtár megnyitása: +%1 + +Kérjük, ellenőrizd a telepítésedet! Usage command-line “Usage” as in “how the command-line syntax works”. Shown when running “hedgewars --help” in command-line - + Használat OPTION command-line Name of a command-line argument, shown when running “hedgewars --help” in command-line. “OPTION” as in “command-line option” - + KAPCSOLÓ CONNECTSTRING command-line Name of a command-line argument, shown when running “hedgewars --help” in command-line - + KAPCSOLATSZTRING Options command-line “Options” as in “command-line options” - + Kapcsolók Display this help command-line - + Ezen súgó megjelenítése Custom path for configuration data and user data command-line - + Saját útvonal megadása beállításokhoz és felhasználói adatokhoz Custom path to the game data folder command-line - + Saját útvonal megadása a játék adatkönyvtárához Hedgewars can use a %1 (e.g. "%2") to connect on start. command-line - + A Hedgewarsnak megadható egy %1 (pl. "%2"), hogy indításkor oda csatlakozzon. Malformed option argument: %1 command-line - + Hibásan megadott kapcsolóargumentum: %1 Unknown option argument: %1 command-line - + Ismeretlen kapcsolóargumentum: %1 HWAskQuitDialog Do you really want to quit? - + Tényleg ki akarsz lépni? HWChatWidget %1 has been removed from your ignore list - + %1 immár nincs a mellőzési listádon %1 has been added to your ignore list - + %1 a mellőzési listádra került %1 has been removed from your friends list - + %1 immár nincs a barátlistádon %1 has been added to your friends list - + %1 a barátlistádra került Stylesheet imported from %1 - + Stíluslap importálva innen: %1 Enter %1 if you want to use the current StyleSheet in future, enter %2 to reset! - + Ha ezt a stíluslapot szeretnéd használni a jövőben, üsd ezt: %1, visszaállításhoz üsd ezt: %2! Couldn't read %1 - + Nem sikerült olvasni ezt: %1 StyleSheet discarded - + Stíluslap elvetve StyleSheet saved to %1 - + A stíluslapot mentettük ide: %1 Failed to save StyleSheet to %1 - + Nem sikerült a stíluslap mentése ide: %1 %1 has joined - + %1 csatlakozott %1 has left - + %1 kilépett %1 has left (%2) - + %1 kilépett (%2) Chat log - + Csevegési napló Enter chat messages here and send them with [Enter] - + Ide írd a csevegési üzeneteket, Enterrel küldheted el őket List of players - + Játékosok listája @@ -481,45 +484,46 @@ Hedgewars Demo File File Types - + Hedgewars bemutatófájl Hedgewars Save File File Types - + Hedgewars mentésfájl Demo name - + Bemutató neve Demo name: - + Bemutató neve: Game aborted - + Játék leállítva Nickname - Becenév + Becenév No nickname supplied. - + Nincs becenév megadva. Someone already uses your nickname %1 on the server. Please pick another nickname: - + Valaki már használja a becenevedet (%1) a kiszolgálón. +Kérjük, válassz másik becenevet: %1's Team - + %1 csapata Hedgewars - Nick registered - + Hedgewars – Becenév regisztrálva 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: - + 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ó: Your nickname is not registered. To prevent someone else from using it, please register it at www.hedgewars.org - + A beceneved nincs regisztrálva. +Nehogy más is használja, kérjük, +regisztráld a www.hedgewars.org címen Your password wasn't saved either. - + + +A jelszavad sem lett mentve. Hedgewars - Empty nickname - + Hedgewars – Üres becenév Hedgewars - Wrong password - + Hedgewars – Rossz jelszó You entered a wrong password. - + Rossz jelszót írtál be. Try Again - + Próbáld újra Hedgewars - Connection error - + Hedgewars – Csatlakozási hiba You reconnected too fast. Please wait a few seconds and try again. - + Túl gyorsan csatlakoztál újra. +Kérjük, várj pár másodpercet, és próbáld újra. Room password - + Szoba jelszava The room is protected with password. Please, enter the password: - + A szoba jelszóval védett. +Kérjük, add meg a jelszót: Team 1 - + Csapat 1 Team %1 Default team name - + Csapat %1 Computer %1 Default computer team name - + Számítógép %1 Unknown network error (possibly missing SSL library). - + Ismeretlen hálózati hiba (talán hiányzó SSL könyvtár). This feature requires an Internet connection, but you don't appear to be online (error code: %1). - + Ez a lehetőség internetkapcsolatot kíván, de úgy tűnik, nem vagy online (hibakód: %1). Internal error: Reply object is invalid. - + Belső hiba: Érvénytelen válaszobjektum. @@ -611,7 +625,7 @@ Cannot open demofile %1 - Nem sikerült megnyitni a %1 demót + Nem sikerült megnyitni a(z) %1 bemutatót A fatal ERROR occured! The game engine had to stop. @@ -622,14 +636,21 @@ Last engine message: %1 - + 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 HWHostPortDialog Connect to server - + Csatlakozás kiszolgálóhoz @@ -669,163 +690,163 @@ Seed Refers to the "random seed"; the source of randomness in the game - + Mag Map type: - + Pálya típusa: Image map - + Kép-pálya Mission map - + Küldetéspálya Hand-drawn - + Kézzel rajzolt Randomly generated - + Véletlenszerű Random maze - + Véletlen útvesztő Random - Véletlen + Véletlen Map preview: - + Pálya előnézete: Load map drawing - + Pályarajz betöltése Edit map drawing - + Pályarajz szerkesztése Small islands - + Kis szigetek Medium islands - + Közepes szigetek Large islands - + Nagy szigetek Map size: - + Pálya mérete: Maze style: - + Útvesztő stílusa: Mission: - + Küldetés: Map: - + Pálya: Load drawn map - + Megrajzolt pálya betöltése Drawn Maps - + Megrajzolt pályák All files - + Minden fájl Large tunnels - + Nagy alagutak Theme: %1 - + Téma: %1 Random perlin - + Véletlen Perlin Style: - + Stílus: Forts - + Várak View and edit the seed, the source of randomness in the game - + A mag megtekintése és szerkesztése. Ez a játékbeli véletlenszerűség forrása Randomize the theme - + Téma találomra Choose a theme - + Válassz témát Randomize the map, theme and seed - + Pálya, téma és mag találomra Randomize the theme and seed - + Téma és mag találomra Randomize the seed - + Mag találomra Click to randomize the map, theme and seed - + Kattints a pálya, téma és mag véletlenszerű generálásához Click to randomize the theme and seed - + Kattints a téma és a mag véletlenszerű generálásához Adjust the complexity of the generated map - + A generált pálya összetettségének állítása Adjust the distance between forts - + A várak közötti távolság állítása Click to edit - + Kattints a szerkesztéshez Scale size of the drawn map - + A rajzolt pálya méretarányának állítása Load - Betöltés + Betöltés Edit - + Szerkesztés @@ -853,7 +874,7 @@ Connection refused - Kapcsolat visszautasítva + Kapcsolat visszautasítva Room destroyed @@ -861,7 +882,7 @@ Quit reason: - Kilépés oka: + Kilépés oka: You got kicked @@ -877,31 +898,31 @@ %1 *** %2 has left (%3) - %1 *** %2 távozott (%3) + %1 *** %2 kilépett (%3) %1 *** %2 has left - %1 *** %2 távozott + %1 *** %2 kilépett Remote host has closed connection - + A távoli gép lezárta a kapcsolatot The server is too old. Disconnecting now. - + A kiszolgáló túl régi. Kapcsolat bontása. Server authentication error - + Kiszolgálói hitelesítési hiba Reason: - + Indok: 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. - + 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. 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. - + 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. HWPasswordDialog Login - + Bejelentkezés To connect to the server, please log in. If you don't have an account on www.hedgewars.org, just enter your nickname. - + 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. Nickname: - + Becenév: Password: - + Jelszó: New Account - + Új fiók @@ -950,33 +979,40 @@ Last engine message: %1 - + 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 HatButton Change hat (%1) - + Fejfedő megváltoztatása (%1) HatPrompt Cancel - Mégse + Mégse Use selected hat - + Választott fejfedő használata Search for a hat: - + Fejfedő keresése: Choose a hat - + Fejfedő választása @@ -990,73 +1026,73 @@ KeyBinder Category - + Kategória Warning: The same key is assigned multiple times! - + Figyelem: Ugyanaz a gomb több mindenhez van rendelve! LibavInteraction Audio: - + Hang: unknown - + ismeretlen Duration: %1min %2s Duration in minutes and seconds (SI units) - + Hossz: %1 p %2 mp Video: %1x%2, %3 FPS, %4 Video metadata. %1 = video width, %2 = video height, %3 = frames per second = %4 = decoder name - + Video: %1×%2, %3 FPS, %4 Video: %1x%2, %3 Video metadata. %1 = video width, %2 = video height, %3 = decoder name - + Video: %1×%2, %3 Player: %1 - + Játékos: %1 Theme: %1 - + Téma: %1 Map: %1 - + Pálya: %1 Record: %1 As in ‘recording’ - + Felvétel: %1 MapModel No description available. - + Nincs elérhető leírás. MinesTimeSpinBox Random - Véletlen + Véletlen %1 seconds - - + + %1 másodperc @@ -1064,11 +1100,11 @@ PageAdmin Clear Accounts Cache - Accounts Cache kiürítése + Fiókgyorsítótár törlése Fetch data - Adatszerzés + Adatok letöltése Server message for latest version: @@ -1093,147 +1129,147 @@ General - Általános + Általános Bans - + Tiltások IP/Nick - + IP/Becenév Expiration - + Lejárat Reason - + Indok Refresh - + Frissítés Add - + Hozzáadás Remove - + Eltávolítás PageCampaign Team - + Csapat Campaign - + Hadjárat Mission - + Küldetés Start fighting - + Harc indítása PageConnecting Connecting... - Csatlakozás... + Csatlakozás… PageDataDownload Loading, please wait. - + Betöltés, kis türelmet. Open packages directory - + Csomagok könyvtárának megnyitása Load the start page - + Kezdőoldal betöltése Unknown network error (possibly missing SSL library). - + Ismeretlen hálózati hiba (talán hiányzó SSL könyvtár). This feature requires an Internet connection, but you don't appear to be online (error code: %1). - + Ez a lehetőség internetkapcsolatot kíván, de úgy tűnik, nem vagy online (hibakód: %1). Internal error: Reply object is invalid. - + Belső hiba: Érvénytelen válaszobjektum. PageDrawMap Undo - + Visszavonás Clear - Törlés + Törlés Load - Betöltés + Betöltés Save - + Mentés Load drawn map - + Rajzolt pálya betöltése Save drawn map - + Rajzolt pálya mentése Drawn Maps - + Rajzolt pályák All files - + Minden fájl Eraser - + Radír Polyline - + Vonal Rectangle - + Téglalap Ellipse - + Ellipszis Optimize - + Optimalizálás Brush size - + Ecset mérete @@ -1244,176 +1280,176 @@ Select an action to choose a custom key bind for this team - + Válassz műveletet a saját csapatbillentyű hozzárendeléséhez Use my default - + Alapértelmezésem használata Reset all binds - + Minden hozzárendelés visszaállítása Custom Controls - + Egyedi irányítási beállítások Hat - Kalap + Fejfedő Name - Név + Név This hedgehog's name - + Ennek a sünnek a neve Randomize this hedgehog's name - + Sünnév találomra Random Team - Véletlen csapat + Véletlen csapat Play a random example of this voice - + Példa lejátszása ebből a beszédkészletből Random Hats - + Fejfedők találomra Random Names - + Nevek találomra Randomize the team name - + Csapatnév találomra Randomize the grave - + Sír találomra Randomize the flag - + Zászló találomra Randomize the voice - + Hang találomra Randomize the fort - + Erőd találomra CPU %1 Name of a flag for computer-controlled enemies. %1 is replaced with the computer level - + CPU %1 %1 (%2) - + %1 (%2) PageGameStats Details - + Részletek Health graph - + Életerő-grafikon Ranking - + Helyezések The best shot award was won by <b>%1</b> with <b>%2</b> pts. - - + + A legjobb lövés díját <b>%1</b> nyerte <b>%2</b> ponttal. The best killer is <b>%1</b> with <b>%2</b> kills in a turn. - - + + A legnagyobb gyilkos <b>%1</b>, <b>%2</b> élet szárad a lelkén. A total of <b>%1</b> hedgehog(s) were killed during this round. - - + + Összesen <b>%1</b> sünt öltek meg ebben a körben. (%1 kill) Number of kills in stats screen, written after the team name - - + + (%1 gyilkosság) <b>%1</b> was scared and skipped turn <b>%2</b> times. - - + + <b>%1</b> félt, és <b>%2</b> kört hagyott ki. Play again - + Újrajátszás Save - + Mentés (%1 %2) 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” - - + + (%1 %2) <b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts. - - + + <b>%1</b> jó mókának találta saját tagjait lövöldözni, <b>%2</b> pont erejéig. <b>%1</b> killed <b>%2</b> of their own hedgehogs. - - + + <b>%1</b> megölte <b>%2</b> saját tagját. With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. - + 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. (%1 point(s)) Number of points in stats screen, written after the team name - - + + (%1 pont) (%L1 second(s)) Time in seconds - - + + (%L1 másodperc) (%1 crate(s)) - - + + (%1 csomag) @@ -1421,77 +1457,77 @@ PageInGame In game... - + Játékban vagyunk… PageInfo Open the snapshot folder - + Képernyőképek könyvtárának megnyitása PageMain Downloadable Content - + Letölthető tartalom Play a game on a single computer - + Játék a helyi számítógépen Play a game across a network - + Játék hálózaton keresztül Read about who is behind the Hedgewars Project - + Itt olvashatod, kik állnak a Hedgewars Projekt mögött Leave a feedback here reporting issues, suggesting features or just saying how you like Hedgewars - + Itt üzenheted meg nekünk a hibákat, javaslataidat, vagy akár azt, hogy tetszik a Hedgewars Access the user created content downloadable from our website - + A weboldalunkról letölthető felhasználói tartalmak elérése Exit game - + Kilépés a játékból Manage videos recorded from game - + A játékban rögzített videók kezelése Edit game preferences - + A játék beállításainak szerkesztése Play a game across a local area network - + Játék helyi hálózaton keresztül Play a game on an official server - + Játék egy hivatalos kiszolgálón Feedback - + Visszajelzés Play local network game - + Helyi hálózati játék Play official network game - + Hivatalos hálózati játék Open the Hedgewars online game manual in your web browser - + A Hedgewars online kézikönyvének megnyitása a webböngésződben @@ -1502,30 +1538,30 @@ Edit game preferences - + Játékbeállítások szerkesztése Start fighting (requires at least 2 teams) - + Harc indítása (legalább 2 csapat kell) PageNet Connect to the selected server - + Csatlakozás a kiválasztott kiszolgálóhoz Update the list of servers - + Kiszolgálók listájának frissítése Specify the address and port number of a known server and connect to it directly - + Egy ismert kiszolgáló címének és portszámának közvetlen megadása, és közvetlen csatlakozás Start private server - + Saját kiszolgáló indítása @@ -1536,46 +1572,46 @@ Edit game preferences - + Játékbeállítások szerkesztése Start - Start + Indítás Update - Frissítés + Frissítés Room controls - + Szoba vezérlői Room name - + Szoba neve Update the room name - + Szobanév frissítése Turn on the lightbulb to show the other players when you're ready to fight - + A villanykörte felkapcsolásával jelezheted a többi játékosnak, ha készen állsz a harcra Start fighting (requires at least 2 teams) - + Harc indítása (legalább 2 csapat kell) PageNetServer Click here for details - + Kattints ide a részletekért Insert your address here - + Írd be a címedet ide @@ -1594,181 +1630,181 @@ You can't edit teams from team selection. Go back to main menu to add, edit or delete teams. - + 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. New scheme - + Új séma Edit scheme - + Séma szerkesztése Delete scheme - + Séma törlése New weapon set - + Új fegyverkészlet Edit weapon set - + Fegyverkészlet szerkesztése Delete weapon set - + Fegyverkészlet törlése Advanced - Haladó + Haladó Reset to default colors - + Alapértelmezett színek visszaállítása Proxy host - + Proxy címe Proxy port - + Proxy portja Proxy login - + Proxy felhasználóneve Proxy password - + Proxy jelszava No proxy - + Nincs proxy Socks5 proxy - + Socks5 proxy HTTP proxy - + HTTP proxy System proxy settings - + Rendszer proxybeállításai Select an action to change what key controls it - + Válassz ki egy műveletet, hogy megadhasd, milyen gomb végezze Reset to default - + Alapértelmezés visszaállítása Reset all binds - + Minden hozzárendelés visszaállítása Game - + Játék Graphics - + Grafika Audio - + Hang Controls - + Vezérlés Video Recording - + Videorögzítés Network - + Hálózat Teams - Csapatok + Csapatok Schemes - + Sémák Weapons - Fegyverek + Fegyverek Frontend - + Felület Custom colors - + Egyedi színek Game audio - + Játékbeli hangok Frontend audio - + Menübeli hangok Account - + Fiók Proxy settings - + Proxybeállítások Miscellaneous - + Egyebek Updates - + Frissítések Check for updates - + Frissítések keresése Video recording options - + Videorögzítés beállításai x 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 - + × MISSING LANGUAGE NAME [%1] In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code - + HIÁNYZÓ NYELVNÉV [%1] Check now - + Ellenőrzés most Can't delete last team - + Nem törölhető az utolsó csapat You can't delete the last team! - + Nem törölheted a legutolsó csapatot! @@ -1783,15 +1819,15 @@ Play demo - Demo lejátszása + Bemutató lejátszása Play the selected demo - + A kiválasztott bemutató lejátszása Load the selected game - + A kiválasztott játék betöltése @@ -1818,29 +1854,29 @@ %1 players online - - + + %1 játékos online Search for a room: - + Szoba keresése: Create room - + Szoba készítése Join room - + Belépés szobába Room state - + Szoba állapota Open server administration page - + Kiszolgáló beállítófelületének megnyitása @@ -1855,7 +1891,7 @@ Land can not be destroyed! - A talajt nem lehet elpusztítani! + A talajt nem lehet elpusztítani! Lower gravity @@ -1875,11 +1911,11 @@ Share your opponents pain, share their damage - Megosztod ellenfeled fájdalmát, ahogy a sérülésüket is + Osztozol ellenfeled fájdalmában, sérülésében Your hogs are unable to move, put your artillery skills to the test - A sünik nem tudnak mozogni, próbára téve a célzóképességed + A sünik nem tudnak mozogni, próbára téve a célzókészséged Random @@ -1923,39 +1959,39 @@ All (living) hedgehogs are fully restored at the end of turn - + Minden (élő) sün teljesen meggyógyul a kör végén AI respawns on death. - + Az MI feltámad a halálból. Attacking does not end your turn. - + A támadással nem ér véget a köröd. Weapons are reset to starting values each turn. - + A fegyverek száma minden kör elején visszáll. Each hedgehog has its own ammo. It does not share with the team. - + Minden sünnek saját fegyvertára van. Nem osztja meg csapatával. You will not have to worry about wind anymore. - + Nem kell többé aggódnod a szél miatt. Wind will affect almost everything. - + A szél szinte mindent el fog fújni. Copy - + Másolás Teams in each clan take successive turns sharing their turn time. - + A klán csapatai felváltva következnek, megosztva köridejüket. Add an indestructible border around the terrain @@ -1963,123 +1999,123 @@ Add an indestructible border along the bottom - + A pálya alá egy sérthetetlen keret kerül None (Default) - + Nincs (alapértelmezés) Wrap (World wraps) - + Összeérnek (végtelenített) Bounce (Edges reflect) - + Pattanás (a szélek visszavernek) Sea (Edges connect to sea) - + Tenger (víz a széleken is) Each clan starts in its own part of the terrain. - + Minden klán a pálya neki kijelölt részén kezd. Overall damage and knockback in percent Description of the game scheme setting “Damage Modifier”. “Knockback” means how much hedgehogs and objects get pushed by explosions and other forces - + Teljes sebzés és visszaütés százalékban Turn time in seconds - + Köridő másodpercben Initial health of hedgehogs - + A sünök kezdő életpontszáma How many rounds have to be played before Sudden Death begins - + Hány kört kell játszani a hirtelen halál kezdete előtt How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death. - + 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ó. 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. - + 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ó. Maximum rope length in percent - + A kötél maximális hossza százalékban Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates. - + Annak a valószínűsége, hogy a ledobott csomag egészségügyi. Minden más csomag fegyvert vagy eszközt tartalmaz. Likelihood of a crate dropping before a turn - + Csomag érkezésének valószínűsége a kör elején Health bonus for collecting a health crate - + Az egészségügyi csomag megszerzésével járó életpontok száma 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. - + 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. Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps. - + 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. Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs. - + Annak a valószínűsége, hogy egy akna befullad. A sünök által elhelyezett aknákat nem érinti. Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps. - + 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. Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps. - + 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. Affects the left and right boundaries of the map - + A pálya bal és jobb szélét érinti Time you get after an attack - + Ennyi időt kapsz még támadás után Additional parameter to configure game styles. The meaning depends on the used style, refer to the documentation. When in doubt, leave it empty. - + 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. Name of this scheme - + A séma neve Select a hedgehog at the beginning of a turn - + Sün választása a kör elején Land can not be destroyed by most weapons. - + A pályát a legtöbb fegyver nem rombolja. %1 (%2) - + %1 (%2) PageSelectWeapon Default - Default + Alapértelmezett Delete @@ -2087,147 +2123,147 @@ New - Új + Új Copy - + Másolás PageSinglePlayer Play a quick game against the computer with random settings - + Gyors játék a számítógép ellen, véletlenszerű beállításokkal Play a hotseat game against your friends, or AI teams - + Helycserés játék a barátaiddal vagy MI csapatokkal Campaign Mode - + Hadjárat mód Watch recorded demos - + Felvett bemutatók megtekintése Load a previously saved game - + Korábban mentett játék betöltése Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios. - + 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. PageTraining No description available - + Nincs elérhető leírás Select a mission! - + Válassz küldetést! Start fighting - + Harc indítása Pick the training to play - + Válaszd ki a kívánt kiképzést Pick the challenge to play - + Válaszd ki a kívánt kihívást Pick the scenario to play - + Válaszd ki a kívánt forgatókönyvet Trainings - + Kiképzések Challenges - + Kihívások Scenarios - + Forgatókönyvek Team - + Csapat Team highscore: %1 Highest score of a team - + Csapat legjobb eredménye: %1 Team lowscore: %1 Lowest score of a team - + Csapat legrosszabb eredménye: %1 Team's top accuracy: %1% Best accuracy of a team (in a challenge) - + Csapat legnagyobb pontossága: %1% Team's best time: %L1 s - + Csapat legjobb ideje: %L1 mp Team's longest time: %L1 s - + Csapat leghosszabb ideje: %L1 mp PageVideos Name - Név + Név Size - + Méret %1 bytes - - + + %1 bájt (in progress...) - + (folyamatban…) encoding - + kódolás Date: %1 - + Dátum: %1 Size: %1 - + Méret: %1 %1% Video encoding progress. %1 = number - + %1% %1 (%2%) - %3 Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”) - + %1 (%2%) – %3 @@ -2250,7 +2286,7 @@ Ban - Bannolás + Tiltás Follow @@ -2258,7 +2294,7 @@ Ignore - Ignorálás + Mellőzés Add friend @@ -2266,7 +2302,7 @@ Unignore - Ignorálás feloldása + Mellőzés feloldása Remove friend @@ -2278,27 +2314,27 @@ Restrict Unregistered Players Join - + Nem regisztrált játékosok korlátozása Show games in lobby - + Várakozóban lévő játékok mutatása Show games in-progress - + Folyamatban lévő játékok mutatása Show password protected - + Jelszóvédettek mutatása Show join restricted - + Korlátozottan csatlakozhatók mutatása Delegate room control - + Szobavezérlési jog adása @@ -2329,92 +2365,92 @@ Save password - + Jelszó mentése Record audio - + Hang rögzítése Use game resolution - + Mint a játéké Visual effects - + Képi hatások Sound - + Hang In-game sound effects - + Játékbeli hanghatások Music - + Zene In-game music - + Játékbeli zene Frontend sound effects - + Menübeli hanghatások Frontend music - + Menübeli zene Team - + Csapat Enable team tags by default - + Csapatcímkék alapértelmezett bekapcsolása Hog - + Sün Enable hedgehog tags by default - + Süncímkék alapértelmezett bekapcsolása Health - + Életpontszám Enable health tags by default - + Életpontszám alapértelmezett kijelzése Translucent - + Átlátszó Enable translucent tags by default - + Átlátszó címkék alapértelmezett bekapcsolása Enable visual effects such as animated menu transitions and falling stars - + Képi hatások, úgymint mozgásos menüátmenetek és hullócsillagok bekapcsolása If enabled, Hedgewars adds the date and time in the form "YYYY-MM-DD_hh-mm" for automatically created demos. - + 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. Dampen when losing focus Checkbox text. If checked, the in-game audio volume is reduced (=dampened) when the game window loses its focus - + Halkítás, ha háttérbe kerül az ablak Reduce the game audio volume if the game window has lost its focus - + A játék hanghatásainak halkítása, ha a játék ablaka elveszíti a fókuszt @@ -2429,99 +2465,99 @@ (System default) - (rendszer default) + (rendszer alapértelmezése) Community - + Közösség Disabled - + Kikapcsolva Red/Cyan - + Vörös/Cián Cyan/Red - + Cián/Vörös Red/Blue - + Vörös/Kék Blue/Red - + Kék/Vörös Red/Green - + Vörös/Zöld Green/Red - + Zöld/Vörös Side-by-side - + Egymás mellett Top-Bottom - + Fent-lent Red/Cyan grayscale - + Vörös/Cián szürkeskála Cyan/Red grayscale - + Cián/Vörös szürkeskála Red/Blue grayscale - + Vörös/Kék szürkeskála Blue/Red grayscale - + Kék/Vörös szürkeskála Red/Green grayscale - + Vörös/Zöld szürkeskála Green/Red grayscale - + Zöld/Vörös szürkeskála Computer (Level %1) - + Számítógép (%1. szint) Stereoscopy creates an illusion of depth when you wear 3D glasses. - + A sztereoszkópia a mélység illúzióját kelti, ha 3D szemüveget viselsz. 24 FPS - + 24 FPS 25 FPS - + 25 FPS 30 FPS - + 30 FPS 50 FPS - + 50 FPS 60 FPS - + 60 FPS @@ -2536,31 +2572,31 @@ Net game - Netes játék + Hálózati játék Playing teams - Résztvevő csapatok + Részt vevő csapatok Game Modifiers - Játék módosítók + Játékmódosítók Basic Settings - Alap beállítások + Alapbeállítások Team Settings - Csapat beállítások + Csapatbeállítások Videos - + Videók Description - + Leírás @@ -2571,7 +2607,7 @@ Mines - Aknák + Aknák száma Version @@ -2583,7 +2619,7 @@ Host: - Host: + Gép: Port: @@ -2599,11 +2635,11 @@ Server name: - Szerver név: + Szerver neve: Server port: - Szerver port: + Szerver portja: Initial sound volume @@ -2611,7 +2647,7 @@ Damage Modifier - Sebzés módosító + Sebzésmódosító Turn Time @@ -2635,7 +2671,7 @@ % Dud Mines - % hamis aknák + % befulladó akna Name @@ -2667,174 +2703,176 @@ Quality - + Minőség % Health Crates - + % egészségügyi csomag Health in Crates - + életpont a csomagokban Sudden Death Water Rise - + Hirtelen halál vízemelkedés Sudden Death Health Decrease - + Hirtelen halál életpontcsökkenés % Rope Length - + % kötélhosszúság Style - + Stílus Scheme - + Séma There are videos that are currently being processed. Exiting now will abort them. Do you really want to quit? - + Van még feldolgozás alatt álló videó. +Ha most kilépsz, ezek leállnak. +Tényleg ki akarsz lépni? Description - + Leírás Nickname - Becenév + Becenév Format - + Formátum Audio codec - + Hangkodek Video codec - + Videokodek Framerate - + Képkockasebesség 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! - + 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! Fullscreen - Teljes képernyő + Teljes képernyő Fullscreen Resolution - + Teljes képernyős felbontás Windowed Resolution - + Ablakos felbontás Your Email - + E-mail címed Summary - + Összegzés Send system information - + Rendszerinformáció küldése Type the security code: - + Írd be a biztonsági kódot: This setting will be effective at next restart. - + Ez a beállítás a következő indításkor lép életbe. Tip: %1 - + Tipp: %1 Displayed tags above hogs and translucent tags - + A sünök felett megjelenő címkék és azok átlátszósága World Edge - + Pálya széle Script parameter - + Szkriptparaméter Air Mines - + Légi aknák száma Player - + Játékos Barrels - + Hordók % Retreat Time Label of game scheme setting for the time you get after an attack - + % visszavonulási idő Stereoscopy - + Sztereoszkópia Bitrate (Kibit/s) “Kibit/s” is the symbol for 1024 bits per second - + Bitráta (Kibit/s) Loading<br>CAPTCHA ... - + CAPTCHA<br>betöltése… Zoom (%) - + Nagyítás (%) QLineEdit unnamed - névtelen + név nélküli hedgehog %1 - + sün %1 anonymous - + névtelen unnamed (%1) - + név nélküli (%1) Hedgehog %1 - + Sün %1 @@ -2848,7 +2886,7 @@ QMessageBox Connection to server is lost - A kapcsolat a szerverrel megszakadt + A kapcsolat a szerverrel megszakadt Error @@ -2856,39 +2894,39 @@ File association failed. - + Fájltársítás sikertelen. Teams - Are you sure? - + Csapatok – Biztos vagy benne? Do you really want to delete the team '%1'? - + Tényleg törölni akarod a(z) „%1” csapatot? Cannot delete default scheme '%1'! - + Nem lehet törölni az alapértelmezett „%1” sémát! Please select a record from the list - + Kérjük, válassz egy felvételt a listáról Unable to start server - + Nem sikerült kiszolgálót indíŧani Hedgewars - Error - + Hedgewars – Hiba Hedgewars - Success - + Hedgewars – Siker All file associations have been set - + Minden fájltársítás be lett állítva Cannot create directory %1 @@ -2900,15 +2938,15 @@ Netgame - Error - + Hálózati játék – Hiba Please select a server from the list - + Kérjük, válassz kiszolgálót a listáról Please enter room name - Add meg a szoba nevét + Add meg a szoba nevét Please select record from the list @@ -2916,184 +2954,189 @@ Room Name - Error - + Szoba neve – Hiba Please select room from the list - Válassz egy szobát a listából + Válassz egy szobát a listából Room Name - Are you sure? - + Szobanév – Biztos vagy benne? The game you are trying to join has started. Do you still want to join the room? - + A játék, amihez csatlakozni próbálsz, már elindult. +Mégis csatlakoznál a szobához? Schemes - Warning - + Sémák – Figyelmeztetés Schemes - Are you sure? - + Sémák – Biztos vagy benne? Do you really want to delete the game scheme '%1'? - + Tényleg törölni szerenéd a(z) „%1” játéksémát? Videos - Are you sure? - + Videók – Biztos vagy benne? Do you really want to delete the video '%1'? - + Tényleg törölni akarod a(z) „%1” videót? Do you really want to remove %1 file(s)? - - + + Tényleg törölni szeretnél %1 fájlt? File error - + Fájlhiba Cannot open '%1' for writing - + Nem sikerült megnyitni írásra a következőt: %1 Cannot open '%1' for reading - + Nem sikerült olvasásra megnyitni a következőt: %1 Weapons - Warning - + Fegyverek – Figyelmeztetés Cannot delete default weapon set '%1'! - + Nem lehet törölni a(z) „%1” alapértelmezett fegyverkészletet! Weapons - Are you sure? - + Fegyverek – Biztos vagy benne? Do you really want to delete the weapon set '%1'? - + Tényleg törölni akarod a(z) „%1” fegyverkészletet? Hedgewars - Nick not registered - + Hedgewars – Becenév nincs regisztrálva System Information Preview - + Rendszerinformáció előnézete Failed to generate captcha - + Nem sikerült captchát generálni Failed to download captcha - + Nem sikerült letölteni a captchát Please fill out all fields. Email is optional. - + Kérjük, tölts ki minden mezőt. Az e-mail cím nem kötelező. Hedgewars - Warning - + Hedgewars – Figyelmeztetés Hedgewars - Information - + Hedgewars – Információ Not all players are ready - + Nem minden játékos áll készen Are you sure you want to start this game? Not all players are ready. - + Biztosan el akarod indítani a játékot? +Nem minden játékos áll készen. Teams - Name already taken - + Csapatok – A név már foglalt The team name '%1' is already taken, so your team has been renamed to '%2'. - + A(z) „%1” csapatnév már foglalt, így csapatodat átneveztük erre: „%2”. Please select a file from the list. - + Kérjük, válassz egy fájlt a listáról. Cannot rename file to %1. - + Nem sikerült átnevezni a fájlt erre: „%1”. Cannot delete file %1. - + Nem sikerült törölni ezt a fájlt: %1. Welcome to Hedgewars - + Üdvözlünk a Hedgewarsban 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? - + Ü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? Cannot use the weapon scheme '%1'! - + Nem alkalmazható a(z) „%1” fegyverséma! The connection to the server is lost. - + Megszakadt a kapcsolat a kiszolgálóval. Schemes - Name already taken - + Sémák – A név már foglalt A scheme with the name '%1' already exists. Your scheme has been renamed to '%2'. - + Már létezik „%1” nevű séma. Így az új sémát átneveztük erre: „%2”. A weapon scheme with the name '%1' already exists. Changes made to the weapon scheme have been discarded. - + Már létezik „%1” nevű fegyverséma. A módosításokat nem mentettük. Server redirection - + Kiszolgálóátirányítás This server supports secure connections on port %1. Would you like to reconnect securely? - + Ez a kiszolgáló biztonságos kapcsolódást is támogat a(z) %1. számú porton. +Szeretnél újracsatlakozni biztonságosan? QObject No description available - + Nincs elérhető leírás QPushButton default - default + alapértelmezés OK @@ -3117,7 +3160,7 @@ Specify - Specifikálás + Beállítás Start @@ -3129,7 +3172,7 @@ Play demo - Demo lejátszása + Bemutató lejátszása Rename @@ -3145,174 +3188,176 @@ Associate file extensions - + Fájlkiterjesztések hozzárendelése More info - + További információ Set default options - + Alapértelmezett beállítások megadása Open videos directory - + Videók könyvtárának megnyitása Play - + Lejátszás Restore default coding parameters - + Alapértelmezett kódolási paraméterek visszaállítása Open the video directory in your system - + A videók könyvtárának megnyitása a rendszeren Play this video - + Video lejátszása Delete this video - + Video törlése Reset - + Visszaállítás Set the default server port for Hedgewars - + A Hedgewars kiszolgáló alapértelmezett portjának megadása Invite your friends to your server in just 1 click! - + Hívd meg a barátaidat a szerveredre egyetlen kattintással! Click to copy your unique server URL to your clipboard. Send this link to your friends and they will be able to join you. - + 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. Start private server - + Magánkiszolgáló indítása Specify address - + Cím megadása QSpinBox Specify the bitrate of recorded videos as a multiple of 1024 bits per second - + Add meg a rögzített videók bitsebességét 1024 bit per másodperc többszöröseként RoomNamePrompt Enter a name for your room. - + Add meg a szoba nevét. Cancel - Mégse + Mégse Create room - + Szoba készítése set password - + jelszó beállítása RoomsListModel In progress - + Folyamatban Room Name - Szoba neve + Szoba neve C Caption of the column for the number of connected clients in the list of rooms - C + "Játékos" + J T Caption of the column for the number of teams in the list of rooms - T + "Csapat" + Cs Owner - Tulajdonos + Tulajdonos Map - Pálya + Pálya Rules - Szabályok + Szabályok Weapons - Fegyverek + Fegyverek Random Map - Véletlen pálya + Véletlen pálya Random Maze - Véletlen labirintus + Véletlen útvesztő Hand-drawn - + Kézzel rajzolt Script - + Szkript Random Perlin - + Véletlen Perlin Forts - + Várak SeedPrompt The map seed is the basis for all random values generated by the game. - + A pályamag az alapja a játékban generált minden véletlenszerű értéknek. Cancel - Mégse + Mégse Set seed - + Mag megadása Close - + Bezárás Seed Refers to the "random seed"; the source of randomness in the game - + Mag @@ -3339,31 +3384,32 @@ New - Új + Új New (%1) - + Új (%1) Copy of %1 - + %1 másolata Copy of %1 (%2) - + %1 másolata (%2) TCPBase Unable to start server at %1. - + Nem sikerült kiszolgálót indítani itt: %1. Unable to run engine at %1 Error code: %2 - + Nem sikerült motort futtatni itt: %1 +Hibakód: %2 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! - + 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! TeamSelWidget At least two teams are required to play! - + Legalább két csapat kell a játékhoz! ThemePrompt Cancel - Mégse + Mégse Search for a theme: - + Téma keresése: Use selected theme - + Választott téma használata Choose a theme - + Válassz témát @@ -3445,39 +3496,39 @@ slot 1 - slot 1 + 1. csoport slot 2 - slot 2 + 2. csoport slot 3 - slot 3 + 3. csoport slot 4 - slot 4 + 4. csoport slot 5 - slot 5 + 5. csoport slot 6 - slot 6 + 6. csoport slot 7 - slot 7 + 7. csoport slot 8 - slot 8 + 8. csoport slot 9 - slot 9 + 9. csoport timer 1 sec @@ -3501,15 +3552,15 @@ chat - chat + csevegés chat history - chat history + csevegési előzmények pause - szünet + szünet confirmation @@ -3529,7 +3580,7 @@ capture - elfogás + elfogás quit @@ -3545,7 +3596,7 @@ reset zoom - zoom visszaállítása + nagyítás visszaállítása long jump @@ -3557,166 +3608,166 @@ slot 10 - slot 10 + 10. csoport mute audio - + hang némítása record - + rögzítés autocam / find hedgehog - + automatikus kamera / sün keresése speed up replay - + visszajátszás gyorsítása toggle team bars This refers to the team info bars (name/flag/health) of all teams. These are shown at the bottom center of the screen - + csapatsávok kapcsolása pause / auto skip - + szünet / automatikus passzolás toggle hedgehog tags - + süncímkék kapcsolása change timer - + időzítő állítása show mission information - + küldetésinformációk mutatása clan chat - + kláncsevegés unselect weapon - + fegyver elvetése stand still on slippery land - + megállás csúszós talajon change direction without moving - + irányváltás megmozdulás nélkül switch backwards - + váltás hátra change bounciness - + pattogósság állítása reset zoom to start value - + nagyítás visszaállítása kezdőértékre set zoom to 100% - + nagyítás állítása 100%-ra save map as image - + pálya mentése képként show object information - + objektuminformáció mutatása change hedgehog tag types - + süncímkék típusának állítása toggle hedgehog tag translucency - + süncímkék átlátszóságának állítása toggle HUD - + kijelző kapcsolása backwards jump - + ugrás hátra screenshot - + képernyőkép készítése binds (categories) Movement - + Mozgás Weapons - Fegyverek + Fegyverek Camera - + Kamera Miscellaneous - + Egyebek binds (combination) hold down precise - + pontos célzás lenyomása precise + left/right - + pontos célzás + balra/jobbra precise + switch - + pontos célzás + váltás precise + timer - + pontos célzás + időzítő precise + reset zoom - + pontos célzás + nagyítás visszaállítása precise + toggle hedgehog tags - + pontos célzás + süncímkék kapcsolása switch + toggle hedgehog tags - + váltás + süncímkék kapcsolása precise + switch + toggle hedgehog tags - + pontos célzás + váltás + süncímkék kapcsolása high jump (twice) - + magasugrás (kétszer) precise + screenshot - + pontos célzás + képernyőkép készítése @@ -3755,11 +3806,11 @@ Modify the camera's zoom level: - Kamera ráközelítsének módosítása: + Kamera ráközelítésének módosítása: Talk to your team or all participants: - Beszélgetés a csapattal vagy minden résztvevővel: + Beszélgetés a csapattal vagy minden résztvevővel: Pause, continue or leave your game: @@ -3779,62 +3830,62 @@ Toggle labels above hedgehogs: - Sünik feletti címkék beállítása: + Sünik feletti címkék beállítása: Record video: - + Video rögzítése: Hedgehog movement - + Sünmozgás Toggle automatic camera / refocus on active hedgehog: - + Automatikus kamera kapcsolása / aktív sünre közelítés: Demo replay: - + Bemutató lejátszása: Heads-up display: - + Kijelző: Talk to your clan or all participants: - + Beszéd a klánhoz vagy minden résztvevőhöz: binds (keys) Axis - Tengely + Tengely (Up) - (Fel) + (Fel) (Down) - (Le) + (Le) Hat - Kalap + Fejfedő (Left) - (Balra) + (Balra) (Right) - (Jobbra) + (Jobbra) Button - Gomb + Gomb Keyboard @@ -3882,7 +3933,7 @@ Pause - Szünet + Pause Escape @@ -3894,71 +3945,71 @@ Numpad 0 - Numpad 0 + Numerikus 0 Numpad 1 - Numpad 1 + Numerikus 1 Numpad 2 - Numpad 2 + Numerikus 2 Numpad 3 - Numpad 3 + Numerikus 3 Numpad 4 - Numpad 4 + Numerikus 4 Numpad 5 - Numpad 5 + Numerikus 5 Numpad 6 - Numpad 6 + Numerikus 6 Numpad 7 - Numpad 7 + Numerikus 7 Numpad 8 - Numpad 8 + Numerikus 8 Numpad 9 - Numpad 9 + Numerikus 9 Numpad . - Numpad . + Numerikus . Numpad / - Numpad / + Numerikus / Numpad * - Numpad * + Numerikus * Numpad - - Numpad - + Numerikus - Numpad + - Numpad + + Numerikus + Enter - Enter + Enter Equals - Egyenlő + Egyenlő Up @@ -3990,55 +4041,55 @@ Page up - Page up + Page Up Page down - Page Down + Page Down Num lock - Num lock + Num Lock Caps lock - Caps lock + Caps Lock Scroll lock - Scroll lock + Scroll Lock Right shift - Jobb oldali Shift + Jobb oldali Shift Left shift - Bal oldali Shift + Bal oldali Shift Right ctrl - Jobb oldali Ctrl + Jobb oldali Ctrl Left ctrl - Bal oldali Ctrl + Bal oldali Ctrl Right alt - Jobb oldali Alt + Jobb oldali Alt Left alt - Bal oldali Alt + Bal oldali Alt Right meta - Jobb oldali Meta + Jobb oldali Meta Left meta - Bal oldali Meta + Bal oldali Meta A button @@ -4122,1076 +4173,1076 @@ DPad - DPad + DPad D-pad - + D-pad Axis %1 %2 Game controller axis direction. %1 = axis number, %2 = direction - + %1. tengely %2 Button %1 Game controller button. %1 = button number - + %1. gomb D-pad %1 %2 Game controller D-pad button. %1 = D-pad number, %2 = direction - + %1. D-pad %2 (Don't use) Special entry in key selection when an action has no control assigned - + (nem használt) Mouse: X1 button - + Egér: X1 gomb Mouse: X2 button - + Egér: X2 gomb Keypad 0 - + Numerikus 0 Keypad 1 - + Numerikus 1 Keypad 2 - + Numerikus 2 Keypad 3 - + Numerikus 3 Keypad 4 - + Numerikus 4 Keypad 5 - + Numerikus 5 Keypad 6 - + Numerikus 6 Keypad 7 - + Numerikus 7 Keypad 8 - + Numerikus 8 Keypad 9 - + Numerikus 9 Keypad . - + Numerikus . Keypad / - + Numerikus / Keypad * - + Numerikus * Keypad - - + Numerikus – Keypad + - + Numerikus + Keypad Enter - + Numerikus Enter PageUp - + Page Up PageDown - + Page Down Numlock - + Num Lock CapsLock - + Caps Lock ScrollLock - + Scroll Lock Right Shift - + Jobb Shift Left Shift - + Bal Shift Right Ctrl - + Jobb Ctrl Left Ctrl - + Bal Ctrl Right Alt - + Jobb Alt Left Alt - + Bal Alt Right GUI Windows key / Command key / Meta key /Super key (right) - + Jobb Windows Left GUI Windows key / Command key / Meta key /Super key (left) - + Bal Windows (QWERTY) Name of QWERTY US keyboard layout - + (QWERTY) Menu - + Menü credits Programming - + Programozás Game engine - + Játékmotor Creator - + Készítő Many engine improvements - + Számos motorfejlesztés Gamepad and Lua integration - + Gamepad és Lua integráció Campaign support - + Hadjárattámogatás Theme customization improvements - + Téma-testreszabási fejlesztések Some Pas2C and GLES2 work - + Némi Pas2C és GLES2 munka Video recording - + Videorögzítés Other improvements - + Más fejlesztések Map generation - + Pályagenerálás Core map generators - + Alap pályagenerátorok Perlin maps and other improvements - + Perlin-pályák és más fejlesztések Maze maps - + Útvesztőpályák Weapons - Fegyverek + Fegyverek Most core weapons - + A legtöbb alapfegyver Air mine, rubber, others - + Légi akna, gumiszalag, egyebek Drill rocket, ballgun, RC plane - + Ásórakéta, labdavető, RC repülő Freezer - + Fagyasztó Mine number and time game settings - + Aknák száma és idő játékbeállítások Frontend / main menu - + Kezelőfelület / főmenü Many frontend improvements - + Számos kezelőfelületi fejlesztés Keybinds, feedback, maps and hats interfaces - + Billentyű-hozzárendelések, visszajelzés, pálya és fejfedő felületek Login dialogs, other improvements - + Bejelentkezési párbeszédablakok, más fejlesztések Missions and styles - + Küldetések és stílusok A Classic Fairytale - + Egy klasszikus tündérmese A Space Adventure - + Kalandok az űrben Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW - + 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 Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance - + Kiképzés, gyorsasági és céllövő kihívások, Aknavető harcmező, Polipterror, Nagy fegyvertár, hibajavítások és karbantartás Some styles and missions - + Egyes stílusok és küldetések Battalion - + Zászlóalj Continental supplies - + Tengerentúli ellátmány Teamwork 2 - + Csapatmunka 2 Climb Home - + Mássz haza Portal Mind Challenge - + Átjáró kihívás Game server - + Játékszerver Ports - + Portolás több rendszerre macOS/iPhone port, OpenGL-ES conversion - + masOS/iPhone portolás, OpenGL ES konverzió Android port - + Android portolás Android netplay, portability abstraction - + Android hálózati játék, hordozhatósági absztrakció WebGL port - + WebGL portolás iPhone/iPad ports - + iPhone/iPad portolás Graphics - + Grafika General - Általános + Általános Themes - + Témák Nature, Snow, City, Castle, Halloween, Island - + Természet, Hó, Város, Kastély, Halloween, Sziget Bamboo, EarthRise, BambooPlinko - + Bambusz, Földkelte, Bambusz Plinko Golf, Hoggywood, Stage - + Golf, Süniwood, Színpad Hoggywood - + Süniwood Cave, Olympics - + Barlang, Olimpia Fruit, Cake - + Gyümölcs, Torta Art - + Művészet Beach - + Tengerpart Brick - + Tégla Hell - + Pokol Jungle - + Dzsungel Sheep - + Juh Maps - + Pályák Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree - + 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 SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle - + SB_Csontok, SB_Kristály, SB_Füves, SB_Liget, SB_Kísérteties, SB_Tölgy, SB_Gombák, SB_Polip Bamboo, Blox, Cake, Cogs, EarthRise, Freeway - + Bambusz, Kockák, Torta, Fogaskerék, Földkelte, Sztráda Castle, PirateFlag - + Kastély, Kalózzászló ShoppaKing, TrophyRace - + ShoppaKirály, Kupaverseny Battlefield - + Harcmező CTF_Blizzard - + CTF_Hóvihar Cheese - + Sajt ClimbHome - + Mássz haza Lonely_Island - + Magányos sziget Octorama - + Octorama portal - + átjáró Ruler - + Vonalzó Sticks - + Matricák Forts - + Várak EvilChicken - + Vércsirke Olympic - + Olimpia Tank - + Tank Snail - + Csiga SteelTower - + Acéltorony Hats, graves, other - + Fejfedők, sírok, egyebek See CREDITS text file - + Lásd a CREDITS szövegfájlt Sounds - + Hangok Hedgehogs voice - + Sünbeszéd Default_pl, Russian_pl voices - + Alap_pl, Orosz_pl beszédek Various authors from www.freesound.org (see CREDITS text file) - + A www.freesound.org különféle szerzői (lásd a CREDITS szövegfájlt) Music - + Zene City, Rock, others - + Város, Rock, egyebek Compost - + Komposzt EarthRise, oriental, Pirate, snow - + Földkelte, Orientalista, Kalóz, Hó Fruit, Jungle - + Gyümölcs, Dzsungel Nature - + Természet olympics_sd - + Olimpia_HH sdmusic (Hitman [sheepluva edit]) - + Hirtelen halál zene (Hitman [sheepluva edit]) Translations - + Fordítások Brazilian Portuguese - + Brazíliai portugál Bulgarian - + Bolgár Czech - + Cseh Chinese - + Kínai Finnish - + Finn French - + Francia German - + Német Greek - + Görög Italian - + Olasz Japanese - + Japán Korean - + Koreai Lithuanian - + Litván Polish - + Lengyel Portuguese - + Portugál Russian - + Orosz Scottish Gaelic - + Skót gael Slovak - + Szlovák Spanish - + Spanyol Swedish - + Svéd Ukrainian - + Ukrán Special thanks - + Külön köszönet Project founder - + Projektalapító server Nickname is already in use - + A becenevet már használják No checker rights - + Nincs ellenőrzési jogkör Authentication failed - + Hitelesítés sikertelen 60 seconds cooldown after kick - + 60 másodperc pihenő a kirúgás után kicked - + kirúgva Ping timeout - + Ping időtúllépés New voting started - + Új szavazás indult kick - + kirúgás map - + pálya pause - szünet + szünet Reconnected too fast - + Túl gyors újracsatlakozás Warning! Chat flood protection activated - + Figyelem! Elárasztó csevegés védelem bekapcsolva Excess flood - + Elárasztó üzenetek Game messages flood detected - 1 - + Elárasztó játéküzenetek észlelve – 1 Warning! Joins flood protection activated - + Figyelem! Csatlakozási elárasztás védelem bekapcsolva new seed - + új mag /maxteams: specify number from 2 to 8 - + /maxteams: adj meg 2 és 8 közti számot The game can't be started with less than two clans! - + A játék nem indítható kettőnél kevesebb klánnal! Empty config entry. - + Üres beállító bejegyzés. Access denied. - + Hozzáférés megtagadva. You're not the room master! - + Nem te vagy a szobagazda! Corrupted hedgehogs info! - + Sérült süninformáció! Too many teams! - + Túl sok csapat! Too many hedgehogs! - + Túl sok sün! There's already a team with same name in the list. - + Már van ugyanilyen nevű csapat a listában. Joining not possible: Round is in progress. - + Nem lehet csatlakozni: Kör közben vannak. This room currently does not allow adding new teams. - + Ehhez a szobához jelenleg nem lehet új csapatokat adni. Error: The team you tried to remove does not exist. - + Hiba: Nem létezik a csapat, amit el akarsz távolítani. You can't remove a team you don't own. - + Nem távolíthatsz el egy csapatot, ha az nem a tiéd. 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: $()*+?[]^{|} - + 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: $()*+?[]^{|} A room with the same name already exists. - + Már van ugyanilyen nevű szoba. /callvote kick: You need to specify a nickname. - + /callvote kick: Meg kell adnod egy becenevet. /callvote kick: No such user! - + /callvote kick: Nincs ilyen felhasználó! /callvote map: No such map! - + /callvote map: Nincs ilyen pálya! /callvote pause: No game in progress! - + /callvote pause: Nincs zajló játék! /callvote hedgehogs: Specify number from 1 to 8. - + /callvote hedgehogs: Adj meg egy 1 és 8 közötti számot. 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: $()*+?[]^{|} - + 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: $()*+?[]^{|} No such room. - + Nincs ilyen szoba. Room version incompatible to your Hedgewars version! - + A szoba verziója nem felel meg a Hedgewars verziódnak! Access denied. This room currently doesn't allow joining. - + Hozzáférés megtagadva. A szobába jelenleg nem lehet belépni. Access denied. This room is for registered users only. - + Hozzáférés megtagadva. Ebbe a szobába csak regisztrált felhasználók léphetnek be. You are banned from this room. - + Ki vagy tiltva ebből a szobából. Nickname already provided. - + Már megadtál becenevet. 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: $()*+?[]^{|} - + 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: $()*+?[]^{|} Protocol already known. - + Ez a protokoll már ismert. Bad number. - + Rossz szám. There's no voting going on. - + Nincs most szavazás. You already have voted. - + Már szavaztál. Your vote has been counted. - + Szavazatod beérkezett. Voting closed. - + A szavazás lezárult. Pause toggled. - + Szünet van. Voting expired. - + A szavazás lejárt. hedgehogs per team: - + csapatonkénti sünök: /info <player>: Show info about player - + /info <játékos>: információk egy játékosról /me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza' - + /me <üzenet>: Csevegési művelet, pl. „/me pizzát eszik” ez lesz: „* Játékos pizzát eszik” /rnd: Flip a virtual coin and reply with 'heads' or 'tails' - + /rnd: Egy képzeletbeli érme feldobása, a válasz „fej” vagy „írás” /rnd [A] [B] [C] [...]: Reply with a random word from the given list - + /rnd [A] [B] [C] […]: A válasz a listából véletlenszerűen választott szó lesz /watch <id>: Watch a demo stored on the server with the given ID - + /watch <azonosító>: A szerveren a megadott azonosítóval tárolt bemutató lejátszása /help: Show chat command help - + /help: A csevegési parancsok súgójának megjelenítése /callvote [arguments]: Start a vote - + /callvote [argumentumok]: Szavazás indítása /vote <yes/no>: Vote 'yes' or 'no' for active vote - + /vote <yes/no>: A zajló szavazáson igennel vagy nemmel voksolás /delegate <player>: Surrender room control to player - + /delegate <játékos>: A szoba irányítási jogának átadása a játékosnak /maxteams <N>: Limit maximum number of teams to N - + /maxteams <N>: A csapatok maximális számának korlátozása N-re /global <message>: Send global chat message which can be seen by everyone on the server - + /global <üzenet>: Globális csevegési üzenet küldése, amit mindenki látni fog a kiszolgálón /registered_only: Toggle 'registered only' state. If enabled, only registered players can join server - + /registered_only: A „csak regisztráltak” állapot bekapcsolása. Ez esetben csak regisztrált játékosok csatlakozhatnak a kiszolgálóra /super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server - + /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 /stats: Query server stats - + /stats: A kiszolgáló statisztikáinak lekérdezése /force <yes/no>: Force vote result for active vote - + /force <yes/no>: A zajló szavazás eredményének kikényszerítése /fix: Force this room to stay open when it is empty - + /fix: Akkor is nyitva marad a szoba, ha üres /unfix: Undo the /fix command - + /unfix: A /fix parancs visszavonása List of lobby chat commands: - + A váróterem csevegési parancsainak listája: List of room chat commands: - + A szoba csevegési parancsainak listája: Commands for server admins only: - + Parancsok csak kiszolgálókezelőknek: room - + szoba lobby - + váróterem (playing) - + (játszik) (spectating) - + (megfigyel) Player is not online. - + A játékos nincs online. /force: Please use 'yes' or 'no'. - + /force: Kérjük, „yes”-t vagy „no”-t írj. /vote: Please use 'yes' or 'no'. - + /vote: Kérjük, „yes”-t vagy „no”-t írj. Kicked - + Kirúgva This server only allows registered users to join. - + Erre a kiszolgálóra csak regisztrált felhasználók léphetnek be. heads - + fej tails - + írás This server does not support replays! - + Ez a kiszolgáló nem támogatja a visszajátszásokat! /greeting [message]: Set or clear greeting message to be shown to players who join the room - + /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 /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map - + /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 /delete <config ID>: Delete a votable room configuration - + /delete <beállításazonosító>: Megszavazható szobabeállítás törlése /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file - + /saveroom <fájlnév>: Minden megszavazható szobabeállítás (és az üdvözlő üzenet) mentése fájlba /loadroom <file name>: Load votable room configurations (and greeting) from a file - + /loadroom <fájlnév>: Megszavazható szobabeállítások (és üdvözlő üzenet) betöltése fájlból Super power activated. - + Szupererő bekapcsolva. Unknown command or invalid parameters. Say '/help' in chat for a list of commands. - + Ismeretlen parancs vagy rossz paraméterek. A parancsok listájához írd a csevegőbe, hogy „/help”. You can't kick yourself! - + Nem rúghatod ki saját magadat! You can't kick the only other player! - + Nem rúghatod ki az egyetlen másik játékost! The player is not in your room. - + A játékos nem a te szobádban van. This player is protected from being kicked. - + Ez a játékos védettséget élvez a kirúgással szemben. You're not the room master or a server admin! - + Nem vagy szobagazda, sem kiszolgálókezelő! You're already the room master. - + Már te vagy a szobagazda. Greeting message cleared. - + Üdvözlő üzenet törölve. Greeting message set. - + Üdvözlő üzenet beállítva. /callvote kick: This is only allowed in rooms without a room master. - + /callvote kick: Ez csak a gazda nélküli szobákban használható. /callvote map: No maps available. - + /callvote map: Nincs elérhető pálya. You're the new room master! - + Te vagy az új szobagazda! /quit: Quit the server - + /quit: Kilépés a kiszolgálóról This command is only available in the lobby. - + Ez a parancs csak a váróteremben használható. This command is only available in rooms. - + Ez a parancs csak szobákban használható. This server no longer allows unregistered players to join. - + Most már nem csatlakozhatnak regisztrálatlan játékosok erre a kiszolgálóra. This server now allows unregistered players to join. - + Most már regisztrálatlan játékosok is csatlakozhatnak erre a kiszolgálóra. Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player> - + Elérhető callvote parancsok: hedgehogs <szám>, pause, newseed, map <név>, kick <játékos> Please confirm server restart with '/restart_server yes'. - + Kérjük, erősítsd meg a kiszolgáló újraindítását ezzel: „/restart_server yes”. Warning! Room name change flood protection activated - + Figyelem! Szobanévváltási elárasztási védelem bekapcsolva diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/hedgewars_it.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 @@ Hedgewars %1 %1 contains Hedgewars' version number - Hedgewars %1 + Hedgewars %1 Revision %1 (%2) - + Revisione %1 (%2) Visit our homepage: %1 - + visita la nostra pagina: %1 This program is distributed under the %1. - Questo programma è distribuito secondo i termini di %1. + Questo programma è distribuito secondo i termini di %1. GNU GPL v2 Short for “GNU General Public License version 2” - + GNU GPL v2 Dependency versions: For the version numbers of Hedgewars' software dependencies - + Versioni di riferimento: <a href="https://gcc.gnu.org">GCC</a>: %1 - + <a href="https://gcc.gnu.org">GCC</a>: %1 <a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2</a>: %1.%2.%3 <a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2_mixer</a>: %1.%2.%3 <a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2_net</a>: %1.%2.%3 <a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2_image</a>: %1.%2.%3 <a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3 - + <a href="https://www.libsdl.org/">SDL2_ttf</a>: %1.%2.%3 <a href="https://www.qt.io/developers/">Qt</a>: %1 - + <a href="https://www.qt.io/developers/">Qt</a>: %1 <a href="https://libav.org">libavcodec</a>: %1.%2.%3 - + <a href="https://libav.org">libavcodec</a>: %1.%2.%3 <a href="https://libav.org">libavformat</a>: %1.%2.%3 - + <a href="https://libav.org">libavformat</a>: %1.%2.%3 <a href="https://libav.org">libavutil</a>: %1.%2.%3 - + <a href="https://libav.org">libavutil</a>: %1.%2.%3 <a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3 - + <a href="https://icculus.org/physfs/">PhysFS</a>: %1.%2.%3 Credits - + Crediti Other people - + Le altre persone %1 (alias %2) - + %1 (alias %2) %1 &lt;%2&gt; Part of credits. %1: Contributor name. %2: E-mail address - + %1 &lt;%2&gt; %1: %2 Part of credits. %1: Description of contribution. %2: Contributor name - + %1: %2 %1: %2 &lt;%3&gt; Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address - + %1: %2 &lt;%3&gt; Extended Credits - + Crediti estesi An extended credits list can be found in the CREDITS text file. - + La lista dei crediti estesi può essere trovata nel file: CREDITS. <a href="https://visualstudio.microsoft.com">VC++</a>: %1 - + <a href="https://visualstudio.microsoft.com">VC++</a>: %1 Unknown Compiler: %1 - + Compilatore sconosciuto: %1 @@ -185,11 +185,11 @@ Please specify an IP address. - + per favore specifica l'indirizzo IP. Please specify a nickname. - + Perfavore specifica un nickname. @@ -235,7 +235,7 @@ This is optional, but this information might help us to resolve bugs and other technical problems. - + Questo è facoltativo, ma questa informazione potrebbe aiutarci a risolvere i bug e altri problemi tecnici. @@ -295,11 +295,11 @@ New (%1) - Nuovo (%1) + Nuovo (%1) Copy of %1 (%2) - Copia di %1 (%2) + Copia di %1 (%2) @@ -621,29 +621,29 @@ Team 1 - + Squadra 1 Team %1 Default team name - + Squadra %1 Computer %1 Default computer team name - + Computer %1 Unknown network error (possibly missing SSL library). - + Errore di network sconosciuto (probabilmente manca la libreria SSL). This feature requires an Internet connection, but you don't appear to be online (error code: %1). - + Questa funzione richiede una connesione a internet, ma sembra che tu non sia online (codice errore: %1). Internal error: Reply object is invalid. - + Errore interno: Oggetto di risposta non valido. @@ -684,7 +684,14 @@ Last engine message: %1 - + 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 @@ -879,15 +886,15 @@ Scale size of the drawn map - + Ridimensiona la grandezza della mappa disegnata Load - Carica + Carica Edit - + Modifica @@ -959,11 +966,11 @@ Reason: - + Ragione: 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. - + 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. 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. - + 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. @@ -1015,7 +1027,14 @@ Last engine message: %1 - + 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 @@ -1063,7 +1082,7 @@ Warning: The same key is assigned multiple times! - + Attenzione: Lo stesso tasto è assegnato più volte! @@ -1091,34 +1110,34 @@ Duration: %1min %2s Duration in minutes and seconds (SI units) - + Durata: %1min %2s Video: %1x%2, %3 FPS, %4 Video metadata. %1 = video width, %2 = video height, %3 = frames per second = %4 = decoder name - + Video: %1x%2, %3 FPS, %4 Video: %1x%2, %3 Video metadata. %1 = video width, %2 = video height, %3 = decoder name - + Video: %1x%2,%3 Player: %1 - + Giocatore: %1 Theme: %1 - Tema: %1 + Tema: %1 Map: %1 - + Mappa %1 Record: %1 As in ‘recording’ - + Registrazione: %1 @@ -1132,12 +1151,12 @@ MinesTimeSpinBox Random - Casuale + Casuale %1 seconds - - + + %1 secondi @@ -1222,7 +1241,7 @@ Start fighting - Inizia combattimento + Inizio combattimento @@ -1248,19 +1267,19 @@ Load the start page - + Carica la pagina iniziale Unknown network error (possibly missing SSL library). - + Errore di network sconosciuto (probabilmente manca la libreria SSL). This feature requires an Internet connection, but you don't appear to be online (error code: %1). - + Questa funzione richiede una connessione a internet, ma sembra che tu non sia online (codice errore: %1). Internal error: Reply object is invalid. - + Errore interno: Oggetto di risposta non valido. @@ -1319,7 +1338,7 @@ Brush size - + Grandezza pennello @@ -1370,40 +1389,40 @@ Random Hats - + Cappelli casuali Random Names - + Nomi casuali Randomize the team name - + Randomizza il nome della squadra Randomize the grave - + Randomizza le tombe Randomize the flag - + Randomizza la bandiera Randomize the voice - + Randomizza le voci Randomize the fort - + Randomizza il forte CPU %1 Name of a flag for computer-controlled enemies. %1 is replaced with the computer level - + BOT %1 %1 (%2) - + %1 (%2) @@ -1430,15 +1449,15 @@ The best killer is <b>%1</b> with <b>%2</b> kills in a turn. - <p>Il miglior killer è <b>%1</b> con <b>%2</b> uccisione in un turno.</p> - <p>Il miglior killer è <b>%1</b> con <b>%2</b> uccisioni in un turno.</p> + Il miglior killer è <b>%1</b> con <b>%2</b> uccisione in un turno. + Il miglior killer è <b>%1</b> con <b>%2</b> uccisioni in un turno. A total of <b>%1</b> hedgehog(s) were killed during this round. - <p>Durante questo round è stato ucciso <b>%1</b> riccio in totale.</p> - <p>Durante questo round sono stati uccisi <b>%1</b> ricci in totale.</p> + Durante questo round è stato ucciso <b>%1</b> riccio in totale. + Durante questo round sono stati uccisi <b>%1</b> ricci in totale. @@ -1488,42 +1507,42 @@ <b>%1</b> thought it's good to shoot their own hedgehogs for <b>%2</b> pts. - - + + <b>%1</b> ha pensato fosse una buona idea sparare al proprio riccio per <b>%2</b> punti. <b>%1</b> killed <b>%2</b> of their own hedgehogs. - - + + <b>%1</b> ha ucciso <b>%2</b> dei suoi stessi ricci. With everyone having the same clan color, there was no reason to fight. And so the hedgehogs happily lived in peace ever after. - + Avendo tutti lo stesso colore del clan, non c'era più ragione di combattere, E così i ricci vissero in pace per sempre. (%1 point(s)) Number of points in stats screen, written after the team name - - + + (%1 punti(s)) (%L1 second(s)) Time in seconds - - + + (%L1 secondi(s)) (%1 crate(s)) - - + + (%1 cassa(s)) @@ -1602,7 +1621,7 @@ Open the Hedgewars online game manual in your web browser - + Apri il manuale di gioco online di Hedgewars nel tuo browser @@ -1624,19 +1643,19 @@ PageNet Connect to the selected server - + Connettiti al server selezionato Update the list of servers - + Aggiorna la lista dei server Specify the address and port number of a known server and connect to it directly - + Specifica l'indirizzo e il numero della porta di un server che conosci e connettiti direttamente Start private server - Avvia un server privato + Avvia un server privato @@ -1858,24 +1877,24 @@ x 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 - + * MISSING LANGUAGE NAME [%1] In the case of an error, this is shown in the language selection for a language with unknown name. %1 = language code - + Nome della lingua mancante [%1] Check now - + Controlla ora Can't delete last team - + Impossibile eliminare l'ultima squadra You can't delete the last team! - + Non puoi eliminare l'ultima squadra! @@ -2156,15 +2175,15 @@ Select a hedgehog at the beginning of a turn - + Seleziona un riccio all'inizio di un turno Land can not be destroyed by most weapons. - + Il terreno non può essere distrutto dalla maggior parte delle armi. %1 (%2) - + %1 (%2) @@ -2214,7 +2233,7 @@ Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios. - + Missioni giocatore singolo: Impara a giocare nell'allenamento, affina le tue abilità nelle sfide oppure prova a completare gli obiettivi negli scenari. @@ -2261,30 +2280,30 @@ Team - Squadra + Squadra Team highscore: %1 Highest score of a team - + Punteggio massimo: %1 Team lowscore: %1 Lowest score of a team - + Punteggio minimo: %1 Team's top accuracy: %1% Best accuracy of a team (in a challenge) - + Migliore precisione della squadra: %1% Team's best time: %L1 s - + Miglior tempo della squadra: %L1 s Team's longest time: %L1 s - + Tempo più lungo della squadra: %L1 s @@ -2327,12 +2346,12 @@ %1% Video encoding progress. %1 = number - + %1% %1 (%2%) - %3 Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”) - + %1 (%2%) - %3 @@ -2510,20 +2529,20 @@ Enable visual effects such as animated menu transitions and falling stars - + Attiva effetti grafici come le transizioni animate del menu e le stelle cadenti If enabled, Hedgewars adds the date and time in the form "YYYY-MM-DD_hh-mm" for automatically created demos. - + Se attivato, Hedgewars aggiunge la data e l'orario nella forma "YYYY-MM-DD_hh-mm" per i filmati creati automaticamente. Dampen when losing focus Checkbox text. If checked, the in-game audio volume is reduced (=dampened) when the game window loses its focus - + Smorza l'audio quando la finestra passa in background Reduce the game audio volume if the game window has lost its focus - + Riduci il volume di gioco se la finestra di gioco è passata in secondo piano @@ -2610,27 +2629,27 @@ Stereoscopy creates an illusion of depth when you wear 3D glasses. - + Lo stereoscopio crea un illusione di profondità quando indossi gli occhiali 3D. 24 FPS - + 24 FPS 25 FPS - + 25 FPS 30 FPS - + 30 FPS 50 FPS - + 50 FPS 60 FPS - + 60 FPS @@ -2949,20 +2968,20 @@ Stereoscopy - + Stereoscopio Bitrate (Kibit/s) “Kibit/s” is the symbol for 1024 bits per second - + Bitrate (Kibit/s) Loading<br>CAPTCHA ... - + Caricamento<br>CAPTCHA ... Zoom (%) - + Zoom (%) @@ -2981,11 +3000,11 @@ unnamed (%1) - + Senza-nome (%1) Hedgehog %1 - + Riccio %1 @@ -3212,62 +3231,65 @@ Teams - Name already taken - + Nome della squadra già preso The team name '%1' is already taken, so your team has been renamed to '%2'. - + Il nome della squadra '%1' è già preso, quindi la tua squadra è stata rinominata '%2'. Please select a file from the list. - + Perfavore seleziona un file dalla lista. Cannot rename file to %1. - + Impossibile rinominare il file in %1. Cannot delete file %1. - + Impossibile eliminare il file %1. Welcome to Hedgewars - + Benvenuto a Hedgewars 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? - + Benvenuto a Hedgewars! + +Sembra che tu sia nuovo qui. Ti piacerebbe fare delle missioni di allenamento per imparare le basi di Hedgewars prima? Cannot use the weapon scheme '%1'! - + Impossibile utilizzare lo schema delle armi '%1'! The connection to the server is lost. - + La connessione al server è persa. Schemes - Name already taken - + Schemi - Nome già preso A scheme with the name '%1' already exists. Your scheme has been renamed to '%2'. - + Uno schema con il nome '%1' esiste già. Il tuo schema è stato rinominato '%2'. A weapon scheme with the name '%1' already exists. Changes made to the weapon scheme have been discarded. - + Uno schema delle armi con il nome '%1' esiste già. I cambiamenti allo schema delle armi sono stati scartati. Server redirection - + Reindirizzamento del server This server supports secure connections on port %1. Would you like to reconnect securely? - + Il server supporta connessioni sicure sulla porta %1. +Ti piacerebbe riconnettert in maniera sicura? @@ -3401,14 +3423,14 @@ Specify address - + Specifica l'indirizzo QSpinBox Specify the bitrate of recorded videos as a multiple of 1024 bits per second - + Specifica il bitrate dei filmati registrati in multipli di 1024 bits per secondo @@ -3788,83 +3810,83 @@ toggle team bars This refers to the team info bars (name/flag/health) of all teams. These are shown at the bottom center of the screen - + Attiva le barre delle squadre pause / auto skip - + Pausa / salta il turno automaticamente toggle hedgehog tags - + Attiva i tag del riccio change timer - + Cambia timer show mission information - + Mostra informazioni missione clan chat - + Chat di clan unselect weapon - + Deseleziona arma stand still on slippery land - + Rimani immobile su terreno scivoloso change direction without moving - + Cambia direzione senza muoverti switch backwards - + Girati indietro change bounciness - + Cambia il grado del rimbalzo reset zoom to start value - + Resetta lo zoom al valore iniziale set zoom to 100% - + Imposta lo zoom all 100% save map as image - + Salva la mappa come immagine show object information - + Mostra informazioni oggetto change hedgehog tag types - + Cambia il tipo di tag del riccio toggle hedgehog tag translucency - + Imposta l'opacità del tag del riccio toggle HUD - + Attiva HUD backwards jump - + Salto all'indietro screenshot - + Screenshot @@ -3890,43 +3912,43 @@ binds (combination) hold down precise - + Tieni premuto Shift precise + left/right - + Shift + sinistra/destra precise + switch - + Shift + cambia riccio precise + timer - + Shift + timer precise + reset zoom - + Shift + resetta zoom precise + toggle hedgehog tags - + Shift + attiva tag del riccio switch + toggle hedgehog tags - + Cambia riccio + attiva tags del riccio precise + switch + toggle hedgehog tags - + Shift + cambia riccio + attiva tags del riccio high jump (twice) - + Salto alto (due volte) precise + screenshot - + Shift + screenshot @@ -4005,11 +4027,11 @@ Heads-up display: - + HUD: Talk to your clan or all participants: - + Parla al tuo clan o a tutti i partecipanti: @@ -4332,625 +4354,625 @@ D-pad - + D-pad Axis %1 %2 Game controller axis direction. %1 = axis number, %2 = direction - + Asse %1 %2 Button %1 Game controller button. %1 = button number - + Pulsante %1 D-pad %1 %2 Game controller D-pad button. %1 = D-pad number, %2 = direction - + D-pad %1 %2 (Don't use) Special entry in key selection when an action has no control assigned - + (Non usare) Mouse: X1 button - + Mouse: X1 pulsante Mouse: X2 button - + Mouse: X2 pulsante Keypad 0 - + Keypad 0 Keypad 1 - + Keypad 1 Keypad 2 - + Keypad 2 Keypad 3 - + Keypad 3 Keypad 4 - + Keypad 4 Keypad 5 - + Keypad 5 Keypad 6 - + Keypad 6 Keypad 7 - + Keypad 7 Keypad 8 - + Keypad 8 Keypad 9 - + Keypad 9 Keypad . - + Keypad . Keypad / - + Keypad / Keypad * - + Keypad * Keypad - - + Keypad - Keypad + - + Keypad + Keypad Enter - + Keypad Invio PageUp - + PaginaSu PageDown - + PaginaGiù Numlock - + Numlock CapsLock - + CapsLock ScrollLock - + ScrollLock Right Shift - + Shift destro Left Shift - + Shift sinistro Right Ctrl - + Ctrl Destro Left Ctrl - + Ctrl Sinistro Right Alt - + Alt Destro Left Alt - + Alt Sinistro Right GUI Windows key / Command key / Meta key /Super key (right) - + GUI Destro Left GUI Windows key / Command key / Meta key /Super key (left) - + GUI Sinistro (QWERTY) Name of QWERTY US keyboard layout - + (QWERTY) Menu - + Menù credits Programming - + Programmatori Game engine - + Motore di gioco Creator - + Creatore Many engine improvements - + Molti miglioramenti al motore di gioco Gamepad and Lua integration - + Gamepad e integrazione Lua Campaign support - + Curatori della campagna Theme customization improvements - + Miglioramneti alla personalizzazione dei temi Some Pas2C and GLES2 work - + Alcuni Pas2C e GLES2 funzionano Video recording - + Registrazione Video Other improvements - + Altri miglioramenti Map generation - + Generazione mappa Core map generators - + Curatori del generatore centrale delle mappe Perlin maps and other improvements - + Curatori delle mappe perlin e altri miglioramenti Maze maps - + Mappe labirinto Weapons - Armi + Armi Most core weapons - + Curatori della maggior parte delle armi principali Air mine, rubber, others - + Mine aeree, Gomma, altro Drill rocket, ballgun, RC plane - + Razzo penetrante, Sparapalle, RC plane Freezer - + Raggio congelatore Mine number and time game settings - + Impostazioni riguardo il numero di mine e il tempo di gioco Frontend / main menu - + Pagina iniziale / Menù principale Many frontend improvements - + Miglioramenti pagina iniziale Keybinds, feedback, maps and hats interfaces - + Interfacce di Selezione tasti, feedback, mappe e cappelli Login dialogs, other improvements - + Login dialoghi, altri miglioramenti Missions and styles - + Missioni e stili A Classic Fairytale - + Una classica fiaba A Space Adventure - + Una avventura spaziale Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW - + Creato Cattura la bandiera, Modalità costruzione, Controllo, HedgeEditor, Highlander,Racer,Techracer,Gli specialisti,WxW Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance - + Allenamento, prove a tempo e sfide di pratica della mira, Bazooka Battlefield, Tentacle Terror,Big Armory, correzioni di bug e manutenzione Some styles and missions - + Alcuni stili e missioni Battalion - + Battalion Continental supplies - + Continental supplies Teamwork 2 - + Teamwork 2 Climb Home - + Climb Home Portal Mind Challenge - + Portal Mind Challenge Game server - + Server di gioco Ports - + Porte macOS/iPhone port, OpenGL-ES conversion - + macOS/iPhone port, OpenGL-ES conversion Android port - + Porta Android Android netplay, portability abstraction - + Curatori del gioco su network Android, Portabilità WebGL port - + Porta WebGl iPhone/iPad ports - + Porte iPhone/iPad Graphics - Grafica + Grafica General - Generale + Generale Themes - + Temi Nature, Snow, City, Castle, Halloween, Island - + Natura, Neve, Città, Castello, Halloween, Isola Bamboo, EarthRise, BambooPlinko - + Bamboo, EarthRise, BambooPlinko Golf, Hoggywood, Stage - + Golf,Hoggywood,Palco Hoggywood - + Hoggywood Cave, Olympics - + Caverna,Olimpiadi Fruit, Cake - + Frutta,Torta Art - + Arte Beach - + Spiaggia Brick - + Mattoni Hell - + Inferno Jungle - + Giungla Sheep - + Pecore Maps - + Mappe Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree - + Basket, Campo da Basket, Bagno, Flusso di bolle, Amaca,Hedgelove, Hedgewars, Idrante, Funghi, Aereo, Corde, Albero SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle - + SB_Ossa, SB_Cristalli, SB_Erboso, SB_Boschetto, SB_Spettrale, SB_Palme, SB_Shrooms, SB_Tentacolo Bamboo, Blox, Cake, Cogs, EarthRise, Freeway - + Bamboo, Blox, Torta, Ingranaggi, EarthRise, Autostrada Castle, PirateFlag - + Castello, BandieraPirata ShoppaKing, TrophyRace - + Shoppaking, TrophyRace Battlefield - + CampoDiBattaglia CTF_Blizzard - + CTF_Blizzard Cheese - + Formaggio ClimbHome - + ClimbHome Lonely_Island - + Isola_Solitaria Octorama - + Octorama portal - + portale Ruler - + Riga Sticks - + Adesivi Forts - Forti + Forti EvilChicken - + GallinaMalvagia Olympic - + Olimpico Tank - + Carroarmato Snail - + Lumaca SteelTower - + Torred'Acciaio Hats, graves, other - + Cappelli, tombe, altro See CREDITS text file - + Vedi i file di testo CREDITI Sounds - + Suoni Hedgehogs voice - + Voce dei ricci Default_pl, Russian_pl voices - + Voci russe Default Various authors from www.freesound.org (see CREDITS text file) - + Vari autori da www.freesound.org (vedi file di testo CREDITI) Music - Musica + Musica City, Rock, others - + Città, Rock, altri Compost - + Compost EarthRise, oriental, Pirate, snow - + Earthrise, orientale, Pirata, neve Fruit, Jungle - + Frutta. Giungla Nature - + Natura olympics_sd - + Olimpiadi_sd sdmusic (Hitman [sheepluva edit]) - + sdmusic (Hitman [sheepluva edit]) Translations - + Traduzioni Brazilian Portuguese - + Portoghese Brasiliano Bulgarian - + Bulgaro Czech - + Ceco Chinese - + Cinese Finnish - + Finlandese French - + Francese German - + Tedesco Greek - + Greco Italian - + Italiano Japanese - + Giapponese Korean - + Coreano Lithuanian - + Lituano Polish - + Polacco Portuguese - + Portoghese Russian - + Russo Scottish Gaelic - + Scozzese Slovak - + Slovacco Spanish - + Spagnolo Swedish - + Svedese Ukrainian - + Ucraino Special thanks - + Ringraziamenti Speciali Project founder - + Fondatore del progetto @@ -5177,379 +5199,379 @@ The game can't be started with less than two clans! - + Il gioco non può iniziare con meno di due clan! Empty config entry. - + Ingresso di configurazione vuoto. Access denied. - + Accesso negato. You're not the room master! - + Non sei il capostanza! Corrupted hedgehogs info! - + Informazioni sui ricci corrotte! Too many teams! - + Troppe squadre! Too many hedgehogs! - + Troppi ricci! There's already a team with same name in the list. - + C'è gia una squadra con quel nome nell'elenco. Joining not possible: Round is in progress. - + Partecipazione non consentita: Il round è già iniziato. This room currently does not allow adding new teams. - + Al momento questa stanza non consente di aggiungere nuove squadre. Error: The team you tried to remove does not exist. - + Errore: la squadra che hai cercato di rimuovere non esiste. You can't remove a team you don't own. - + Non puoi rimuovere una squadra che non possiedi. 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: $()*+?[]^{|} - + 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: $()*+?[]^{|} A room with the same name already exists. - + Una stanza con lo stesso nome esiste già. /callvote kick: You need to specify a nickname. - + /callvote kick: Devi specificare un nickname. /callvote kick: No such user! - + /callvote kick: Non esiste questo utente! /callvote map: No such map! - + /callvote map: Non esiste una tale mappa! /callvote pause: No game in progress! - + /callvote pause: tale partita non è in corso! /callvote hedgehogs: Specify number from 1 to 8. - + /callvote hedgehogs: Specifica un numero da 1 a 8. 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: $()*+?[]^{|} - + 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: $()*+?[]^{|} No such room. - + Non esiste una tale stanza. Room version incompatible to your Hedgewars version! - + La versione Hedgewars di questa stanza non è compatibile con la tua! Access denied. This room currently doesn't allow joining. - + Accesso negato. Questa stanza non permette partecipazioni. Access denied. This room is for registered users only. - + Accesso negato. Questa stanza è riservata a solo gli utenti iscritti. You are banned from this room. - + Sei stato bannato da questa stanza. Nickname already provided. - + Nickname già fornito. 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: $()*+?[]^{|} - + 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: $()*+?[]^{|} Protocol already known. - + Protocollo già conosciuto. Bad number. - + Brutto numero. There's no voting going on. - + Non c'è nessuna votazione in corso. You already have voted. - + Hai già votato. Your vote has been counted. - + Il tuo voto è riconosciuto. Voting closed. - + Votazione chiusa. Pause toggled. - + Pausa attivata. Voting expired. - + Votazione scaduta. hedgehogs per team: - + Ricci per squadra: /info <player>: Show info about player - + /info <player>: Mostra informazioni sul giocatore /me <message>: Chat action, e.g. '/me eats pizza' becomes '* Player eats pizza' - + /me <message>: Chat action, e.g. '/me eats pizza' becomes '*Player eats pizza' /rnd: Flip a virtual coin and reply with 'heads' or 'tails' - + /rnd: Tira una moneta virtuale e rispone con testa o croce /rnd [A] [B] [C] [...]: Reply with a random word from the given list - + /rnd [A] [B] [C] [...]: Risponde con una delle parole nella lista in modo casuale /watch <id>: Watch a demo stored on the server with the given ID - + /watch <id>: Guarda un filmato presente nel server con questo ID /help: Show chat command help - + /help: Mostra un aiuto per i comandi di chat /callvote [arguments]: Start a vote - + /callvote [arguments]: Inizia una votazione /vote <yes/no>: Vote 'yes' or 'no' for active vote - + /vote <yes/no>: Vota 'si' o 'no' per la votazione corrente /delegate <player>: Surrender room control to player - + /delegate <player>: Cedi il controllo della stanza al giocatore /maxteams <N>: Limit maximum number of teams to N - + /maxteams <N>: Imposta il limite massimo di squadre a N /global <message>: Send global chat message which can be seen by everyone on the server - + /global <message>: Invia un messaggio globale che può essere visto da tutti nel server /registered_only: Toggle 'registered only' state. If enabled, only registered players can join server - + /registered_only: Abilita l'opzione solo iscritti. Se attivato, solo i giocatori registrati potranno partcipare al server /super_power: Activate your super power. With it you can enter any room and are protected from kicking. Expires when you leave server - + /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 /stats: Query server stats - + /stats: Richiedi le statistiche del server /force <yes/no>: Force vote result for active vote - + /force <yes/no>: Forza il risultato della votazione in corso /fix: Force this room to stay open when it is empty - + /fix: Imponi a questa stanza di rimanere aperta anche quando è vuota /unfix: Undo the /fix command - + /unfix: Annulla il comando /fix List of lobby chat commands: - + Lista dei comandi di chat per la lobby: List of room chat commands: - + Lista dei comandi di chat per la stanza: Commands for server admins only: - + Comandi per gli admins: room - + stanza lobby - + lobby (playing) - + (giocando) (spectating) - + (guardando) Player is not online. - + Il giocatore non è online. /force: Please use 'yes' or 'no'. - + /force: Perfavore usa 'yes' o 'no'. /vote: Please use 'yes' or 'no'. - + /vote: Perfavore usa 'yes' or 'no'. Kicked - + Cacciato This server only allows registered users to join. - + Questo server ammette solo utenti registrati. heads - + teste tails - + code This server does not support replays! - + Questo server non supporta i replay! /greeting [message]: Set or clear greeting message to be shown to players who join the room - + /greeting [message]: Imposta il messaggio di benvenuto che verrà mostrato ai giocatori che entrano in stanza /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map - + /save <config ID> <config name>: Aggiunge a questa stanza l'opzione votabile di configurazione con /callvote map /delete <config ID>: Delete a votable room configuration - + /delete <config ID>: Elimina l'opzione votabile di configurazione /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file - + /saveroom <file name>: Salva tutte le opzioni di configurazione della mappa e i messaggi di benvenuto per questa stanza in un file /loadroom <file name>: Load votable room configurations (and greeting) from a file - + /loadroom <file name>: Carica l'opzione di configurazione della mappa e il messaggio di benvenuto dal file Super power activated. - + Super potere attivato. Unknown command or invalid parameters. Say '/help' in chat for a list of commands. - + Comando sconosciuto o parametri illegali. Scrivi '/help' nella chat per la lista dei comandi di chat. You can't kick yourself! - + Non puoi cacciarti da solo! You can't kick the only other player! - + Non puoi cacciare l'unico altro giocatore! The player is not in your room. - + Il giocatore non è nella tua stanza. This player is protected from being kicked. - + Questo giocatore è protetto dall'essere cacciato. You're not the room master or a server admin! - + Non sei nè il capostanza nè un admin del server! You're already the room master. - + Sei già il capostanza. Greeting message cleared. - + Messaggio di benvenuto cancellato. Greeting message set. - + Messaggio di benvenuto impostato. /callvote kick: This is only allowed in rooms without a room master. - + /callvote kick: Questa opzione è valida solo nelle stanze senza un capostanza. /callvote map: No maps available. - + /callvote map: Nessuna mappa disponibile. You're the new room master! - + Sei il nuovo capostanza! /quit: Quit the server - + /quit: Esci dal server This command is only available in the lobby. - + Questo comando non è disponibile nella lobby. This command is only available in rooms. - + Questo comando è disponibile solo nelle stanze. This server no longer allows unregistered players to join. - + Il server non ammette più utenti non registrati di partecipare. This server now allows unregistered players to join. - + Il server non ammette gli utenti non registrati di partecipare. Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player> - + Comandi di votazione disponibili:: hedgehogs <number>, pause, newseed, map <name>, kick <player> Please confirm server restart with '/restart_server yes'. - + Perfavore conferma il riavvio del server con '/restart_server yes'. Warning! Room name change flood protection activated - + Attenzione! Attivata la protezione per l'inondazione di messagi diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/hedgewars_ru.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 @@ Credits - + Титры Other people - + Другие люди %1 (alias %2) - + %1 (под псевдонимом %2) %1 &lt;%2&gt; Part of credits. %1: Contributor name. %2: E-mail address - + %1 &lt;%2&gt; %1: %2 Part of credits. %1: Description of contribution. %2: Contributor name - + %1: %2 %1: %2 &lt;%3&gt; Part of credits. %1: Description of contribution. %2: Contributor name. %3: E-mail address - + %1: %2 &lt;%3&gt; Extended Credits - + Больше титров An extended credits list can be found in the CREDITS text file. - + Больше титров можно найти в файле CREDITS <a href="https://visualstudio.microsoft.com">VC++</a>: %1 - + <a href="https://visualstudio.microsoft.com">VC++</a>: %1 Unknown Compiler: %1 - + Неизвестный компилятор: %1 @@ -602,10 +602,6 @@ Пожалуйста, попробуйте снова через несколько секунд. - Guest - Гость - - Room password Пароль комнаты @@ -864,15 +860,15 @@ Scale size of the drawn map - + Масштаб размера нарисованной карты Load - Загрузить + Загрузить Edit - + Редактировать @@ -997,7 +993,14 @@ Last engine message: %1 - + Произошла фатальная ошибка во время обработки видеозаписи! Видео не может быть сохранено. + +Как вариант, вы можете попробовать сбросить настройки видеозаписи Hedgewars до стандартных. + +Чтобы сообщить об этой ошибке, пожалуйста, нажмите кнопку 'Отзыв' в главном меню! + +Последнее сообщение движка: +%1 @@ -1041,7 +1044,7 @@ Warning: The same key is assigned multiple times! - + Предупреждение: Одна и так же клавиша назначена несколько раз! @@ -1448,10 +1451,10 @@ (%1 %2) 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” - - - - + + (%1 %2) + (%1 %2) + (%1 %2) @@ -1477,27 +1480,27 @@ (%1 point(s)) Number of points in stats screen, written after the team name - - - - + + (%1 очко) + (%1 очка) + (%1 очков) (%L1 second(s)) Time in seconds - - - - + + (%L1 секунда) + (%L1 секунды) + (%L1 секунд) (%1 crate(s)) - - - - + + (%1 ящик) + (%1 ящика) + (%1 ящиков) @@ -1597,19 +1600,19 @@ PageNet Connect to the selected server - + Подключиться к выбранному серверу Update the list of servers - + Обновить список серверов Specify the address and port number of a known server and connect to it directly - + Укажите адрес и номер порта известного сервера чтобы подключиться к нему напрямую Start private server - Запустить личный сервер + Запустить личный сервер @@ -2207,10 +2210,6 @@ Кампания - Practice your skills in a range of training missions - Тренировка мастерства в тренировочных миссиях - - Watch recorded demos Смотреть записанные демки @@ -2220,7 +2219,7 @@ Singleplayer missions: Learn how to play in the training, practice your skills in challenges or try to complete goals in scenarios. - + Однопользовательские миссии: Научитесь играть в тренировках, улучшайте свои навыки в испытаниях или попытайтесь выполнить цели в сценариях. @@ -2267,30 +2266,30 @@ Team - Команда + Команда Team highscore: %1 Highest score of a team - + Лучший счёт команды: %1 Team lowscore: %1 Lowest score of a team - + Худший счёт команды: %1 Team's top accuracy: %1% Best accuracy of a team (in a challenge) - + Наибольшая точность команды: %1% Team's best time: %L1 s - + Лучшее время команды: %L1 с Team's longest time: %L1 s - + Худшее время команды: %L1 с @@ -2340,12 +2339,12 @@ %1% Video encoding progress. %1 = number - + %1% %1 (%2%) - %3 Video encoding list entry. %1 = file name, %2 = percent complete, %3 = video operation type (e.g. “encoding”) - + %1 (%2%) - %3 @@ -2955,7 +2954,7 @@ Zoom (%) - + Масштаб (%) @@ -3216,12 +3215,13 @@ Server redirection - + Перенаправление сервера This server supports secure connections on port %1. Would you like to reconnect securely? - + Этот сервер поддерживает безопасное соединение на порту %1. +Не желаете ли переподсоединиться безопасно? @@ -3262,10 +3262,6 @@ Загрузить - Specify - Указать - - default по умолчанию @@ -3343,7 +3339,7 @@ Specify address - + Указать адрес @@ -3647,10 +3643,6 @@ таймер на 5 сек - capture - снимок - - quit выход @@ -3703,16 +3695,12 @@ уменьшить - reset zoom - сбросить увеличение - - long jump прыжок в длину high jump - прыжок в высоту + прыжок вверх slot 10 @@ -3761,59 +3749,59 @@ unselect weapon - + убрать оружие stand still on slippery land - + стоять спокойно на скользкой поверхности change direction without moving - + изменить направление без движения switch backwards - + переключить назад change bounciness - + изменить отскок reset zoom to start value - + сбросить масштаб до первоначального set zoom to 100% - + установить масштаб в 100% save map as image - + сохранить карту, как изображение show object information - + показать информацию об объекте change hedgehog tag types - + изменить тип ярлыков над ёжиками toggle hedgehog tag translucency - + вкл/выкл прозрачность ярлыков над ёжиками toggle HUD - + вкл/выкл информационную панель (HUD) backwards jump - + прыжок назад screenshot - + снимок экрана @@ -3839,43 +3827,43 @@ binds (combination) hold down precise - + зажмите точность precise + left/right - + точность + лево/право precise + switch - + точность + переключить precise + timer - + точность + таймер precise + reset zoom - + точность + сброс масштаба precise + toggle hedgehog tags - + точность + вкл ярлыки над ёжиками switch + toggle hedgehog tags - + переключить + вкл ярлыки над ёжиками precise + switch + toggle hedgehog tags - + точность + переключить + вкл ярлыки над ёжиками high jump (twice) - + прыжок вверх (дважды) precise + screenshot - + точность + снимок экрана @@ -4032,98 +4020,6 @@ Влево - Right shift - Правый shift - - - Left shift - Левый shift - - - Right ctrl - Правый ctrl - - - Left ctrl - Левый ctrl - - - Right alt - Правый alt - - - Left alt - Левый alt - - - Numpad 0 - Цифровая клавиатура 0 - - - Numpad 1 - Цифровая клавиатура 1 - - - Numpad 2 - Цифровая клавиатура 2 - - - Numpad 3 - Цифровая клавиатура 3 - - - Numpad 4 - Цифровая клавиатура 4 - - - Numpad 5 - Цифровая клавиатура 5 - - - Numpad 6 - Цифровая клавиатура 6 - - - Numpad 7 - Цифровая клавиатура 7 - - - Numpad 8 - Цифровая клавиатура 8 - - - Numpad 9 - Цифровая клавиатура 9 - - - Numpad . - Цифровая клавиатура . - - - Numpad / - Цифровая клавиатура / - - - Numpad * - Цифровая клавиатура * - - - Numpad - - Цифровая клавиатура - - - - Numpad + - Цифровая клавиатура + - - - Enter - Enter - - - Equals - = - - Insert Insert @@ -4136,34 +4032,6 @@ End - Page up - Page up - - - Page down - Page down - - - Num lock - Num lock - - - Caps lock - Caps lock - - - Scroll lock - Scroll lock - - - Right meta - Правая метаклавиша - - - Left meta - Левая метаклавишa - - A button Кнопка A @@ -4250,7 +4118,7 @@ Axis %1 %2 Game controller axis direction. %1 = axis number, %2 = direction - + Ось %1 %2 Button %1 @@ -4260,610 +4128,610 @@ D-pad %1 %2 Game controller D-pad button. %1 = D-pad number, %2 = direction - + Крестовина %1 %2 (Don't use) Special entry in key selection when an action has no control assigned - + Не использовать Mouse: X1 button - + Мышь: клавиша X1 Mouse: X2 button - + Мышь: клавиша X2 Keypad 0 - + Цифр. блок 0 Keypad 1 - + Цифр. блок 1 Keypad 2 - + Цифр. блок 2 Keypad 3 - + Цифр. блок 3 Keypad 4 - + Цифр. блок 4 Keypad 5 - + Цифр. блок 5 Keypad 6 - + Цифр. блок 6 Keypad 7 - + Цифр. блок 7 Keypad 8 - + Цифр. блок 8 Keypad 9 - + Цифр. блок 9 Keypad . - + Цифр. блок . Keypad / - + Цифр. блок / Keypad * - + Цифр. блок * Keypad - - + Цифр. блок - Keypad + - + Цифр. блок + Keypad Enter - + Цифр. блок Enter PageUp - + PageUp PageDown - + PageDown Numlock - + Numlock CapsLock - + CapsLock ScrollLock - + ScrollLock Right Shift - + Правый Shift Left Shift - + Левый Shift Right Ctrl - + Правый Ctrl Left Ctrl - + Левый Ctrl Right Alt - + Правый Alt Left Alt - + Левый Alt Right GUI Windows key / Command key / Meta key /Super key (right) - + Правая мета-клавиша Left GUI Windows key / Command key / Meta key /Super key (left) - + Левая мета-клавиша (QWERTY) Name of QWERTY US keyboard layout - + (QWERTY) Menu - + Меню credits Programming - + Программирование Game engine - + Игровой движок Creator - + Создатель Many engine improvements - + Множество улучшений движка Gamepad and Lua integration - + Интеграция геймпада и Lua Campaign support - + Поддержка кампаний Theme customization improvements - + Улучшения изменения тем Some Pas2C and GLES2 work - + Некоторая работа над Pas2C и GLES2 Video recording - + Видеозапись Other improvements - + Другие улучшения Map generation - + Генерация карт Core map generators - + Основные генераторы карт Perlin maps and other improvements - + Перлиновские карты и другие улучшения Maze maps - + Карты лабиринты Weapons - Оружие + Оружие Most core weapons - + Большинство основного оружия Air mine, rubber, others - + Воздушная мина, батут и другое Drill rocket, ballgun, RC plane - + Сверлящая ракета, шаромёт, радиоуправляемый самолётик Freezer - + Замораживатель Mine number and time game settings - + Число мин и настройки игрового времени Frontend / main menu - + Главное меню Many frontend improvements - + Множество улучшений главного меню Keybinds, feedback, maps and hats interfaces - + Привязки клавиш, отзыв, интерфейс карт и шапок Login dialogs, other improvements - + Диалоги логина и другие улучшения Missions and styles - + Миссии и стили A Classic Fairytale - + Классическая сказка A Space Adventure - + Космическое приключение Created Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW - + Capture the Flag, Construction Mode, Control, HedgeEditor, Highlander, Racer, TechRacer, The Specialists, WxW Training, time-trial and target practice challenges, Bazooka Battlefield, Tentacle Terror, Big Armory, bugfixes and maintenance - + Тренировки, испытания практики на время и точность, Bazooka Battlefield, Tentacle Terror, Big Armory, исправления ошибок и поддержка Some styles and missions - + Некоторые стили и миссии Battalion - + Battalion Continental supplies - + Continental supplies Teamwork 2 - + Teamwork 2 Climb Home - + Climb Home Portal Mind Challenge - + Portal Mind Challenge Game server - + Игровой сервер Ports - + Портирование macOS/iPhone port, OpenGL-ES conversion - + Порт на macOS/iPhone, OpenGL-ES преобразование Android port - + Порт на Android Android netplay, portability abstraction - + Сетвая игра на Android, абстракция портирования WebGL port - + Порт на WebGL iPhone/iPad ports - + Порты на iPhone/iPad Graphics - Графика + Графика General - Основные настройки + Основное Themes - + Темы Nature, Snow, City, Castle, Halloween, Island - + Nature, Snow, City, Castle, Halloween, Island Bamboo, EarthRise, BambooPlinko - + Bamboo, EarthRise, BambooPlinko Golf, Hoggywood, Stage - + Golf, Hoggywood, Stage Hoggywood - + Hoggywood Cave, Olympics - + Cave, Olympics Fruit, Cake - + Fruit, Cake Art - + Art Beach - + Beach Brick - + Brick Hell - + Hell Jungle - + Jungle Sheep - + Sheep Maps - + Карты Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree - + Basketball, BasketballField, Bath, Bubbleflow, Hammock, Hedgelove, Hedgewars, Hydrant, Mushrooms, Plane, Ropes, Tree SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle - + SB_Bones, SB_Crystal, SB_Grassy, SB_Grove, SB_Haunty, SB_Oaks, SB_Shrooms, SB_Tentacle Bamboo, Blox, Cake, Cogs, EarthRise, Freeway - + Bamboo, Blox, Cake, Cogs, EarthRise, Freeway Castle, PirateFlag - + Castle, PirateFlag ShoppaKing, TrophyRace - + ShoppaKing, TrophyRace Battlefield - + Battlefield CTF_Blizzard - + CTF_Blizzard Cheese - + Cheese ClimbHome - + ClimbHome Lonely_Island - + Lonely_Island Octorama - + Octorama portal - + portal Ruler - + Ruler Sticks - + Sticks Forts - Форты + Форты EvilChicken - + EvilChicken Olympic - + Olympic Tank - + Tank Snail - + Snail SteelTower - + SteelTower Hats, graves, other - + Шапки, надгробья и другое See CREDITS text file - + Смотрите файл CREDITS Sounds - + Звуки Hedgehogs voice - + Голоса ёжиков Default_pl, Russian_pl voices - + Default_pl, Russian_pl голоса Various authors from www.freesound.org (see CREDITS text file) - + Различные авторы с www.freesound.org (смотрите файл CREDITS) Music - Музыка + Музыка City, Rock, others - + City, Rock, другое Compost - + Compost EarthRise, oriental, Pirate, snow - + EarthRise, oriental, Pirate, snow Fruit, Jungle - + Fruit, Jungle Nature - + Nature olympics_sd - + olympics_sd sdmusic (Hitman [sheepluva edit]) - + sdmusic (Hitman [sheepluva edit]) Translations - + Переводы Brazilian Portuguese - + Бразильский, Португальский Bulgarian - + Болгарский Czech - + Чешский Chinese - + Китайский Finnish - + Финский French - + Французский German - + Немецкий Greek - + Греческий Italian - + Итальянский Japanese - + Японский Korean - + Корейский Lithuanian - + Литовский Polish - + Польский Portuguese - + Португальский Russian - + Русский Scottish Gaelic - + Шотландский Гэльский Slovak - + Словацкий Spanish - + Испанский Swedish - + Шведский Ukrainian - + Украинский Special thanks - + Отдельные благодарности Project founder - + Основатель проекта @@ -4874,7 +4742,7 @@ No checker rights - + Нет прав для проверки Authentication failed @@ -4882,7 +4750,7 @@ 60 seconds cooldown after kick - + 60 секунд отдыха после кика kicked @@ -4937,10 +4805,6 @@ /maxteams: укажите число от 2 до 8 - Available callvote commands: kick <nickname>, map <name>, pause, newseed, hedgehogs - Доступные для голосования команды: kick <nickname>, map <name>, pause, newseed, hedgehogs - - The game can't be started with less than two clans! Игра не может быть начата пока не будет как минимум две команды! @@ -5214,27 +5078,23 @@ /greeting [message]: Set or clear greeting message to be shown to players who join the room - /greeting [сообщение]: Поставить или очистить сообщение, показываемое игрокам, которые присоединяются к комнате + /greeting [сообщение]: Поставить или очистить приветствие игрокам, которые присоединяются к комнате /save <config ID> <config name>: Add current room configuration as votable choice for /callvote map - + /save <config ID> <имя конфигаe>: Добавить текущую конфигурацию комнаты, как вариант голосования для /callvote карты /delete <config ID>: Delete a votable room configuration - + /delete <config ID>: Удалить конфигурацию комнаты из голосования /saveroom <file name>: Save all votable room configurations (and the greeting) of this room into a file - + /saveroom <имя файла>: Сохранить все конфигурации комнаты (и приветствие) для голосования в файл /loadroom <file name>: Load votable room configurations (and greeting) from a file - - - - 'Registered only' state toggled. - Режим 'только для зарегистрированных' переключён + /loadroom <имя файла>: Загрузить конфигурацию комнат (и приветствия) для голосования из файла Super power activated. @@ -5250,7 +5110,7 @@ You can't kick the only other player! - + Вы не можете кикнуть единственного другого игрока! The player is not in your room. @@ -5302,23 +5162,23 @@ This server no longer allows unregistered players to join. - + Этот сервер больше не позволяет присоединяться незарегистрированным игрокам. This server now allows unregistered players to join. - + Этот сервер теперь позволяет присоединяться незарегистрированным игрокам. Available callvote commands: hedgehogs <number>, pause, newseed, map <name>, kick <player> - + Доступные команды голосования: hedgehogs <number>, pause, newseed, map <name>, kick <player> Please confirm server restart with '/restart_server yes'. - + Пожалуйста, подтвердите перезапуск сервера с помощью '/restart_server yes'. Warning! Room name change flood protection activated - + Внимание! Включена защита от частой смены названия комнаты diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/hedgewars_zh_TW.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 @@ Load - 讀取 + 讀取 Edit - + 編輯 @@ -1078,7 +1078,7 @@ Warning: The same key is assigned multiple times! - + 警告! 同一個按鍵被重複分配 @@ -2947,7 +2947,7 @@ Displayed tags above hogs and translucent tags - 刺蝟頭上顯示的標籤和半透明的標籤 + 刺蝟頭上的標示 World Edge @@ -2989,7 +2989,7 @@ Zoom (%) - + 畫面縮放(%) @@ -3299,12 +3299,13 @@ Server redirection - + 伺服器重定向 This server supports secure connections on port %1. Would you like to reconnect securely? - + 這個伺服器在端口%1支援加密連線。 +你要改用這個端口嗎? @@ -3829,7 +3830,7 @@ toggle team bars This refers to the team info bars (name/flag/health) of all teams. These are shown at the bottom center of the screen - 切換隊伍資訊欄 + 隊伍資訊欄開關 pause / auto skip @@ -3837,7 +3838,7 @@ toggle hedgehog tags - 切換刺蝟標示 + 刺蝟標示開關 change timer @@ -3857,55 +3858,55 @@ stand still on slippery land - + 在滑溜的地面停住 change direction without moving - + 定點轉向 switch backwards - + 反向切換 change bounciness - + 改變反彈力度 reset zoom to start value - + 重置縮放率 set zoom to 100% - + 調整縮放率為100% save map as image - + 保存地圖 show object information - + 物品資訊開關 change hedgehog tag types - + 刺蝟標示樣式調整 toggle hedgehog tag translucency - + 刺蝟標示半透明開關 toggle HUD - + 抬頭顯示開關 backwards jump - + 向後跳 screenshot - + 擷圖 @@ -3931,43 +3932,43 @@ binds (combination) hold down precise - + 壓住 精細瞄準 precise + left/right - + 精細瞄準 + 左/右 precise + switch - + 精細瞄準 + 切換 precise + timer - + 精細瞄準 + 定時控制 precise + reset zoom - + 精細瞄準 + 重置縮放率 precise + toggle hedgehog tags - + 精細瞄準 + 刺蝟標示開關 switch + toggle hedgehog tags - + 切換 + 刺蝟標示開關 precise + switch + toggle hedgehog tags - + 精細瞄準 + 切換 + 隊伍資訊欄開關 high jump (twice) - + 跳高(兩次) precise + screenshot - + 精細瞄準 + 擷圖 @@ -4026,7 +4027,7 @@ Take a screenshot: - 截圖: + 擷取螢幕畫面: Toggle labels above hedgehogs: @@ -4385,138 +4386,138 @@ Mouse: X1 button - + 滑鼠:X1鍵 Mouse: X2 button - + 滑鼠:X2鍵 Keypad 0 - + 數字小鍵盤 0 Keypad 1 - + 數字小鍵盤 1 Keypad 2 - + 數字小鍵盤 2 Keypad 3 - + 數字小鍵盤 3 Keypad 4 - + 數字小鍵盤 4 Keypad 5 - + 數字小鍵盤 5 Keypad 6 - + 數字小鍵盤 6 Keypad 7 - + 數字小鍵盤 7 Keypad 8 - + 數字小鍵盤 8 Keypad 9 - + 數字小鍵盤 9 Keypad . - + 數字小鍵盤 . Keypad / - + 數字小鍵盤 / Keypad * - + 數字小鍵盤 * Keypad - - + 數字小鍵盤 - Keypad + - + 數字小鍵盤 + Keypad Enter - + 數字小鍵盤 Enter PageUp - + PageDown - + Numlock - + CapsLock - + ScrollLock - + Right Shift - + 右Shift Left Shift - + 左Shift Right Ctrl - + 右Ctrl Left Ctrl - + 左Ctrl Right Alt - + 右Alt Left Alt - + 左Alt Right GUI Windows key / Command key / Meta key /Super key (right) - + 右Windows鍵 Left GUI Windows key / Command key / Meta key /Super key (left) - + 左Windows鍵 (QWERTY) Name of QWERTY US keyboard layout - + (QWERTY) Menu - + 菜單鍵 @@ -5542,7 +5543,7 @@ Warning! Room name change flood protection activated - + 警告! 避免修改房間名氾濫的防護機制被啟動 diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/hu.txt --- 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 : A szöveg beszédbuborékba kerül a következő támadásnál +06:18=/hta : A szöveg gondolatbuborékba kerül a következő támadásnál +06:19=/hya : 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 : A szoba csevegési parancsainak listázása +06:28=Nem vagy online! diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/ru.txt --- 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=Вы не в сети! diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/tips_hu.xml --- /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 @@ + + + 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. + 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. + 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! + 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! + Ha nem szeretnéd, hogy valaki más lecsapjon a választott becenevedre a hivatalos kiszolgálón, regisztrálj fiókot a https://www.hedgewars.org/ címen! + 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. + 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. + 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! + 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! + A Hedgewars egy szabad szoftver (nyílt forráskódú), amit a szabadidőnkben fejlesztünk. Nyugodtan oszd meg családoddal, barátaiddal is! + 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 #hedgewars csatornán találkozhatsz. + Időről időre hivatalos bajnokságok indulnak. A közelgő eseményeket pár nappal előre bejelentjük a https://www.hedgewars.org/ webhelyen. + A Hedgewars sok nyelven elérhető. Ha a te nyelved fordítása hiányzik vagy elavult, nyugodtan keress minket! + A Hedgewars számos operációs rendszerre elérhető, többek között Microsoft Windowsra, macOS-re és GNU/Linuxra is. + 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! + Ha gamepadeket szeretnél hozzárendelni csapatokhoz, még a játék indítása előtt csatlakoztasd azokat a géphez. + É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. + 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. + 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. + Nyitottak vagyunk a javaslatokra és az építő kritikára. Ha valami nem tetszik, vagy van egy remek ötleted, ne tartsd magadban! + 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! + 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! + 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. + 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. + A játék készítése során egyetlen sünnek sem esett bántódása. + Háromféle ugrás van. A [magasugrás] kétszeri lenyomása egy igen magas, hátrafelé irányú ugrást eredményez. + 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. + 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. + A legtöbb fegyver vízbe esve nem működik. Kivétel például a méhecske és a torta. + A pálpusztai sajt csak kicsit robban. De a szaga, amit elvisz a szél, sok sünt tud egyszerre megmérgezni. + 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. + 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! + 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. + A kalapácsot a legjobb hídon vagy gerendán használni. Akire lecsapsz, az alatt a padló is beszakad. + 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. + 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. + A lángszóró egy fegyver, de alagutat is lehet vele ásni. + 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. + Tetszik a Hedgewars? Légy rajongónk a Facebookon, vagy kövess minket a Twitteren! + 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. + Rendszeresen frissítsd a videokártyád illesztőprogramjait, hogy elkerüld a játék közbeni problémákat. + 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! + 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. + 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! + A szerelem forró! A csábítással felolvaszthatod a lefagyasztott sünöket. + Ha egy hordó füstölög, akkor annak már nincs sok hátra, és kis sérüléstől is felrobbanhat. + 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. + 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. + 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. + Nemcsak a sünöket lehet elütni, elcsapni és földbe döngölni. Semmi sem állhat az utadba! + Hacsak másként nincs beállítva, az aknák 3 másodperc után robbannak. + 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. + Király módban az uralkodó minden körben sérül, ha már nincs alattvaló a csapatban. + Az ostor a vékonyabb falakon át is eléri a sünöket, tárgyakat. + Minél gyorsabban repül a bárd, annál nagyobbat sebez. + A tortát ledobhatod szakadék széléről is, de nagyon a szélén kell állnod, úgyhogy csak óvatosan! + 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. + Ne állj meg egy jeges lejtőn, mert lecsúszol. Esetleg lenyomhatod a [pontos célzás]t. + 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ó. + 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! + 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! + Ha ügyesen csinálod, elüthetsz egy sünt pusztán azzal, hogy kiugrasz alóla. + 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. + Amíg a sünöd a levegőben van, nem találják el a lövedékek. + 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. + Az elsősegélycsomaggal meggyógyíthatod a mérgezett sünödet. + A csomagokat felveheted az RC repülővel, a Shoryukennel, a légkalapáccsal és a Kamikazéval is. + Vigyázz, nehogy felrobbantsd magad, miközben a fúrópajzzsal megközelítesz egy csomagot. + 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. + 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! + A légi aknák negyedannyi idő után robbannak, mint a rendes aknák. + 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. + Figyelj a szélre, mert a lángokat és egyes lőszereket elfújja. + A fúrópajzzsal odébb tolhatod a sünöket és a hosszú időzítésű aknákat. + Ha nekimégy a fúrópajzzsal egy hordónak, abból nagy baj lehet. + 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. + + 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. + + + 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. + + + 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. + + diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Locale/tips_ru.xml --- 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 @@ Выберите тот же цвет команды, что и у друга, чтобы играть в союзе. Вы будете управлять своими ёжиками, но выиграете или проиграете вместе. Некоторые виды оружия наносят небольшой урон, но могут наносить больший урон в правильной ситуации. Попробуйте использовать пистолет Дезерт Игл, чтобы столкнуть несколько ёжиков в воду. - Если вы не уверены в том, что хотите сделать и не хотите тратить снаряды, пропустите ход. Но не теряйте много времени, так как смерть неизбежна! - Если вы хотите предотвратить использование вашего псевдонима другими игроками на официальном игровом сервере, зарегистрируйтесь на https://www.hedgewars.org/. + Если у вас нет идей как действовать, и вы не хотите тратить снаряды, пропустите ход. Но не теряйте много времени, так как смерть неизбежна! + Хотите сохранить верёвку? Отпустите её во время полёта и выстрелите ей снова. Пока вы не коснётесь земли или не промахнётесь выстрелом, вы можете её использовать сколько угодно! + Если вы хотите предотвратить использование вашего псевдонима другими игроками на официальном игровом сервере, зарегистрируйтесь на https://www.hedgewars.org/. Наскучила обычная игра? Попробуйте миссии, имеющие различные виды сценариев. - По умолчанию игры всегда записывает последнюю игру в виде демки. Выберите "Локальную игру" и нажмите кнопку "Демки" в правом нижнем углу, чтобы проиграть запись. - Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если у вас возникают вопросы, задавайте их на нашем форуме, но пожалуйста, не ожидайте круглосуточной поддержки! + По умолчанию Hedgewars всегда записывает последнюю игру в виде демки. Выберите "Локальную игру" и нажмите кнопку "Демки" в правом нижнем углу, чтобы проиграть запись. + Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если у вас возникают вопросы, задайте их на нашем форуме или посетите наш IRC канал! Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если вам понравилась игра, помогите нам денежным вознаграждением или вкладом в виде вашей работы! Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Распространяйте его среди друзей и членов семьи! - Время от времени проводятся официальные турниры. Предстоящие события анонсируются на https://www.hedgewars.org/ за несколько дней. - Hedgewars доступен на многих языках. Если перевод на ваш язык отсутствует или устарел, сообщите нам! - Hedgewars запускается на множестве различных операционных систем, включая Microsoft Windows, Mac OS X и Linux. + Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время в своё удовольствие! Встретиться с разработчиками можно тут #hedgewars! + Время от времени проводятся официальные турниры. Предстоящие события анонсируются на https://www.hedgewars.org/ за несколько дней. + Hedgewars доступен на многих языках. Если русский перевод устарел или содержит ошибки, сообщите нам или последнему переводчику в списке! + Hedgewars запускается на множестве различных операционных систем, включая Microsoft Windows, Mac OS и Linux. Помните, что у вас есть возможность создать собственную игру локально или по сети. Вы не ограничены кнопкой "Простая игра". + Подсоедините один или больше джойстиков перед запуском игры, чтобы получить возможность настроить их для управления командами. Играя, не забывайте делать небольшой перерыв хотя бы раз в час. Если ваша видеокарта не поддерживает ускорение OpenGL, попробуйте включить опцию "низкое качество", чтобы улучшить производительность. + Если ваша видеокарта не поддерживает ускорение OpenGL, попробуйте обновить драйверы видеокарты. Мы открыты для предложений и конструктивной критики. Если вам что-то не понравилось или у вас появилась отличная идея, сообщите нам! Играя по сети, будьте особенно вежливы и всегда помните, что с вами или против вас могут играть дети! Особые настройки игры "Вампиризм" и "Карма" дают возможность выработать совершенно новую тактику. Попробуйте их! - Не следует устанавливать Hedgewars на компьютеры, не принадлежащие вам (в школе, на работе, в университете и т.п.). Не забудь спросить разрешения у ответственного лица! + Не следует устанавливать Hedgewars на компьютеры, не принадлежащие вам (в школе, на работе, в университете и т.п.). Не забудьте спросить разрешения у ответственного лица! Hedgewars может отлично подойти для коротких матчей на перерывах. Просто не добавляйте слишком много ёжиков и не играйте на больших картах. Также можно уменьшить время или количество начального здоровья. При подготовке игры не пострадал ни один ёж. - Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если кто-то продал вам игру, потребуйте возврат денег! - Подсоедините один или несколько геймпадов перед запуском игры, и вы сможете настроить их для управления командами. - Если вы хотите предотвратить использование вашего псевдонима другими игроками на официальном игровом сервере, зарегистрируйтесь на https://www.hedgewars.org/. - Если ваша видеокарта не поддерживает ускорение OpenGL, попробуйте обновить видеодрайвер. Есть три вида прыжков. Нажмите [прыжок вверх] дважды, чтобы сделать очень высокий прыжок назад. - Боитесь упасть с обрыва? Нажмите левый shift, чтобы повернуться влево или вправо, не передвигаясь. - Некоторые виды оружия требуют особых стратегий или просто много тренировок, поэтому не разочаровывайтесь в инструменте, если разок промахнётесь. - Большинство видов оружия не сработают при попадании в воду. Пчела и Торт - это исключения. + Боитесь упасть с обрыва? Нажмите [точность], чтобы повернуться [влево] или [вправо], не передвигаясь. + Некоторые виды оружия требуют особых стратегий или просто большого опыта, поэтому не разочаровывайтесь в инструменте, если разок промахнётесь. + Большинство видов оружия тонет в воде. Пчела и Торт - это исключения. Старый Лимбургер взрывается несильно. Однако ветер, несущий зловонное облако, может отравить несколько ёжиков за раз. Фортепьяновый удар - это наиболее мощный из ударов с воздуха. При использовании вы потеряете ёжика, в этом его недостаток. - Мины-липучки - отличный инструмент для создания небольших цепных реакций, от которых ёж попадет в неприятную ситуацию... или в воду. - Молот наиболее эффективен, когда используется на мосту или балке. Ударенный ёж пролетит сквозь землю. - Если вы застряли позади ёжика противника, используйте Молот. чтобы освободить себя без риска потери здоровья от взрыва. + Пчёлка - весьма непростое оружие. Её радиус поворота зависит от её скорости, так что постарайтесь не запускать её на полной мощности. + Мины-липучки - отличный инструмент для создания небольших цепных реакций, от которых ёжик попадет в неприятную ситуацию... или в воду. + Молот наиболее эффективен, когда используется на мосту или балке. Ударенный ёжик пролетит сквозь землю. + Если вы застряли позади ёжика противника, используйте Молот, чтобы освободить себя без риска потери здоровья от взрыва. Дистанция, которую проходит Торт, зависит от поверхности. Используйте клавишу атаки, чтобы сдетонировать его раньше. Огнемёт - это оружие, но он также может быть использован как инструмент для рытья туннелей. - Хотите узнать, кто стоит за разработкой игры? Нажмите на логотип Hedgewars в главном меню, чтобы увидеть состав разработчиков. - Нравится Hedgewars? Станьте фанатом на %1 или следите за нами на %2! + Используйте Коктейль Молотова или Огнемёт, чтобы временно не дать ёжикам пройти через туннель или по платформе. + Понравилась Hedgewars? Заходите на Facebook или следите за нами в Twitter. Рисуйте свои варианты надгробий, шляп, флагов или даже карт и тем! Но не забудьте передать их соперникам каким-либо образом для игры по сети. - Очень хочется особенную шляпу? Сделайте пожертвование и получите эксклюзивную шляпу на выбор! - Обновляйте видеодрайвера, чтобы не было проблем во время игры. - Файлы конфигурации Hedgewars находятся в папке "Мои документы\Hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную. + Обновляйте видеодрайверы, чтобы не было проблем во время игры. + Орёл или решка? Наберите “/rnd” в лобби и получите результат. Так же работает команда “/rnd rock paper scissors”! Можно ассоциировать файлы Hedgewars (сохранения и демки игр) с игрой, чтобы запускать их прямо из вашего любимого файлового менеджера или браузера. - Хотите сэкономить верёвки? Отпустите верёвку в воздухе и стреляйте снова. Пока вы не затронете землю, вы можете использовать верёвку сколько угодно, не тратя дополнительных! - Файлы конфигурации Hedgewars находятся в папке ""Library/Application Support/Hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную. - Файлы конфигурации Hedgewars находятся в папке ".hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную. - Используйте Коктейль Молотова или Огнемёт, чтобы временно не дать ёжикам пройти через туннель или по платформе. - Пчёлку можеть быть сложно использовать. Её радиус поворота зависит от скорости, поэтому попробуйте не использовать полную силу броска. + Неразорвавшиеся мины не так уж безобидны: Хотя их таймер сломан, они всё ещё могут взорваться, если обходиться с ними неаккуратно! + Любовь согревает! Используйте Соблазнение, чтобы разморозить ёжиков. + Дым, выходящий из бочки указывает на то, что у неё мало "здоровья" и даже небольшой урон по ней может вызвать взрыв. + Изначально у бочек 60 единиц здоровья и они так же как и ёжики получают урон. Потеряв всё "здоровье", бочки взрываются. + Нужен больший отскок? Меняйте силу отскока у Гранат, Кассетных Бомб, Старого Лимбургера и Мин, нажимая [точность] и одну из цифр. + Забыли цели или условия игры? Нажмите паузу или кнопку выхода, чтобы посмотреть их снова! + Вы можете бить, топить и вдавливать в землю другие объекты так же как и ёжиков. Бей всё подряд! + Если не указано другое, то мины обычно взрываются через 3 секунды. + В режиме King Mode у вашего Короля больше здоровья, силы и сопротивления к урону, чем у Миньонов. + В режиме King Mode Король будет получать урон каждый ход, если в команде не осталось Миньонов. + Удар кнутом бьёт ёжиков а также объекты за тонкой стеной. + Урон Секача возрастает с его скоростью. + Торты можно бросать с обрыва, но будьте осторожны - нужно стоять совсем на краю. + Используйте верёвку, чтобы толкать других ёжиков, например, скользя по поверхности после приземления. + Не стойте на скользкой поверхности, вы соскользнёте. Или стойте, но зажимайте [точность]. + На картах с темами Snow и Christmas снег падает и оседает на рельефе карты и объектах. + Будьте аккуратны на картах с темами Snow и Christmas, потому что балки на них покрыты льдом. + Время отхода зависит от оружия, которое вы используете. Будьте осторожны, некоторые виды оружия не имеют времени на отход и заканчивают ход мгновено! + Обладая должным опытом, можно толкать ёжиков, прыгая из под них. + Вовремя запущенный Сюрикен, Отбойный Молоток или Синус-пушка могут убрать урон от падения. + Ёжики не могут столкнуться с ракетами или огнём, пока они в полёте. + Отверстия сделанные Сверлящей Ракетой, Снайперской винтовкой и Пистолетом Desert Eagle достаточно велики, чтобы можно было выстрелить через них портальной пушкой, если целиться метко. + Собирайте аптечки, чтобы подлечить вашего отравленного ёжика. + Вы можете собирать ящики во время использования Самолётика, Сюрикена, Отбойного Молотка или Камикадзе. + Будьте осторожны, не взорвитесь, когда используете бур рядом с ящиками. + Воздушные мины остаются неактивными в течение 5 секунд после начала хода, а затем они начинают искать ёжиков. + Держитесь подальше от воздушных мин! Если она начнёт преследовать вас, будет сложно уйти от неё без использования каких-нибудь приспособлений. + Воздушные мины взрываются через четверть времени, установленного для обычных мин. + Когда Секач наносит поверхности больше 30 единиц урона, появляется шанс, что он не зацепится и упадёт. Этот шанс возрастает с уроном. + Не забывайте про ветер, потому что огонь и траектории некоторых снарядов зависят от него. + Используйте Бур, чтобы толкать ёжиков и мины с долгим таймером. + Бур и Бочка - вот лучший рецепт катастрофы! + Наберите “/help” в чате, чтобы получить список доступных команд. Команды дают вам доступ к специальным возможностям типа голосования или насмешек. + + Файлы конфигурации Hedgewars находятся в папке "Мои документы\Hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную. + + + Файлы конфигурации Hedgewars находятся в папке "Library/Application Support/Hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную. + + + Файлы конфигурации Hedgewars находятся в каталоге ".hedgewars". Создавайте бэкапы или переносите файлы, но не редактируйте их вручную. + + Хотите узнать, кто стоит за разработкой игры? Нажмите на логотип Hedgewars в главном меню, чтобы увидеть состав разработчиков. + Очень хочется особенную шапку? Сделайте пожертвование и получите эксклюзивную шапку на выбор! + Hedgewars - это открытое и свободное программное обеспечение, которое мы создаём в наше свободное время. Если кто-то продал вам игру, потребуйте возврата денег! + diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Music/Jungle.ogg Binary file share/hedgewars/Data/Music/Jungle.ogg has changed diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Music/Jungle.opus Binary file share/hedgewars/Data/Music/Jungle.opus has changed diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Scripts/Multiplayer/Battalion.lua --- 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() diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Scripts/Multiplayer/Racer.cfg --- 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 diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Scripts/Multiplayer/Racer.lua --- 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))) diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Scripts/Multiplayer/TechRacer.lua --- 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 diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/Shaders/default.fs --- 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; } diff -r c4fd2813b127 -r d92eeb468dad share/hedgewars/Data/misc/CMakeLists.txt --- 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) + diff -r c4fd2813b127 -r d92eeb468dad tools/CMakeLists.txt --- 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() diff -r c4fd2813b127 -r d92eeb468dad tools/CreateMacBundle.cmake.in --- 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() diff -r c4fd2813b127 -r d92eeb468dad tools/build_vcpkg.bat --- /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 diff -r c4fd2813b127 -r d92eeb468dad tools/build_vcpkg_basic.bat --- 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